code: def test_matmul(self):
      D = {
          "shape": self.A.shape,
          "matvec": lambda x: np.dot(self.A, x).reshape(
              self.A.shape[0]
          ),
          "rmatvec": lambda x: np.dot(self.A.T.conj(), x).reshape(
              self.A.shape[1]
          ),
          "rmatmat": lambda x: np.dot(self.A.T.conj(), x),
          "matmat": lambda x: np.dot(self.A, x),
      }
      A = interface.LinearOperator(**D)
      B = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
      b = B[0]
  
      assert_equal(operator.matmul(A, b), A * b)
      assert_equal(operator.matmul(A, B), A * B)
      assert_raises(ValueError, operator.matmul, A, 2)
      assert_raises(ValueError, operator.matmul, 2, A)
  
imports: from functools import partial
  from itertools import product
  import operator
  import pytest
  from pytest import raises, warns
  from numpy.testing import assert_, assert_equal
  import numpy
  import scipy.sparse
  from scipy.sparse.linalg import interface
  from scipy.sparse.sputils import matrix
label_desc: Use image node_id 3 for calling the TestLinearOperator obj's underlying member method code with example usage: obj.test_matmul() without return types