code: def random(key: str, index: Index, index_map: IndexMap=None) -> pd.Series:
      
      if len(index) > 0:
          random_state = np.random.RandomState(seed=get_hash(key))
  
          # Generate a random number for every simulant.
          #
          # NOTE: We generate a full set of random numbers for the population
          # even when we may only need a few.  This ensures consistency in outcomes
          # across simulations.
          # See Also:
          # 1. https://en.wikipedia.org/wiki/Variance_reduction
          # 2. Untangling Uncertainty with Common Random Numbers: A Simulation Study; A.Flaxman, et. al., Summersim 2017
          sample_size = index_map.map_size if index_map is not None else index.max() + 1
          try:
              draw_index = index_map[index]
          except (IndexError, TypeError):
              draw_index = index
          raw_draws = random_state.random_sample(sample_size)
          return pd.Series(raw_draws[draw_index], index=index)
  
      return pd.Series(index=index)
docs: Produces an indexed `pandas.Series` of uniformly distributed random numbers.
  
      The index passed in typically corresponds to a subset of rows in a
      `pandas.DataFrame` for which a probabilistic draw needs to be made.
  
      Parameters
      ----------
      key :
          A string used to create a seed for the random number generation.
      index :
          The index used for the returned series.
      index_map :
          A mapping between the provided index (which may contain ints, floats,
          datetimes or any arbitrary combination of them) and an integer index
          into the random number array.
  
      Returns
      -------
      pd.Series
          A series of random numbers indexed by the provided index.