code: def _solve_discrete_lyapunov_bilinear(a, q):
      """
      Solves the discrete Lyapunov equation using a bilinear transformation.
  
      This function is called by the `solve_discrete_lyapunov` function with
      `method=bilinear`. It is not supposed to be called directly.
      """
      eye = np.eye(a.shape[0])
      aH = a.conj().transpose()
      aHI_inv = inv(aH + eye)
      b = np.dot(aH - eye, aHI_inv)
      c = 2 * np.dot(np.dot(inv(a + eye), q), aHI_inv)
      return solve_lyapunov(b.conj().transpose(), -c)
  
file_path: scipy/scipy/linalg/_solvers.py
imports: import warnings
  import numpy
  from numpy.linalg import inv, LinAlgError, norm, cond, svd
  from ._basic import solve, solve_triangular, matrix_balance
  from .lapack import get_lapack_funcs
  from ._decomp_schur import schur
  from ._decomp_lu import lu
  from ._decomp_qr import qr
  from ._decomp_qz import ordqz
  from ._decomp import _asarray_validated
  from ._special_matrices import kron, block_diag
label_desc: Use image node_id 4 for calling a global function with example usage: _solve_discrete_lyapunov_bilinear(a, q) and returns: solve_lyapunov