code: def tf_lipschitz_constant(M, G, phi, phiT, tol=1e-3, verbose=None):
      """Compute lipschitz constant for FISTA.
  
      It uses a power iteration method.
      """
      n_times = M.shape[1]
      n_points = G.shape[1]
      iv = np.ones((n_points, n_times), dtype=np.float64)
      v = phi(iv)
      L = 1e100
      for it in range(100):
          L_old = L
          logger.info("Lipschitz estimation: iteration = %d" % it)
          iv = np.real(phiT(v))
          Gv = np.dot(G, iv)
          GtGv = np.dot(G.T, Gv)
          w = phi(GtGv)
          L = np.max(np.abs(w))  # l_inf norm
          v = w / L
          if abs((L - L_old) / L_old) < tol:
              break
      return L
  
imports: import functools
  from math import sqrt
  import numpy
  from ..time_frequency._stft import istft, stft, stft_norm1, stft_norm2
  from ..utils import _check_option, _get_blas_funcs, _validate_type, logger, sum_squared, verbose, warn
  from .mxne_debiasing import compute_bias
label_desc: Use image node_id 12 for calling a global function with example usage: tf_lipschitz_constant(M, G, phi, phiT, tol, verbose) and returns: L