parameters: (self, var, mat_g, mat_g_size, alpha, mat_h_slot_name)
return_statement: return mat_h
docstring: Computes mat_h = mat_g^alpha using svd. mat_g is a symmetric PSD matrix.
  
      Args:
        var: the variable we are updating.
        mat_g: the symmetric PSD matrix whose power it to be computed
        mat_g_size: size of mat_g
        alpha: a real number
        mat_h_slot_name: name of slot to store the power, if needed.
  
      Returns:
        mat_h = mat_g^alpha
  
      Stores mat_h in the appropriate slot, if it exists.
      Note that mat_g is PSD. So we could use linalg_ops.self_adjoint_eig.
docstring_summary: Computes mat_h = mat_g^alpha using svd. mat_g is a symmetric PSD matrix.
docstring_tokens: Computes mat_h = mat_g^alpha using svd . mat_g is a symmetric PSD matrix .
function: def _compute_power_svd(self, var, mat_g, mat_g_size, alpha, mat_h_slot_name):
      """Computes mat_h = mat_g^alpha using svd. mat_g is a symmetric PSD matrix.
  
      Args:
        var: the variable we are updating.
        mat_g: the symmetric PSD matrix whose power it to be computed
        mat_g_size: size of mat_g
        alpha: a real number
        mat_h_slot_name: name of slot to store the power, if needed.
  
      Returns:
        mat_h = mat_g^alpha
  
      Stores mat_h in the appropriate slot, if it exists.
      Note that mat_g is PSD. So we could use linalg_ops.self_adjoint_eig.
      """
      if mat_g_size == 1:
        mat_h = math_ops.pow(mat_g + self._epsilon, alpha)
      else:
        damping = self._epsilon * linalg_ops.eye(
            math_ops.cast(mat_g_size, dtypes.int32))
        diag_d, mat_u, mat_v = linalg_ops.svd(mat_g + damping, full_matrices=True)
        mat_h = math_ops.matmul(
            mat_v * math_ops.pow(math_ops.maximum(diag_d, self._epsilon), alpha),
            array_ops.transpose(mat_u))
      if mat_h_slot_name is not None:
        return state_ops.assign(self.get_slot(var, mat_h_slot_name), mat_h)
      return mat_h
function_tokens: def _compute_power_svd ( self , var , mat_g , mat_g_size , alpha , mat_h_slot_name ) : if mat_g_size == 1 : mat_h = math_ops . pow ( mat_g + self . _epsilon , alpha ) else : damping = self . _epsilon * linalg_ops . eye ( math_ops . cast ( mat_g_size , dtypes . int32 ) ) diag_d , mat_u , mat_v = linalg_ops . svd ( mat_g + damping , full_matrices = True ) mat_h = math_ops . matmul ( mat_v * math_ops . pow ( math_ops . maximum ( diag_d , self . _epsilon ) , alpha ) , array_ops . transpose ( mat_u ) ) if mat_h_slot_name is not None : return state_ops . assign ( self . get_slot ( var , mat_h_slot_name ) , mat_h ) return mat_h