
    oVh6                       d Z ddl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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mZ ddlmZ ddlmZmZm Z  ddl!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 dBdZ9 G d de      Z: G d de      Z; G d de      Z< G d de      Z= G d de      Z> G d  d!e      Z? G d" d#e      Z@ G d$ d%e      ZA G d& d'e      ZBd( ZC G d) d*e      ZD G d+ d,e      ZE G d- d.e      ZF G d/ d0eF      ZG G d1 d2eF      ZH G d3 d4eF      ZI G d5 d6eF      ZJ G d7 d8e      ZK G d9 d:eK      ZL G d; d<eK      ZM G d= d>e      ZN G d? d@e      ZOyA)Cz This module contains various functions that are special cases
    of incomplete gamma functions. It should probably be renamed.     )
EulerGamma)Add)cacheit)DefinedFunctionArgumentIndexError
expand_mul)fuzzy_or)IpiRationalInteger)is_eq)Pow)S)Dummyuniquely_named_symbol)sympify)	factorial
factorial2RisingFactorial)
polar_liftre
unpolarify)ceilingfloor)sqrtroot)explog	exp_polar)coshsinh)cossinsinc)hypermeijergc                 R   | j                   d   j                  r<|r(d|d<    | j                  |fi |t        j                  fS | t        j                  fS |r2 | j                   d   j                  |fi |j                         \  }}n | j                   d   j                         \  }}| j                  |t        |z  z         | j                  |t        |z  z
        z   dz  }| j                  |t        |z  z         | j                  |t        |z  z
        z
  dt        z  z  }||fS )Nr   Fcomplex   )argsis_extended_realexpandr   Zeroas_real_imagfuncr
   )selfdeephintsxyr   ims          W/home/dcms/DCMS/lib/python3.12/site-packages/sympy/functions/special/error_functions.pyreal_to_real_as_real_imagr8      s   yy|$$$E)DKK..77!&&>!"tyy|""4151>>@1yy|((*1
))A!G
tyyQqS1
11	4B
))A!G
tyyQqS1
1AaC	8B8O    c                        e Zd ZdZdZddZddZed        Ze	e
d               Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Z fdZeZ xZ S )erfa.  
    The Gauss error function.

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

    This function is defined as:

    .. math ::
        \mathrm{erf}(x) = \frac{2}{\sqrt{\pi}} \int_0^x e^{-t^2} \mathrm{d}t.

    Examples
    ========

    >>> from sympy import I, oo, erf
    >>> from sympy.abc import z

    Several special values are known:

    >>> erf(0)
    0
    >>> erf(oo)
    1
    >>> erf(-oo)
    -1
    >>> erf(I*oo)
    oo*I
    >>> erf(-I*oo)
    -oo*I

    In general one can pull out factors of -1 and $I$ from the argument:

    >>> erf(-z)
    -erf(z)

    The error function obeys the mirror symmetry:

    >>> from sympy import conjugate
    >>> conjugate(erf(z))
    erf(conjugate(z))

    Differentiation with respect to $z$ is supported:

    >>> from sympy import diff
    >>> diff(erf(z), z)
    2*exp(-z**2)/sqrt(pi)

    We can numerically evaluate the error function to arbitrary precision
    on the whole complex plane:

    >>> erf(4).evalf(30)
    0.999999984582742099719981147840

    >>> erf(-4*I).evalf(30)
    -1296959.73071763923152794095062*I

    See Also
    ========

    erfc: Complementary error function.
    erfi: Imaginary error function.
    erf2: Two-argument error function.
    erfinv: Inverse error function.
    erfcinv: Inverse Complementary error function.
    erf2inv: Inverse two-argument error function.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Error_function
    .. [2] https://dlmf.nist.gov/7
    .. [3] https://mathworld.wolfram.com/Erf.html
    .. [4] https://functions.wolfram.com/GammaBetaErf/Erf

    Tc                     |dk(  r/dt        | j                  d   dz         z  t        t              z  S t	        | |      N   r*   r   r   r+   r   r   r   r1   argindexs     r7   fdiffz	erf.fdiff   s>    q=S$))A,/)**4833$T844r9   c                     t         S z8
        Returns the inverse of this function.

        erfinvr@   s     r7   inversezerf.inverse   s	    
 r9   c                    |j                   r|t        j                  u rt        j                  S |t        j                  u rt        j                  S |t        j
                  u rt        j                  S |j                  rt        j                  S t        |t              r|j                  d   S t        |t              r t        j                  |j                  d   z
  S |j                  rt        j                  S t        |t              r(|j                  d   j                  r|j                  d   S |j                  t              }|t        j                  t        j
                  fv r|S |j!                         r
 | |        S y Nr   r>   )	is_Numberr   NaNInfinityOneNegativeInfinityNegativeOneis_zeror.   
isinstancerF   r+   erfcinverf2invextract_multiplicativelyr
   could_extract_minus_signclsargts      r7   evalzerf.eval   s   ==aee|uu

"uu***}}$vvc6"88A;c7#55388A;&&;;66M c7#(;(;88A; ((+Q//00J '')I: *r9   c                 H   | dk  s| dz  dk(  rt         j                  S t        |      }t        | dz
  t        d      z        }t	        |      dkD  r|d    |dz  z  | dz
  z  | |z  z  S dt         j
                  |z  z  || z  z  | t        |      z  t        t              z  z  S Nr   r*   r>   )	r   r.   r   r   lenrO   r   r   r   nr4   previous_termsks       r7   taylor_termzerf.taylor_term   s     q5AEQJ66M
Aq1uadl#A>"Q&&r**QT1QU;QqSAA))AqD0!IaL.b2IJJr9   c                 Z    | j                  | j                  d   j                               S Nr   r0   r+   	conjugater1   s    r7   _eval_conjugatezerf._eval_conjugate   "    yy1//122r9   c                 <    | j                   d   j                  du ryy Nr   Tr+   r,   rh   s    r7   _eval_is_realzerf._eval_is_real   s     99Q<((D0 1r9   c                 <    | j                   d   j                  du ryy rl   )r+   is_imaginaryrh   s    r7   _eval_is_imaginaryzerf._eval_is_imaginary   s     99Q<$$, -r9   c                 b    | j                   d   }t        |j                  |j                  g      S re   )r+   r	   	is_finiter,   r1   zs     r7   _eval_is_finitezerf._eval_is_finite   s)    IIaLa&8&89::r9   c                 l    | j                   d   j                  du r| j                   d   j                  S y rl   )r+   r,   rP   rh   s    r7   _eval_is_zerozerf._eval_is_zero   s1    99Q<((D099Q<''' 1r9   c                 l    | j                   d   j                  du r| j                   d   j                  S y rl   )r+   r,   is_extended_positiverh   s    r7   _eval_is_positivezerf._eval_is_positive   1    99Q<((D099Q<444 1r9   c                 l    | j                   d   j                  du r| j                   d   j                  S y rl   )r+   r,   is_extended_negativerh   s    r7   _eval_is_negativezerf._eval_is_negative   r|   r9   c                     ddl m} t        |dz        |z  t        j                   |t        j
                  |dz        t        t              z  z
  z  S Nr   
uppergammar*   'sympy.functions.special.gamma_functionsr   r   r   rM   Halfr   r1   ru   kwargsr   s       r7   _eval_rewrite_as_uppergammazerf._eval_rewrite_as_uppergamma   s=    FAqDz!|QUUZ1%=d2h%FFGGr9   c                     t         j                  t        z
  |z  t        t              z  }t         j                  t        z   t        |      t        t        |      z  z
  z  S Nr   rM   r
   r   r   fresnelcfresnelsr1   ru   r   rX   s       r7   _eval_rewrite_as_fresnelszerf._eval_rewrite_as_fresnels   @    uuqy!mDH$	HSMAhsmO;<<r9   c                     t         j                  t        z
  |z  t        t              z  }t         j                  t        z   t        |      t        t        |      z  z
  z  S r   r   r   s       r7   _eval_rewrite_as_fresnelczerf._eval_rewrite_as_fresnelc   r   r9   c           
          |t        t              z  t        t        j                  gg dgt        dd      g|dz        z  S Nr   r*   r   r   r'   r   r   r   r1   ru   r   s      r7   _eval_rewrite_as_meijergzerf._eval_rewrite_as_meijerg   s7    bz'166(Bhr1o5F1MMMr9   c                     d|z  t        t              z  t        t        j                  gdt        j                  z  g|dz         z  S Nr*      r   r   r&   r   r   r   s      r7   _eval_rewrite_as_hyperzerf._eval_rewrite_as_hyper   s8    s48|E166(QqvvXJA>>>r9   c                     t        |dz        |z  |t        t        j                  |dz        z  t        t              z  z
  S Nr*   r   expintr   r   r   r   s      r7   _eval_rewrite_as_expintzerf._eval_rewrite_as_expint   s6    AqDz!|aqvvq!t 44T"X===r9   c                    ddl m} |rW |||t        j                        }|t        j                  u r-t        j
                  t        |       t        |dz         z  z   S t        j                  t        |      t        |dz         z  z
  S )Nr   )limitr*   )	sympy.series.limitsr   r   rL   rN   rO   _erfsr   rM   )r1   ru   limitvarr   r   lims         r7   _eval_rewrite_as_tractablezerf._eval_rewrite_as_tractable   sn    -8QZZ0Ca(((}}uaRyadU';;;uuuQxQTE
***r9   c                 :    t         j                  t        |      z
  S r   )r   rM   erfcr   s      r7   _eval_rewrite_as_erfczerf._eval_rewrite_as_erfc   s    uutAwr9   c                 6    t          t        t         |z        z  S r   r
   erfir   s      r7   _eval_rewrite_as_erfizerf._eval_rewrite_as_erfi   s    r$qs)|r9   c                 B   | j                   d   j                  |||      }|j                  |d      }|t        j                  u r|j                  |d|dk(  rdnd      }||j                  v r!|j                  rd|z  t        t              z  S | j                  |      S )Nr   logxcdirr   -+dirr*   )r+   as_leading_termsubsr   ComplexInfinityr   free_symbolsrP   r   r   r0   r1   r4   r   r   rX   arg0s         r7   _eval_as_leading_termzerf._eval_as_leading_term   s    iil**14d*Cxx1~1$$$99Qdbjsc9BD   T\\S5b>!99T?"r9   c                 t   ddl m} |d   }|t        j                  t        j                  fv r| j
                  d   }	 |j                  |      \  }}	|	 }	|	j                  rt        ||	z        }
t        |
      D cg c]9  }t        j                  |z  t        d|z  dz
        z  |d|z  dz   z  d|z  z  z  ; c} |d||
z  z  |      gz   }t        j                  t        |dz         t!        t"              z  t%        | z  z
  S t&        t(        | W  ||||      S # t        t        f$ r | cY S w xY wc c}w Nr   Orderr*   r>   )sympy.series.orderr   r   rL   rN   r+   leadterm
ValueErrorNotImplementedErroris_positiver   rangerO   r   rM   r   r   r   r   superr;   _eval_aseries)r1   r`   args0r4   r   r   pointru   _exnewnrb   s	__class__s                r7   r   zerf._eval_aseries  s6   ,aQZZ!3!344		!A

12 B~~qt}#Dk+ ]]A%
1Q37(;;q1Q37|aQRd?RS +.3AagIq.A-BCuuQTE
48 3sAw>>>S$-a4@@  34 +s   D =>D5D21D2r>   r   )!__name__
__module____qualname____doc__
unbranchedrB   rG   classmethodrZ   staticmethodr   rc   ri   rn   rq   rv   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r8   r/   __classcell__r   s   @r7   r;   r;   1   s    JX J5  B 	K  	K3;(55H==N?>+	#A* -Lr9   r;   c                       e Zd ZdZdZddZddZed        Ze	e
d               Zd Zd Zdd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeZd Zy	)r   a&  
    Complementary Error Function.

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

    The function is defined as:

    .. math ::
        \mathrm{erfc}(x) = \frac{2}{\sqrt{\pi}} \int_x^\infty e^{-t^2} \mathrm{d}t

    Examples
    ========

    >>> from sympy import I, oo, erfc
    >>> from sympy.abc import z

    Several special values are known:

    >>> erfc(0)
    1
    >>> erfc(oo)
    0
    >>> erfc(-oo)
    2
    >>> erfc(I*oo)
    -oo*I
    >>> erfc(-I*oo)
    oo*I

    The error function obeys the mirror symmetry:

    >>> from sympy import conjugate
    >>> conjugate(erfc(z))
    erfc(conjugate(z))

    Differentiation with respect to $z$ is supported:

    >>> from sympy import diff
    >>> diff(erfc(z), z)
    -2*exp(-z**2)/sqrt(pi)

    It also follows

    >>> erfc(-z)
    2 - erfc(z)

    We can numerically evaluate the complementary error function to arbitrary
    precision on the whole complex plane:

    >>> erfc(4).evalf(30)
    0.0000000154172579002800188521596734869

    >>> erfc(4*I).evalf(30)
    1.0 - 1296959.73071763923152794095062*I

    See Also
    ========

    erf: Gaussian error function.
    erfi: Imaginary error function.
    erf2: Two-argument error function.
    erfinv: Inverse error function.
    erfcinv: Inverse Complementary error function.
    erf2inv: Inverse two-argument error function.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Error_function
    .. [2] https://dlmf.nist.gov/7
    .. [3] https://mathworld.wolfram.com/Erfc.html
    .. [4] https://functions.wolfram.com/GammaBetaErf/Erfc

    Tc                     |dk(  r/dt        | j                  d   dz         z  t        t              z  S t	        | |      )Nr>   r]   r   r*   r?   r@   s     r7   rB   z
erfc.fdiffo  s>    q=c499Q<?*++DH44$T844r9   c                     t         S rD   rR   r@   s     r7   rG   zerfc.inverseu  s	    
 r9   c                 ^   |j                   r`|t        j                  u rt        j                  S |t        j                  u rt        j                  S |j
                  rt        j                  S t        |t              r t        j                  |j                  d   z
  S t        |t              r|j                  d   S |j
                  rt        j                  S |j                  t              }|t        j                  t        j                  fv r| S |j                         rd | |       z
  S y Nr   r*   )rJ   r   rK   rL   r.   rP   rM   rQ   rF   r+   rR   rT   r
   rN   rU   rV   s      r7   rZ   z	erfc.eval|  s    ==aee|uu

"vvuuc6"55388A;&&c7#88A;;;55L ((+Q//004K '')sC4y=  *r9   c                 r   | dk(  rt         j                  S | dk  s| dz  dk(  rt         j                  S t        |      }t	        | dz
  t        d      z        }t        |      dkD  r|d    |dz  z  | dz
  z  | |z  z  S dt         j                  |z  z  || z  z  | t        |      z  t        t              z  z  S r\   )
r   rM   r.   r   r   r^   rO   r   r   r   r_   s       r7   rc   zerfc.taylor_term  s     655LUa!eqj66M
Aq1uadl#A>"Q&&r**QT1QU;QqSAA!--**QT11Yq\>$r(3JKKr9   c                 Z    | j                  | j                  d   j                               S re   rf   rh   s    r7   ri   zerfc._eval_conjugate  rj   r9   c                 t    | j                   d   j                  du ry| j                   d   j                  du ryy )Nr   TF)r+   r,   rp   rh   s    r7   rn   zerfc._eval_is_real  s9    99Q<((D099Q<$$, -r9   Nc                 P    | j                  t              j                  dd|      S N	tractableT)r2   r   rewriter;   r1   ru   r   r   s       r7   r   zerfc._eval_rewrite_as_tractable  #    ||C ((4((SSr9   c                 :    t         j                  t        |      z
  S r   )r   rM   r;   r   s      r7   _eval_rewrite_as_erfzerfc._eval_rewrite_as_erf  s    uus1v~r9   c                 V    t         j                  t        t        t        |z        z  z   S r   )r   rM   r
   r   r   s      r7   r   zerfc._eval_rewrite_as_erfi  s    uuqac{""r9   c                     t         j                  t        z
  |z  t        t              z  }t         j                  t         j                  t        z   t        |      t        t        |      z  z
  z  z
  S r   r   r   s       r7   r   zerfc._eval_rewrite_as_fresnels  sI    uuqy!mDH$uu	HSMAhsmO$CDDDr9   c                     t         j                  t        z
  |z  t        t              z  }t         j                  t         j                  t        z   t        |      t        t        |      z  z
  z  z
  S r   r   r   s       r7   r   zerfc._eval_rewrite_as_fresnelc  sI    uuQwk$r("uu	HSMAhsmO$CDDDr9   c                     t         j                  |t        t              z  t	        t         j
                  gg dgt        dd      g|dz        z  z
  S r   )r   rM   r   r   r'   r   r   r   s      r7   r   zerfc._eval_rewrite_as_meijerg  sC    uuqbz'166(Bhr1o=NPQSTPT"UUUUr9   c                     t         j                  d|z  t        t              z  t	        t         j
                  gdt         j
                  z  g|dz         z  z
  S r   )r   rM   r   r   r&   r   r   s      r7   r   zerfc._eval_rewrite_as_hyper  sA    uuqs48|E166(QqvvXJA$FFFFr9   c                     ddl m} t        j                  t	        |dz        |z  t        j                   |t        j
                  |dz        t	        t              z  z
  z  z
  S r   )r   r   r   rM   r   r   r   r   s       r7   r   z erfc._eval_rewrite_as_uppergamma  sF    FuutAqDz!|QUUZ1-Ed2h-N%NOOOr9   c                     t         j                  t        |dz        |z  z
  |t        t         j                  |dz        z  t        t
              z  z   S r   )r   rM   r   r   r   r   r   s      r7   r   zerfc._eval_rewrite_as_expint  s?    uutAqDz!|#aqvvq!t(<&<T"X&EEEr9   c                 ,    | j                  t              S r   r   r1   r3   s     r7   _eval_expand_funczerfc._eval_expand_func      ||C  r9   c                    | j                   d   j                  |||      }|j                  |d      }|t        j                  u r|j                  |d|dk(  rdnd      }|j                  rt        j                  S | j                  |      S )Nr   r   r   r   r   r   )	r+   r   r   r   r   r   rP   rM   r0   r   s         r7   r   zerfc._eval_as_leading_term  sx    iil**14d*Cxx1~1$$$99Qdbjsc9BD<<55L99T?"r9   c                 l    t         j                  t        | j                   j	                  ||||      z
  S r   )r   rM   r;   r+   r   )r1   r`   r   r4   r   s        r7   r   zerfc._eval_aseries  s*    uusDII44Qq$GGGr9   r   r   )r   r   r   r   r   rB   rG   r   rZ   r   r   rc   ri   rn   r   r   r   r   r   r   r   r   r   r   r   r8   r/   r    r9   r7   r   r      s    JX J5 ! !6 L  L3T#EEVGPF!	# -LHr9   r   c                        e Zd ZdZdZddZed        Zee	d               Z
d Zd Zd Zdd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZeZd Z fdZ xZS )r   a  
    Imaginary error function.

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

    The function erfi is defined as:

    .. math ::
        \mathrm{erfi}(x) = \frac{2}{\sqrt{\pi}} \int_0^x e^{t^2} \mathrm{d}t

    Examples
    ========

    >>> from sympy import I, oo, erfi
    >>> from sympy.abc import z

    Several special values are known:

    >>> erfi(0)
    0
    >>> erfi(oo)
    oo
    >>> erfi(-oo)
    -oo
    >>> erfi(I*oo)
    I
    >>> erfi(-I*oo)
    -I

    In general one can pull out factors of -1 and $I$ from the argument:

    >>> erfi(-z)
    -erfi(z)

    >>> from sympy import conjugate
    >>> conjugate(erfi(z))
    erfi(conjugate(z))

    Differentiation with respect to $z$ is supported:

    >>> from sympy import diff
    >>> diff(erfi(z), z)
    2*exp(z**2)/sqrt(pi)

    We can numerically evaluate the imaginary error function to arbitrary
    precision on the whole complex plane:

    >>> erfi(2).evalf(30)
    18.5648024145755525987042919132

    >>> erfi(-2*I).evalf(30)
    -0.995322265018952734162069256367*I

    See Also
    ========

    erf: Gaussian error function.
    erfc: Complementary error function.
    erf2: Two-argument error function.
    erfinv: Inverse error function.
    erfcinv: Inverse Complementary error function.
    erf2inv: Inverse two-argument error function.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Error_function
    .. [2] https://mathworld.wolfram.com/Erfi.html
    .. [3] https://functions.wolfram.com/GammaBetaErf/Erfi

    Tc                     |dk(  r.dt        | j                  d   dz        z  t        t              z  S t	        | |      r=   r?   r@   s     r7   rB   z
erfi.fdiff.  s;    q=S1q))$r(22$T844r9   c                    |j                   r`|t        j                  u rt        j                  S |j                  rt        j                  S |t        j
                  u rt        j
                  S |j                  rt        j                  S |j                         r
 | |        S |j                  t              }||t        j
                  u rt        S t        |t              rt        |j                  d   z  S t        |t              r't        t        j                  |j                  d   z
  z  S t        |t              r0|j                  d   j                  rt        |j                  d   z  S y y y rI   )rJ   r   rK   rP   r.   rL   rU   rT   r
   rQ   rF   r+   rR   rM   rS   rW   ru   nzs      r7   rZ   z	erfi.eval4  s   ;;AEEzuuvvajjzz!9966M %%'G8O ''*>QZZ"f%|#"g&!%%"''!*,--"g&2771:+=+=|# ,>& r9   c                    | dk  s| dz  dk(  rt         j                  S t        |      }t        | dz
  t        d      z        }t	        |      dkD  r|d   |dz  z  | dz
  z  | |z  z  S d|| z  z  | t        |      z  t        t              z  z  S r\   )r   r.   r   r   r^   r   r   r   r_   s       r7   rc   zerfi.taylor_termR  s     q5AEQJ66M
Aq1uadl#A>"Q&%b)AqD0AE:AaC@@1a4x9Q<R!899r9   c                 Z    | j                  | j                  d   j                               S re   rf   rh   s    r7   ri   zerfi._eval_conjugate_  rj   r9   c                 4    | j                   d   j                  S re   rm   rh   s    r7   _eval_is_extended_realzerfi._eval_is_extended_realb      yy|,,,r9   c                 4    | j                   d   j                  S re   r+   rP   rh   s    r7   rx   zerfi._eval_is_zeroe      yy|###r9   c                 P    | j                  t              j                  dd|      S r   r   r   s       r7   r   zerfi._eval_rewrite_as_tractableh  r   r9   c                 6    t          t        t         |z        z  S r   )r
   r;   r   s      r7   r   zerfi._eval_rewrite_as_erfk  s    r#ac({r9   c                 B    t         t        t         |z        z  t         z
  S r   )r
   r   r   s      r7   r   zerfi._eval_rewrite_as_erfcn  s    ac{Qr9   c                     t         j                  t        z   |z  t        t              z  }t         j                  t        z
  t        |      t        t        |      z  z
  z  S r   r   r   s       r7   r   zerfi._eval_rewrite_as_fresnelsq  r   r9   c                     t         j                  t        z   |z  t        t              z  }t         j                  t        z
  t        |      t        t        |      z  z
  z  S r   r   r   s       r7   r   zerfi._eval_rewrite_as_fresnelcu  r   r9   c           
          |t        t              z  t        t        j                  gg dgt        dd      g|dz         z  S r   r   r   s      r7   r   zerfi._eval_rewrite_as_meijergy  s9    bz'166(Bhr1o5FANNNr9   c                     d|z  t        t              z  t        t        j                  gdt        j                  z  g|dz        z  S r   r   r   s      r7   r   zerfi._eval_rewrite_as_hyper|  s6    s48|E166(QqvvXJ1===r9   c                     ddl m} t        |dz         |z   |t        j                  |dz         t        t
              z  t        j                  z
  z  S r   )r   r   r   r   r   r   rM   r   s       r7   r   z erfi._eval_rewrite_as_uppergamma  sA    FQTE{1}j!Q$7R@155HIIr9   c                     t        |dz         |z  |t        t        j                  |dz         z  t        t              z  z
  S r   r   r   s      r7   r   zerfi._eval_rewrite_as_expint  s:    QTE{1}qA!66tBx???r9   c                 ,    | j                  t              S r   r   r   s     r7   r   zerfi._eval_expand_func  r   r9   c                 "   | j                   d   j                  |||      }|j                  |d      }||j                  v r!|j                  rd|z  t        t              z  S |j                  r| j                  |      S | j                  |      S )Nr   r   r*   )	r+   r   r   r   rP   r   r   rs   r0   r   s         r7   r   zerfi._eval_as_leading_term  sy    iil**14d*Cxx1~   T\\S5b>!^^99T?"yy~r9   c                    ddl m} |d   }|t        j                  u r| j                  d   }t        |      D cg c]%  }t        d|z  dz
        d|z  |d|z  dz   z  z  z  ' c} |d||z  z  |      gz   }	t         t        |dz        t        t              z  t        |	 z  z   S t        t        | ;  ||||      S c c}w r   )r   r   r   rL   r+   r   r   r
   r   r   r   r   r   r   r   r1   r`   r   r4   r   r   r   ru   rb   r   r   s             r7   r   zerfi._eval_aseries  s    ,aAJJ		!A"1X' AaC!G$1q1Q37|(;< '*/!Q$*:);<A2QT48+sAw666T4.q%DAA	's   *B>r   r   )r   r   r   r   r   rB   r   rZ   r   r   rc   ri   r  rx   r   r   r   r   r   r   r   r   r   r   r8   r/   r   r   r   r   s   @r7   r   r     s    GR J5 $ $: 	:  	:3-$T==O>J@! -L
B 
Br9   r   c                   t    e Zd ZdZd Zed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)erf2a?  
    Two-argument error function.

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

    This function is defined as:

    .. math ::
        \mathrm{erf2}(x, y) = \frac{2}{\sqrt{\pi}} \int_x^y e^{-t^2} \mathrm{d}t

    Examples
    ========

    >>> from sympy import oo, erf2
    >>> from sympy.abc import x, y

    Several special values are known:

    >>> erf2(0, 0)
    0
    >>> erf2(x, x)
    0
    >>> erf2(x, oo)
    1 - erf(x)
    >>> erf2(x, -oo)
    -erf(x) - 1
    >>> erf2(oo, y)
    erf(y) - 1
    >>> erf2(-oo, y)
    erf(y) + 1

    In general one can pull out factors of -1:

    >>> erf2(-x, -y)
    -erf2(x, y)

    The error function obeys the mirror symmetry:

    >>> from sympy import conjugate
    >>> conjugate(erf2(x, y))
    erf2(conjugate(x), conjugate(y))

    Differentiation with respect to $x$, $y$ is supported:

    >>> from sympy import diff
    >>> diff(erf2(x, y), x)
    -2*exp(-x**2)/sqrt(pi)
    >>> diff(erf2(x, y), y)
    2*exp(-y**2)/sqrt(pi)

    See Also
    ========

    erf: Gaussian error function.
    erfc: Complementary error function.
    erfi: Imaginary error function.
    erfinv: Inverse error function.
    erfcinv: Inverse Complementary error function.
    erf2inv: Inverse two-argument error function.

    References
    ==========

    .. [1] https://functions.wolfram.com/GammaBetaErf/Erf2/

    c                     | j                   \  }}|dk(  r"dt        |dz         z  t        t              z  S |dk(  r"dt        |dz         z  t        t              z  S t	        | |      )Nr>   r]   r*   )r+   r   r   r   r   r1   rA   r4   r5   s       r7   rB   z
erf2.fdiff  sd    yy1q=c1a4%j=b))]S!Q$Z<R(($T844r9   c                    t         j                  t         j                  t         j                  f}|t         j                  u s|t         j                  u rt         j                  S ||k(  rt         j                  S ||v s||v rt        |      t        |      z
  S t        |t              r!|j                  d   |k(  r|j                  d   S |j                  s<|j                  s0|j                  r|j                  s|j                  r#|j                  rt        |      t        |      z
  S |j                         }|j                         }|r|r | | |        S |s|rt        |      t        |      z
  S y rI   )r   rL   rN   r.   rK   r;   rQ   rS   r+   rP   r,   is_infiniterU   )rW   r4   r5   chksign_xsign_ys         r7   rZ   z	erf2.eval  s   zz1--qvv6:aee55L!V66M#Xcq6CF?"a!affQi1n66!999		Q%7%7AMM""q}}q6CF?" ++-++-vQBK<q6#a&=  r9   c                     | j                  | j                  d   j                         | j                  d   j                               S rI   rf   rh   s    r7   ri   zerf2._eval_conjugate
  s5    yy1//1499Q<3I3I3KLLr9   c                 j    | j                   d   j                  xr | j                   d   j                  S rI   rm   rh   s    r7   r  zerf2._eval_is_extended_real  s)    yy|,,N11N1NNr9   c                 0    t        |      t        |      z
  S r   r;   r1   r4   r5   r   s       r7   r   zerf2._eval_rewrite_as_erf  s    1vAr9   c                 0    t        |      t        |      z
  S r   r   r%  s       r7   r   zerf2._eval_rewrite_as_erfc  s    Awa  r9   c                 Z    t         t        t         |z        t        t         |z        z
  z  S r   r   r%  s       r7   r   zerf2._eval_rewrite_as_erfi  s"    $qs)D1I%&&r9   c                 |    t        |      j                  t              t        |      j                  t              z
  S r   )r;   r   r   r%  s       r7   r   zerf2._eval_rewrite_as_fresnels  '    1v~~h'#a&..*BBBr9   c                 |    t        |      j                  t              t        |      j                  t              z
  S r   )r;   r   r   r%  s       r7   r   zerf2._eval_rewrite_as_fresnelc  r*  r9   c                 |    t        |      j                  t              t        |      j                  t              z
  S r   )r;   r   r'   r%  s       r7   r   zerf2._eval_rewrite_as_meijerg  s'    1v~~g&Q)@@@r9   c                 |    t        |      j                  t              t        |      j                  t              z
  S r   )r;   r   r&   r%  s       r7   r   zerf2._eval_rewrite_as_hyper"  s'    1v~~e$s1v~~e'<<<r9   c                 D   ddl m} t        |dz        |z  t        j                   |t        j
                  |dz        t        t              z  z
  z  t        |dz        |z  t        j                   |t        j
                  |dz        t        t              z  z
  z  z
  S r   r   )r1   r4   r5   r   r   s        r7   r   z erf2._eval_rewrite_as_uppergamma%  s{    FQT
1aeejA&>tBx&GGHAJqL!%%*QVVQT":48"CCDE 	Fr9   c                 |    t        |      j                  t              t        |      j                  t              z
  S r   )r;   r   r   r%  s       r7   r   zerf2._eval_rewrite_as_expint*  s'    1v~~f%Av(>>>r9   c                 ,    | j                  t              S r   r   r   s     r7   r   zerf2._eval_expand_func-  r   r9   c                 &    t        | j                   S r   )r   r+   rh   s    r7   rx   zerf2._eval_is_zero0  s    dii  r9   N)r   r   r   r   rB   r   rZ   ri   r  r   r   r   r   r   r   r   r   r   r   rx   r   r9   r7   r  r    si    BJ5 ! !0MO!'CCA=F
?!!r9   r  c                   <    e Zd ZdZddZddZed        Zd Zd Z	y)	rF   aR  
    Inverse Error Function. The erfinv function is defined as:

    .. math ::
        \mathrm{erf}(x) = y \quad \Rightarrow \quad \mathrm{erfinv}(y) = x

    Examples
    ========

    >>> from sympy import erfinv
    >>> from sympy.abc import x

    Several special values are known:

    >>> erfinv(0)
    0
    >>> erfinv(1)
    oo

    Differentiation with respect to $x$ is supported:

    >>> from sympy import diff
    >>> diff(erfinv(x), x)
    sqrt(pi)*exp(erfinv(x)**2)/2

    We can numerically evaluate the inverse error function to arbitrary
    precision on [-1, 1]:

    >>> erfinv(0.2).evalf(30)
    0.179143454621291692285822705344

    See Also
    ========

    erf: Gaussian error function.
    erfc: Complementary error function.
    erfi: Imaginary error function.
    erf2: Two-argument error function.
    erfcinv: Inverse Complementary error function.
    erf2inv: Inverse two-argument error function.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Error_function#Inverse_functions
    .. [2] https://functions.wolfram.com/GammaBetaErf/InverseErf/

    c                     |dk(  rKt        t              t        | j                  | j                  d         dz        z  t
        j                  z  S t        | |      Nr>   r   r*   r   r   r   r0   r+   r   r   r   r@   s     r7   rB   zerfinv.fdifff  sI    q=8C		$))A, 7 :;;AFFBB$T844r9   c                     t         S rD   r$  r@   s     r7   rG   zerfinv.inversel  s	    
 
r9   c                 L   |t         j                  u rt         j                  S |t         j                  u rt         j                  S |j                  rt         j
                  S |t         j                  u rt         j                  S t        |t              r(|j                  d   j                  r|j                  d   S |j                  rt         j
                  S |j                  d      }|;t        |t              r*|j                  d   j                  r|j                  d    S y y y Nr   r   )r   rK   rO   rN   rP   r.   rM   rL   rQ   r;   r+   r,   rT   r  s      r7   rZ   zerfinv.evals  s    :55L!--%%%YY66M!%%Z::a!&&)"<"<66!99966M ''+>z"c2
7T7TGGAJ; 8U2>r9   c                     t        d|z
        S Nr>   r   r   s      r7   _eval_rewrite_as_erfcinvzerfinv._eval_rewrite_as_erfcinv  s    qs|r9   c                 4    | j                   d   j                  S re   r	  rh   s    r7   rx   zerfinv._eval_is_zero  r
  r9   Nr   )
r   r   r   r   rB   rG   r   rZ   r;  rx   r   r9   r7   rF   rF   3  s0    /d5  *$r9   rF   c                   B    e Zd ZdZd	dZd	dZed        Zd Zd Z	d Z
y)
rR   a  
    Inverse Complementary Error Function. The erfcinv function is defined as:

    .. math ::
        \mathrm{erfc}(x) = y \quad \Rightarrow \quad \mathrm{erfcinv}(y) = x

    Examples
    ========

    >>> from sympy import erfcinv
    >>> from sympy.abc import x

    Several special values are known:

    >>> erfcinv(1)
    0
    >>> erfcinv(0)
    oo

    Differentiation with respect to $x$ is supported:

    >>> from sympy import diff
    >>> diff(erfcinv(x), x)
    -sqrt(pi)*exp(erfcinv(x)**2)/2

    See Also
    ========

    erf: Gaussian error function.
    erfc: Complementary error function.
    erfi: Imaginary error function.
    erf2: Two-argument error function.
    erfinv: Inverse error function.
    erf2inv: Inverse two-argument error function.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Error_function#Inverse_functions
    .. [2] https://functions.wolfram.com/GammaBetaErf/InverseErfc/

    c                     |dk(  rLt        t               t        | j                  | j                  d         dz        z  t
        j                  z  S t        | |      r4  r5  r@   s     r7   rB   zerfcinv.fdiff  sK    q=H9S499Q<!8!!;<<QVVCC$T844r9   c                     t         S rD   r'  r@   s     r7   rG   zerfcinv.inverse  s	    
 r9   c                 &   |t         j                  u rt         j                  S |j                  rt         j                  S |t         j                  u rt         j
                  S |dk(  rt         j                  S |j                  rt         j                  S y r   )r   rK   rP   rL   rM   r.   rN   rW   ru   s     r7   rZ   zerfcinv.eval  sd    :55LYY::!%%Z66M!V%%%99:: r9   c                     t        d|z
        S r:  rE   r   s      r7   _eval_rewrite_as_erfinvzerfcinv._eval_rewrite_as_erfinv  s    ac{r9   c                 :    | j                   d   dz
  j                  S rI   r	  rh   s    r7   rx   zerfcinv._eval_is_zero  s    		!q )))r9   c           	      t    | j                   d   }t        |j                  t        |t	        d            g      S r   )r+   r	   rP   r   r   rt   s     r7   _eval_is_infinitezerfcinv._eval_is_infinite  s.    IIaLE!WQZ$89::r9   Nr   )r   r   r   r   rB   rG   r   rZ   rC  rx   rF  r   r9   r7   rR   rR     s5    )X5  *;r9   rR   c                   ,    e Zd ZdZd Zed        Zd Zy)rS   a2  
    Two-argument Inverse error function. The erf2inv function is defined as:

    .. math ::
        \mathrm{erf2}(x, w) = y \quad \Rightarrow \quad \mathrm{erf2inv}(x, y) = w

    Examples
    ========

    >>> from sympy import erf2inv, oo
    >>> from sympy.abc import x, y

    Several special values are known:

    >>> erf2inv(0, 0)
    0
    >>> erf2inv(1, 0)
    1
    >>> erf2inv(0, 1)
    oo
    >>> erf2inv(0, y)
    erfinv(y)
    >>> erf2inv(oo, y)
    erfcinv(-y)

    Differentiation with respect to $x$ and $y$ is supported:

    >>> from sympy import diff
    >>> diff(erf2inv(x, y), x)
    exp(-x**2 + erf2inv(x, y)**2)
    >>> diff(erf2inv(x, y), y)
    sqrt(pi)*exp(erf2inv(x, y)**2)/2

    See Also
    ========

    erf: Gaussian error function.
    erfc: Complementary error function.
    erfi: Imaginary error function.
    erf2: Two-argument error function.
    erfinv: Inverse error function.
    erfcinv: Inverse complementary error function.

    References
    ==========

    .. [1] https://functions.wolfram.com/GammaBetaErf/InverseErf2/

    c                    | j                   \  }}|dk(  r$t        | j                  ||      dz  |dz  z
        S |dk(  r?t        t              t
        j                  z  t        | j                  ||      dz        z  S t        | |      Nr>   r*   )r+   r   r0   r   r   r   r   r   r  s       r7   rB   zerf2inv.fdiff  sx    yy1q=tyy1~q(A-..]8AFF?3tyy1~q'8#999$T844r9   c                    |t         j                  u s|t         j                  u rt         j                  S |j                  r|j                  rt         j                  S |j                  r"|t         j                  u rt         j
                  S |t         j                  u r|j                  rt         j                  S |j                  rt        |      S |t         j
                  u rt        |       S |j                  r|S |t         j
                  u rt        |      S |j                  r'|j                  rt         j                  S t        |      S |j                  r|S y r   )r   rK   rP   r.   rM   rL   rF   rR   )rW   r4   r5   s      r7   rZ   zerf2inv.eval   s    :aee55LYY19966MYY1:::!%%ZAII55LYY!9!**_A2;YYH!**_!999yyvvay 99H r9   c                 V    | j                   \  }}|j                  r|j                  ryy y )NTr	  )r1   r4   r5   s      r7   rx   zerf2inv._eval_is_zero;  s&    yy199 #9r9   N)r   r   r   r   rB   r   rZ   rx   r   r9   r7   rS   rS     s&    0f5  4r9   rS   c                        e Zd ZdZed        ZddZ fdZd Zd Z	d Z
d ZeZeZeZdd	Zd
 Z fdZd fd	Z fdZ xZS )Eia	  
    The classical exponential integral.

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

    For use in SymPy, this function is defined as

    .. math:: \operatorname{Ei}(x) = \sum_{n=1}^\infty \frac{x^n}{n\, n!}
                                     + \log(x) + \gamma,

    where $\gamma$ is the Euler-Mascheroni constant.

    If $x$ is a polar number, this defines an analytic function on the
    Riemann surface of the logarithm. Otherwise this defines an analytic
    function in the cut plane $\mathbb{C} \setminus (-\infty, 0]$.

    **Background**

    The name exponential integral comes from the following statement:

    .. math:: \operatorname{Ei}(x) = \int_{-\infty}^x \frac{e^t}{t} \mathrm{d}t

    If the integral is interpreted as a Cauchy principal value, this statement
    holds for $x > 0$ and $\operatorname{Ei}(x)$ as defined above.

    Examples
    ========

    >>> from sympy import Ei, polar_lift, exp_polar, I, pi
    >>> from sympy.abc import x

    >>> Ei(-1)
    Ei(-1)

    This yields a real value:

    >>> Ei(-1).n(chop=True)
    -0.219383934395520

    On the other hand the analytic continuation is not real:

    >>> Ei(polar_lift(-1)).n(chop=True)
    -0.21938393439552 + 3.14159265358979*I

    The exponential integral has a logarithmic branch point at the origin:

    >>> Ei(x*exp_polar(2*I*pi))
    Ei(x) + 2*I*pi

    Differentiation is supported:

    >>> Ei(x).diff(x)
    exp(x)/x

    The exponential integral is related to many other special functions.
    For example:

    >>> from sympy import expint, Shi
    >>> Ei(x).rewrite(expint)
    -expint(1, x*exp_polar(I*pi)) - I*pi
    >>> Ei(x).rewrite(Shi)
    Chi(x) + Shi(x)

    See Also
    ========

    expint: Generalised exponential integral.
    E1: Special case of the generalised exponential integral.
    li: Logarithmic integral.
    Li: Offset logarithmic integral.
    Si: Sine integral.
    Ci: Cosine integral.
    Shi: Hyperbolic sine integral.
    Chi: Hyperbolic cosine integral.
    uppergamma: Upper incomplete gamma function.

    References
    ==========

    .. [1] https://dlmf.nist.gov/6.6
    .. [2] https://en.wikipedia.org/wiki/Exponential_integral
    .. [3] Abramowitz & Stegun, section 5: https://web.archive.org/web/20201128173312/http://people.math.sfu.ca/~cbm/aands/page_228.htm

    c                 d   |j                   rt        j                  S |t        j                  u rt        j                  S |t        j                  u rt        j                  S |j                   rt        j                  S |j                         \  }}|rt        |      dt        z  t        z  |z  z   S y r   )	rP   r   rN   rL   r.   extract_branch_factorrM  r
   r   rW   ru   r  r`   s       r7   rZ   zEi.eval  s    99%%%!**_::!$$$66M99%%%'')Ab6AaCF1H$$ r9   c                 p    t        | j                  d         }|dk(  rt        |      |z  S t        | |      rI   )r   r+   r   r   r1   rA   rX   s      r7   rB   zEi.fdiff  s6    1&q=s8C<$T844r9   c                     | j                   d   t        d      z  j                  r,t        |   |      t
        t        z  j	                  |      z   S t        |   |      S r8  )r+   r   r   r   _eval_evalfr
   r   )r1   precr   s     r7   rT  zEi._eval_evalf  sQ    IIaLB'447&t,"/A/A$/GGGw"4((r9   c                 V    ddl m}  |dt        d      |z         t        t        z  z
  S )Nr   r   r   )r   r   r   r
   r   r   s       r7   r   zEi._eval_rewrite_as_uppergamma  s)    F 1jnQ.//!B$66r9   c                 P    t        dt        d      |z         t        t        z  z
  S )Nr>   r   )r   r   r
   r   r   s      r7   r   zEi._eval_rewrite_as_expint  s$    q*R.*++ad22r9   c                 z    t        |t              rt        |j                  d         S t        t	        |            S re   )rQ   r   lir+   r   r   s      r7   _eval_rewrite_as_lizEi._eval_rewrite_as_li  s.    aaffQi= 
 #a&zr9   c                     |j                   r%t        |      t        |      z   t        t        z  z
  S t        |      t        |      z   S r   )is_negativeShiChir
   r   r   s      r7   _eval_rewrite_as_SizEi._eval_rewrite_as_Si  s6    ==q6CF?QrT))q6CF?"r9   c                 0    t        |      t        |      z  S r   )r   _eisr   s       r7   r   zEi._eval_rewrite_as_tractable  s    1vQr9   c                     ddl m} t        t        d|g      j                        } |t
        j                  |z  |z  |t
        j                  |f      S Nr   IntegralrY   )sympy.integrals.integralsre  r   r   namer   Exp1rN   r1   ru   r   re  rY   s        r7   _eval_rewrite_as_IntegralzEi._eval_rewrite_as_Integral  sE    6'aS1667	!a););Q%?@@r9   c                    ddl m} | j                  d   j                  |d      }| j                  d   j	                  ||      }|j                  ||      }|j                  rm|j                  |      \  }}|t        |      n|}t        |      ||z  z   t        z    ||      j                  rt        t        z  z
  S t        j                  z
  S t        	| A  |||      S )Nr   )r   )r   r   )sympyr   r+   r   r   r   rP   as_coeff_exponentr   r   r\  r
   r   r   r.   r   r   )
r1   r4   r   r   r   x0rX   cer   s
            r7   r   zEi._eval_as_leading_term  s    YYq\1%iil**14*8wwq$::((+DAq!\3q6tDq6AdF?Z/4,,": :23&&: :w,QT,EEr9   c                     | j                   d   j                  |d      }|j                  r, | j                  | j                    }|j	                  |||      S t
        |   |||      S re   )r+   r   rP   r_  _eval_nseriesr   r1   r4   r`   r   r   rn  fr   s          r7   rr  zEi._eval_nseries  sa    YYq\1%::((($))4A??1a..w$Q400r9   c                 R   ddl m} |d   }|t        j                  t        j                  fv r_| j
                  d   }t        |      D cg c]  }t        |      ||z  z   c} |d||z  z  |      gz   }	t        |      |z  t        |	 z  S t        t        | 3  ||||      S c c}w Nr   r   r>   )r   r   r   rL   rN   r+   r   r   r   r   r   rM  r   r  s             r7   r   zEi._eval_aseries  s    ,aQZZ!3!344		!A05a911Q&91QT61%&'AF1HQ''R,Qq$??	 :s   B$r   r   r   )r   r   r   r   r   rZ   rB   rT  r   r   rZ  r_  _eval_rewrite_as_Ci_eval_rewrite_as_Chi_eval_rewrite_as_Shir   rj  r   rr  r   r   r   s   @r7   rM  rM  D  sr    Tn % %5)
73#
 ... A

F1
@ 
@r9   rM  c                   n     e Zd ZdZed        Zd Zd Zd Zd Z	d Z
e
Ze
Ze
Zd fd	Z fd	Zd
 Z xZS )r   a  
    Generalized exponential integral.

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

    This function is defined as

    .. math:: \operatorname{E}_\nu(z) = z^{\nu - 1} \Gamma(1 - \nu, z),

    where $\Gamma(1 - \nu, z)$ is the upper incomplete gamma function
    (``uppergamma``).

    Hence for $z$ with positive real part we have

    .. math:: \operatorname{E}_\nu(z)
              =   \int_1^\infty \frac{e^{-zt}}{t^\nu} \mathrm{d}t,

    which explains the name.

    The representation as an incomplete gamma function provides an analytic
    continuation for $\operatorname{E}_\nu(z)$. If $\nu$ is a
    non-positive integer, the exponential integral is thus an unbranched
    function of $z$, otherwise there is a branch point at the origin.
    Refer to the incomplete gamma function documentation for details of the
    branching behavior.

    Examples
    ========

    >>> from sympy import expint, S
    >>> from sympy.abc import nu, z

    Differentiation is supported. Differentiation with respect to $z$ further
    explains the name: for integral orders, the exponential integral is an
    iterated integral of the exponential function.

    >>> expint(nu, z).diff(z)
    -expint(nu - 1, z)

    Differentiation with respect to $\nu$ has no classical expression:

    >>> expint(nu, z).diff(nu)
    -z**(nu - 1)*meijerg(((), (1, 1)), ((0, 0, 1 - nu), ()), z)

    At non-postive integer orders, the exponential integral reduces to the
    exponential function:

    >>> expint(0, z)
    exp(-z)/z
    >>> expint(-1, z)
    exp(-z)/z + exp(-z)/z**2

    At half-integers it reduces to error functions:

    >>> expint(S(1)/2, z)
    sqrt(pi)*erfc(sqrt(z))/sqrt(z)

    At positive integer orders it can be rewritten in terms of exponentials
    and ``expint(1, z)``. Use ``expand_func()`` to do this:

    >>> from sympy import expand_func
    >>> expand_func(expint(5, z))
    z**4*expint(1, z)/24 + (-z**3 + z**2 - 2*z + 6)*exp(-z)/24

    The generalised exponential integral is essentially equivalent to the
    incomplete gamma function:

    >>> from sympy import uppergamma
    >>> expint(nu, z).rewrite(uppergamma)
    z**(nu - 1)*uppergamma(1 - nu, z)

    As such it is branched at the origin:

    >>> from sympy import exp_polar, pi, I
    >>> expint(4, z*exp_polar(2*pi*I))
    I*pi*z**3/3 + expint(4, z)
    >>> expint(nu, z*exp_polar(2*pi*I))
    z**(nu - 1)*(exp(2*I*pi*nu) - 1)*gamma(1 - nu) + expint(nu, z)

    See Also
    ========

    Ei: Another related function called exponential integral.
    E1: The classical case, returns expint(1, z).
    li: Logarithmic integral.
    Li: Offset logarithmic integral.
    Si: Sine integral.
    Ci: Cosine integral.
    Shi: Hyperbolic sine integral.
    Chi: Hyperbolic cosine integral.
    uppergamma

    References
    ==========

    .. [1] https://dlmf.nist.gov/8.19
    .. [2] https://functions.wolfram.com/GammaBetaErf/ExpIntegralE/
    .. [3] https://en.wikipedia.org/wiki/Exponential_integral

    c           	         ddl m}m} t        |      }||k7  rt	        ||      S |j
                  r|dk  s|j
                  s6d|z  j
                  r't        t        ||dz
  z   |d|z
  |      z              S |j                         \  }}|t        j                  u ry |j                  r^|dkD  sy t	        ||      dt        z  t        z  |z  t        j                  |dz
  z  z  t        |dz
        z  t        |      |dz
  z  z  z
  S t        dt        z  t        z  |z  |z        dz
  ||dz
  z  z   |d|z
        z  t	        ||      z   S )Nr   )gammar   r*   r>   )r   r}  r   r   r   
is_Integerr   rO  r   r.   
is_integerr   r
   rO   r   r   )rW   nuru   r}  r   nu2r`   s          r7   rZ   zexpint.evalc  s=   On9#q>!==R1WR]]"?P?PjR!VZB5J)JKLL &&(1;==6"a=B$q&(1==26229R!V3DDZPQ]UWZ[U[E\\] ] !Br	!$q(!b1f+5eAFmCfRQRmSSr9   c           	          | j                   \  }}|dk(  r!||dz
  z   t        g ddgddd|z
  gg |      z  S |dk(  rt        |dz
  |       S t        | |      r4  )r+   r'   r   r   )r1   rA   r  ru   s       r7   rB   zexpint.fdiffy  sn    		Aq=QK<QFQ1r6NB JJJ]261%%%$T844r9   c                 8    ddl m} ||dz
  z   |d|z
  |      z  S )Nr   r   r>   )r   r   )r1   r  ru   r   r   s        r7   r   z"expint._eval_rewrite_as_uppergamma  s#    F26{:a"fa000r9   c                    |dk(  r2t        |t        t         t        z        z         t        t        z  z
  S |j                  r|dkD  rt        |       }||dz
  z  t        |dz
        z  t        |      j                  t               z  t        |      t        |dz
        z  t        t        |dz
        D cg c]  }t        ||z
  dz
        ||z  z   c} z  z   S | S c c}w rI  )rM  r    r
   r   r~  r   r   E1r   r   r   r   )r1   r  ru   r   r4   rb   s         r7   _eval_rewrite_as_Eizexpint._eval_rewrite_as_Ei  s    7qA2b5))**QrT11]]rAvAArAv;ya00Ar1BBAya((%Q-HQiQ
+AqD0HIJJ J K Is   8C c                 V     | j                  t              j                   t        fi |S r   )r   rM  r   r   s     r7   r   zexpint._eval_expand_func  s#    't||B''8%88r9   c                 >    |dk7  r| S t        |      t        |      z
  S r:  )r]  r^  )r1   r  ru   r   s       r7   r_  zexpint._eval_rewrite_as_Si  s     7K1vAr9   c                 \   | j                   d   j                  |      s}| j                   d   }|dk(  r, | j                  | j                    }|j                  |||      S |j                  r1|dkD  r, | j
                  | j                    }|j                  |||      S t        |   |||      S rI   )r+   hasr_  rr  r~  r  r   )r1   r4   r`   r   r   r  rt  r   s          r7   rr  zexpint._eval_nseries  s    yy|"1BQw,D,,dii8q!T2226,D,,dii8q!T22w$Q400r9   c                 |   ddl m} |d   }| j                  d   }|t        j                  u ru| j                  d   }t        |      D 	cg c](  }	t        j                  |	z  t        ||	      z  ||	z  z  * c}	 |d||z  z  |      gz   }
t        |       |z  t        |
 z  S t        t        | 3  ||||      S c c}	w rv  )r   r   r+   r   rL   r   rO   r   r   r   r   r   r   )r1   r`   r   r4   r   r   r   r  ru   rb   r   r   s              r7   r   zexpint._eval_aseries  s    ,aYYq\AJJ		!AKPQR8Ta!OB$::QTATX]^_`acd`d^dfgXhWiiAGAIa((VT0E1dCC Us   
-B9c                     ddl m} | j                  \  }}t        t	        d|      j
                        } ||| z  t        | |z        z  |dt        j                  f      S Nr   rd  rY   r>   )	rf  re  r+   r   r   rg  r   r   rL   )r1   r+   r   re  r`   r4   rY   s          r7   rj  z expint._eval_rewrite_as_Integral  sW    6yy1'T2778A2QBqD	)Aq!**+=>>r9   rw  )r   r   r   r   r   rZ   rB   r   r  r   r_  rx  ry  rz  rr  r   rj  r   r   s   @r7   r   r     s]    dN T T*51
9 ...	1
D?r9   r   c                     t        d|       S )a+  
    Classical case of the generalized exponential integral.

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

    This is equivalent to ``expint(1, z)``.

    Examples
    ========

    >>> from sympy import E1
    >>> E1(0)
    expint(1, 0)

    >>> E1(5)
    expint(1, 5)

    See Also
    ========

    Ei: Exponential integral.
    expint: Generalised exponential integral.
    li: Logarithmic integral.
    Li: Offset logarithmic integral.
    Si: Sine integral.
    Ci: Cosine integral.
    Shi: Hyperbolic sine integral.
    Chi: Hyperbolic cosine integral.

    r>   )r   )ru   s    r7   r  r    s    @ !Q<r9   c                   v    e Zd ZdZed        ZddZd Zd Zd Z	d Z
d ZeZd	 ZeZd
 Zd ZddZddZd Zy)rY  a	  
    The classical logarithmic integral.

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

    For use in SymPy, this function is defined as

    .. math:: \operatorname{li}(x) = \int_0^x \frac{1}{\log(t)} \mathrm{d}t \,.

    Examples
    ========

    >>> from sympy import I, oo, li
    >>> from sympy.abc import z

    Several special values are known:

    >>> li(0)
    0
    >>> li(1)
    -oo
    >>> li(oo)
    oo

    Differentiation with respect to $z$ is supported:

    >>> from sympy import diff
    >>> diff(li(z), z)
    1/log(z)

    Defining the ``li`` function via an integral:
    >>> from sympy import integrate
    >>> integrate(li(z))
    z*li(z) - Ei(2*log(z))

    >>> integrate(li(z),z)
    z*li(z) - Ei(2*log(z))


    The logarithmic integral can also be defined in terms of ``Ei``:

    >>> from sympy import Ei
    >>> li(z).rewrite(Ei)
    Ei(log(z))
    >>> diff(li(z).rewrite(Ei), z)
    1/log(z)

    We can numerically evaluate the logarithmic integral to arbitrary precision
    on the whole complex plane (except the singular points):

    >>> li(2).evalf(30)
    1.04516378011749278484458888919

    >>> li(2*I).evalf(30)
    1.0652795784357498247001125598 + 3.08346052231061726610939702133*I

    We can even compute Soldner's constant by the help of mpmath:

    >>> from mpmath import findroot
    >>> findroot(li, 2)
    1.45136923488338

    Further transformations include rewriting ``li`` in terms of
    the trigonometric integrals ``Si``, ``Ci``, ``Shi`` and ``Chi``:

    >>> from sympy import Si, Ci, Shi, Chi
    >>> li(z).rewrite(Si)
    -log(I*log(z)) - log(1/log(z))/2 + log(log(z))/2 + Ci(I*log(z)) + Shi(log(z))
    >>> li(z).rewrite(Ci)
    -log(I*log(z)) - log(1/log(z))/2 + log(log(z))/2 + Ci(I*log(z)) + Shi(log(z))
    >>> li(z).rewrite(Shi)
    -log(1/log(z))/2 + log(log(z))/2 + Chi(log(z)) - Shi(log(z))
    >>> li(z).rewrite(Chi)
    -log(1/log(z))/2 + log(log(z))/2 + Chi(log(z)) - Shi(log(z))

    See Also
    ========

    Li: Offset logarithmic integral.
    Ei: Exponential integral.
    expint: Generalised exponential integral.
    E1: Special case of the generalised exponential integral.
    Si: Sine integral.
    Ci: Cosine integral.
    Shi: Hyperbolic sine integral.
    Chi: Hyperbolic cosine integral.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Logarithmic_integral
    .. [2] https://mathworld.wolfram.com/LogarithmicIntegral.html
    .. [3] https://dlmf.nist.gov/6
    .. [4] https://mathworld.wolfram.com/SoldnersConstant.html

    c                     |j                   rt        j                  S |t        j                  u rt        j                  S |t        j
                  u rt        j
                  S |j                   rt        j                  S y r   )rP   r   r.   rM   rN   rL   rA  s     r7   rZ   zli.evalB  sS    9966M!%%Z%%%!**_::9966M r9   c                 z    | j                   d   }|dk(  rt        j                  t        |      z  S t	        | |      rI   r+   r   rM   r   r   rR  s      r7   rB   zli.fdiffM  6    iilq=553s8##$T844r9   c                 x    | j                   d   }|j                  s| j                  |j                               S y re   )r+   r~   r0   rg   rt   s     r7   ri   zli._eval_conjugateT  s2    IIaL%%99Q[[]++ &r9   c                 0    t        |      t        d      z   S r   )LirY  r   s      r7   _eval_rewrite_as_Lizli._eval_rewrite_as_LiZ      !ur!u}r9   c                 *    t        t        |            S r   )rM  r   r   s      r7   r  zli._eval_rewrite_as_Ei]  s    #a&zr9   c           	          ddl m}  |dt        |              t        j                  t        t        |            t        t        j
                  t        |      z        z
  z  z   t        t        |             z
  S Nr   r   )r   r   r   r   r   rM   r   s       r7   r   zli._eval_rewrite_as_uppergamma`  s`    FAAw''CFc!%%A,&7789;>Aw<H 	Ir9   c                 N   t        t        t        |      z        t        t        t        t        |      z        z  z
  t        j
                  t        t        j                  t        |      z        t        t        |            z
  z  z
  t        t        t        |      z        z
  S r   )Cir
   r   Sir   r   rM   r   s      r7   r_  zli._eval_rewrite_as_Sie  sp    1SV8qAc!fH~-AEE#a&L)CAK789;>qQx=I 	Jr9   c                     t        t        |            t        t        |            z
  t        j                  t        t        j
                  t        |      z        t        t        |            z
  z  z
  S r   )r^  r   r]  r   r   rM   r   s      r7   rz  zli._eval_rewrite_as_Shik  sJ    CFc#a&k)AFFCc!f4ECPQF4S,TTUr9   c           	          t        |      t        ddt        |            z  t        j                  t        t        |            t        t        j                  t        |      z        z
  z  z   t
        z   S )N)r>   r>   )r*   r*   )r   r&   r   r   rM   r   r   s      r7   r   zli._eval_rewrite_as_hyperp  sY    AuVVSV44CFc!%%A,&7789;EF 	Gr9   c                     t        t        |              t        j                  t        t        j                  t        |      z        t        t        |            z
  z  z
  t	        ddt        |             z
  S )N)r   r   ))r   r   r   )r   r   r   rM   r'   r   s      r7   r   zli._eval_rewrite_as_meijergt  sY    c!fWAEE#a&L(9CAK(G HH*lSVG<= 	>r9   Nc                 0    |t        t        |            z  S r   )ra  r   r   s       r7   r   zli._eval_rewrite_as_tractablex  s    4A<r9   c                     | j                   d   }t        d|      D cg c]  }t        |      |z  t        |      |z  z  ! }}t        t        t        |            z   t        | z   S c c}w rI   )r+   r   r   r   r   r   )r1   r4   r`   r   r   ru   rb   r   s           r7   rr  zli._eval_nseries{  s`    IIaL7<Q{C!c!fq[IaL1,-CCCAK'#q'11 Ds   $A(c                 <    | j                   d   }|j                  ryy rl   r	  rt   s     r7   rx   zli._eval_is_zero      IIaL99 r9   r   r   rw  )r   r   r   r   r   rZ   rB   ri   r  r  r   r_  rx  rz  ry  r   r   r   rr  rx   r   r9   r7   rY  rY    sm    `F  5,I
J .V 0G> 2
r9   rY  c                   D    e Zd ZdZed        Zd	dZd Zd Zd
dZ	ddZ
y)r  ab  
    The offset logarithmic integral.

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

    For use in SymPy, this function is defined as

    .. math:: \operatorname{Li}(x) = \operatorname{li}(x) - \operatorname{li}(2)

    Examples
    ========

    >>> from sympy import Li
    >>> from sympy.abc import z

    The following special value is known:

    >>> Li(2)
    0

    Differentiation with respect to $z$ is supported:

    >>> from sympy import diff
    >>> diff(Li(z), z)
    1/log(z)

    The shifted logarithmic integral can be written in terms of $li(z)$:

    >>> from sympy import li
    >>> Li(z).rewrite(li)
    li(z) - li(2)

    We can numerically evaluate the logarithmic integral to arbitrary precision
    on the whole complex plane (except the singular points):

    >>> Li(2).evalf(30)
    0

    >>> Li(4).evalf(30)
    1.92242131492155809316615998938

    See Also
    ========

    li: Logarithmic integral.
    Ei: Exponential integral.
    expint: Generalised exponential integral.
    E1: Special case of the generalised exponential integral.
    Si: Sine integral.
    Ci: Cosine integral.
    Shi: Hyperbolic sine integral.
    Chi: Hyperbolic cosine integral.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Logarithmic_integral
    .. [2] https://mathworld.wolfram.com/LogarithmicIntegral.html
    .. [3] https://dlmf.nist.gov/6

    c                     |t         j                  u rt         j                  S |t        d      k(  rt         j                  S y r   )r   rL   r.   rA  s     r7   rZ   zLi.eval  s0    

?::!A$Y66M r9   c                 z    | j                   d   }|dk(  rt        j                  t        |      z  S t	        | |      rI   r  rR  s      r7   rB   zLi.fdiff  r  r9   c                 J    | j                  t              j                  |      S r   )r   rY  evalf)r1   rU  s     r7   rT  zLi._eval_evalf  s    ||B%%d++r9   c                 0    t        |      t        d      z
  S r   )rY  r   s      r7   rZ  zLi._eval_rewrite_as_li  r  r9   Nc                 N    | j                  t              j                  dd      S )Nr   T)r2   )r   rY  r   s       r7   r   zLi._eval_rewrite_as_tractable  s!    ||B''$'??r9   c                 Z     | j                   | j                   }|j                  |||      S r   )rZ  r+   rr  )r1   r4   r`   r   r   rt  s         r7   rr  zLi._eval_nseries  s+    $D$$dii0q!T**r9   r   r   rw  )r   r   r   r   r   rZ   rB   rT  rZ  r   rr  r   r9   r7   r  r    s6    =@  5,@+r9   r  c                   H     e Zd ZdZed        ZddZd Zd Zd fd	Z	 xZ
S )	TrigonometricIntegralz) Base class for trigonometric integrals. c                 V   |t         j                  u r| j                  S |t         j                  u r| j	                         S |t         j
                  u r| j                         S |j                  r| j                  S |j                  t        t                    }|)| j                  d      dk(  r|j                  t              }|| j                  |d      S |j                  t        t                     }|| j                  |d      S |j                  t        d            }|%| j                  d      dk(  r|j                  d      }|| j                  |      S |j                         \  }}|dk(  r||k(  ry dt        z  t        z  |z  | j                  d      z   | |      z   S )Nr   r>   r   r*   )r   r.   _atzerorL   _atinfrN   	_atneginfrP   rT   r   r
   	_trigfunc_Ifactor_minusfactorrO  r   rP  s       r7   rZ   zTrigonometricIntegral.eval  sn   ;;;!**_::<!$$$==?"99;;''
16:#--*a/++A.B><<A&&''
A27><<B''''
27:#--*a/++B/B>##B'''')A6bAgtAvaxa((3r722r9   c                 |    t        | j                  d         }|dk(  r| j                  |      |z  S t        | |      rI   )r   r+   r  r   rR  s      r7   rB   zTrigonometricIntegral.fdiff	  s<    1&q=>>#&s**$T844r9   c                 J    | j                  |      j                  t              S r   )r   r   rM  r   s      r7   r  z)TrigonometricIntegral._eval_rewrite_as_Ei  s    ++A.66r::r9   c                 N    ddl m} | j                  |      j                  |      S r  )r   r   r   r   r   s       r7   r   z1TrigonometricIntegral._eval_rewrite_as_uppergamma  s!    F++A.66zBBr9   c                    | j                   d   j                  |d      dk7  rt        |   |||      S | j	                  |      j                  |||      }| j	                  d      dk7  r|dz  }|j                  t        d d      }| j	                  d      dk7  r|t        t        |      z   z  }|j                  || j                   d         j                  |||      S )Nr   r>   c                     | |z  |z  S r   r   )rY   r`   s     r7   <lambda>z5TrigonometricIntegral._eval_nseries.<locals>.<lambda>  s    !Q$q& r9   F)simultaneous)	r+   r   r   rr  r  replacer   r   r   )r1   r4   r`   r   r   
baseseriesr   s         r7   rr  z#TrigonometricIntegral._eval_nseries  s    99Q<Q"a'7(At44^^A&44Q4@
>>!!!OJ''-@u'U
>>!!*s1v--Jq$))A,/==aDIIr9   r   rw  )r   r   r   r   r   rZ   rB   r  r   rr  r   r   s   @r7   r  r    s6    3 3 3>5;C
J 
Jr9   r  c                        e Zd ZdZeZej                  Ze	d        Z
e	d        Ze	d        Ze	d        Zd Zd ZeZd Z fd	Zd
 Z xZS )r  a  
    Sine integral.

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

    This function is defined by

    .. math:: \operatorname{Si}(z) = \int_0^z \frac{\sin{t}}{t} \mathrm{d}t.

    It is an entire function.

    Examples
    ========

    >>> from sympy import Si
    >>> from sympy.abc import z

    The sine integral is an antiderivative of $sin(z)/z$:

    >>> Si(z).diff(z)
    sin(z)/z

    It is unbranched:

    >>> from sympy import exp_polar, I, pi
    >>> Si(z*exp_polar(2*I*pi))
    Si(z)

    Sine integral behaves much like ordinary sine under multiplication by ``I``:

    >>> Si(I*z)
    I*Shi(z)
    >>> Si(-z)
    -Si(z)

    It can also be expressed in terms of exponential integrals, but beware
    that the latter is branched:

    >>> from sympy import expint
    >>> Si(z).rewrite(expint)
    -I*(-expint(1, z*exp_polar(-I*pi/2))/2 +
         expint(1, z*exp_polar(I*pi/2))/2) + pi/2

    It can be rewritten in the form of sinc function (by definition):

    >>> from sympy import sinc
    >>> Si(z).rewrite(sinc)
    Integral(sinc(_t), (_t, 0, z))

    See Also
    ========

    Ci: Cosine integral.
    Shi: Hyperbolic sine integral.
    Chi: Hyperbolic cosine integral.
    Ei: Exponential integral.
    expint: Generalised exponential integral.
    sinc: unnormalized sinc function
    E1: Special case of the generalised exponential integral.
    li: Logarithmic integral.
    Li: Offset logarithmic integral.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_integral

    c                 0    t         t        j                  z  S r   r   r   r   rW   s    r7   r  z	Si._atinfn  s    !&&yr9   c                 2    t          t        j                  z  S r   r  r  s    r7   r  zSi._atneginfr  s    s166zr9   c                     t        |       S r   )r  rA  s     r7   r  zSi._minusfactorv  s    1vr9   c                 ,    t         t        |      z  |z  S r   )r
   r]  rW   ru   signs      r7   r  zSi._Ifactorz  s    Qx}r9   c                     t         dz  t        t        t              |z        t        t        t               |z        z
  dz  t        z  z   S r   )r   r  r   r
   r   s      r7   r   zSi._eval_rewrite_as_expint~  s=    !tr*Q-/*R
A2q0@-AA1DQFFFr9   c                 x    ddl m} t        t        d|g      j                        } |t        |      |d|f      S rc  )rf  re  r   r   rg  r%   ri  s        r7   rj  zSi._eval_rewrite_as_Integral  s6    6'aS1667Q!Q++r9   c                 <   | j                   d   j                  |||      }|j                  |d      }|t        j                  u r+|j                  |dt        |      j                  rdnd      }|j                  r|S |j                  s| j                  |      S | S Nr   r   r   r   r   r+   r   r   r   rK   r   r   r\  rP   r  r0   r   s         r7   r   zSi._eval_as_leading_term  s    iil**14d*Cxx1~155=99Qbh.B.Bs9LD<<J!!99T?"Kr9   c                 r   ddl m} |d   }|t        j                  u r| j                  d   }t        |dz  dz         D cg c]0  }t        j                  |z  t        d|z        z  |d|z  dz   z  z  2 c} |d||z  z  |      gz   }	t        |dz        D cg c]3  }t        j                  |z  t        d|z  dz         z  |d|dz   z  z  z  5 c} |d||z  z  |      gz   }
t        dz  t        |      t        |	 z  z
  t        |      t        |
 z  z
  S t        t        | ;  ||||      S c c}w c c}w r   )r   r   r   rL   r+   r   rO   r   r   r#   r   r$   r   r  r   )r1   r`   r   r4   r   r   r   ru   rb   pqr   s              r7   r   zSi._eval_aseries  sH   ,a AJJ		!A"1a4!8_. !IacN2Q1q\A .16qAvq1A0BCA #1a4[* !IacAg$66QAYG *-21QT61-=,>?Aa4#a&a.(3q6#q'>99 R,Qq$??.*s   5D/8D4c                 <    | j                   d   }|j                  ryy rl   r	  rt   s     r7   rx   zSi._eval_is_zero  r  r9   )r   r   r   r   r$   r  r   r.   r  r   r  r  r  r  r   rj  _eval_rewrite_as_sincr   r   rx   r   r   s   @r7   r  r  $  s    DL IffG       G,
 7@ r9   r  c                        e Zd ZdZeZej                  Ze	d        Z
e	d        Ze	d        Ze	d        Zd Zd Zd Z fd	Z xZS )
r  a  
    Cosine integral.

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

    This function is defined for positive $x$ by

    .. math:: \operatorname{Ci}(x) = \gamma + \log{x}
                         + \int_0^x \frac{\cos{t} - 1}{t} \mathrm{d}t
           = -\int_x^\infty \frac{\cos{t}}{t} \mathrm{d}t,

    where $\gamma$ is the Euler-Mascheroni constant.

    We have

    .. math:: \operatorname{Ci}(z) =
        -\frac{\operatorname{E}_1\left(e^{i\pi/2} z\right)
               + \operatorname{E}_1\left(e^{-i \pi/2} z\right)}{2}

    which holds for all polar $z$ and thus provides an analytic
    continuation to the Riemann surface of the logarithm.

    The formula also holds as stated
    for $z \in \mathbb{C}$ with $\Re(z) > 0$.
    By lifting to the principal branch, we obtain an analytic function on the
    cut complex plane.

    Examples
    ========

    >>> from sympy import Ci
    >>> from sympy.abc import z

    The cosine integral is a primitive of $\cos(z)/z$:

    >>> Ci(z).diff(z)
    cos(z)/z

    It has a logarithmic branch point at the origin:

    >>> from sympy import exp_polar, I, pi
    >>> Ci(z*exp_polar(2*I*pi))
    Ci(z) + 2*I*pi

    The cosine integral behaves somewhat like ordinary $\cos$ under
    multiplication by $i$:

    >>> from sympy import polar_lift
    >>> Ci(polar_lift(I)*z)
    Chi(z) + I*pi/2
    >>> Ci(polar_lift(-1)*z)
    Ci(z) + I*pi

    It can also be expressed in terms of exponential integrals:

    >>> from sympy import expint
    >>> Ci(z).rewrite(expint)
    -expint(1, z*exp_polar(-I*pi/2))/2 - expint(1, z*exp_polar(I*pi/2))/2

    See Also
    ========

    Si: Sine integral.
    Shi: Hyperbolic sine integral.
    Chi: Hyperbolic cosine integral.
    Ei: Exponential integral.
    expint: Generalised exponential integral.
    E1: Special case of the generalised exponential integral.
    li: Logarithmic integral.
    Li: Offset logarithmic integral.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_integral

    c                 "    t         j                  S r   )r   r.   r  s    r7   r  z	Ci._atinf  s    vvr9   c                     t         t        z  S r   )r
   r   r  s    r7   r  zCi._atneginf  s    tr9   c                 4    t        |      t        t        z  z   S r   r  r
   r   rA  s     r7   r  zCi._minusfactor  s    !uqt|r9   c                 @    t        |      t        t        z  dz  |z  z   S r   r^  r
   r   r  s      r7   r  zCi._Ifactor  s    1v"Qt##r9   c                 z    t        t        t              |z        t        t        t               |z        z    dz  S r   )r  r   r
   r   s      r7   r   zCi._eval_rewrite_as_expint  s2    JqM!O$r*aR.*:';;<Q>>r9   c                     ddl m} t        t        d|g      j                        }t
        j                  t        |      z    |dt        |      z
  |z  |d|f      z
  S r  )	rf  re  r   r   rg  r   r   r   r#   ri  s        r7   rj  zCi._eval_rewrite_as_Integral  sP    6'aS1667||c!f$x3q61q!Qi'HHHr9   c                    | j                   d   j                  |||      }|j                  |d      }|t        j                  u r+|j                  |dt        |      j                  rdnd      }|j                  r;|j                  |      \  }}|t        |      n|}t        |      ||z  z   t        z   S |j                  r| j                  |      S | S r  r+   r   r   r   rK   r   r   r\  rP   rm  r   r   rs   r0   r1   r4   r   r   rX   r   ro  rp  s           r7   r   zCi._eval_as_leading_term      iil**14d*Cxx1~155=99Qbh.B.Bs9LD<<((+DAq!\3q6tDq6AdF?Z//^^99T?"Kr9   c                    ddl m} |d   }|t        j                  t        j                  fv r| j
                  d   }t        |dz  dz         D cg c]0  }t        j                  |z  t        d|z        z  |d|z  dz   z  z  2 c} |d||z  z  |      gz   }	t        |dz        D cg c]3  }t        j                  |z  t        d|z  dz         z  |d|dz   z  z  z  5 c} |d||z  z  |      gz   }
t        |      t        |	 z  t        |      t        |
 z  z
  }|t        j                  u r|t        t        z  z  }|S t        t        | C  ||||      S c c}w c c}w r   )r   r   r   rL   rN   r+   r   rO   r   r$   r   r#   r
   r   r   r  r   )r1   r`   r   r4   r   r   r   ru   rb   r  r  resultr   s               r7   r   zCi._eval_aseries&  sg   ,aQZZ!3!344		!A"1a4!8_. !IacN2Q1q\A .16qAvq1A0BCA #1a4[* !IacAg$66QAYG *-21QT61-=,>?AVS!W%AQ(88F***!B$MR,Qq$??.*s   5E+8E)r   r   r   r   r#   r  r   r   r  r   r  r  r  r  r   rj  r   r   r   r   s   @r7   r  r    s    M^ IG      $ $?I
@ @r9   r  c                   ~    e Zd ZdZeZej                  Ze	d        Z
e	d        Ze	d        Ze	d        Zd Zd Zd Zy	)
r]  a  
    Sinh integral.

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

    This function is defined by

    .. math:: \operatorname{Shi}(z) = \int_0^z \frac{\sinh{t}}{t} \mathrm{d}t.

    It is an entire function.

    Examples
    ========

    >>> from sympy import Shi
    >>> from sympy.abc import z

    The Sinh integral is a primitive of $\sinh(z)/z$:

    >>> Shi(z).diff(z)
    sinh(z)/z

    It is unbranched:

    >>> from sympy import exp_polar, I, pi
    >>> Shi(z*exp_polar(2*I*pi))
    Shi(z)

    The $\sinh$ integral behaves much like ordinary $\sinh$ under
    multiplication by $i$:

    >>> Shi(I*z)
    I*Si(z)
    >>> Shi(-z)
    -Shi(z)

    It can also be expressed in terms of exponential integrals, but beware
    that the latter is branched:

    >>> from sympy import expint
    >>> Shi(z).rewrite(expint)
    expint(1, z)/2 - expint(1, z*exp_polar(I*pi))/2 - I*pi/2

    See Also
    ========

    Si: Sine integral.
    Ci: Cosine integral.
    Chi: Hyperbolic cosine integral.
    Ei: Exponential integral.
    expint: Generalised exponential integral.
    E1: Special case of the generalised exponential integral.
    li: Logarithmic integral.
    Li: Offset logarithmic integral.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_integral

    c                 "    t         j                  S r   r   rL   r  s    r7   r  z
Shi._atinf{      zzr9   c                 "    t         j                  S r   )r   rN   r  s    r7   r  zShi._atneginf  s    !!!r9   c                     t        |       S r   )r]  rA  s     r7   r  zShi._minusfactor  s    Awr9   c                 ,    t         t        |      z  |z  S r   )r
   r  r  s      r7   r  zShi._Ifactor  s    Awt|r9   c                     t        |      t        t        t        t        z        |z        z
  dz  t        t        z  dz  z
  S r   )r  r    r
   r   r   s      r7   r   zShi._eval_rewrite_as_expint  s5    19QrT?1,--q01R4699r9   c                 <    | j                   d   }|j                  ryy rl   r	  rt   s     r7   rx   zShi._eval_is_zero  r  r9   c                 6   | j                   d   j                  |      }|j                  |d      }|t        j                  u r+|j                  |dt        |      j                  rdnd      }|j                  r|S |j                  s| j                  |      S | S )Nr   r   r   r   r  r   s         r7   r   zShi._eval_as_leading_term  s~    iil**1-xx1~155=99Qbh.B.Bs9LD<<J!!99T?"Kr9   N)r   r   r   r   r"   r  r   r.   r  r   r  r  r  r  r   rx   r   r   r9   r7   r]  r]  8  su    =~ IffG  " "    :
r9   r]  c                   x    e Zd ZdZeZej                  Ze	d        Z
e	d        Ze	d        Ze	d        Zd Zd Zy)	r^  a   
    Cosh integral.

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

    This function is defined for positive $x$ by

    .. math:: \operatorname{Chi}(x) = \gamma + \log{x}
                         + \int_0^x \frac{\cosh{t} - 1}{t} \mathrm{d}t,

    where $\gamma$ is the Euler-Mascheroni constant.

    We have

    .. math:: \operatorname{Chi}(z) = \operatorname{Ci}\left(e^{i \pi/2}z\right)
                         - i\frac{\pi}{2},

    which holds for all polar $z$ and thus provides an analytic
    continuation to the Riemann surface of the logarithm.
    By lifting to the principal branch we obtain an analytic function on the
    cut complex plane.

    Examples
    ========

    >>> from sympy import Chi
    >>> from sympy.abc import z

    The $\cosh$ integral is a primitive of $\cosh(z)/z$:

    >>> Chi(z).diff(z)
    cosh(z)/z

    It has a logarithmic branch point at the origin:

    >>> from sympy import exp_polar, I, pi
    >>> Chi(z*exp_polar(2*I*pi))
    Chi(z) + 2*I*pi

    The $\cosh$ integral behaves somewhat like ordinary $\cosh$ under
    multiplication by $i$:

    >>> from sympy import polar_lift
    >>> Chi(polar_lift(I)*z)
    Ci(z) + I*pi/2
    >>> Chi(polar_lift(-1)*z)
    Chi(z) + I*pi

    It can also be expressed in terms of exponential integrals:

    >>> from sympy import expint
    >>> Chi(z).rewrite(expint)
    -expint(1, z)/2 - expint(1, z*exp_polar(I*pi))/2 - I*pi/2

    See Also
    ========

    Si: Sine integral.
    Ci: Cosine integral.
    Shi: Hyperbolic sine integral.
    Ei: Exponential integral.
    expint: Generalised exponential integral.
    E1: Special case of the generalised exponential integral.
    li: Logarithmic integral.
    Li: Offset logarithmic integral.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_integral

    c                 "    t         j                  S r   r  r  s    r7   r  z
Chi._atinf  r  r9   c                 "    t         j                  S r   r  r  s    r7   r  zChi._atneginf  r  r9   c                 4    t        |      t        t        z  z   S r   r  rA  s     r7   r  zChi._minusfactor  s    1v"}r9   c                 @    t        |      t        t        z  dz  |z  z   S r   r  r  s      r7   r  zChi._Ifactor  s    !uqtAvd{""r9   c                     t          t        z  dz  t        |      t        t        t         t        z        |z        z   dz  z
  S r   )r
   r   r  r    r   s      r7   r   zChi._eval_rewrite_as_expint 	  s7    r"uQw"Q%"Yqt_Q%6"77:::r9   c                    | j                   d   j                  |||      }|j                  |d      }|t        j                  u r+|j                  |dt        |      j                  rdnd      }|j                  r;|j                  |      \  }}|t        |      n|}t        |      ||z  z   t        z   S |j                  r| j                  |      S | S r  r  r  s           r7   r   zChi._eval_as_leading_term	  r  r9   N)r   r   r   r   r!   r  r   r   r  r   r  r  r  r  r   r   r   r9   r7   r^  r^    ss    HT IG      # #;r9   r^  c                   F    e Zd ZdZdZed        Zd	dZd ZeZ	d Z
d ZeZy)
FresnelIntegralz& Base class for the Fresnel integrals.Tc                 X   |t         j                  u rt         j                  S |j                  rt         j                  S t         j
                  }|}d}|j                  d      }|| }|}d}|j                  t              }|| j                  t        z  |z  }|}d}|r| | |      z  S y )NFr   T)	r   rL   r   rP   r.   rM   rT   r
   _sign)rW   ru   prefactnewargchangedr  s         r7   rZ   zFresnelIntegral.eval	  s     

?66M 9966M %%,,R0>hGFG,,Q/>iik')GFG3v;&& r9   c                     |dk(  r9| j                  t        j                  t        z  | j                  d   dz  z        S t        | |      r4  )r  r   r   r   r+   r   r@   s     r7   rB   zFresnelIntegral.fdiff;	  s>    q=>>!&&)DIIaL!O";<<$T844r9   c                 4    | j                   d   j                  S re   rm   rh   s    r7   r  z&FresnelIntegral._eval_is_extended_realA	  r  r9   c                 4    | j                   d   j                  S re   r	  rh   s    r7   rx   zFresnelIntegral._eval_is_zeroF	  r
  r9   c                 Z    | j                  | j                  d   j                               S re   rf   rh   s    r7   ri   zFresnelIntegral._eval_conjugateI	  rj   r9   Nr   )r   r   r   r   r   r   rZ   rB   r  rv   rx   ri   r8   r/   r   r9   r7   r  r  	  s>    0J' '<5- -O$3 -Lr9   r  c                   x     e Zd ZdZeZej                   Ze	e
d               Zd Zd Zd Zd Zd Z fdZ xZS )	r   ay  
    Fresnel integral S.

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

    This function is defined by

    .. math:: \operatorname{S}(z) = \int_0^z \sin{\frac{\pi}{2} t^2} \mathrm{d}t.

    It is an entire function.

    Examples
    ========

    >>> from sympy import I, oo, fresnels
    >>> from sympy.abc import z

    Several special values are known:

    >>> fresnels(0)
    0
    >>> fresnels(oo)
    1/2
    >>> fresnels(-oo)
    -1/2
    >>> fresnels(I*oo)
    -I/2
    >>> fresnels(-I*oo)
    I/2

    In general one can pull out factors of -1 and $i$ from the argument:

    >>> fresnels(-z)
    -fresnels(z)
    >>> fresnels(I*z)
    -I*fresnels(z)

    The Fresnel S integral obeys the mirror symmetry
    $\overline{S(z)} = S(\bar{z})$:

    >>> from sympy import conjugate
    >>> conjugate(fresnels(z))
    fresnels(conjugate(z))

    Differentiation with respect to $z$ is supported:

    >>> from sympy import diff
    >>> diff(fresnels(z), z)
    sin(pi*z**2/2)

    Defining the Fresnel functions via an integral:

    >>> from sympy import integrate, pi, sin, expand_func
    >>> integrate(sin(pi*z**2/2), z)
    3*fresnels(z)*gamma(3/4)/(4*gamma(7/4))
    >>> expand_func(integrate(sin(pi*z**2/2), z))
    fresnels(z)

    We can numerically evaluate the Fresnel integral to arbitrary precision
    on the whole complex plane:

    >>> fresnels(2).evalf(30)
    0.343415678363698242195300815958

    >>> fresnels(-2*I).evalf(30)
    0.343415678363698242195300815958*I

    See Also
    ========

    fresnelc: Fresnel cosine integral.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Fresnel_integral
    .. [2] https://dlmf.nist.gov/7
    .. [3] https://mathworld.wolfram.com/FresnelIntegrals.html
    .. [4] https://functions.wolfram.com/GammaBetaErf/FresnelS
    .. [5] The converging factors for the fresnel integrals
            by John W. Wrench Jr. and Vicki Alley

    c                 n   | dk  rt         j                  S t        |      }t        |      dkD  r9|d   }t        dz   |dz  z  d| z  dz
  z  d| z  d| z  dz   z  d| z  dz   z  z  |z  S |dz  |dz   | z  z  t        d      d| z  dz
  z  t        d| z  dz   z  z  z  d| z  dz   t        d| z  dz         z  z  S )	Nr   r>   r   r*         r   r]   r   r.   r   r^   r   r   r`   r4   ra   r  s       r7   rc   zfresnels.taylor_term	  s     q566M
A>"Q&"2&Qq!tQqS1W-qsAaC!G}acAg/FG1LL!t1uqj(AaD2a4!8,<R!A#'],JKPQRSPSVWPWYbcdefcfijcjYkOkllr9   c           	          t         j                  t        z   dz  t        t         j                  t        z   dz  t	        t
              z  |z        t        t        t         j                  t        z
  dz  t	        t
              z  |z        z  z
  z  S Nr   r*   r   rM   r
   r;   r   r   r   s      r7   r   zfresnels._eval_rewrite_as_erf	  f    	1}QUUQYM$r($:1$< =#quuqyRSmTXY[T\F\]^F^B_@_ _``r9   c           	          t         |dz  z  dz  t        t        dd      gt        dd      t        dd      gt         dz   |dz  z  dz        z  S )Nr      r   r*         )r   r&   r   r   s      r7   r   zfresnels._eval_rewrite_as_hyper	  sY    !Q$wqy5(1a.!1HQNHQPQN3SVXZ[V[U[\]_`\`U`acUcdddr9   c           
          t         |t        dd      z  z  t        d      |dz  t        dd      z  z  | t        dd      z  z  z  t        g dgt        dd      gt        dd      dgt         dz   |dz  z  dz        z  S )N	   r   r*   r   r>   r   r  )r   r   r   r'   r   s      r7   r   z!fresnels._eval_rewrite_as_meijerg	  s    1hq!n$$QAA0F(FXVWYZ^G[([\"qcHQN#3hq!na5H2q5&QRTUQU+VX.YZ 	[r9   c                     ddl m} t        t        d|g      j                        } |t        t        |dz  z  dz        |d|f      S Nr   rd  rY   r*   )rf  re  r   r   rg  r$   r   ri  s        r7   rj  z"fresnels._eval_rewrite_as_Integral	  B    6'aS1667Bq!tGAIAq	22r9   c                    ddl m} | j                  d   j                  |||      }|j	                  |d      }|t
        j                  u r+|j                  |dt        |      j                  rdnd      }|j                  rt        |dz  z  dz  S |t
        j                  t
        j                  fv r3|t
        j                  u rd	nd
}|t
        j                  z   |||      z   S | j                  |      S )Nr   r   r   r   r   r   r   r	  r>   r   )r   r   r+   r   r   r   r   r   r   r\  rP   r   rL   rN   r   r0   r1   r4   r   r   r   rX   r   r   s           r7   r   zfresnels._eval_as_leading_term	  s    ,iil**14d*Cxx1~1$$$99Qbh.B.Bs9LD<<c1f9Q;ajj!"4"455QZZ'RAQVV8eAqk))99T?"r9   c           
      n   ddl m} |d   }|t        j                  t        j                   fv r| j                  d   }t        d|      D cg c]b  }d|z  dz   |k  rUt        j                  |z  t        d|z  dz         z  dd|z  dz   z  |d|z  dz   z  z  dd|z  z  z  t        d|z        z  z  d }	}dd|z  z  gt        d|      D cg c]h  }d|z  dz   |k  r[t        j                  |z  t        d|z  dz
        z  dd|z  dz   z  |d|z  dz   z  z  dd|z  dz
  z  z  t        d|z  dz
        z  z  j c}z   }
|	D cg c]  }t        dt        z         |z   }	}|
D cg c]  }t        dt        z         |z   }
}|t        j                  u rdnd}|t        j                  z  t        |dz        t        |	 z  t        |dz        t        |
 z  z   j                  |t        dt        z        |z        z    |d||z  z  |      z   S t        | A  ||||      S c c}w c c}w c c}w c c}w Nr   r   r   r   r>   r*   r   )r   r   r   rL   r+   r   rO   r   r   r   r   r$   r   r#   r   r   r   r1   r`   r   r4   r   r   r   ru   rb   r  r  rY   r   r   s                r7   r   zfresnels._eval_aseries	  sV   ,a QZZ!**--		!A  1+61q1 !IacAg$66acAg,QqS1W-AaC81Q3GI 6A 6 AaC	1+61q1 ]]A-	!A#'0BBacAg,QqS1W-AaC!G<YqsQw=OOQ 6 6A )**1$qt*Q*A*()*1$qt*Q*A*ajj(bA QVV8s1a4ya03q!t9S!W3DD$q$qt*Q,'(*/!Q$*:; ; w$Qq$77#66 +*s   A'H#A-H(H-&H2)r   r   r   r   r$   r  r   rM   r  r   r   rc   r   r   r   rj  r   r   r   r   s   @r7   r   r   O	  s^    Sh IUUFE	m  	mae[3
#8 8r9   r   c                   v     e Zd ZdZeZej                  Ze	e
d               Zd Zd Zd Zd Zd Z fdZ xZS )	r   au  
    Fresnel integral C.

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

    This function is defined by

    .. math:: \operatorname{C}(z) = \int_0^z \cos{\frac{\pi}{2} t^2} \mathrm{d}t.

    It is an entire function.

    Examples
    ========

    >>> from sympy import I, oo, fresnelc
    >>> from sympy.abc import z

    Several special values are known:

    >>> fresnelc(0)
    0
    >>> fresnelc(oo)
    1/2
    >>> fresnelc(-oo)
    -1/2
    >>> fresnelc(I*oo)
    I/2
    >>> fresnelc(-I*oo)
    -I/2

    In general one can pull out factors of -1 and $i$ from the argument:

    >>> fresnelc(-z)
    -fresnelc(z)
    >>> fresnelc(I*z)
    I*fresnelc(z)

    The Fresnel C integral obeys the mirror symmetry
    $\overline{C(z)} = C(\bar{z})$:

    >>> from sympy import conjugate
    >>> conjugate(fresnelc(z))
    fresnelc(conjugate(z))

    Differentiation with respect to $z$ is supported:

    >>> from sympy import diff
    >>> diff(fresnelc(z), z)
    cos(pi*z**2/2)

    Defining the Fresnel functions via an integral:

    >>> from sympy import integrate, pi, cos, expand_func
    >>> integrate(cos(pi*z**2/2), z)
    fresnelc(z)*gamma(1/4)/(4*gamma(5/4))
    >>> expand_func(integrate(cos(pi*z**2/2), z))
    fresnelc(z)

    We can numerically evaluate the Fresnel integral to arbitrary precision
    on the whole complex plane:

    >>> fresnelc(2).evalf(30)
    0.488253406075340754500223503357

    >>> fresnelc(-2*I).evalf(30)
    -0.488253406075340754500223503357*I

    See Also
    ========

    fresnels: Fresnel sine integral.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Fresnel_integral
    .. [2] https://dlmf.nist.gov/7
    .. [3] https://mathworld.wolfram.com/FresnelIntegrals.html
    .. [4] https://functions.wolfram.com/GammaBetaErf/FresnelC
    .. [5] The converging factors for the fresnel integrals
            by John W. Wrench Jr. and Vicki Alley

    c                 V   | dk  rt         j                  S t        |      }t        |      dkD  r9|d   }t        dz   |dz  z  d| z  dz
  z  d| z  d| z  dz
  z  d| z  dz   z  z  |z  S ||dz   | z  z  t        d      d| z  z  t        d| z  z  z  z  d| z  dz   t        d| z        z  z  S )	Nr   r>   r   r*   r   r   r  r]   r  r  s       r7   rc   zfresnelc.taylor_termH
  s     q566M
A>"Q&"2&Qq!tQqS1W-qsAaC!G}acAg/FG1LLQTEA:~11b1Q3i)?@QqS1WiXYZ[X[nD\]]r9   c           	          t         j                  t        z
  dz  t        t         j                  t        z   dz  t	        t
              z  |z        t        t        t         j                  t        z
  dz  t	        t
              z  |z        z  z   z  S r  r  r   s      r7   r   zfresnelc._eval_rewrite_as_erfU
  r  r9   c           	          |t        t        dd      gt        j                  t        dd      gt        dz   |dz  z  dz        z  S )Nr>   r      r*   r  )r&   r   r   r   r   r   s      r7   r   zfresnelc._eval_rewrite_as_hyperX
  sA    5(1a.)AFFHQN+Cb!eVAqD[QS^TTTr9   c           
          t         |t        dd      z  z  t        d      t        |dz  d      z  t        | d      z  z  t	        g dgt        dd      gt        dd      dgt         dz   |dz  z  dz        z  S )Nr   r   r*   r>   r   r  )r   r   r   r   r'   r   s      r7   r   z!fresnelc._eval_rewrite_as_meijerg[
  s    1hq!n$$QQT1(=dA2qk(IJ"qcHQN#3hq!na5H2q5&QRTUQU+VX.YZ 	[r9   c                     ddl m} t        t        d|g      j                        } |t        t        |dz  z  dz        |d|f      S r  )rf  re  r   r   rg  r#   r   ri  s        r7   rj  z"fresnelc._eval_rewrite_as_Integral_
  r  r9   c                    ddl m} | j                  d   j                  |||      }|j	                  |d      }|t
        j                  u r+|j                  |dt        |      j                  rdnd      }|j                  r|S |t
        j                  t
        j                  fv r3|t
        j                  u rdnd}|t
        j                  z   |||      z   S | j                  |      S )	Nr   r   r   r   r   r   r>   r   )r   r   r+   r   r   r   r   r   r   r\  rP   rL   rN   r   r0   r  s           r7   r   zfresnelc._eval_as_leading_termd
  s    ,iil**14d*Cxx1~1$$$99Qbh.B.Bs9LD<<Jajj!"4"455QZZ'RAQVV8eAqk))99T?"r9   c           
      j   ddl m} |d   }|t        j                  t        j                   fv r| j                  d   }t        |      D cg c]b  }d|z  dz   |k  rUt        j                  |z  t        d|z  dz         z  dd|z  dz   z  |d|z  dz   z  z  dd|z  z  z  t        d|z        z  z  d }	}dd|z  z  gt        d|      D cg c]h  }d|z  dz   |k  r[t        j                  |z  t        d|z  dz
        z  dd|z  dz   z  |d|z  dz   z  z  dd|z  dz
  z  z  t        d|z  dz
        z  z  j c}z   }
|	D cg c]  }t        dt        z         |z   }	}|
D cg c]  }t        dt        z        |z   }
}|t        j                  u rdnd}|t        j                  z  t        |dz        t        |	 z  t        |dz        t        |
 z  z   j                  |t        dt        z        |z        z    |d||z  z  |      z   S t        | A  ||||      S c c}w c c}w c c}w c c}w r  )r   r   r   rL   r+   r   rO   r   r   r   r   r#   r   r$   r   r   r   r  s                r7   r   zfresnelc._eval_aseriess
  sR   ,a QZZ!**--		!A  (3acAgk !IacAg$66acAg,QqS1W-AaC81Q3GI 3A 3 AaC	1+61q1 ]]A-	!A#'0BBacAg,QqS1W-AaC!G<YqsQw=OOQ 6 6A )**1$qt*Q*A*()*1$qt*Q,*A*ajj(bA QVV8s1a4ya03q!t9S!W3DD$q$qt*Q,'(*/!Q$*:; ; w$Qq$77#36 +*s   A'H!A-H&H+%H0)r   r   r   r   r#   r  r   rM   r  r   r   rc   r   r   r   rj  r   r   r   r   s   @r7   r   r   	  s\    Sh IEEE	^  	^aU[3
#8 8r9   r   c                   @     e Zd ZdZed        Z fdZddZd Z xZ	S )r   zi
    Helper function to make the $\mathrm{erf}(z)$ function
    tractable for the Gruntz algorithm.

    c                 <    |j                   rt        j                  S y r   )rP   r   rM   )rW   rX   s     r7   rZ   z
_erfs.eval
  s    ;;55L r9   c                 P   ddl m} |d   }|t        j                  u r| j                  d   }t        |      D cg c]O  }dt        t              z  t        d|z        z  t        d       | z  z  t        |      z  d|z  d|z  dz   z  z  Q }	} |d|d|z  dz   z  z  |      }
t        |	 j                  |||      |
z   S |j                  t              }|t        j                  u r| j                  d   }t        |      D cg c]O  }dt        t              z  t        d|z        z  t        d       | z  z  t        |      z  d|z  d|z  dz   z  z  Q }	} |d|d|z  dz   z  z  |      }
t        |	 j                  |||      |
z   S t        | 9  ||||      S c c}w c c}w )Nr   r   r>   r*   r   )r   r   r   rL   r+   r   r   r   r   r   rr  rT   r
   r   r   )r1   r`   r   r4   r   r   r   ru   rb   lorY   r   s               r7   r   z_erfs._eval_aseries
  s   ,a AJJ		!ADI!HN?@ 48i!n,q0 /r. $Q<(+,Q3!A#'*:; NA NaAaC!Gna(AG**1a6:: **1-

?		!A EJ!HN?@ 48i!n,q0 /r. $Q<(+,Q3!A#'*:; NA NaAaC!Gna(AG**1a6:: w$Qq$77%NNs   AFAF#c                     |dk(  r3| j                   d   }dt        t              z  d|z  t        |      z  z   S t	        | |      )Nr>   r   r]   r*   )r+   r   r   r   r   r1   rA   ru   s      r7   rB   z_erfs.fdiff
  sB    q=		!Ad2h;1U1X--$T844r9   c                 X    t         j                  t        |      z
  t        |dz        z  S r   )r   rM   r;   r   r   s      r7   _eval_rewrite_as_intractablez"_erfs._eval_rewrite_as_intractable
  s!    AAqD	))r9   r   )
r   r   r   r   r   rZ   r   rB   r'  r   r   s   @r7   r   r   
  s+    
  865*r9   r   c                   F     e Zd ZdZ fdZddZd Z fdZd fd	Z xZ	S )	ra  z~
    Helper function to make the $\mathrm{Ei}(z)$ and $\mathrm{li}(z)$
    functions tractable for the Gruntz algorithm.

    c                 \   ddl m} |d   t        j                  t        j                  fvrt
        
|   ||||      S | j                  d   }t        |      D cg c]  }t        |      d|z  |dz   z  z   }} |d||dz   z  z  |      }	t        | j                  |||      |	z   S c c}w rv  )r   r   r   rL   rN   r   r   r+   r   r   r   rr  )r1   r`   r   r4   r   r   ru   rb   r"  r#  r   s             r7   r   z_eis._eval_aseries
  s    ,8AJJ(:(:;;7(E1d;;IIaL49!H=qYq\QqSAEN*==!AAJ,"Q&&q!T2Q66 >s   B)c                     |dk(  r.| j                   d   }t        j                  |z  t        |      z
  S t	        | |      )Nr>   r   )r+   r   rM   ra  r   r%  s      r7   rB   z
_eis.fdiff
  s:    q=		!A5519tAw&&$T844r9   c                 2    t        |       t        |      z  S r   )r   rM  r   s      r7   r'  z!_eis._eval_rewrite_as_intractable
  s    A2wr!u}r9   c                     | j                   d   j                  |d      }|j                  r- | j                  | j                    }|j	                  |||      S t
        |   |||      S )Nr   r   )r+   r   rP   r'  r   r   )r1   r4   r   r   rn  rt  r   s         r7   r   z_eis._eval_as_leading_term
  si    YYq\1%::111499=A**14d*CCw,QT,EEr9   c                     | j                   d   j                  |d      }|j                  r, | j                  | j                    }|j	                  |||      S t
        |   |||      S re   )r+   r   rP   r'  rr  r   rs  s          r7   rr  z_eis._eval_nseries
  sa    YYq\1%::111499=A??1a..w$Q400r9   r   rw  )
r   r   r   r   r   rB   r'  r   rr  r   r   s   @r7   ra  ra  
  s'    	75F1 1r9   ra  N)T)Pr   
sympy.corer   sympy.core.addr   sympy.core.cacher   sympy.core.functionr   r   r   sympy.core.logicr	   sympy.core.numbersr
   r   r   r   sympy.core.relationalr   sympy.core.powerr   sympy.core.singletonr   sympy.core.symbolr   r   sympy.core.sympifyr   (sympy.functions.combinatorial.factorialsr   r   r   $sympy.functions.elementary.complexesr   r   r   #sympy.functions.elementary.integersr   r   (sympy.functions.elementary.miscellaneousr   r   &sympy.functions.elementary.exponentialr   r   r    %sympy.functions.elementary.hyperbolicr!   r"   (sympy.functions.elementary.trigonometricr#   r$   r%   sympy.functions.special.hyperr&   r'   r8   r;   r   r   r  rF   rR   rS   rM  r   r  rY  r  r  r  r  r]  r^  r  r   r   r   ra  r   r9   r7   <module>rA     s  F "  $ O O % 7 7 '   " : & [ [ L L > ? F F < C C 8*l-/ l-^H? HD}B? }B@O!? O!bZ$_ Z$zP; P;f[o [Bt@ t@n}?_ }?@ Fe eNZ+ Z+@<JO <J~E	 EPJ@	 J@Xg
 gTn
 nj5-o 5-p^8 ^8B^8 ^8L.*O .*b*1? *1r9   