U
    ZÊ¹j~¶  ã                   @   s°  d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% e	dƒZ&G dd„ deƒZ'G dd„ de'ƒZ(dd„ Z)G dd„ de'ƒZ*G dd„ de'ƒZ+G dd„ de'ƒZ,G dd„ deƒZ-G dd„ deƒZ.G d d!„ d!e'ƒZ/G d"d#„ d#eƒZ0G d$d%„ d%e'ƒZ1G d&d'„ d'e'ƒZ2G d(d)„ d)e'ƒZ3G d*d+„ d+e'ƒZ4d,S )-z™
This module mainly implements special orthogonal polynomials.

See also functions.combinatorial.numbers which contains some
combinatorial polynomials.

é    )ÚRational)ÚFunctionÚArgumentIndexError)ÚS)ÚDummy)ÚbinomialÚ	factorialÚRisingFactorial)Úre)Úexp)Úfloor)Úsqrt)ÚcosÚsec)Úgamma)Úhyper)Úchebyshevt_polyÚchebyshevu_polyÚgegenbauer_polyÚhermite_polyÚhermite_prob_polyÚjacobi_polyÚlaguerre_polyÚlegendre_polyÚxc                   @   s$   e Zd ZdZedd„ ƒZdd„ ZdS )ÚOrthogonalPolynomialz+Base class for orthogonal polynomials.
    c                 C   s*   |j r&|dkr&|  t|ƒt¡ t|¡S d S )Nr   )Ú
is_integerÚ_ortho_polyÚintÚ_xÚsubs©ÚclsÚnr   © r$   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/functions/special/polynomials.pyÚ_eval_at_order    s    z#OrthogonalPolynomial._eval_at_orderc                 C   s   |   | jd | jd  ¡ ¡S )Nr   é   )ÚfuncÚargsÚ	conjugate)Úselfr$   r$   r%   Ú_eval_conjugate%   s    z$OrthogonalPolynomial._eval_conjugateN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr&   r,   r$   r$   r$   r%   r      s   
r   c                   @   s>   e Zd ZdZedd„ ƒZddd„Zdd„ Zd	d
„ Zdd„ Z	dS )Újacobiaç  
    Jacobi polynomial $P_n^{\left(\alpha, \beta\right)}(x)$.

    Explanation
    ===========

    ``jacobi(n, alpha, beta, x)`` gives the $n$th Jacobi polynomial
    in $x$, $P_n^{\left(\alpha, \beta\right)}(x)$.

    The Jacobi polynomials are orthogonal on $[-1, 1]$ with respect
    to the weight $\left(1-x\right)^\alpha \left(1+x\right)^\beta$.

    Examples
    ========

    >>> from sympy import jacobi, S, conjugate, diff
    >>> from sympy.abc import a, b, n, x

    >>> jacobi(0, a, b, x)
    1
    >>> jacobi(1, a, b, x)
    a/2 - b/2 + x*(a/2 + b/2 + 1)
    >>> jacobi(2, a, b, x)
    a**2/8 - a*b/4 - a/8 + b**2/8 - b/8 + x**2*(a**2/8 + a*b/4 + 7*a/8 + b**2/8 + 7*b/8 + 3/2) + x*(a**2/4 + 3*a/4 - b**2/4 - 3*b/4) - 1/2

    >>> jacobi(n, a, b, x)
    jacobi(n, a, b, x)

    >>> jacobi(n, a, a, x)
    RisingFactorial(a + 1, n)*gegenbauer(n,
        a + 1/2, x)/RisingFactorial(2*a + 1, n)

    >>> jacobi(n, 0, 0, x)
    legendre(n, x)

    >>> jacobi(n, S(1)/2, S(1)/2, x)
    RisingFactorial(3/2, n)*chebyshevu(n, x)/factorial(n + 1)

    >>> jacobi(n, -S(1)/2, -S(1)/2, x)
    RisingFactorial(1/2, n)*chebyshevt(n, x)/factorial(n)

    >>> jacobi(n, a, b, -x)
    (-1)**n*jacobi(n, b, a, x)

    >>> jacobi(n, a, b, 0)
    gamma(a + n + 1)*hyper((-n, -b - n), (a + 1,), -1)/(2**n*factorial(n)*gamma(a + 1))
    >>> jacobi(n, a, b, 1)
    RisingFactorial(a + 1, n)/factorial(n)

    >>> conjugate(jacobi(n, a, b, x))
    jacobi(n, conjugate(a), conjugate(b), conjugate(x))

    >>> diff(jacobi(n,a,b,x), x)
    (a/2 + b/2 + n/2 + 1/2)*jacobi(n - 1, a + 1, b + 1, x)

    See Also
    ========

    gegenbauer,
    chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly,
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Jacobi_polynomials
    .. [2] https://mathworld.wolfram.com/JacobiPolynomial.html
    .. [3] https://functions.wolfram.com/Polynomials/JacobiP/

    c                 C   s   ||kr¨|t ddƒkr4ttj|ƒt|ƒ t||ƒ S |jrDt||ƒS |tjkrttdtj |ƒt|d ƒ t||ƒ S t|d |ƒtd| d |ƒ t	||tj |ƒ S nV|| k� rþt
|| d ƒt
|d ƒ d| |d   d| |d   t|| |ƒ S |j�sî| ¡ �r*tj| t|||| ƒ S |j�r~d|  t
|| d ƒ t
|d ƒt|ƒ  t| | | g|d gdƒ S |tjk�r t|d |ƒt|ƒ S |tjk�rü|j�rü|| d|  j�rÐtdƒ‚t|| | d |ƒtj S nt||||ƒS d S )Néÿÿÿÿé   é   r'   z,Error. a + b + 2*n should not be an integer.)r   r	   r   ÚHalfr   Ú
chebyshevtÚis_zeroÚlegendreÚ
chebyshevuÚ
gegenbauerr   Úassoc_legendreÚ	is_NumberÚcould_extract_minus_signÚNegativeOner2   r   ÚOneÚInfinityÚis_positiver   Ú
ValueErrorr   )r"   r#   ÚaÚbr   r$   r$   r%   Úeval~   s2    

&4J
,ÿzjacobi.evalé   c           
   	   C   sò  ddl m} |dkr"t| |ƒ‚�nÌ|dkrØ| j\}}}}tdƒ}d|| | | d  }|| d|  d t|| d || ƒ || t|| | d || ƒ  }	||t||||ƒ|	t||||ƒ   |d|d fƒS |dk�rœ| j\}}}}tdƒ}d|| | | d  }d||  || d|  d t|| d || ƒ || t|| | d || ƒ   }	||t||||ƒ|	t||||ƒ   |d|d fƒS |dk�rä| j\}}}}tj|| | d  t|d |d |d |ƒ S t| |ƒ‚d S )	Nr   ©ÚSumr'   r4   Úkr5   r3   rG   )	Úsympy.concrete.summationsrI   r   r)   r   r	   r2   r   r6   )
r+   ÚargindexrI   r#   rD   rE   r   rJ   Úf1Úf2r$   r$   r%   Úfdiff¤   s.    ( ÿ4
2 ÿ4
0zjacobi.fdiffc           	      K   s˜   ddl m} |js|jdkr$tdƒ‚tdƒ}t| |ƒt|| | d |ƒ t|| d || ƒ t|ƒ d| d |  }dt|ƒ |||d|fƒ S )Nr   rH   Fú*Error: n should be a non-negative integer.rJ   r'   r4   )rK   rI   Úis_negativer   rC   r   r	   r   )	r+   r#   rD   rE   r   ÚkwargsrI   rJ   Úkernr$   r$   r%   Ú_eval_rewrite_as_SumÀ   s    6ÿÿzjacobi._eval_rewrite_as_Sumc                 K   s   | j ||||f|ŽS ©N©rT   )r+   r#   rD   rE   r   rR   r$   r$   r%   Ú_eval_rewrite_as_polynomialÊ   s    z"jacobi._eval_rewrite_as_polynomialc                 C   s*   | j \}}}}|  || ¡ | ¡ | ¡ ¡S rU   ©r)   r(   r*   )r+   r#   rD   rE   r   r$   r$   r%   r,   Ï   s    zjacobi._eval_conjugateN)rG   ©
r-   r.   r/   r0   r1   rF   rO   rT   rW   r,   r$   r$   r$   r%   r2   -   s   P
%

r2   c                 C   sz   t dƒ|| d  t| | d ƒt| | d ƒ  d|  | | d  t| ƒt| | | d ƒ  }t| |||ƒt|ƒ S )a»  
    Jacobi polynomial $P_n^{\left(\alpha, \beta\right)}(x)$.

    Explanation
    ===========

    ``jacobi_normalized(n, alpha, beta, x)`` gives the $n$th
    Jacobi polynomial in $x$, $P_n^{\left(\alpha, \beta\right)}(x)$.

    The Jacobi polynomials are orthogonal on $[-1, 1]$ with respect
    to the weight $\left(1-x\right)^\alpha \left(1+x\right)^\beta$.

    This functions returns the polynomials normilzed:

    .. math::

        \int_{-1}^{1}
          P_m^{\left(\alpha, \beta\right)}(x)
          P_n^{\left(\alpha, \beta\right)}(x)
          (1-x)^{\alpha} (1+x)^{\beta} \mathrm{d}x
        = \delta_{m,n}

    Examples
    ========

    >>> from sympy import jacobi_normalized
    >>> from sympy.abc import n,a,b,x

    >>> jacobi_normalized(n, a, b, x)
    jacobi(n, a, b, x)/sqrt(2**(a + b + 1)*gamma(a + n + 1)*gamma(b + n + 1)/((a + b + 2*n + 1)*factorial(n)*gamma(a + b + n + 1)))

    Parameters
    ==========

    n : integer degree of polynomial

    a : alpha value

    b : beta value

    x : symbol

    See Also
    ========

    gegenbauer,
    chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly,
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Jacobi_polynomials
    .. [2] https://mathworld.wolfram.com/JacobiPolynomial.html
    .. [3] https://functions.wolfram.com/Polynomials/JacobiP/

    r4   r'   )r   r   r   r2   r   )r#   rD   rE   r   Znfactorr$   r$   r%   Újacobi_normalizedÔ   s    C2ÿÿrZ   c                   @   s>   e Zd ZdZedd„ ƒZddd„Zdd„ Zd	d
„ Zdd„ Z	dS )r;   aN  
    Gegenbauer polynomial $C_n^{\left(\alpha\right)}(x)$.

    Explanation
    ===========

    ``gegenbauer(n, alpha, x)`` gives the $n$th Gegenbauer polynomial
    in $x$, $C_n^{\left(\alpha\right)}(x)$.

    The Gegenbauer polynomials are orthogonal on $[-1, 1]$ with
    respect to the weight $\left(1-x^2\right)^{\alpha-\frac{1}{2}}$.

    Examples
    ========

    >>> from sympy import gegenbauer, conjugate, diff
    >>> from sympy.abc import n,a,x
    >>> gegenbauer(0, a, x)
    1
    >>> gegenbauer(1, a, x)
    2*a*x
    >>> gegenbauer(2, a, x)
    -a + x**2*(2*a**2 + 2*a)
    >>> gegenbauer(3, a, x)
    x**3*(4*a**3/3 + 4*a**2 + 8*a/3) + x*(-2*a**2 - 2*a)

    >>> gegenbauer(n, a, x)
    gegenbauer(n, a, x)
    >>> gegenbauer(n, a, -x)
    (-1)**n*gegenbauer(n, a, x)

    >>> gegenbauer(n, a, 0)
    2**n*sqrt(pi)*gamma(a + n/2)/(gamma(a)*gamma(1/2 - n/2)*gamma(n + 1))
    >>> gegenbauer(n, a, 1)
    gamma(2*a + n)/(gamma(2*a)*gamma(n + 1))

    >>> conjugate(gegenbauer(n, a, x))
    gegenbauer(n, conjugate(a), conjugate(x))

    >>> diff(gegenbauer(n, a, x), x)
    2*a*gegenbauer(n - 1, a + 1, x)

    See Also
    ========

    jacobi,
    chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Gegenbauer_polynomials
    .. [2] https://mathworld.wolfram.com/GegenbauerPolynomial.html
    .. [3] https://functions.wolfram.com/Polynomials/GegenbauerC3/

    c                 C   s�  |j rtjS |tjkr t||ƒS |tjkr4t||ƒS |tjkrDtjS |j�s€|tjkr¶t	|ƒtjkdkrntj
S ttj||  ƒttj| ƒ td| | ƒ td| ƒt|d ƒ  S | ¡ rÖtj| t||| ƒ S |j�r&d| ttjƒ t|tj|  ƒ td| d ƒt|d ƒ t|ƒ  S |tjk�rZtd| | ƒtd| ƒt|d ƒ  S |tjk�rŒ|j�rŒt||ƒtj S nt|||ƒS d S )NTr4   r'   )rQ   r   ÚZeror6   r9   r@   r:   r?   r=   r
   ZComplexInfinityr   ÚPir   r   r>   r;   r8   r   rA   rB   r	   r   )r"   r#   rD   r   r$   r$   r%   rF   g  s6    





.ÿ""ÿ(zgegenbauer.evalr5   c           
      C   s&  ddl m} |dkr"t| |ƒ‚�n |dkræ| j\}}}tdƒ}ddd||    ||  || d|  ||   }d|d  |d|  d| d|  d   d|| d|    }|t|||ƒ |t|||ƒ  }	||	|d|d fƒS |dk�r| j\}}}d| t|d |d |ƒ S t| |ƒ‚d S )Nr   rH   r'   r4   rJ   r3   r5   )rK   rI   r   r)   r   r;   )
r+   rL   rI   r#   rD   r   rJ   Zfactor1Zfactor2rS   r$   r$   r%   rO   �  s,    ÿÿÿ*ÿ 
zgegenbauer.fdiffc                 K   sn   ddl m} tdƒ}d| t||| ƒ d| |d|    t|ƒt|d|  ƒ  }|||dt|d ƒfƒS )Nr   rH   rJ   r3   r4   )rK   rI   r   r	   r   r   )r+   r#   rD   r   rR   rI   rJ   rS   r$   r$   r%   rT   ¦  s    (ÿzgegenbauer._eval_rewrite_as_Sumc                 K   s   | j |||f|ŽS rU   rV   )r+   r#   rD   r   rR   r$   r$   r%   rW   ­  s    z&gegenbauer._eval_rewrite_as_polynomialc                 C   s"   | j \}}}|  || ¡ | ¡ ¡S rU   rX   )r+   r#   rD   r   r$   r$   r%   r,   ²  s    zgegenbauer._eval_conjugateN)r5   rY   r$   r$   r$   r%   r;   "  s   D
(
r;   c                   @   s>   e Zd ZdZeeƒZedd„ ƒZddd„Z	dd„ Z
d	d
„ ZdS )r7   aË  
    Chebyshev polynomial of the first kind, $T_n(x)$.

    Explanation
    ===========

    ``chebyshevt(n, x)`` gives the $n$th Chebyshev polynomial (of the first
    kind) in $x$, $T_n(x)$.

    The Chebyshev polynomials of the first kind are orthogonal on
    $[-1, 1]$ with respect to the weight $\frac{1}{\sqrt{1-x^2}}$.

    Examples
    ========

    >>> from sympy import chebyshevt, diff
    >>> from sympy.abc import n,x
    >>> chebyshevt(0, x)
    1
    >>> chebyshevt(1, x)
    x
    >>> chebyshevt(2, x)
    2*x**2 - 1

    >>> chebyshevt(n, x)
    chebyshevt(n, x)
    >>> chebyshevt(n, -x)
    (-1)**n*chebyshevt(n, x)
    >>> chebyshevt(-n, x)
    chebyshevt(n, x)

    >>> chebyshevt(n, 0)
    cos(pi*n/2)
    >>> chebyshevt(n, -1)
    (-1)**n

    >>> diff(chebyshevt(n, x), x)
    n*chebyshevu(n - 1, x)

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Chebyshev_polynomial
    .. [2] https://mathworld.wolfram.com/ChebyshevPolynomialoftheFirstKind.html
    .. [3] https://mathworld.wolfram.com/ChebyshevPolynomialoftheSecondKind.html
    .. [4] https://functions.wolfram.com/Polynomials/ChebyshevT/
    .. [5] https://functions.wolfram.com/Polynomials/ChebyshevU/

    c                 C   s˜   |j st| ¡ r$tj| t|| ƒ S | ¡ r8t| |ƒS |jrRttjtj | ƒS |tj	krbtj	S |tj
kr”tj
S n |jrˆ|  | |¡S |  ||¡S d S rU   )r=   r>   r   r?   r7   r8   r   r6   r\   r@   rA   rQ   r&   r!   r$   r$   r%   rF     s    

zchebyshevt.evalr4   c                 C   sF   |dkrt | |ƒ‚n.|dkr8| j\}}|t|d |ƒ S t | |ƒ‚d S ©Nr'   r4   )r   r)   r:   ©r+   rL   r#   r   r$   r$   r%   rO     s    
zchebyshevt.fdiffc                 K   sZ   ddl m} tdƒ}t|d| ƒ|d d |  ||d|    }|||dt|d ƒfƒS ©Nr   rH   rJ   r4   r'   )rK   rI   r   r   r   ©r+   r#   r   rR   rI   rJ   rS   r$   r$   r%   rT   %  s    .zchebyshevt._eval_rewrite_as_Sumc                 K   s   | j ||f|ŽS rU   rV   ©r+   r#   r   rR   r$   r$   r%   rW   +  s    z&chebyshevt._eval_rewrite_as_polynomialN)r4   )r-   r.   r/   r0   Ústaticmethodr   r   r1   rF   rO   rT   rW   r$   r$   r$   r%   r7   »  s   C

r7   c                   @   s>   e Zd ZdZeeƒZedd„ ƒZddd„Z	dd„ Z
d	d
„ ZdS )r:   aí  
    Chebyshev polynomial of the second kind, $U_n(x)$.

    Explanation
    ===========

    ``chebyshevu(n, x)`` gives the $n$th Chebyshev polynomial of the second
    kind in x, $U_n(x)$.

    The Chebyshev polynomials of the second kind are orthogonal on
    $[-1, 1]$ with respect to the weight $\sqrt{1-x^2}$.

    Examples
    ========

    >>> from sympy import chebyshevu, diff
    >>> from sympy.abc import n,x
    >>> chebyshevu(0, x)
    1
    >>> chebyshevu(1, x)
    2*x
    >>> chebyshevu(2, x)
    4*x**2 - 1

    >>> chebyshevu(n, x)
    chebyshevu(n, x)
    >>> chebyshevu(n, -x)
    (-1)**n*chebyshevu(n, x)
    >>> chebyshevu(-n, x)
    -chebyshevu(n - 2, x)

    >>> chebyshevu(n, 0)
    cos(pi*n/2)
    >>> chebyshevu(n, 1)
    n + 1

    >>> diff(chebyshevu(n, x), x)
    (-x*chebyshevu(n, x) + (n + 1)*chebyshevt(n + 1, x))/(x**2 - 1)

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt, chebyshevt_root, chebyshevu_root,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Chebyshev_polynomial
    .. [2] https://mathworld.wolfram.com/ChebyshevPolynomialoftheFirstKind.html
    .. [3] https://mathworld.wolfram.com/ChebyshevPolynomialoftheSecondKind.html
    .. [4] https://functions.wolfram.com/Polynomials/ChebyshevT/
    .. [5] https://functions.wolfram.com/Polynomials/ChebyshevU/

    c                 C   sØ   |j sœ| ¡ r$tj| t|| ƒ S | ¡ r\|tjkr<tjS | d  ¡ s\t| d |ƒ S |jrvttjtj	 | ƒS |tj
krŠtj
| S |tjkrÔtjS n8|jrÈ|tjkr²tjS |  | d |¡ S n|  ||¡S d S ©Nr4   )r=   r>   r   r?   r:   r[   r8   r   r6   r\   r@   rA   rQ   r&   r!   r$   r$   r%   rF   w  s&    




zchebyshevu.evalr4   c                 C   sd   |dkrt | |ƒ‚nL|dkrV| j\}}|d t|d |ƒ |t||ƒ  |d d  S t | |ƒ‚d S r]   )r   r)   r7   r:   r^   r$   r$   r%   rO   —  s    
0zchebyshevu.fdiffc                 K   sn   ddl m} tdƒ}tj| t|| ƒ d| |d|    t|ƒt|d|  ƒ  }|||dt|d ƒfƒS ©Nr   rH   rJ   r4   ©rK   rI   r   r   r?   r   r   r`   r$   r$   r%   rT   ¢  s    
ÿÿÿzchebyshevu._eval_rewrite_as_Sumc                 K   s   | j ||f|ŽS rU   rV   ra   r$   r$   r%   rW   ©  s    z&chebyshevu._eval_rewrite_as_polynomialN)r4   )r-   r.   r/   r0   rb   r   r   r1   rF   rO   rT   rW   r$   r$   r$   r%   r:   1  s   C

r:   c                   @   s   e Zd ZdZedd„ ƒZdS )Úchebyshevt_roota�  
    ``chebyshev_root(n, k)`` returns the $k$th root (indexed from zero) of
    the $n$th Chebyshev polynomial of the first kind; that is, if
    $0 \le k < n$, ``chebyshevt(n, chebyshevt_root(n, k)) == 0``.

    Examples
    ========

    >>> from sympy import chebyshevt, chebyshevt_root
    >>> chebyshevt_root(3, 2)
    -sqrt(3)/2
    >>> chebyshevt(3, chebyshevt_root(3, 2))
    0

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly
    c                 C   s>   d|kr||k s t d||f ƒ‚ttjd| d  d|  ƒS )Nr   ú+must have 0 <= k < n, got k = %s and n = %sr4   r'   ©rC   r   r   r\   ©r"   r#   rJ   r$   r$   r%   rF   Ð  s
    ÿzchebyshevt_root.evalN©r-   r.   r/   r0   r1   rF   r$   r$   r$   r%   rf   ¯  s    rf   c                   @   s   e Zd ZdZedd„ ƒZdS )Úchebyshevu_rootaw  
    ``chebyshevu_root(n, k)`` returns the $k$th root (indexed from zero) of the
    $n$th Chebyshev polynomial of the second kind; that is, if $0 \le k < n$,
    ``chebyshevu(n, chebyshevu_root(n, k)) == 0``.

    Examples
    ========

    >>> from sympy import chebyshevu, chebyshevu_root
    >>> chebyshevu_root(3, 2)
    -sqrt(2)/2
    >>> chebyshevu(3, chebyshevu_root(3, 2))
    0

    See Also
    ========

    chebyshevt, chebyshevt_root, chebyshevu,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly
    c                 C   s:   d|kr||k s t d||f ƒ‚ttj|d  |d  ƒS )Nr   rg   r'   rh   ri   r$   r$   r%   rF   ù  s
    ÿzchebyshevu_root.evalNrj   r$   r$   r$   r%   rk   Ø  s    rk   c                   @   s>   e Zd ZdZeeƒZedd„ ƒZddd„Z	dd„ Z
d	d
„ ZdS )r9   a·  
    ``legendre(n, x)`` gives the $n$th Legendre polynomial of $x$, $P_n(x)$

    Explanation
    ===========

    The Legendre polynomials are orthogonal on $[-1, 1]$ with respect to
    the constant weight 1. They satisfy $P_n(1) = 1$ for all $n$; further,
    $P_n$ is odd for odd $n$ and even for even $n$.

    Examples
    ========

    >>> from sympy import legendre, diff
    >>> from sympy.abc import x, n
    >>> legendre(0, x)
    1
    >>> legendre(1, x)
    x
    >>> legendre(2, x)
    3*x**2/2 - 1/2
    >>> legendre(n, x)
    legendre(n, x)
    >>> diff(legendre(n,x), x)
    n*(x*legendre(n, x) - legendre(n - 1, x))/(x**2 - 1)

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt, chebyshevt_root, chebyshevu, chebyshevu_root,
    assoc_legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Legendre_polynomial
    .. [2] https://mathworld.wolfram.com/LegendrePolynomial.html
    .. [3] https://functions.wolfram.com/Polynomials/LegendreP/
    .. [4] https://functions.wolfram.com/Polynomials/LegendreP2/

    c                 C   sÄ   |j s¢| ¡ r$tj| t|| ƒ S | ¡ rL| d  ¡ sLt| tj |ƒS |jr€ttjƒt	tj
|d  ƒt	tj|d  ƒ  S |tjkr�tjS |tjkrÀtjS n|jr´| tj }|  ||¡S d S r]   )r=   r>   r   r?   r9   r@   r8   r   r\   r   r6   rA   rQ   r&   r!   r$   r$   r%   rF   =  s    .

zlegendre.evalr4   c                 C   s`   |dkrt | |ƒ‚nH|dkrR| j\}}||d d  |t||ƒ t|d |ƒ  S t | |ƒ‚d S r]   )r   r)   r9   r^   r$   r$   r%   rO   U  s    
,zlegendre.fdiffc                 K   s`   ddl m} tdƒ}tj| t||ƒd  d| d ||   d| d |  }|||d|fƒS r_   )rK   rI   r   r   r?   r   r`   r$   r$   r%   rT   m  s    <zlegendre._eval_rewrite_as_Sumc                 K   s   | j ||f|ŽS rU   rV   ra   r$   r$   r%   rW   s  s    z$legendre._eval_rewrite_as_polynomialN)r4   )r-   r.   r/   r0   rb   r   r   r1   rF   rO   rT   rW   r$   r$   r$   r%   r9     s   5

r9   c                   @   sJ   e Zd ZdZedd„ ƒZedd„ ƒZddd„Zd	d
„ Zdd„ Z	dd„ Z
dS )r<   a›  
    ``assoc_legendre(n, m, x)`` gives $P_n^m(x)$, where $n$ and $m$ are
    the degree and order or an expression which is related to the nth
    order Legendre polynomial, $P_n(x)$ in the following manner:

    .. math::
        P_n^m(x) = (-1)^m (1 - x^2)^{\frac{m}{2}}
                   \frac{\mathrm{d}^m P_n(x)}{\mathrm{d} x^m}

    Explanation
    ===========

    Associated Legendre polynomials are orthogonal on $[-1, 1]$ with:

    - weight $= 1$            for the same $m$ and different $n$.
    - weight $= \frac{1}{1-x^2}$   for the same $n$ and different $m$.

    Examples
    ========

    >>> from sympy import assoc_legendre
    >>> from sympy.abc import x, m, n
    >>> assoc_legendre(0,0, x)
    1
    >>> assoc_legendre(1,0, x)
    x
    >>> assoc_legendre(1,1, x)
    -sqrt(1 - x**2)
    >>> assoc_legendre(n,m,x)
    assoc_legendre(n, m, x)

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt, chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre,
    hermite, hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Associated_Legendre_polynomials
    .. [2] https://mathworld.wolfram.com/LegendrePolynomial.html
    .. [3] https://functions.wolfram.com/Polynomials/LegendreP/
    .. [4] https://functions.wolfram.com/Polynomials/LegendreP2/

    c                 C   s@   t |tdd� t|f¡}tj| dtd  t|dƒ  | ¡  S )NT)Zpolysr'   r4   )r   r   Údiffr   r?   r   Zas_expr)r"   r#   ÚmÚPr$   r$   r%   r&   ´  s    zassoc_legendre._eval_at_orderc                 C   sþ   |  ¡ r:tj|  t|| ƒt|| ƒ  t|| |ƒ S |dkrLt||ƒS |dkrŽd| ttjƒ td| | d ƒtd|| d  ƒ  S |j	rú|j	rú|j
rú|j
rú|jr¼td| |f ƒ‚t|ƒ|krÚtd| ||f ƒ‚|  t|ƒtt|ƒƒ¡ t|¡S d S )Nr   r4   r'   z3%s : 1st index must be nonnegative integer (got %r)z9%s : abs('2nd index') must be <= '1st index' (got %r, %r))r>   r   r?   r   r<   r9   r   r\   r   r=   r   rQ   rC   Úabsr&   r   r    r   )r"   r#   rm   r   r$   r$   r%   rF   ¹  s    2
:zassoc_legendre.evalr5   c                 C   s†   |dkrt | |ƒ‚nn|dkr(t | |ƒ‚nZ|dkrx| j\}}}d|d d  || t|||ƒ || t|d ||ƒ   S t | |ƒ‚d S )Nr'   r4   r5   )r   r)   r<   )r+   rL   r#   rm   r   r$   r$   r%   rO   Ê  s    <zassoc_legendre.fdiffc                 K   s¨   ddl m} tdƒ}td| d|  ƒd| t|| ƒ t|ƒ t|d|  | ƒ  tj|  ||| d|    }d|d  |d  |||dt|| tj ƒfƒ S r_   )rK   rI   r   r   r   r?   r   r6   )r+   r#   rm   r   rR   rI   rJ   rS   r$   r$   r%   rT   Ù  s    &ÿÿÿÿz#assoc_legendre._eval_rewrite_as_Sumc                 K   s   | j |||f|ŽS rU   rV   )r+   r#   rm   r   rR   r$   r$   r%   rW   à  s    z*assoc_legendre._eval_rewrite_as_polynomialc                 C   s"   | j \}}}|  || ¡ | ¡ ¡S rU   rX   )r+   r#   rm   r   r$   r$   r%   r,   å  s    zassoc_legendre._eval_conjugateN)r5   )r-   r.   r/   r0   r1   r&   rF   rO   rT   rW   r,   r$   r$   r$   r%   r<   y  s   :


r<   c                   @   sF   e Zd ZdZeeƒZedd„ ƒZddd„Z	dd„ Z
d	d
„ Zdd„ ZdS )Úhermitea.  
    ``hermite(n, x)`` gives the $n$th Hermite polynomial in $x$, $H_n(x)$.

    Explanation
    ===========

    The Hermite polynomials are orthogonal on $(-\infty, \infty)$
    with respect to the weight $\exp\left(-x^2\right)$.

    Examples
    ========

    >>> from sympy import hermite, diff
    >>> from sympy.abc import x, n
    >>> hermite(0, x)
    1
    >>> hermite(1, x)
    2*x
    >>> hermite(2, x)
    4*x**2 - 2
    >>> hermite(n, x)
    hermite(n, x)
    >>> diff(hermite(n,x), x)
    2*n*hermite(n - 1, x)
    >>> hermite(n, -x)
    (-1)**n*hermite(n, x)

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt, chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite_prob,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hermite_polynomial
    .. [2] https://mathworld.wolfram.com/HermitePolynomial.html
    .. [3] https://functions.wolfram.com/Polynomials/HermiteH/

    c                 C   s„   |j s`| ¡ r$tj| t|| ƒ S |jrNd| ttjƒ ttj	| d ƒ S |tj
kr€tj
S n |jrttd| ƒ‚n|  ||¡S d S )Nr4   ú0The index n must be nonnegative integer (got %r))r=   r>   r   r?   rp   r8   r   r\   r   r@   rA   rQ   rC   r&   r!   r$   r$   r%   rF   &  s    $
ÿzhermite.evalr4   c                 C   sJ   |dkrt | |ƒ‚n2|dkr<| j\}}d| t|d |ƒ S t | |ƒ‚d S r]   )r   r)   rp   r^   r$   r$   r%   rO   :  s    
zhermite.fdiffc                 K   sj   ddl m} tdƒ}tj| t|ƒt|d|  ƒ  d| |d|    }t|ƒ|||dt|d ƒfƒ S rd   re   r`   r$   r$   r%   rT   E  s    6zhermite._eval_rewrite_as_Sumc                 K   s   | j ||f|ŽS rU   rV   ra   r$   r$   r%   rW   K  s    z#hermite._eval_rewrite_as_polynomialc                 K   s   t dƒ| t||t dƒ ƒ S rc   )r   Úhermite_probra   r$   r$   r%   Ú_eval_rewrite_as_hermite_probP  s    z%hermite._eval_rewrite_as_hermite_probN)r4   )r-   r.   r/   r0   rb   r   r   r1   rF   rO   rT   rW   rs   r$   r$   r$   r%   rp   î  s   5

rp   c                   @   sF   e Zd ZdZeeƒZedd„ ƒZddd„Z	dd„ Z
d	d
„ Zdd„ ZdS )rr   a¥  
    ``hermite_prob(n, x)`` gives the $n$th probabilist's Hermite polynomial
    in $x$, $He_n(x)$.

    Explanation
    ===========

    The probabilist's Hermite polynomials are orthogonal on $(-\infty, \infty)$
    with respect to the weight $\exp\left(-\frac{x^2}{2}\right)$. They are monic
    polynomials, related to the plain Hermite polynomials (:py:class:`~.hermite`) by

    .. math :: He_n(x) = 2^{-n/2} H_n(x/\sqrt{2})

    Examples
    ========

    >>> from sympy import hermite_prob, diff, I
    >>> from sympy.abc import x, n
    >>> hermite_prob(1, x)
    x
    >>> hermite_prob(5, x)
    x**5 - 10*x**3 + 15*x
    >>> diff(hermite_prob(n,x), x)
    n*hermite_prob(n - 1, x)
    >>> hermite_prob(n, -x)
    (-1)**n*hermite_prob(n, x)

    The sum of absolute values of coefficients of $He_n(x)$ is the number of
    matchings in the complete graph $K_n$ or telephone number, A000085 in the OEIS:

    >>> [hermite_prob(n,I) / I**n for n in range(11)]
    [1, 1, 2, 4, 10, 26, 76, 232, 764, 2620, 9496]

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt, chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite,
    laguerre, assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hermite_polynomial
    .. [2] https://mathworld.wolfram.com/HermitePolynomial.html
    c                 C   s|   |j sX| ¡ r$tj| t|| ƒ S |jrFttjƒttj	| d ƒ S |tj
krxtj
S n |jrltd| ƒ n|  ||¡S d S )Nr4   z'n must be a nonnegative integer, not %r)r=   r>   r   r?   rr   r8   r   r\   r   r@   rA   rQ   rC   r&   r!   r$   r$   r%   rF   �  s    
zhermite_prob.evalr4   c                 C   s2   |dkr$| j \}}|t|d |ƒ S t| |ƒ‚d S )Nr4   r'   )r)   rr   r   r^   r$   r$   r%   rO   Ÿ  s    
zhermite_prob.fdiffc                 K   sh   ddl m} tdƒ}tj | ||d|    t|ƒt|d|  ƒ  }t|ƒ|||dt|d ƒfƒ S rd   )rK   rI   r   r   r6   r   r   r`   r$   r$   r%   rT   ¦  s    4z!hermite_prob._eval_rewrite_as_Sumc                 K   s   | j ||f|ŽS rU   rV   ra   r$   r$   r%   rW   ¬  s    z(hermite_prob._eval_rewrite_as_polynomialc                 K   s    t dƒ|  t||t dƒ ƒ S rc   )r   rp   ra   r$   r$   r%   Ú_eval_rewrite_as_hermite±  s    z%hermite_prob._eval_rewrite_as_hermiteN)r4   )r-   r.   r/   r0   rb   r   r   r1   rF   rO   rT   rW   rt   r$   r$   r$   r%   rr   T  s   9

rr   c                   @   s>   e Zd ZdZeeƒZedd„ ƒZddd„Z	dd„ Z
d	d
„ ZdS )ÚlaguerreaL  
    Returns the $n$th Laguerre polynomial in $x$, $L_n(x)$.

    Examples
    ========

    >>> from sympy import laguerre, diff
    >>> from sympy.abc import x, n
    >>> laguerre(0, x)
    1
    >>> laguerre(1, x)
    1 - x
    >>> laguerre(2, x)
    x**2/2 - 2*x + 1
    >>> laguerre(3, x)
    -x**3/6 + 3*x**2/2 - 3*x + 1

    >>> laguerre(n, x)
    laguerre(n, x)

    >>> diff(laguerre(n, x), x)
    -assoc_laguerre(n - 1, 1, x)

    Parameters
    ==========

    n : int
        Degree of Laguerre polynomial. Must be `n \ge 0`.

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt, chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    assoc_laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Laguerre_polynomial
    .. [2] https://mathworld.wolfram.com/LaguerrePolynomial.html
    .. [3] https://functions.wolfram.com/Polynomials/LaguerreL/
    .. [4] https://functions.wolfram.com/Polynomials/LaguerreL3/

    c                 C   s°   |j dkrtdƒ‚|js€| ¡ rH| d  ¡ sHt|ƒt| d | ƒ S |jrTtjS |tj	krdtj
S |tj
kr¬tj| tj
 S n,|jr t|ƒt| d | ƒ S |  ||¡S d S )NFúError: n should be an integer.r'   )r   rC   r=   r>   r   ru   r8   r   r@   ÚNegativeInfinityrA   r?   rQ   r&   r!   r$   r$   r%   rF   õ  s    


zlaguerre.evalr4   c                 C   sF   |dkrt | |ƒ‚n.|dkr8| j\}}t|d d|ƒ S t | |ƒ‚d S r]   )r   r)   Úassoc_laguerrer^   r$   r$   r%   rO     s    
zlaguerre.fdiffc                 K   s|   ddl m} |jr2t|ƒ| j| d | f|Ž S |jdkrDtdƒ‚tdƒ}t| |ƒt	|ƒd  ||  }|||d|fƒS )Nr   rH   r'   Frv   rJ   r4   )
rK   rI   rQ   r   rT   r   rC   r   r	   r   r`   r$   r$   r%   rT     s     
 zlaguerre._eval_rewrite_as_Sumc                 K   s   | j ||f|ŽS rU   rV   ra   r$   r$   r%   rW   "  s    z$laguerre._eval_rewrite_as_polynomialN)r4   )r-   r.   r/   r0   rb   r   r   r1   rF   rO   rT   rW   r$   r$   r$   r%   ru   º  s   8

ru   c                   @   s>   e Zd ZdZedd„ ƒZddd„Zdd„ Zd	d
„ Zdd„ Z	dS )rx   aj  
    Returns the $n$th generalized Laguerre polynomial in $x$, $L_n(x)$.

    Examples
    ========

    >>> from sympy import assoc_laguerre, diff
    >>> from sympy.abc import x, n, a
    >>> assoc_laguerre(0, a, x)
    1
    >>> assoc_laguerre(1, a, x)
    a - x + 1
    >>> assoc_laguerre(2, a, x)
    a**2/2 + 3*a/2 + x**2/2 + x*(-a - 2) + 1
    >>> assoc_laguerre(3, a, x)
    a**3/6 + a**2 + 11*a/6 - x**3/6 + x**2*(a/2 + 3/2) +
        x*(-a**2/2 - 5*a/2 - 3) + 1

    >>> assoc_laguerre(n, a, 0)
    binomial(a + n, a)

    >>> assoc_laguerre(n, a, x)
    assoc_laguerre(n, a, x)

    >>> assoc_laguerre(n, 0, x)
    laguerre(n, x)

    >>> diff(assoc_laguerre(n, a, x), x)
    -assoc_laguerre(n - 1, a + 1, x)

    >>> diff(assoc_laguerre(n, a, x), a)
    Sum(assoc_laguerre(_k, a, x)/(-a + n), (_k, 0, n - 1))

    Parameters
    ==========

    n : int
        Degree of Laguerre polynomial. Must be `n \ge 0`.

    alpha : Expr
        Arbitrary expression. For ``alpha=0`` regular Laguerre
        polynomials will be generated.

    See Also
    ========

    jacobi, gegenbauer,
    chebyshevt, chebyshevt_root, chebyshevu, chebyshevu_root,
    legendre, assoc_legendre,
    hermite, hermite_prob,
    laguerre,
    sympy.polys.orthopolys.jacobi_poly
    sympy.polys.orthopolys.gegenbauer_poly
    sympy.polys.orthopolys.chebyshevt_poly
    sympy.polys.orthopolys.chebyshevu_poly
    sympy.polys.orthopolys.hermite_poly
    sympy.polys.orthopolys.hermite_prob_poly
    sympy.polys.orthopolys.legendre_poly
    sympy.polys.orthopolys.laguerre_poly

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Laguerre_polynomial#Generalized_Laguerre_polynomials
    .. [2] https://mathworld.wolfram.com/AssociatedLaguerrePolynomial.html
    .. [3] https://functions.wolfram.com/Polynomials/LaguerreL/
    .. [4] https://functions.wolfram.com/Polynomials/LaguerreL3/

    c                 C   sŠ   |j rt||ƒS |jsf|j r*t|| |ƒS |tjkrL|dkrLtj| tj S |tjkr†|dkr†tjS n |jrzt	d| ƒ‚nt
|||ƒS d S )Nr   rq   )r8   ru   r=   r   r   rA   r?   rw   rQ   rC   r   )r"   r#   Úalphar   r$   r$   r%   rF   o  s    
ÿzassoc_laguerre.evalr5   c                 C   s˜   ddl m} |dkr t| |ƒ‚nt|dkr`| j\}}}tdƒ}|t|||ƒ||  |d|d fƒS |dkrŠ| j\}}}t|d |d |ƒ S t| |ƒ‚d S )Nr   rH   r'   r4   rJ   r5   )rK   rI   r   r)   r   rx   )r+   rL   rI   r#   ry   r   rJ   r$   r$   r%   rO   …  s    $zassoc_laguerre.fdiffc                 K   s€   ddl m} |js|jdkr$tdƒ‚tdƒ}t| |ƒt|| d ƒt|ƒ  ||  }t|| d ƒt|ƒ |||d|fƒ S )Nr   rH   FrP   rJ   r'   )	rK   rI   rQ   r   rC   r   r	   r   r   )r+   r#   ry   r   rR   rI   rJ   rS   r$   r$   r%   rT   –  s     ÿÿÿz#assoc_laguerre._eval_rewrite_as_Sumc                 K   s   | j |||f|ŽS rU   rV   )r+   r#   ry   r   rR   r$   r$   r%   rW      s    z*assoc_laguerre._eval_rewrite_as_polynomialc                 C   s"   | j \}}}|  || ¡ | ¡ ¡S rU   rX   )r+   r#   ry   r   r$   r$   r%   r,   ¥  s    zassoc_laguerre._eval_conjugateN)r5   rY   r$   r$   r$   r%   rx   (  s   F


rx   N)5r0   Z
sympy.corer   Zsympy.core.functionr   r   Zsympy.core.singletonr   Zsympy.core.symbolr   Z(sympy.functions.combinatorial.factorialsr   r   r	   Z$sympy.functions.elementary.complexesr
   Z&sympy.functions.elementary.exponentialr   Z#sympy.functions.elementary.integersr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   r   Z'sympy.functions.special.gamma_functionsr   Zsympy.functions.special.hyperr   Zsympy.polys.orthopolysr   r   r   r   r   r   r   r   r   r   r2   rZ   r;   r7   r:   rf   rk   r9   r<   rp   rr   ru   rx   r$   r$   r$   r%   Ú<module>   s<   ( (N v~)-tuffn