class_docstr: Proximal operator of the ElasticNet regularization.
  
  Parameters
  ----------
  strength : `float`
      Level of ElasticNet regularization
  
  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
  
  ratio : `float`, default=0
      The ElasticNet mixing parameter, with 0 <= ratio <= 1.
      For ratio = 0 this is ridge (L2) regularization
      For ratio = 1 this is lasso (L1) regularization
      For 0 < ratio < 1, the regularization is a linear combination
      of L1 and L2.
  
  positive : `bool`, default=`False`
      If True, apply the penalization together with a projection
      onto the set of vectors with non-negative entries
  
  Attributes
  ----------
  dtype : `{'float64', 'float32'}`
      Type of the arrays used.
code: def _build_cpp_prox(self, dtype_or_object_with_dtype):
      self.dtype = self._extract_dtype(dtype_or_object_with_dtype)
      prox_class = self._get_typed_class(
          dtype_or_object_with_dtype, dtype_map
      )
      if self.range is None:
          return prox_class(self.strength, self.ratio, self.positive)
      else:
          return prox_class(
              self.strength,
              self.ratio,
              self.range[0],
              self.range[1],
              self.positive,
          )
  
file_path: tick/tick/prox/prox_elasticnet.py
imports: import numpy
  from .base import Prox
  from .build.prox import ProxElasticNetDouble
  from .build.prox import ProxElasticNetFloat
label_desc: Use image node_id 4 for calling the ProxElasticNet obj's underlying member method code with example usage: obj._build_cpp_prox(dtype_or_object_with_dtype) and returns: prox_class, prox_class