code: def time_sakurai_inverse(self, n, solver):
      # apply inverse iterations in  `lobpcg` and `eigsh` ARPACK
      # using the Cholesky on the banded form in full `np.float64` precision
      # for fast convergence and compare to dense banded eigensolver `eig_banded`
      def a(x):
          return cho_solve_banded((c, False), x)
  
      m = 3
      ee = self.eigenvalues(m)
      tol = 10 * n * n * n * np.finfo(float).eps
      rng = np.random.default_rng(0)
      X = rng.normal(size=(n, m))
      if solver == "lobpcg":
          c = cholesky_banded(self.A)
          with warnings.catch_warnings():
              warnings.simplefilter("ignore")
              el, _ = lobpcg(a, X, tol=1e-9, maxiter=8)
          accuracy = max(abs(ee - 1.0 / el) / ee)
          assert accuracy < tol, msg
      elif solver == "eigsh":
          c = cholesky_banded(self.A)
          a_l = LinearOperator(
              (n, n), matvec=a, matmat=a, dtype="float64"
          )
          ea, _ = eigsh(
              a_l,
              k=m,
              which="LA",
              tol=1e-9,
              maxiter=8,
              v0=rng.normal(size=(n, 1)),
          )
          accuracy = max(abs(ee - np.sort(1.0 / ea)) / ee)
          assert accuracy < tol, msg
      else:
          ed, _ = eig_banded(
              self.A, select="i", select_range=[0, m - 1]
          )
          accuracy = max(abs(ee - ed) / ee)
          assert accuracy < tol, msg
  
file_path: scipy/benchmarks/benchmarks/sparse_linalg_lobpcg.py
imports: import numpy
  import warnings
  from .common import Benchmark, safe_import
label_desc: Use image node_id 7 for calling the Bench obj's underlying member method code with example usage: obj.time_sakurai_inverse(n, solver) and returns: cho_solve_banded