o
    Ø"`į>  ć                   @   sŹ   d dl mZmZ dd Zedd Zedd Zedd	 Zed
d Zedd Z	 edd Z	edd Z
edd Zedd Zed"ddZed"ddZedd Zedd Zedd  Zd!S )#é   )ŚdefunŚdefun_wrappedc                 C   s8  |   |”\}}|  |”}| j }|s6d| jg|dgg ||d  gg g df}|r3|d d  || 7  < |fS |  | ”pP|  |”dkpP|  |”dkoP|  |”dk}| jd d }|rv| j| j|||ddd	d
}	| j|| j	d|d|d}
n|}
| j|
|
|d}| j
d||d}| j|d	d
}| j|
d	d
}|r±d|
g||gg g || ||d  gg |f}|g}n6d|g||gg g || ||d  gg |f}d| j|g|d ddgg || g||d  gd| g|f}||g}|r|  |	”}tt|D ]"}|| d d  || 7  < || d  |” || d  d” qõt|S )z
    Combined calculation of the Hermite polynomial H_n(z) (and its
    generalization to complex n) and the parabolic cylinder
    function D.
    é   ē      ą?r   é    é   é   )Śprecē      ŠæT©Śexact)Ś_convert_paramŚconvertŚmpq_1_2ŚpiŚisnpintŚreZimr	   ŚfmulŚsqrtZfdivZfnegŚexpŚrangeŚlenŚappendŚtuple)ŚctxŚnŚzZparabolic_cylinderZntypŚqŚT1Zcan_use_2f0ZexpprecŚuŚwZw2Zrw2Znrw2ZnwŚtermsŚT2ZexpuŚi© r$   ś=/usr/lib/python3/dist-packages/mpmath/functions/orthogonal.pyŚ_hermite_param   sB   
&’**:
r&   c                    ó     j  fddg fi |¤S )Nc                      ó   t  dS )Nr   ©r&   r$   ©r   r   r   r$   r%   Ś<lambda>>   ó    zhermite.<locals>.<lambda>©Ś	hypercomb©r   r   r   Śkwargsr$   r*   r%   Śhermite<   s    r1   c                    r'   )a8  
    Gives the parabolic cylinder function in Whittaker's notation
    `D_n(z) = U(-n-1/2, z)` (see :func:`~mpmath.pcfu`).
    It solves the differential equation

    .. math ::

        y'' + \left(n + \frac{1}{2} - \frac{1}{4} z^2\right) y = 0.

    and can be represented in terms of Hermite polynomials
    (see :func:`~mpmath.hermite`) as

    .. math ::

        D_n(z) = 2^{-n/2} e^{-z^2/4} H_n\left(\frac{z}{\sqrt{2}}\right).

    **Plots**

    .. literalinclude :: /plots/pcfd.py
    .. image :: /plots/pcfd.png

    **Examples**

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> pcfd(0,0); pcfd(1,0); pcfd(2,0); pcfd(3,0)
        1.0
        0.0
        -1.0
        0.0
        >>> pcfd(4,0); pcfd(-3,0)
        3.0
        0.6266570686577501256039413
        >>> pcfd('1/2', 2+3j)
        (-5.363331161232920734849056 - 3.858877821790010714163487j)
        >>> pcfd(2, -10)
        1.374906442631438038871515e-9

    Verifying the differential equation::

        >>> n = mpf(2.5)
        >>> y = lambda z: pcfd(n,z)
        >>> z = 1.75
        >>> chop(diff(y,z,2) + (n+0.5-0.25*z**2)*y(z))
        0.0

    Rational Taylor series expansion when `n` is an integer::

        >>> taylor(lambda z: pcfd(5,z), 0, 7)
        [0.0, 15.0, 0.0, -13.75, 0.0, 3.96875, 0.0, -0.6015625]

    c                      r(   ©Nr   r)   r$   r*   r$   r%   r+   v   r,   zpcfd.<locals>.<lambda>r-   r/   r$   r*   r%   Śpcfd@   s    6r3   c                 K   s"   |   |”\}}|  | | j |”S )aå  
    Gives the parabolic cylinder function `U(a,z)`, which may be
    defined for `\Re(z) > 0` in terms of the confluent
    U-function (see :func:`~mpmath.hyperu`) by

    .. math ::

        U(a,z) = 2^{-\frac{1}{4}-\frac{a}{2}} e^{-\frac{1}{4} z^2}
            U\left(\frac{a}{2}+\frac{1}{4},
            \frac{1}{2}, \frac{1}{2}z^2\right)

    or, for arbitrary `z`,

    .. math ::

        e^{-\frac{1}{4}z^2} U(a,z) =
            U(a,0) \,_1F_1\left(-\tfrac{a}{2}+\tfrac{1}{4};
            \tfrac{1}{2}; -\tfrac{1}{2}z^2\right) +
            U'(a,0) z \,_1F_1\left(-\tfrac{a}{2}+\tfrac{3}{4};
            \tfrac{3}{2}; -\tfrac{1}{2}z^2\right).

    **Examples**

    Connection to other functions::

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> z = mpf(3)
        >>> pcfu(0.5,z)
        0.03210358129311151450551963
        >>> sqrt(pi/2)*exp(z**2/4)*erfc(z/sqrt(2))
        0.03210358129311151450551963
        >>> pcfu(0.5,-z)
        23.75012332835297233711255
        >>> sqrt(pi/2)*exp(z**2/4)*erfc(-z/sqrt(2))
        23.75012332835297233711255
        >>> pcfu(0.5,-z)
        23.75012332835297233711255
        >>> sqrt(pi/2)*exp(z**2/4)*erfc(-z/sqrt(2))
        23.75012332835297233711255

    )r   r3   r   )r   Śar   r0   r   Ś_r$   r$   r%   Śpcfux   s   ,r6   c                    s¬      |”\}  ” j j|dkrB  d ”rB fdd} j|g fi |¤}  ”r@  ”r@  |”}|S  fdd} j|gfi |¤S )aŽ  
    Gives the parabolic cylinder function `V(a,z)`, which can be
    represented in terms of :func:`~mpmath.pcfu` as

    .. math ::

        V(a,z) = \frac{\Gamma(a+\tfrac{1}{2}) (U(a,-z)-\sin(\pi a) U(a,z)}{\pi}.

    **Examples**

    Wronskian relation between `U` and `V`::

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> a, z = 2, 3
        >>> pcfu(a,z)*diff(pcfv,(a,z),(0,1))-diff(pcfu,(a,z),(0,1))*pcfv(a,z)
        0.7978845608028653558798921
        >>> sqrt(2/pi)
        0.7978845608028653558798921
        >>> a, z = 2.5, 3
        >>> pcfu(a,z)*diff(pcfv,(a,z),(0,1))-diff(pcfu,(a,z),(0,1))*pcfv(a,z)
        0.7978845608028653558798921
        >>> a, z = 0.25, -1
        >>> pcfu(a,z)*diff(pcfv,(a,z),(0,1))-diff(pcfu,(a,z),(0,1))*pcfv(a,z)
        0.7978845608028653558798921
        >>> a, z = 2+1j, 2+3j
        >>> chop(pcfu(a,z)*diff(pcfv,(a,z),(0,1))-diff(pcfu,(a,z),(0,1))*pcfv(a,z))
        0.7978845608028653558798921

    ŚQr   c                     s¾    j ddd} t   d}t  | d}|D ]}|d  d” |d  d” |d   ” q    ”  d j ” }|D ]}|d  |” |d  d” qJ|| S )	Ny             šæTr   r   r   ł              š?é   r   )r   r&   r   Śexpjpir   r   )ZjzZT1termsZT2termsŚTr   ©r   r   r   Śrr   r$   r%   ŚhĶ   s   "zpcfv.<locals>.hc           
         s      d”}   d”}  |”} j  |”g}| |   dg|   gg |   gg|f}|g  |   ddgd |   gg |  d  gd g|f}  |   ”\}}|d  |” |d  |” ||fD ]}	|	d  d” |	d  |  ” qy||fS )Nr
   r   r   r   r9   )Zsquare_exp_argr   r   Ścospi_sinpir   )
r   r    r   ŚeŚlZY1ZY2ŚcŚsŚY)r   r   r=   r   r$   r%   r>   ß   s   
8L)r   r   r   Zmpq_1_4Śisintr.   Ś_is_real_typeŚ_re)r   r4   r   r0   Zntyper>   Śvr$   r<   r%   Śpcfv§   s    

rI   c                    sT      |”\}  ” fdd}  |”}  ”r(  ”r(  |”}|S )aI  
    Gives the parabolic cylinder function `W(a,z)` defined in (DLMF 12.14).

    **Examples**

    Value at the origin::

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> a = mpf(0.25)
        >>> pcfw(a,0)
        0.9722833245718180765617104
        >>> power(2,-0.75)*sqrt(abs(gamma(0.25+0.5j*a)/gamma(0.75+0.5j*a)))
        0.9722833245718180765617104
        >>> diff(pcfw,(a,0),(0,1))
        -0.5142533944210078966003624
        >>> -power(2,-0.25)*sqrt(abs(gamma(0.75+0.5j*a)/gamma(0.25+0.5j*a)))
        -0.5142533944210078966003624

    c                  3   s
        d j  ””}   d j  ”  d j  ” d }  jd d|   }  d  d j  ” ”   j ” }  |d ”  d j  ” }|  |”    j   	d” ” V  |  | ”    j    	d” ” V  d S )Nr   y               @é   r   r   g      Š?r
   )
ŚargŚgammaŚjZloggammar   r   r   Śexpjr6   r:   )Zphi2ZrhoŚkŚCr*   r$   r%   r!     s   ,.",4zpcfw.<locals>.terms)r   r   Zsum_accuratelyrF   rG   )r   r4   r   r0   r5   r!   rH   r$   r*   r%   Śpcfwš   s   

	
rQ   c                    s   |    ”rd  S |    d ”r/|   d ”rtdfdd}| j| gfi |¤S  fdd}| j|gfi |¤S )Nr   r   r   z#Gegenbauer function with two limitsc              	      sF   d|  }g g  | g d |g   | g| d gdd  f}|gS ©Nr   r   r   r$   )r4   Śa2r;   ©r   r   r$   r%   r>   =  ó   8zgegenbauer.<locals>.hc              	      sF   d  }g g | | g| d |g|  | | g d gdd  f}|gS rR   r$   )r   rS   r;   )r4   r   r$   r%   r>   B  rU   )r   ŚNotImplementedErrorr.   ©r   r   r4   r   r0   r>   r$   )r4   r   r   r%   Ś
gegenbauer3  s   
rX   c                    s¢   |    ”s fdd}| j||gfi |¤S |  ”s0fdd}| j|| gfi |¤S |  |  |”| j| d|     d d d fi |¤ S )Nc                    sJ   g g  |  d g| d  d g|    |  d g d gd d ffS ©Nr   r   r$   )r   ©r4   ŚbŚxr$   r%   r>   K  s   Jzjacobi.<locals>.hc                    sF   g g   g| d   |  g|  |  |  d g d gd d ffS rY   r$   )r   r4   )r[   r\   r$   r%   r>   O  s   Fr   r   )r   r.   rE   ZbinomialŚhyp2f1)r   r   r4   r[   r\   r0   r>   r$   rZ   r%   ŚjacobiH  s   

Br^   c                    s$    fdd}| j ||gfi |¤S )Nc                    s4   g g |   d g| d  d g  g| d gffS r2   r$   )r4   rT   r$   r%   r>   Z  s   4zlaguerre.<locals>.hr-   rW   r$   rT   r%   ŚlaguerreU  s   r_   c                 K   s   |   |”r1t|}||dk  d@ r1|s|S |  |”}|d| j d k r%|S |dk r1|  j| 7  _| j| |d dd| d fi |¤S )Nr   r   éž’’’é
   éū’’’r   )rE   ŚintŚmagr	   r]   )r   r   r\   r0   rd   r$   r$   r%   Ślegendre^  s   

&re   r   c                    s   |   |”}|   |”}|s| j| fi |¤S |dkr, fdd}| j|||gfi |¤S |dkrB fdd}| j|||gfi |¤S td)Nr   c              	      sP   |d }d  d  g|| gg d| g|  | d gd| gdd   f}|fS ©Nr   r   r$   ©r   ŚmŚgr;   ©r   r$   r%   r>   w  ó   Bzlegenp.<locals>.hr9   c              	      sP   |d } d  d g|| gg d| g|  | d gd| gdd   f}|fS rf   r$   rg   rj   r$   r%   r>   }  rk   śrequires type=2 or type=3)r   re   r.   Ś
ValueError©r   r   rh   r   Śtyper0   r>   r$   rj   r%   Ślegenpm  s   

rp   c                    sĀ      |”}   |”}   ”dv r jS |dkr- fdd} j|||gfi |¤S |dkr]tdkrJ fdd} j|||gfi |¤S  fdd} j|||gfi |¤S td	)
N)r   é’’’’r   c                    sŅ      |”\}}d|  j }|}d }d }|d }d d }	||||gdd|| gg d| g|  | d gd| g|	f}
| ||gd| |g| | d g| | d |d g|  | d g|d g|	f}|
|fS ©Nr   r   rq   )r?   r   )r   rh   ŚcosŚsinrC   rB   r4   r[   r   r    r   r"   ©r   r   r$   r%   r>     s    ’2’zlegenq.<locals>.hr9   r   c                    s      |”d jd d gd|  d d|  | d d| d| g| | d g| d gdd|  |  dd|  |  g| d gd f}|gS )Nr   r   r   g      ų?r`   )r:   r   )r   rh   r   ru   r$   r%   r>   ¢  s   &,żc           
         sŌ   d   |”  j }  |”}d }d }|d }d d }||||gdd|| gg d| g|  | d gd| g|f}| |||gdd| |g| | d g| | d |d g|  | d g|d g|f}	||	fS rr   )Zsinpir   r:   )
r   rh   rC   rB   r4   r[   r   r    r   r"   ru   r$   r%   r>   «  s   
 ’6’rl   )r   Śnanr.   Śabsrm   rn   r$   ru   r%   Ślegenq  s   


rx   c                 K   sN   |s|   |”rt|  |”d dkr|d S | j| |dd| d fi |¤S )Nr   r   r   )r   r   ©rE   rc   rG   r]   ©r   r   r\   r0   r$   r$   r%   Śchebytŗ  s   $"r{   c                 K   sZ   |s|   |”rt|  |”d dkr|d S |d | j| |d dd| d fi |¤ S )Nr   r   r   )r9   r   ry   rz   r$   r$   r%   ŚchebyuĄ  s   $.r|   c           
         sģ      |”}   |”}   ”   ”  |”}|o|dk}  |”}|r;|dk r;|r; j|d  |fi |¤S dkrJ|rJ|dk rJ jd S |rb|rbt||krY jd S  fdd}	n fdd}	 j|	||gfi |¤S )Nr   r   r8   c              
      sĄ   t |}d  | ”d|  d   | | ”  j   | | ”   ”d   |”dg}d|   |”d  ddd| d| d g}||g g ||  | | d g|d g  d ”d ffS )Nrq   r   r   r   )rw   rN   Zfacr   rt   Śsign)rA   rh   ZabsmrP   ŚP©r   ŚphiŚthetar$   r%   r>   Ų  s   ,
ż,"’zspherharm.<locals>.hc                    sņ      | | d ”s   | | d ”s   d| ”r%dgdgg g g g dffS   d ”\}}d  | ” d|  d  j   | | d ”  | | d ”|d |d g}ddddd| d| g}||g d| g|  | d gd| g|d ffS )Nr   r   rq   r   r   g      ąæ)r   Zcos_sinrN   r   rL   )rA   rh   rs   rt   rP   r~   r   r$   r%   r>   ä  s   2  ž.)r   rE   Ś	spherharmZzerorw   r.   )
r   rA   rh   r   r   r0   Zl_isintZ	l_naturalZm_isintr>   r$   r   r%   r   Ę  s"   







	r   N)r   )Z	functionsr   r   r&   r1   r3   r6   rI   rQ   rX   r^   r_   re   rp   rx   r{   r|   r   r$   r$   r$   r%   Ś<module>   s>    9

7
.
H
%



5

