ó
<Zc           @   sû   d  d l  m Z m Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d	 „  ƒ Z
 e d
 „  ƒ Z e d „  ƒ Z e d d „ ƒ Z e d d „ ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d S(   i   (   t   defunt   defun_wrappedc         C   s  |  j  | ƒ \ } } |  j | ƒ } |  j } | s‘ d |  j g | d g g  | | d g g  g  d f } | rŠ | d d c | | 7<n  | f S|  j | ƒ pÝ |  j | ƒ d k pÝ |  j | ƒ d k oÝ |  j | ƒ d k } |  j d d } | rK|  j |  j | | d | ƒd d	 t	 ƒ}	 |  j | |  j
 d d | ƒd | ƒ}
 n | }
 |  j |
 |
 d | ƒ} |  j d | d | ƒ} |  j | d	 t	 ƒ} |  j |
 d	 t	 ƒ} | röd |
 g | | g g  g  | | | | d g g  | f } | g } n’ d | g | | g g  g  | | | | d g g  | f } d |  j | g | d d d g g  | | g | | d g d | g | f } | | g } | r|  j |	 ƒ } xc t t | ƒ ƒ D]L } | | d d c | | 7<| | d j | ƒ | | d j d ƒ q°Wn  t | ƒ S(
   s”   
    Combined calculation of the Hermite polynomial H_n(z) (and its
    generalization to complex n) and the parabolic cylinder
    function D.
    i   g      à?i   i    i   i   t   precg      Ð¿t   exact(   t   _convert_paramt   convertt   mpq_1_2t   pit   isnpintt   ret   imR   t   fmult   Truet   sqrtt   fdivt   fnegt   expt   ranget   lent   appendt   tuple(   t   ctxt   nt   zt   parabolic_cylindert   ntypt   qt   T1t   can_use_2f0t   expprect   ut   wt   w2t   rw2t   nrw2t   nwt   termst   T2t   exput   i(    (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   _hermite_param   s@    
5%***99Mc            s"   ˆ  j  ‡  ‡ ‡ f d †  g  |  S(   Nc              s   t  ˆ  ˆ ˆ d ƒ S(   Ni    (   R(   (    (   R   R   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   <lambda>>   s    (   t	   hypercomb(   R   R   R   t   kwargs(    (   R   R   R   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   hermite<   s    c            s"   ˆ  j  ‡  ‡ ‡ f d †  g  |  S(   s8  
    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(   Ni   (   R(   (    (   R   R   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR)   v   s    (   R*   (   R   R   R   R+   (    (   R   R   R   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   pcfd@   s    6c         K   s-   |  j  | ƒ \ } } |  j | |  j | ƒ S(   så  
    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   t   aR   R+   R   t   _(    (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   pcfux   s    ,c            së   ˆ  j  | ƒ \ ‰ } ˆ  j ˆ ƒ ‰ ˆ  j ‰ ˆ  j ‰ | d k r¹ ˆ  j ˆ d ƒ r¹ ‡  ‡ ‡ ‡ ‡ f d †  } ˆ  j | g  |  } ˆ  j ˆ ƒ rµ ˆ  j ˆ ƒ rµ ˆ  j | ƒ } n  | S‡  ‡ ‡ ‡ f d †  } ˆ  j | ˆ g |  Sd S(   sÞ  
    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

    t   Qi   c             sù   ˆ  j  ˆ d d t ƒ}  t ˆ  ˆ ˆ ˆ d ƒ } t ˆ  ˆ ˆ |  d ƒ } xE | D]= } | d j d ƒ | d j d ƒ | d j ˆ ˆ ƒ qR Wˆ  j ˆ ˆ ˆ ƒ ˆ  j d ˆ  j ƒ } x0 | D]( } | d j | ƒ | d j d ƒ qÅ W| | S(   Ny              ð¿R   i   i    y              ð?i   i   (   R   R   R(   R   t   expjpiR   R   (   t   jzt   T1termst   T2termst   TR   (   R   R   R   t   rR   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   hÍ   s    +c   
         sv  ˆ  j  ˆ d ƒ } ˆ  j  ˆ d ƒ } ˆ  j | ƒ } ˆ  j ˆ ˆ  j | ƒ g } | ˆ |  ˆ ˆ d g ˆ ˆ |  g g  ˆ |  ˆ g ˆ g | f } | ˆ g ˆ |  ˆ ˆ d d g d ˆ ˆ |  g g  ˆ |  d ˆ g d ˆ g | f } ˆ  j ˆ ˆ |  ƒ \ } } | d j | ƒ | d j | ƒ x: | | f D], }	 |	 d j d ƒ |	 d j ˆ |  ƒ q<W| | f S(   Ng      Ð¿g      à?i   i    i   (   t   square_exp_argR   R   t   cospi_sinpiR   (
   R   R   R   t   et   lt   Y1t   Y2t   ct   st   Y(   R   R   R7   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   ß   s    F\N(   R   R   R   t   mpq_1_4t   isintR*   t   _is_real_typet   _re(   R   R.   R   R+   t   ntypeR8   t   v(    (   R   R   R   R7   R   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   pcfv§   s     		c            s|   ˆ  j  | ƒ \ ‰ } ˆ  j ˆ ƒ ‰ ‡  ‡ ‡ f d †  } ˆ  j | ƒ } ˆ  j ˆ ƒ rx ˆ  j ˆ ƒ rx ˆ  j | ƒ } n  | S(   sI  
    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   sF  ˆ  j  ˆ  j d ˆ  j ˆ ƒ ƒ }  ˆ  j d ˆ  j ˆ ƒ ˆ  j d ˆ  j ˆ ƒ d }  ˆ  j d d |  } ˆ  j d ˆ  j d ˆ  j ˆ ƒ ƒ ˆ  j ˆ  j ˆ ƒ } ˆ  j | d ƒ ˆ  j d ˆ  j ˆ ƒ } | ˆ  j | ƒ ˆ  j ˆ  j ˆ ˆ ˆ  j	 d ƒ ƒ V| ˆ  j | ƒ ˆ  j ˆ  j ˆ ˆ ˆ  j	 d ƒ ƒ Vd  S(   Ng      à?y               @i   i   i   g      Ð?g      Ð¿(
   t   argt   gammat   jt   loggammaR   R   R   t   expjR0   R2   (   t   phi2t   rhot   kt   C(   R   R   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR$     s    #6;+6(   R   R   t   sum_accuratelyRD   RE   (   R   R.   R   R+   R/   R$   RG   (    (   R   R   R   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   pcfwð   s    	c            s    |  j  ˆ  ƒ r d ˆ ˆ S|  j  ˆ  d ƒ rx |  j  ˆ d ƒ rP t d ƒ ‚ n  ‡ ‡ f d †  } |  j | ˆ  g |  S‡  ‡ f d †  } |  j | ˆ g |  S(   Ni    g      à?i   s#   Gegenbauer function with two limitsc      	      sW   d |  } g  g  ˆ  | g ˆ  d | g ˆ  ˆ  | g |  d g d d ˆ f } | g S(   Ni   i   g      à?(    (   R.   t   a2R6   (   R   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   =  s    
Fc      	      sW   d ˆ  } g  g  |  | g |  d | g |  |  | g ˆ  d g d d ˆ f } | g S(   Ni   i   g      à?(    (   R   RT   R6   (   R.   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   B  s    
F(   R   t   NotImplementedErrorR*   (   R   R   R.   R   R+   R8   (    (   R.   R   R   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt
   gegenbauer3  s    c            sº   |  j  ˆ  ƒ s: ‡  ‡ ‡ f d †  } |  j | | g |  S|  j ˆ ƒ st ‡ ‡ f d †  } |  j | | ˆ  g |  S|  j | ˆ  | ƒ |  j | d | ˆ  ˆ ˆ  d d ˆ d |  S(   Nc            sW   g  g  ˆ  |  d g |  d ˆ  d g |  ˆ  ˆ |  d g ˆ  d g d ˆ d f f S(   Ni   g      à?(    (   R   (   R.   t   bt   x(    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   K  s    c            sQ   g  g  ˆ  g |  d ˆ  |  g |  | ˆ  |  d g ˆ  d g ˆ d d f f S(   Ni   g      à?(    (   R   R.   (   RW   RX   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   O  s    i   i   (   R   R*   RC   t   binomialt   hyp2f1(   R   R   R.   RW   RX   R+   R8   (    (   R.   RW   RX   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   jacobiH  s    c            s(   ‡  ‡ f d †  } |  j  | | g |  S(   Nc            s@   g  g  |  ˆ  d g |  d ˆ  d g ˆ  g |  d g ˆ f f S(   Ni   (    (   R.   (   R   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   Z  s    (   R*   (   R   R   R.   R   R+   R8   (    (   R   R   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   laguerreU  s    c         K   s®   |  j  | ƒ rˆ t | ƒ } | | d k  d @rˆ | s9 | S|  j | ƒ } | d |  j d k  rc | S| d k  r… |  j | 7_ q… qˆ n  |  j | | d d d | d |  S(   Ni    i   iþÿÿÿi
   iûÿÿÿi   (   RC   t   intt   magR   RZ   (   R   R   RX   R+   R^   (    (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   legendre^  s    i   c            s¯   |  j  | ƒ } |  j  | ƒ } | s7 |  j | ˆ  |  S| d k rk ‡  f d †  } |  j | | | g |  S| d k rŸ ‡  f d †  } |  j | | | g |  St d ƒ ‚ d  S(   Ni   c      	      sb   | d } d ˆ  d ˆ  g | | g g  d | g |  |  d g d | g d d ˆ  f } | f S(   Ng      à?i   (    (   R   t   mt   gR6   (   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   w  s    
Qi   c      	      sb   | d } ˆ  d ˆ  d g | | g g  d | g |  |  d g d | g d d ˆ  f } | f S(   Ng      à?i   (    (   R   R`   Ra   R6   (   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   }  s    
Qs   requires type=2 or type=3(   R   R_   R*   t
   ValueError(   R   R   R`   R   t   typeR+   R8   (    (   R   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   legenpm  s    c            sþ   ˆ  j  | ƒ } ˆ  j  | ƒ } ˆ  j  ˆ ƒ ‰ ˆ d	 k r@ ˆ  j S| d k rw ‡  ‡ f d †  } ˆ  j | | | g |  S| d k rî t ˆ ƒ d k rÀ ‡  ‡ f d †  } ˆ  j | | | g |  S‡  ‡ f d †  } ˆ  j | | | g |  Sn  t d ƒ ‚ d  S(
   Ni   iÿÿÿÿi   c            s  ˆ  j  | ƒ \ } } 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(   Ni   i   iÿÿÿÿ(   R:   R   (   R   R`   t   cost   sinR@   R?   R.   RW   R   R   R   R%   (   R   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8     s    


,!=!i   c            s«   ˆ  j  | ƒ 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(   Ni   i   g      à?g      ø?iþÿÿÿ(   R2   R   (   R   R`   R   (   R   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   ¢  s
    )+8c   
         s  d ˆ  j  | ƒ ˆ  j } ˆ  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(   Ni   i   iÿÿÿÿ(   t   sinpiR   R2   (
   R   R`   R@   R?   R.   RW   R   R   R   R%   (   R   R   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   «  s    


,!C!s   requires type=2 or type=3(   i   iÿÿÿÿ(   R   t   nanR*   t   absRb   (   R   R   R`   R   Rc   R+   R8   (    (   R   R   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   legenq„  s    c         K   s_   | r= |  j  | ƒ r= t |  j | ƒ ƒ d d k r= | d S|  j | | d d | d |  S(   Ni   i   i    (   i   i   (   RC   R]   RE   RZ   (   R   R   RX   R+   (    (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   chebytº  s    5c         K   sk   | r= |  j  | ƒ r= t |  j | ƒ ƒ d d k r= | d S| d |  j | | d d d | d |  S(   Ni   i   i    i   (   i   i   (   RC   R]   RE   RZ   (   R   R   RX   R+   (    (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   chebyuÀ  s    5c   
         s:  ˆ  j  | ƒ } ˆ  j  | ƒ } ˆ  j  ˆ ƒ ‰ ˆ  j  ˆ ƒ ‰ ˆ  j | ƒ } | oZ | d k } ˆ  j | ƒ } | r¢ | d k  r¢ | r¢ ˆ  j | d | ˆ ˆ |  Sˆ d k rË | rË | d k  rË ˆ  j d S| r| rt | ƒ | k rô ˆ  j d S‡  ‡ ‡ f d †  }	 n ‡  ‡ ‡ f d †  }	 ˆ  j |	 | | g |  S(   Ni    i   y              ð?c      	      sô   t  | ƒ } d ˆ  j | ˆ ƒ d |  d ˆ  j |  | ƒ ˆ  j ˆ  j |  | ƒ ˆ  j ˆ ƒ d ˆ  j | ƒ d g } d | ˆ  j | ƒ d d d d | d | d g } | | g  g  | |  |  | d g | d g ˆ  j d ˆ ƒ d f f S(   Niÿÿÿÿi   i   g      à?(   Ri   RM   t   facR   Rf   t   sign(   R<   R`   t   absmRQ   t   P(   R   t   phit   theta(    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   Ø  s    46+c            s7  ˆ  j  |  | d ƒ sA ˆ  j  |  | d ƒ sA ˆ  j  d | ƒ rc d g d g g  g  g  g  d f f Sˆ  j d ˆ ƒ \ } } d ˆ  j | ˆ ƒ d |  d ˆ  j ˆ  j |  | d ƒ ˆ  j |  | d ƒ | d | d g } d d d d d | d | g } | | g  d | g |  |  d g d | g | d f f S(   Ni   i    iÿÿÿÿg      à?i   g      à¿(   R   t   cos_sinRM   R   RJ   (   R<   R`   Re   Rf   RQ   Rp   (   R   Rq   Rr   (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyR8   ä  s    A"&( (   R   RC   t	   spherharmt   zeroRi   R*   (
   R   R<   R`   Rr   Rq   R+   t   l_isintt	   l_naturalt   m_isintR8   (    (   R   Rq   Rr   s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyRt   Æ  s"    	N(   t	   functionsR    R   R(   R,   R-   R0   RH   RS   RV   R[   R\   R_   Rd   Rj   Rk   Rl   Rt   (    (    (    s:   lib/python2.7/site-packages/mpmath/functions/orthogonal.pyt   <module>   s"   	98/IC	5