class_docstr: Unordered categorical parameter, randomly choosing one of the provided choice options as a value.
  The choices can be Parameters, in which case there value will be returned instead.
  The chosen parameter is drawn randomly from the softmax of weights which are
  updated during the optimization.
  
  Parameters
  ----------
  choices: list or int
      a list of possible values or Parameters for the variable (or an integer as a shortcut for range(num))
  repetitions: None or int
      set to an integer :code:`n` if you want :code:`n` similar choices sampled independently (each with its own distribution)
      This is equivalent to :code:`Tuple(*[Choice(options) for _ in range(n)])` but can be
      30x faster for large :code:`n`.
  deterministic: bool
      whether to always draw the most likely choice (hence avoiding the stochastic behavior, but loosing
      continuity)
  
  Note
  ----
  - Since the chosen value is drawn randomly, the use of this variable makes deterministic
    functions become stochastic, hence "adding noise"
  - the "mutate" method only mutates the weights and the chosen Parameter (if it is not constant),
    leaving others untouched
  
  Examples
  --------
  
  >>> print(Choice(["a", "b", "c", "e"]).value)
  "c"
  
  >>> print(Choice(["a", "b", "c", "e"], repetitions=3).value)
  ("b", "b", "c")
code: def mutate(self) -> None:
      # force random_state sync
      self.random_state  # pylint: disable=pointless-statement
      self.indices.mutate()
      for ind in self.indices.value:
          self.choices[ind].mutate()
  
imports: import numpy
  import nevergrad.common.typing
  from .None import discretization
  from .None import core
  from .None import container
  from .None import _datalayers
  from .data import Array
label_desc: Use image node_id 2 for calling the Choice obj's underlying member method code with example usage: obj.mutate() without return types