code: def categorical(pvals, size=None, random_state=None):
      
      cumsum = np.cumsum(pvals)
      if size is None:
          size = (1,)
          axis = 0
      elif isinstance(size, tuple):
          size = size + (1,)
          axis = len(size) - 1
      else:
          raise TypeError('size must be an int or tuple of ints')
  
      random_state = check_random_state(random_state)
      return np.sum(cumsum < random_state.random_sample(size), axis=axis)
docs: Return random integer from a categorical distribution
  
      Parameters
      ----------
      pvals : sequence of floats, length p
          Probabilities of each of the ``p`` different outcomes.  These
          should sum to 1.
      size : int or tuple of ints, optional
          Defines the shape of the returned array of random integers. If None
          (the default), returns a single float.
      random_state: RandomState or an int seed, optional
          A random number generator instance.