B
    <Zá>  ã               @   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   s@  |   |¡\}}|  |¡}| j }|sld| jg|dgg ||d  gg g df}|rf|d d  || 7  < |fS |  | ¡p |  |¡dkp |  |¡dko |  |¡dk}| jd d }|rì| j| j|||ddd	d
}	| j|| j	d|d|d}
n|}
| j|
|
|d}| j
d||d}| j|d	d
}| j|
d	d
}|rdd|
g||gg g || ||d  gg |f}|g}nld|g||gg g || ||d  gg |f}d| j|g|d ddgg || g||d  gd| g|f}||g}|r8|  |	¡}xVtt|ƒƒD ]F}|| d d  || 7  < || d  |¡ || d  d¡ qîW t|ƒS )z”
    Combined calculation of the Hermite polynomial H_n(z) (and its
    generalization to complex n) and the parabolic cylinder
    function D.
    é   g      à?r   é    é   é   )Úprecg      Ð¿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!   ú:lib/python3.7/site-packages/mpmath/functions/orthogonal.pyÚ_hermite_param   s@    
&**:
r#   c                s   ˆ j ‡ ‡‡fdd„g f|ŽS )Nc                  s   t ˆ ˆˆdƒS )Nr   )r#   r!   )r   r   r   r!   r"   Ú<lambda>>   s    zhermite.<locals>.<lambda>)Ú	hypercomb)r   r   r   Úkwargsr!   )r   r   r   r"   Úhermite<   s    r'   c                s   ˆ j ‡ ‡‡fdd„g f|ŽS )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                  s   t ˆ ˆˆdƒS )Nr   )r#   r!   )r   r   r   r!   r"   r$   v   s    zpcfd.<locals>.<lambda>)r%   )r   r   r   r&   r!   )r   r   r   r"   Úpcfd@   s    6r(   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
   r(   r   )r   Úar   r&   r   Ú_r!   r!   r"   Úpcfux   s    ,r+   c                s¨   ˆ   |¡\‰}ˆ  ˆ¡‰ˆ j‰ˆ j‰|dkr€ˆ  ˆd ¡r€‡ ‡‡‡‡fdd„}ˆ j|g f|Ž}ˆ  ˆ¡r|ˆ  ˆ¡r|ˆ  |¡}|S ‡ ‡‡‡fdd„}ˆ j|ˆgf|ŽS d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ƒ}x:|D ]2}|d  d¡ |d  d¡ |d  ˆˆ ¡ q<W ˆ  ˆˆ ˆ ¡ˆ  dˆ j ¡ }x(|D ] }|d  |¡ |d  d¡ qšW || S )	Ny       €      ð¿T)r	   r   r   y              ð?é   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  |¡ x0||fD ]$}	|	d  d¡ |	d  ˆ|  ¡ qôW ||fS )Ng      Ð¿g      à?r   r   r-   )Zsquare_exp_argr   r   Úcospi_sinpir   )
r   r   r   ÚeÚlZY1ZY2ÚcÚsÚY)r   r   r0   r   r!   r"   r1   ß   s    
8LN)r
   r   r   Zmpq_1_4Úisintr%   Ú_is_real_typeÚ_re)r   r)   r   r&   Zntyper1   Úvr!   )r   r   r   r0   r   r"   Úpcfv§   s     

r<   c                sT   ˆ   |¡\‰}ˆ  ˆ¡‰‡ ‡‡fdd„}ˆ  |¡}ˆ  ˆ¡rPˆ  ˆ¡rPˆ  |¡}|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 )Ng      à?y               @é   r   r   g      Ð?g      Ð¿)
ÚargÚgammaÚjZloggammar   r   r   Úexpjr+   r.   )Zphi2ZrhoÚkÚC)r   r   r   r!   r"   r     s    ,.",zpcfw.<locals>.terms)r
   r   Zsum_accuratelyr9   r:   )r   r)   r   r&   r*   r   r;   r!   )r   r   r   r"   Úpcfwð   s    
	

rD   c                sz   |   ˆ ¡rdˆˆ  S |   ˆ d ¡rZ|   ˆd ¡r:tdƒ‚‡‡fdd„}| j|ˆ gf|ŽS ‡ ‡fdd„}| j|ˆgf|ŽS )Nr   g      à?r   z#Gegenbauer function with two limitsc          	      sF   d|  }g g ˆ | gˆ d |gˆ  ˆ | g| d gddˆ  f}|gS )Nr   r   g      à?r!   )r)   Úa2r/   )r   r   r!   r"   r1   =  s    8zgegenbauer.<locals>.hc          	      sF   dˆ  }g g | | g| d |g|  | | gˆ d gddˆ  f}|gS )Nr   r   g      à?r!   )r   rE   r/   )r)   r   r!   r"   r1   B  s    8)r   ÚNotImplementedErrorr%   )r   r   r)   r   r&   r1   r!   )r)   r   r   r"   Ú
gegenbauer3  s    
rG   c                s–   |   ˆ ¡s,‡ ‡‡fdd„}| j||gf|ŽS |  ˆ¡sX‡‡fdd„}| j||ˆ gf|ŽS |  |ˆ  |¡| j| d| ˆ  ˆ ˆ d dˆ d f|Ž S )Nc                sJ   g g ˆ |  d g| d ˆ d g|  ˆ ˆ |  d gˆ d gdˆ d ffS )Nr   g      à?r!   )r   )r)   ÚbÚxr!   r"   r1   K  s    zjacobi.<locals>.hc                sF   g g ˆ  g| d ˆ  |  g|  |ˆ  |  d gˆ d gˆd d ffS )Nr   g      à?r!   )r   r)   )rH   rI   r!   r"   r1   O  s    r   r   )r   r%   r8   ZbinomialÚhyp2f1)r   r   r)   rH   rI   r&   r1   r!   )r)   rH   rI   r"   ÚjacobiH  s    

rK   c                s    ‡ ‡fdd„}| j ||gf|ŽS )Nc                s4   g g | ˆ  d g| d ˆ d gˆ  g| d gˆffS )Nr   r!   )r)   )r   r   r!   r"   r1   Z  s    zlaguerre.<locals>.h)r%   )r   r   r)   r   r&   r1   r!   )r   r   r"   ÚlaguerreU  s    rL   c             K   s„   |   |¡rbt|ƒ}||dk  d@ rb|s*|S |  |¡}|d| j d k rJ|S |dk rb|  j| 7  _| j| |d dd| d f|ŽS )Nr   r   éþÿÿÿé
   éûÿÿÿr   )r8   ÚintÚmagr   rJ   )r   r   rI   r&   rQ   r!   r!   r"   Úlegendre^  s    

rR   r   c                s„   |   |¡}|   |¡}|s(| j|ˆ f|ŽS |dkrP‡ fdd„}| j|||gf|ŽS |dkrx‡ fdd„}| j|||gf|ŽS tdƒ‚d S )Nr   c          	      sP   |d }dˆ  dˆ  g|| gg d| g|  | d gd| gddˆ   f}|fS )Ng      à?r   r!   )r   ÚmÚgr/   )r   r!   r"   r1   w  s    Bzlegenp.<locals>.hr-   c          	      sP   |d }ˆ d ˆ d g|| gg d| g|  | d gd| gddˆ   f}|fS )Ng      à?r   r!   )r   rS   rT   r/   )r   r!   r"   r1   }  s    Bzrequires type=2 or type=3)r   rR   r%   Ú
ValueError)r   r   rS   r   Útyper&   r1   r!   )r   r"   Úlegenpm  s    

rW   c                sº   ˆ   |¡}ˆ   |¡}ˆ   ˆ¡‰ˆdkr,ˆ jS |dkrV‡ ‡fdd„}ˆ j|||gf|ŽS |dkr®tˆƒdkrŒ‡ ‡fdd„}ˆ j|||gf|ŽS ‡ ‡fdd„}ˆ j|||gf|ŽS td	ƒ‚d S )
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   rX   )r2   r   )r   rS   ÚcosÚsinr6   r5   r)   rH   r   r   r   r   )r   r   r!   r"   r1     s     2zlegenq.<locals>.hr-   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   g      à?g      ø?rM   )r.   r   )r   rS   r   )r   r   r!   r"   r1   ¢  s
    &0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 )Nr   r   rX   )Zsinpir   r.   )
r   rS   r6   r5   r)   rH   r   r   r   r   )r   r   r!   r"   r1   «  s    
 6zrequires type=2 or type=3)r   Únanr%   ÚabsrU   )r   r   rS   r   rV   r&   r1   r!   )r   r   r"   Úlegenq„  s    


r]   c             K   sJ   |s,|   |¡r,t|  |¡ƒd dkr,|d S | j| |dd| d f|ŽS )Nr   r   r   )r   r   )r8   rP   r:   rJ   )r   r   rI   r&   r!   r!   r"   Úchebytº  s    $r^   c             K   sV   |s,|   |¡r,t|  |¡ƒd dkr,|d S |d | j| |d dd| d f|Ž S )Nr   r   r   )r-   r   )r8   rP   r:   rJ   )r   r   rI   r&   r!   r!   r"   ÚchebyuÀ  s    $r_   c       
         sä   ˆ   |¡}ˆ   |¡}ˆ   ˆ¡‰ˆ   ˆ¡‰ˆ  |¡}|o<|dk}ˆ  |¡}|rr|dk rr|rrˆ j|d  |ˆˆf|ŽS ˆdkr|r|dk rˆ jd S |rÀ|rÀt|ƒ|kr®ˆ jd S ‡ ‡‡fdd„}	n‡ ‡‡fdd„}	ˆ j|	||gf|ŽS )Nr   r   y              ð?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 )NrX   r   r   g      à?)r\   rA   Zfacr   rZ   Zsign)r4   rS   ZabsmrC   ÚP)r   ÚphiÚthetar!   r"   r1   Ø  s    ,,"zspherharm.<locals>.hc                sò   ˆ   | | d ¡s2ˆ   | | d ¡s2ˆ   d| ¡rJd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   rX   g      à?r   g      à¿)r   Zcos_sinrA   r   r?   )r4   rS   rY   rZ   rC   r`   )r   ra   rb   r!   r"   r1   ä  s    2  )r   r8   Ú	spherharmZzeror\   r%   )
r   r4   rS   rb   ra   r&   Zl_isintZ	l_naturalZm_isintr1   r!   )r   ra   rb   r"   rc   Æ  s"    







	rc   N)r   )r   )Z	functionsr   r   r#   r'   r(   r+   r<   rD   rG   rK   rL   rR   rW   r]   r^   r_   rc   r!   r!   r!   r"   Ú<module>   s"   98/IC	5