1import numpy
2import chaospy
3
4
5def laguerre(
6        order,
7        alpha=0.,
8        physicist=False,
9        normed=False,
10        retall=False,
11):
12    """
13    Examples:
14        >>> polynomials, norms = chaospy.expansion.laguerre(3, retall=True)
15        >>> polynomials
16        polynomial([1.0, q0-1.0, q0**2-4.0*q0+2.0, q0**3-9.0*q0**2+18.0*q0-6.0])
17        >>> norms
18        array([ 1.,  1.,  4., 36.])
19        >>> chaospy.expansion.laguerre(3, physicist=True).round(5)
20        polynomial([1.0, -q0+1.0, 0.5*q0**2-2.0*q0+2.0,
21                    -0.16667*q0**3+1.5*q0**2-5.33333*q0+4.66667])
22        >>> chaospy.expansion.laguerre(3, alpha=2, normed=True).round(3)
23        polynomial([1.0, 0.577*q0-1.732, 0.204*q0**2-1.633*q0+2.449,
24                    0.053*q0**3-0.791*q0**2+3.162*q0-3.162])
25
26    """
27    multiplier = -1./numpy.arange(1, order+1) if physicist else 1.
28    _, [polynomials], [norms] = chaospy.recurrence.analytical_stieltjes(
29        order, chaospy.Gamma(alpha+1), multiplier=multiplier)
30    if normed:
31        polynomials = chaospy.true_divide(polynomials, numpy.sqrt(norms))
32        norms[:] = 1.
33    return (polynomials, norms) if retall else polynomials
34