class_docstr: SpLuInv:
     helper class to repeatedly solve M*x=b
     using a sparse LU-decopposition of M
class_docstr_tok: ["SpLuInv",":","helper","class","to","repeatedly","solve","M","*","x=b","using","a","sparse","LU-decopposition","of","M"]
code: def _matvec(self, x):
      # careful here: splu.solve will throw away imaginary
      # part of x if M is real
      x = np.asarray(x)
      if self.isreal and np.issubdtype(x.dtype, np.complexfloating):
          return self.M_lu.solve(
              np.real(x).astype(self.dtype)
          ) + 1j * self.M_lu.solve(np.imag(x).astype(self.dtype))
      else:
          return self.M_lu.solve(x.astype(self.dtype))
  
imports: from scipy.sparse.linalg.eigen.arpack import _arpack
  import numpy
  from scipy.sparse.linalg.interface import aslinearoperator, LinearOperator
  from scipy.sparse import identity, isspmatrix, isspmatrix_csr
  from scipy.linalg import lu_factor, lu_solve
  from scipy.sparse.sputils import isdense
  from scipy.sparse.linalg import gmres, splu
  import scipy
  import functools
  import operator
  from distutils.version import LooseVersion
label_desc: Use image node_id 2 for calling the SpLuInv obj's underlying member method code with example usage: obj._matvec(x) and returns: unknown, self