<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def categorical(pvals, size=None, random_state=None):
 """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. """

    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)