class_docstr: Array/scalar parameter
  
  Parameters
  ----------
  init: np.ndarray, or None
      initial value of the array (defaults to 0, with a provided shape)
  shape: tuple of ints, or None
      shape of the array, to be provided iff init is not provided
  lower: array, float or None
      minimum value
  upper: array, float or None
      maximum value
  mutable_sigma: bool
      whether the mutation standard deviation must mutate as well (for mutation based algorithms)
  
  Note
  ----
  - More specific behaviors can be obtained throught the following methods:
    set_bounds, set_mutation, set_integer_casting
  - if both lower and upper bounds are provided, sigma will be adapted so that the range spans 6 sigma.
    Also, if init is not provided, it will be set to the middle value.
class_docstr_tok: ["Array\/scalar","parameter","Parameters","--","--","--","--","--","init",":","np.ndarray",",","or","None","initial","value","of","the","array","(","defaults","to","0",",","with","a","provided","shape",")","shape",":","tuple","of","ints",",","or","None","shape","of","the","array",",","to","be","provided","iff","init","is","not","provided","lower",":","array",",","float","or","None","minimum","value","upper",":","array",",","float","or","None","maximum","value","mutable_sigma",":","bool","whether","the","mutation","standard","deviation","must","mutate","as","well","(","for","mutation","based","algorithms",")","Note","--","--","-","More","specific","behaviors","can","be","obtained","throught","the","following","methods",":","set_bounds",",","set_mutation",",","set_integer_casting","-","if","both","lower","and","upper","bounds","are","provided",",","sigma","will","be","adapted","so","that","the","range","spans","6","sigma",".","Also",",","if","init","is","not","provided",",","it","will","be","set","to","the","middle","value","."]
docstr: Estimate of the bounds (None if unbounded)
  
  Note
  ----
  This may be inaccurate (WIP)
docstr_tok: ["Estimate","of","the","bounds","(","None","if","unbounded",")","Note","--","--","This","may","be","inaccurate","(","WIP",")"]
code: def bounds(
      self,
  ) -> tp.Tuple[tp.Optional[np.ndarray], tp.Optional[np.ndarray]]:
      """Estimate of the bounds (None if unbounded)
  
      Note
      ----
      This may be inaccurate (WIP)
      """
      from . import _datalayers
  
      bound_layers = _datalayers.BoundLayer.filter_from(self)
      if not bound_layers:
          return (None, None)
      bounds = bound_layers[-1].bounds
      forwardable = _datalayers.ForwardableOperation.filter_from(self)
      forwardable = [
          x
          for x in forwardable
          if x._layer_index > bound_layers[-1]._layer_index
      ]
      for f in forwardable:
          bounds = tuple(None if b is None else f.forward(b) for b in bounds)  # type: ignore
      return bounds
  
imports: import numpy
  import nevergrad.common.typing
  from nevergrad.common import errors
  from .None import _layering
  from .None import core
  from .container import Dict
  from .None import utils
label_desc: Use image node_id 2 for calling the Data obj's underlying member method code with example usage: obj.bounds() and returns: bounds, None,  None