code: def _ell(A, m):
      """
      A helper function for expm_2009.
  
      Parameters
      ----------
      A : linear operator
          A linear operator whose norm of power we care about.
      m : int
          The power of the linear operator
  
      Returns
      -------
      value : int
          A value related to a bound.
  
      """
      if len(A.shape) != 2 or A.shape[0] != A.shape[1]:
          raise ValueError("expected A to be like a square matrix")
  
      # The c_i are explained in (2.2) and (2.6) of the 2005 expm paper.
      # They are coefficients of terms of a generating function series expansion.
      c_i = {
          3: 100800.0,
          5: 10059033600.0,
          7: 4487938430976000.0,
          9: 5914384781877411840000.0,
          13: 113250775606021113483283660800000000.0,
      }
      abs_c_recip = c_i[m]
  
      # This is explained after Eq. (1.2) of the 2009 expm paper.
      # It is the "unit roundoff" of IEEE double precision arithmetic.
      u = 2**-53
  
      # Compute the one-norm of matrix power p of abs(A).
      A_abs_onenorm = _onenorm_matrix_power_nnm(abs(A), 2 * m + 1)
  
      # Treat zero norm as a special case.
      if not A_abs_onenorm:
          return 0
  
      alpha = A_abs_onenorm / (_onenorm(A) * abs_c_recip)
      log2_alpha_div_u = np.log2(alpha / u)
      value = int(np.ceil(log2_alpha_div_u / (2 * m)))
      return max(value, 0)
  
imports: import numpy
  from scipy.linalg._basic import solve, solve_triangular
  from scipy.sparse._base import issparse
  from scipy.sparse.linalg import spsolve
  from scipy.sparse._sputils import is_pydata_spmatrix, isintlike
  import scipy.sparse
  import scipy.sparse.linalg
  from scipy.sparse.linalg._interface import LinearOperator
  from scipy.sparse._construct import eye
  from ._expm_multiply import _ident_like, _exact_1_norm
label_desc: Use image node_id 13 for calling a global function with example usage: _ell(A, m) and returns: max, int