code: def _get_blocks_containing_index(self, axis, index):
          
          if not axis:
              ErrorMessage.catch_bugs_and_request_email(index > sum(self.block_widths))
              cumulative_column_widths = np.array(self.block_widths).cumsum()
              block_idx = int(np.digitize(index, cumulative_column_widths))
              if block_idx == len(cumulative_column_widths):
                  block_idx -= 1
              # Compute the internal index based on the previous lengths. This
              # is a global index, so we must subtract the lengths first.
              internal_idx = (
                  index
                  if not block_idx
                  else index - cumulative_column_widths[block_idx - 1]
              )
          else:
              ErrorMessage.catch_bugs_and_request_email(index > sum(self.block_lengths))
              cumulative_row_lengths = np.array(self.block_lengths).cumsum()
              block_idx = int(np.digitize(index, cumulative_row_lengths))
              # See note above about internal index
              internal_idx = (
                  index
                  if not block_idx
                  else index - cumulative_row_lengths[block_idx - 1]
              )
          return block_idx, internal_idx
docs: Convert a global index to a block index and local index.
  
          Note: This method is primarily used to convert a global index into a
              partition index (along the axis provided) and local index (useful
              for `iloc` or similar operations.
  
          Args:
              axis: The axis along which to get the indices
                  (0 - columns, 1 - rows)
              index: The global index to convert.
  
          Returns:
              A tuple containing (block index and internal index).