class_docstr: Proximal operator of the nuclear norm, aka trace norm
  
  Parameters
  ----------
  strength : `float`
      Level of penalization
  
  n_rows : `int`
      Number of rows in the matrix on which we apply this
      penalization. The number of columns is then given by
      (start - end) / n_rows
  
  range : `tuple` of two `int`, default=`None`
      Range on which the prox is applied. If `None` then the prox is
      applied on the whole vector
  
  positive : `bool`, default=`False`
      If True, apply nuclear-norm penalization followed by a
      truncation to make all entries non-negative
  
  rank_max : `int`, default=`None`
      Maximum rank to be used in the SVD (not used yet...)
  
  Notes
  -----
  The coeffs on which we apply this prox must be flattened (using
  `np.ravel` for instance), and not two-dimensional.
  This operator is not usable from a solver with wrapped C++ code.
  It is based on `scipy.linalg.svd` SVD routine and is not intended
  for use on large matrices
code: def __init__(
      self,
      strength: float,
      n_rows: int = None,
      range: tuple = None,
      positive: bool = False,
  ):
      Prox.__init__(self, range)
      self.positive = positive
      self.strength = strength
      self.n_rows = n_rows
      self.rank_max = None
  
file_path: tick/tick/prox/prox_nuclear.py
imports: import numpy
  from numpy.linalg import svd
  from tick.prox.base import Prox
label_desc: Use image node_id 1 to create a new ProxNuclear object from inherited base classes: Prox with example: obj = ProxNuclear(strength, n_rows, range, positive)