'Percent point function (inverse of `cdf`) at q of the given RV.
Parameters
q : array_like
Lower tail probability.
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).
Returns
k : array_like
Quantile corresponding to the lower tail probability, q.'

def ppf(self, q, *args, **kwds):

    (args, loc, _) = self._parse_args(*args, **kwds)
    (q, loc) = map(asarray, (q, loc))
    args = tuple(map(asarray, args))
    cond0 = (self._argcheck(*args) & (loc == loc))
    cond1 = ((q > 0) & (q < 1))
    cond2 = ((q == 1) & cond0)
    cond = (cond0 & cond1)
    output = valarray(shape(cond), value=self.badvalue, typecode='d')
    place(output, ((q == 0) * (cond == cond)), (self.a - 1))
    place(output, cond2, self.b)
    if np.any(cond):
        goodargs = argsreduce(cond, *(((q,) + args) + (loc,)))
        (loc, goodargs) = (goodargs[(-1)], goodargs[:(-1)])
        place(output, cond, (self._ppf(*goodargs) + loc))
    if (output.ndim == 0):
        return output[()]
    return output
