code: def reduced_svd(self, k):
      S = self.S[:k]._persist()
  
      if self.U is None:
          U = None
      else:
          U = (self.U @ self.U1[:, :k])._persist()
  
      if self.V is None:
          V = None
      else:
          V = (self.V @ self.V1t.T[:, :k])._persist()
  
      return U, S, V
  
imports: from typing import List, Tuple
  import hail
  import hail.expr.aggregators
  from hail.expr.expressions import construct_expr
  from hail.expr import expr_float64, expr_call, raise_unless_entry_indexed, matrix_table_source
  from hail import ir
  from hail.table import Table
  from hail.typecheck import typecheck, oneof, nullable
  from hail.utils import FatalError
  from hail.utils.java import Env, info
  from hail.experimental import mt_to_table_of_ndarray
label_desc: Use image node_id 2 for calling the KrylovFactorization obj's underlying member method code with example usage: obj.reduced_svd(k) and returns: U,  S,  V