def METHOD_NAME(self, row_index: IndexType, col_index: IndexType, *batch_indices: IndexType) -> LinearOperator:
    # Make sure we're not generating more memory with our "efficient" method
    if torch.is_tensor(row_index) and torch.is_tensor(col_index):
        num_indices = row_index.numel()
        if num_indices > self.matrix_shape.numel():
            return to_linear_operator(self.to_dense()).METHOD_NAME(row_index, col_index, *batch_indices)
    left_tensor = self.root.METHOD_NAME(row_index, _noop_index, *batch_indices)
    if _equal_indices(row_index, col_index):
        res = self.__class__(left_tensor)
    else:
        right_tensor = self.root.METHOD_NAME(col_index, _noop_index, *batch_indices)
        res = MatmulLinearOperator(left_tensor, right_tensor.mT)
    return res