code: def choice(self, index: Index, choices: Array, p: Array=None, additional_key: Any=None) -> pd.Series:
          
          return choice(self._key(additional_key), index, choices, p, self.index_map)
docs: Decides between a weighted or unweighted set of choices.
  
          Given a a set of choices with or without corresponding weights,
          returns an indexed set of decisions from those choices. This is
          simply a vectorized way to make decisions with some book-keeping.
  
          Parameters
          ----------
          index :
              An index whose length is the number of random draws made
              and which indexes the returned `pandas.Series`.
          choices :
              A set of options to choose from.
          p :
              The relative weights of the choices.  Can be either a 1-d array of
              the same length as `choices` or a 2-d array with `len(index)` rows
              and `len(choices)` columns.  In the 1-d case, the same set of weights
              are used to decide among the choices for every item in the `index`.
              In the 2-d case, each row in `p` contains a separate set of weights
              for every item in the `index`.
          additional_key :
              Any additional information used to seed random number generation.
  
          Returns
          -------
          pd.Series
              An indexed set of decisions from among the available `choices`.
  
          Raises
          ------
          RandomnessError
              If any row in `p` contains `RESIDUAL_CHOICE` and the remaining
              weights in the row are not normalized or any row of `p contains
              more than one reference to `RESIDUAL_CHOICE`.