code: def _pinv_rank_decomposition(M):
      """Subroutine for rank decomposition
  
      With rank decompositions, `A` can be decomposed into two full-
      rank matrices, and each matrix can take pseudoinverse
      individually.
      """
  
      if M.is_zero_matrix:
          return M.H
  
      B, C = M.rank_decomposition()
  
      Bp = _pinv_full_rank(B)
      Cp = _pinv_full_rank(C)
  
      return Cp.multiply(Bp)
  
file_path: sympy/sympy/matrices/inverse.py
imports: from sympy.polys.matrices.exceptions import DMNonInvertibleMatrixError
  from sympy.polys.domains import EX
  from .exceptions import MatrixError, NonSquareMatrixError, NonInvertibleMatrixError
  from .utilities import _iszero
label_desc: Use image node_id 2 for calling a global function with example usage: _pinv_rank_decomposition(M) and returns: Cp, M