code: def _svd_interface(
      matrix,
      method="truncated_svd",
      n_eigenvecs=None,
      flip_sign=True,
      u_based_flip_sign=True,
      non_negative=None,
      mask=None,
      n_iter_mask_imputation=5,
      **kwargs,
  ):
      if method == "truncated_svd":
          svd_fun = truncated_svd
      # elif method == "symeig_svd":
      #    svd_fun = symeig_svd
      # elif method == "randomized_svd":
      #    svd_fun = randomized_svd
      elif callable(method):
          svd_fun = method
      else:
          raise ValueError("Invalid Choice")
  
      U, S, V = svd_fun(matrix, n_eigenvecs=n_eigenvecs, **kwargs)
      if mask is not None and n_eigenvecs is not None:
          for _ in range(n_iter_mask_imputation):
              S = S * ivy.eye(U.shape[-1], V.shape[-2])
              matrix = matrix * mask + (U @ S @ V) * (1 - mask)
              U, S, V = svd_fun(
                  matrix, n_eigenvecs=n_eigenvecs, **kwargs
              )
  
      if flip_sign:
          U, V = svd_flip(U, V, u_based_decision=u_based_flip_sign)
  
      if non_negative is not False and non_negative is not None:
          U, V = make_svd_non_negative(matrix, U, S, V)
  
      return U, S, V
  
imports: import logging
  from typing import Union, Optional, Tuple, List, Sequence, Literal
  import ivy
  from ivy.utils.backend import current_backend
  from ivy.func_wrapper import to_native_arrays_and_back, handle_out_argument, handle_nestable, handle_array_like_without_promotion, handle_array_function, handle_device, inputs_to_ivy_arrays, handle_backend_invalid
  from ivy.utils.exceptions import handle_exceptions
label_desc: Use image node_id 21 for calling a global function with example usage: _svd_interface(matrix, method, n_eigenvecs, flip_sign, u_based_flip_sign, non_negative, mask, n_iter_mask_imputation) and returns: U,  S,  V