code: def _row_reduce(
      M,
      iszerofunc,
      simpfunc,
      normalize_last=True,
      normalize=True,
      zero_above=True,
  ):
      mat, pivot_cols, swaps = _row_reduce_list(
          list(M),
          M.rows,
          M.cols,
          M.one,
          iszerofunc,
          simpfunc,
          normalize_last=normalize_last,
          normalize=normalize,
          zero_above=zero_above,
      )
  
      return M._new(M.rows, M.cols, mat), pivot_cols, swaps
  
file_path: sympy/sympy/matrices/reductions.py
imports: from types import FunctionType
  from sympy.polys.polyerrors import CoercionFailed
  from sympy.polys.domains import ZZ, QQ
  from .utilities import _get_intermediate_simp, _iszero, _dotprodsimp, _simplify
  from .determinant import _find_reasonable_pivot
label_desc: Use image node_id 2 for calling a global function with example usage: _row_reduce(M, iszerofunc, simpfunc, normalize_last, normalize, zero_above) and returns: M,  pivot_cols,  swaps