'Random variates of given type.
Parameters
arg1, arg2, arg3,... : array_like
The shape parameter(s) for the distribution (see docstring of the
instance object for more information).
loc : array_like, optional
Location parameter (default=0).
scale : array_like, optional
Scale parameter (default=1).
size : int or tuple of ints, optional
Defining number of random variates (default is 1).
random_state : None or int or ``np.random.RandomState`` instance, optional
If int or RandomState, use it for drawing the random variates.
If None, rely on ``self.random_state``.
Default is None.
Returns
rvs : ndarray or scalar
Random variates of given `size`.'

def rvs(self, *args, **kwds):

    discrete = kwds.pop('discrete', None)
    rndm = kwds.pop('random_state', None)
    (args, loc, scale, size) = self._parse_args_rvs(*args, **kwds)
    cond = logical_and(self._argcheck(*args), (scale >= 0))
    if (not np.all(cond)):
        raise ValueError('Domain    error    in    arguments.')
    if np.all((scale == 0)):
        return (loc * ones(size, 'd'))
    if (rndm is not None):
        random_state_saved = self._random_state
        self._random_state = check_random_state(rndm)
    self._size = size
    vals = self._rvs(*args)
    vals = ((vals * scale) + loc)
    if (rndm is not None):
        self._random_state = random_state_saved
    if discrete:
        if (size == ()):
            vals = int(vals)
        else:
            vals = vals.astype(int)
    return vals
