
    Цi3                       S r SSKJr  SSKJr  SSKJr  SSKJrJ	r	J
r
  SSKJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSKJr  SSKJrJrJr  SSKJrJ r J!r!  SSK"J#r#J$r$  SSK%J&r&J'r'  SSK(J)r)J*r*J+r+  SSK,J-r-J.r.  SSK/J0r0J1r1J2r2  SSK3J4r4J5r5  SAS jr6 " S S\5      r7 " S S\5      r8 " S S\5      r9 " S S\5      r: " S S\5      r; " S S \5      r< " S! S"\5      r= " S# S$\5      r> " S% S&\5      r?S' r@ " S( S)\5      rA " S* S+\5      rB " S, S-\5      rC " S. S/\C5      rD " S0 S1\C5      rE " S2 S3\C5      rF " S4 S5\C5      rG " S6 S7\5      rH " S8 S9\H5      rI " S: S;\H5      rJ " S< S=\5      rK " S> S?\5      rLg@)Bz|This module contains various functions that are special cases
of incomplete gamma functions. It should probably be renamed.     )
EulerGamma)Add)cacheit)FunctionArgumentIndexError
expand_mul)IpiRational)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                 j   U R                   S   R                  (       aA  U(       a(  SUS'   U R                  " U40 UD6[        R                  4$ U [        R                  4$ U(       a1  U R                   S   R                  " U40 UD6R                  5       u  p4OU R                   S   R                  5       u  p4U R                  U[        U-  -   5      U R                  U[        U-  -
  5      -   S-  nU R                  U[        U-  -   5      U R                  U[        U-  -
  5      -
  S[        -  -  nXV4$ )Nr   Fcomplex   )argsis_extended_realexpandr   Zeroas_real_imagfuncr	   )selfdeephintsxyr   ims          f/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sympy/functions/special/error_functions.pyreal_to_real_as_real_imagr6      s    yy|$$$E)KK..77!&&>!yy|""4151>>@1yy|((*
))A!G
tyyQqS1
11	4B
))A!G
tyyQqS1
1AaC	8B8O    c                      ^  \ rS rSrSrSrSS jrSS jr\S 5       r	\
\S 5       5       rS rS	 rS
 rS rS rS rS rS rS rS rSS jrS rS rSS jrU 4S jr\rSrU =r$ )erf0   aZ  
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                     US:X  a/  S[        U R                  S   S-  * 5      -  [        [        5      -  $ [	        X5      eN   r(   r   r   r)   r   r
   r   r/   argindexs     r5   fdiff	erf.fdiff   s<    q=S$))A,/)**4833$T44r7   c                     [         $ z(
Returns the inverse of this function.

erfinvr?   s     r5   inverseerf.inverse   s	    
 r7   c                 f   UR                   (       a  U[        R                  L a  [        R                  $ U[        R                  L a  [        R                  $ U[        R
                  L a  [        R                  $ UR                  (       a  [        R                  $ [        U[        5      (       a  UR                  S   $ [        U[        5      (       a   [        R                  UR                  S   -
  $ UR                  (       a  [        R                  $ [        U[        5      (       a-  UR                  S   R                  (       a  UR                  S   $ UR                  [        5      nU[        R                  [        R
                  4;   a  U$ UR!                  5       (       a
  U " U* 5      * $ g Nr   r=   )	is_Numberr   NaNInfinityOneNegativeInfinityNegativeOneis_zeror,   
isinstancerF   r)   erfcinverf2invextract_multiplicativelyr	   could_extract_minus_signclsargts      r5   evalerf.eval   s(   ==aee|uu

"uu***}}$vvc6""HHQKc7##55388A;&&;;66M c7##(;(;88A; ((+Q//00J ''))I: *r7   c                 J   U S:  d	  U S-  S:X  a  [         R                  $ [        U5      n[        U S-
  [        S5      -  5      n[	        U5      S:  a  US   * US-  -  U S-
  -  X-  -  $ S[         R
                  U-  -  X-  -  U [        U5      -  [        [        5      -  -  $ Nr   r(   r=   )	r   r,   r   r   lenrP   r   r   r
   nr2   previous_termsks       r5   taylor_termerf.taylor_term   s     q5AEQJ66M
Aq1uadl#A>"Q&&r**QT1QU;QSAA))AD0!IaL.b2IJJr7   c                 Z    U R                  U R                  S   R                  5       5      $ Nr   r.   r)   	conjugater/   s    r5   _eval_conjugateerf._eval_conjugate   "    yy1//122r7   c                 4    U R                   S   R                  $ rh   r)   r*   rk   s    r5   _eval_is_realerf._eval_is_real       yy|,,,r7   c                 r    U R                   S   R                  (       a  gU R                   S   R                  $ Nr   T)r)   	is_finiter*   rk   s    r5   _eval_is_finiteerf._eval_is_finite   s*    99Q<!!99Q<000r7   c                 4    U R                   S   R                  $ rh   r)   rQ   rk   s    r5   _eval_is_zeroerf._eval_is_zero       yy|###r7   c                     SSK Jn  [        US-  5      U-  [        R                  U" [        R
                  US-  5      [        [        5      -  -
  -  $ Nr   
uppergammar(   'sympy.functions.special.gamma_functionsr   r   r   rN   Halfr
   r/   zkwargsr   s       r5   _eval_rewrite_as_uppergammaerf._eval_rewrite_as_uppergamma   s=    FAqDz!|QUUZ1%=d2h%FFGGr7   c                     [         R                  [        -
  U-  [        [        5      -  n[         R                  [        -   [        U5      [        [        U5      -  -
  -  $ Nr   rN   r	   r   r
   fresnelcfresnelsr/   r   r   rY   s       r5   _eval_rewrite_as_fresnelserf._eval_rewrite_as_fresnels   @    uuqy!mDH$	HSMAhsmO;<<r7   c                     [         R                  [        -
  U-  [        [        5      -  n[         R                  [        -   [        U5      [        [        U5      -  -
  -  $ r   r   r   s       r5   _eval_rewrite_as_fresnelcerf._eval_rewrite_as_fresnelc   r   r7   c           
          U[        [        5      -  [        [        R                  // S/[        SS5      /US-  5      -  $ Nr   r(   r   r
   r%   r   r   r   r/   r   r   s      r5   _eval_rewrite_as_meijergerf._eval_rewrite_as_meijerg   s7    bz'166(Bhr1o5F1MMMr7   c                     SU-  [        [        5      -  [        [        R                  /S[        R                  -  /US-  * 5      -  $ Nr(      r   r
   r$   r   r   r   s      r5   _eval_rewrite_as_hypererf._eval_rewrite_as_hyper   s8    s48|E166(QqvvXJA>>>r7   c                     [        US-  5      U-  U[        [        R                  US-  5      -  [        [        5      -  -
  $ Nr(   r   expintr   r   r
   r   s      r5   _eval_rewrite_as_expinterf._eval_rewrite_as_expint   s6    AqDz!|aqvvq!t 44T"X===r7   c                 "   SSK Jn  U(       aW  U" X[        R                  5      nU[        R                  L a-  [        R
                  [        U* 5      [        US-  * 5      -  -   $ [        R                  [        U5      [        US-  * 5      -  -
  $ )Nr   )limitr(   )	sympy.series.limitsr   r   rM   rO   rP   _erfsr   rN   )r/   r   limitvarr   r   lims         r5   _eval_rewrite_as_tractableerf._eval_rewrite_as_tractable   sl    -QZZ0Ca(((}}uaRyadU';;;uuuQxQTE
***r7   c                 :    [         R                  [        U5      -
  $ r   )r   rN   erfcr   s      r5   _eval_rewrite_as_erfcerf._eval_rewrite_as_erfc   s    uutAwr7   c                 6    [         * [        [         U-  5      -  $ r   r	   erfir   s      r5   _eval_rewrite_as_erfierf._eval_rewrite_as_erfi   s    r$qs)|r7   c                 D   U R                   S   R                  XUS9nUR                  US5      nU[        R                  L a  UR                  USUS:X  a  SOSS9nXR                  ;   a&  UR                  (       a  SU-  [        [        5      -  $ U R                  U5      $ )Nr   logxcdirr   -+dirr(   )r)   as_leading_termsubsr   ComplexInfinityr   free_symbolsrQ   r   r
   r.   r/   r2   r   r   rY   arg0s         r5   _eval_as_leading_termerf._eval_as_leading_term   s    iil**1d*Cxx1~1$$$99Qdbjsc9BD   T\\S5b>!99T?"r7   c                   > SSK Jn  US   nU[        R                  [        R                  4;   a  U R
                  S   n UR                  U5      u  pU	* n	U	R                  (       a  [        X-  5      n
[        U
5       Vs/ s H:  n[        R                  U-  [        SU-  S-
  5      -  USU-  S-   -  SU-  -  -  PM<     snU" SXz-  -  U5      /-   n[        R                  [        US-  * 5      [!        ["        5      -  [%        U6 -  -
  $ [&        [(        U ]W  XX45      $ ! [        [        4 a    U s $ f = fs  snf Nr   Orderr(   r=   )sympy.series.orderr   r   rM   rO   r)   leadterm
ValueErrorNotImplementedErroris_positiver   rangerP   r   rN   r   r   r
   r   superr9   _eval_aseries)r/   rb   args0r2   r   r   pointr   _exnewnrd   s	__class__s                r5   r   erf._eval_aseries   s1   ,aQZZ!3!344		!A

1 B~~qt}#Dk+) ]]A%
1Q37(;;q1Q37|aQRd?RS)+.3AagIq.A-BCuuQTE
48 3sAw>>>S$-a@@  34 +s   D# AD;#D87D8 r=   r   rh   ) __name__
__module____qualname____firstlineno____doc__
unbranchedrA   rG   classmethodr[   staticmethodr   re   rl   rq   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r6   r-   __static_attributes____classcell__r   s   @r5   r9   r9   0   s    JX J5  B 	K  	K3-1$H==N?>+	#A* -Lr7   r9   c                       \ rS rSrSrSrSS jrSS jr\S 5       r	\
\S 5       5       rS rS	 rSS jrS rS rS rS rS rS rS rS rS rSS jr\rS rSrg
)r   i  aR  
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                     US:X  a/  S[        U R                  S   S-  * 5      -  [        [        5      -  $ [	        X5      e)Nr=   r_   r   r(   r>   r?   s     r5   rA   
erfc.fdiff`  s<    q=c499Q<?*++DH44$T44r7   c                     [         $ rD   rS   r?   s     r5   rG   erfc.inversef  s	    
 r7   c                    UR                   (       ag  U[        R                  L a  [        R                  $ U[        R                  L a  [        R                  $ UR
                  (       a  [        R                  $ [        U[        5      (       a   [        R                  UR                  S   -
  $ [        U[        5      (       a  UR                  S   $ UR
                  (       a  [        R                  $ UR                  [        5      nU[        R                  [        R                  4;   a  U* $ UR                  5       (       a  SU " U* 5      -
  $ g )Nr   r(   )rK   r   rL   rM   r,   rQ   rN   rR   rF   r)   rS   rU   r	   rO   rV   rW   s      r5   r[   	erfc.evalm  s    ==aee|uu

"vvuuc6""55388A;&&c7##88A;;;55L ((+Q//004K ''))sC4y=  *r7   c                 v   U S:X  a  [         R                  $ U S:  d	  U S-  S:X  a  [         R                  $ [        U5      n[	        U S-
  [        S5      -  5      n[        U5      S:  a  US   * US-  -  U S-
  -  X-  -  $ S[         R                  U-  -  X-  -  U [        U5      -  [        [        5      -  -  $ r^   )
r   rN   r,   r   r   r`   rP   r   r   r
   ra   s       r5   re   erfc.taylor_term  s     655LUa!eqj66M
Aq1uadl#A>"Q&&r**QT1QU;QSAA!--**QT11Yq\>$r(3JKKr7   c                 Z    U R                  U R                  S   R                  5       5      $ rh   ri   rk   s    r5   rl   erfc._eval_conjugate  rn   r7   c                 4    U R                   S   R                  $ rh   rp   rk   s    r5   rq   erfc._eval_is_real  rs   r7   Nc                 J    U R                  [        5      R                  SSUS9$ N	tractableT)r0   r   rewriter9   r/   r   r   r   s       r5   r   erfc._eval_rewrite_as_tractable  #    ||C ((4((SSr7   c                 :    [         R                  [        U5      -
  $ r   )r   rN   r9   r   s      r5   _eval_rewrite_as_erferfc._eval_rewrite_as_erf  s    uus1v~r7   c                 V    [         R                  [        [        [        U-  5      -  -   $ r   )r   rN   r	   r   r   s      r5   r   erfc._eval_rewrite_as_erfi  s    uuqac{""r7   c                     [         R                  [        -
  U-  [        [        5      -  n[         R                  [         R                  [        -   [        U5      [        [        U5      -  -
  -  -
  $ r   r   r   s       r5   r   erfc._eval_rewrite_as_fresnels  sI    uuqy!mDH$uu	HSMAhsmO$CDDDr7   c                     [         R                  [        -
  U-  [        [        5      -  n[         R                  [         R                  [        -   [        U5      [        [        U5      -  -
  -  -
  $ r   r   r   s       r5   r   erfc._eval_rewrite_as_fresnelc  sI    uuQwk$r("uu	HSMAhsmO$CDDDr7   c                     [         R                  U[        [        5      -  [	        [         R
                  // S/[        SS5      /US-  5      -  -
  $ r   )r   rN   r   r
   r%   r   r   r   s      r5   r   erfc._eval_rewrite_as_meijerg  sC    uuqbz'166(Bhr1o=NPQSTPT"UUUUr7   c                     [         R                  SU-  [        [        5      -  [	        [         R
                  /S[         R
                  -  /US-  * 5      -  -
  $ r   )r   rN   r   r
   r$   r   r   s      r5   r   erfc._eval_rewrite_as_hyper  sA    uuqs48|E166(QqvvXJA$FFFFr7   c                     SSK Jn  [        R                  [	        US-  5      U-  [        R                  U" [        R
                  US-  5      [	        [        5      -  -
  -  -
  $ r   )r   r   r   rN   r   r   r
   r   s       r5   r    erfc._eval_rewrite_as_uppergamma  sF    FuutAqDz!|QUUZ1-Ed2h-N%NOOOr7   c                     [         R                  [        US-  5      U-  -
  U[        [         R                  US-  5      -  [        [
        5      -  -   $ r   )r   rN   r   r   r   r
   r   s      r5   r   erfc._eval_rewrite_as_expint  s?    uutAqDz!|#aqvvq!t(<&<T"X&EEEr7   c                 ,    U R                  [        5      $ r   r   r/   r1   s     r5   _eval_expand_funcerfc._eval_expand_func      ||C  r7   c                    U R                   S   R                  XUS9nUR                  US5      nU[        R                  L a  UR                  USUS:X  a  SOSS9nUR                  (       a  [        R                  $ U R                  U5      $ )Nr   r   r   r   r   r   )	r)   r   r   r   r   r   rQ   rN   r.   r   s         r5   r   erfc._eval_as_leading_term  sv    iil**1d*Cxx1~1$$$99Qdbjsc9BD<<55L99T?"r7   c                 h    [         R                  [        U R                  6 R	                  XX45      -
  $ r   )r   rN   r9   r)   r   )r/   rb   r   r2   r   s        r5   r   erfc._eval_aseries  s&    uusDII44QqGGGr7   r   r   r   rh   )r   r   r   r   r   r   rA   rG   r   r[   r   r   re   rl   rq   r   r  r   r   r   r   r   r   r   r  r   r6   r-   r   r   r   r7   r5   r   r     s    JX J5 ! !6 L  L3-T#EEVGPF!	# -LHr7   r   c                      ^  \ rS rSrSrSrSS jr\S 5       r\	\
S 5       5       rS rS rS	 rSS
 jrS rS rS rS rS rS rS rS rS r\rSS jrU 4S jrSrU =r$ )r   i  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                     US:X  a.  S[        U R                  S   S-  5      -  [        [        5      -  $ [	        X5      er<   r>   r?   s     r5   rA   
erfi.fdiff  s9    q=S1q))$r(22$T44r7   c                 :   UR                   (       ag  U[        R                  L a  [        R                  $ UR                  (       a  [        R                  $ U[        R
                  L a  [        R
                  $ UR                  (       a  [        R                  $ UR                  5       (       a
  U " U* 5      * $ UR                  [        5      nUb  U[        R
                  L a  [        $ [        U[        5      (       a  [        UR                  S   -  $ [        U[        5      (       a'  [        [        R                  UR                  S   -
  -  $ [        U[        5      (       a5  UR                  S   R                  (       a  [        UR                  S   -  $ g g g rJ   )rK   r   rL   rQ   r,   rM   rV   rU   r	   rR   rF   r)   rS   rN   rT   rX   r   nzs      r5   r[   	erfi.eval"  s   ;;AEEzuuvvajjzz!9966M %%''G8O ''*>QZZ"f%%|#"g&&!%%"''!*,--"g&&2771:+=+=|# ,>& r7   c                     U S:  d	  U S-  S:X  a  [         R                  $ [        U5      n[        U S-
  [        S5      -  5      n[	        U5      S:  a  US   US-  -  U S-
  -  X-  -  $ SX-  -  U [        U5      -  [        [        5      -  -  $ r^   )r   r,   r   r   r`   r   r   r
   ra   s       r5   re   erfi.taylor_term@  s     q5AEQJ66M
Aq1uadl#A>"Q&%b)AqD0AE:AC@@14x9Q<R!899r7   c                 Z    U R                  U R                  S   R                  5       5      $ rh   ri   rk   s    r5   rl   erfi._eval_conjugateM  rn   r7   c                 4    U R                   S   R                  $ rh   rp   rk   s    r5   _eval_is_extended_realerfi._eval_is_extended_realP  rs   r7   c                 4    U R                   S   R                  $ rh   rz   rk   s    r5   r{   erfi._eval_is_zeroS  r}   r7   c                 J    U R                  [        5      R                  SSUS9$ r   r   r   s       r5   r   erfi._eval_rewrite_as_tractableV  r   r7   c                 6    [         * [        [         U-  5      -  $ r   )r	   r9   r   s      r5   r  erfi._eval_rewrite_as_erfY  s    r#ac({r7   c                 B    [         [        [         U-  5      -  [         -
  $ r   )r	   r   r   s      r5   r   erfi._eval_rewrite_as_erfc\  s    ac{Qr7   c                     [         R                  [        -   U-  [        [        5      -  n[         R                  [        -
  [        U5      [        [        U5      -  -
  -  $ r   r   r   s       r5   r   erfi._eval_rewrite_as_fresnels_  r   r7   c                     [         R                  [        -   U-  [        [        5      -  n[         R                  [        -
  [        U5      [        [        U5      -  -
  -  $ r   r   r   s       r5   r   erfi._eval_rewrite_as_fresnelcc  r   r7   c           
          U[        [        5      -  [        [        R                  // S/[        SS5      /US-  * 5      -  $ r   r   r   s      r5   r   erfi._eval_rewrite_as_meijergg  s9    bz'166(Bhr1o5FANNNr7   c                     SU-  [        [        5      -  [        [        R                  /S[        R                  -  /US-  5      -  $ r   r   r   s      r5   r   erfi._eval_rewrite_as_hyperj  s6    s48|E166(QqvvXJ1===r7   c                     SSK Jn  [        US-  * 5      U-  U" [        R                  US-  * 5      [        [
        5      -  [        R                  -
  -  $ r   )r   r   r   r   r   r
   rN   r   s       r5   r    erfi._eval_rewrite_as_uppergammam  sA    FQTE{1}j!Q$7R@155HIIr7   c                     [        US-  * 5      U-  U[        [        R                  US-  * 5      -  [        [        5      -  -
  $ r   r   r   s      r5   r   erfi._eval_rewrite_as_expintq  s:    QTE{1}qA!66tBx???r7   c                 ,    U R                  [        5      $ r   r   r  s     r5   r  erfi._eval_expand_funct  r  r7   c                 0   U R                   S   R                  XUS9nUR                  US5      nXR                  ;   a&  UR                  (       a  SU-  [        [        5      -  $ UR                  (       a  U R                  U5      $ U R                  U5      $ )Nr   r   r(   )	r)   r   r   r   rQ   r   r
   rv   r.   r   s         r5   r   erfi._eval_as_leading_termy  su    iil**1d*Cxx1~   T\\S5b>!^^99T?"yy~r7   c                   > SSK Jn  US   nU[        R                  L a  U R                  S   n[        U5       Vs/ s H&  n[        SU-  S-
  5      SU-  USU-  S-   -  -  -  PM(     snU" SXq-  -  U5      /-   n	[        * [        US-  5      [        [        5      -  [        U	6 -  -   $ [        [        U ];  XX45      $ s  snf r   )r   r   r   rM   r)   r   r   r	   r   r   r
   r   r   r   r   r/   rb   r   r2   r   r   r   r   rd   r   r   s             r5   r   erfi._eval_aseries  s    ,aAJJ		!A"1X'% AaC!G$1q1Q37|(;<%'*/!$*:);<A2QT48+sAw666T4.qAA	's   -B?r   r   r   rh   )r   r   r   r   r   r   rA   r   r[   r   r   re   rl   r'  r{   r   r  r   r   r   r   r   r   r   r  r6   r-   r   r   r   r   r   s   @r5   r   r     s    GR J5 $ $: 	:  	:3-$T==O>J@! -L
B 
Br7   r   c                   |    \ rS rSrSrS r\S 5       rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rSrg)erf2i  a  
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                     U R                   u  p#US:X  a"  S[        US-  * 5      -  [        [        5      -  $ US:X  a"  S[        US-  * 5      -  [        [        5      -  $ [	        X5      e)Nr=   r_   r(   )r)   r   r   r
   r   r/   r@   r2   r3   s       r5   rA   
erf2.fdiff  s`    yyq=c1a4%j=b))]S!Q$Z<R(($T44r7   c                 `   [         R                  [         R                  [         R                  4nU[         R                  L d  U[         R                  L a  [         R                  $ X:X  a  [         R                  $ X;   d  X#;   a  [        U5      [        U5      -
  $ [        U[        5      (       a"  UR                  S   U:X  a  UR                  S   $ UR                  (       dU  UR                  (       dD  UR                  (       a  UR                  (       d"  UR                  (       a(  UR                  (       a  [        U5      [        U5      -
  $ UR                  5       nUR                  5       nU(       a  U(       a  U " U* U* 5      * $ U(       d  U(       a  [        U5      [        U5      -
  $ g rJ   )r   rM   rO   r,   rL   r9   rR   rT   r)   rQ   r*   is_infiniterV   )rX   r2   r3   chksign_xsign_ys         r5   r[   	erf2.eval  s   zz1--qvv6:aee55LV66MXq6CF?"a!!affQi1n66!999		Q%7%7AMM""q}}q6CF?" ++-++-vQBK<q6#a&=  r7   c                     U R                  U R                  S   R                  5       U R                  S   R                  5       5      $ rJ   ri   rk   s    r5   rl   erf2._eval_conjugate  s5    yy1//1499Q<3I3I3KLLr7   c                 t    U R                   S   R                  =(       a    U R                   S   R                  $ rJ   rp   rk   s    r5   r'  erf2._eval_is_extended_real  s)    yy|,,N11N1NNr7   c                 0    [        U5      [        U5      -
  $ r   r9   r/   r2   r3   r   s       r5   r  erf2._eval_rewrite_as_erf  s    1vAr7   c                 0    [        U5      [        U5      -
  $ r   r   rU  s       r5   r   erf2._eval_rewrite_as_erfc  s    Awa  r7   c                 Z    [         [        [         U-  5      [        [         U-  5      -
  -  $ r   r   rU  s       r5   r   erf2._eval_rewrite_as_erfi  s"    $qs)D1I%&&r7   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r9   r   r   rU  s       r5   r   erf2._eval_rewrite_as_fresnels  '    1v~~h'#a&..*BBBr7   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r9   r   r   rU  s       r5   r   erf2._eval_rewrite_as_fresnelc
  r^  r7   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r9   r   r%   rU  s       r5   r   erf2._eval_rewrite_as_meijerg  s'    1v~~g&Q)@@@r7   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r9   r   r$   rU  s       r5   r   erf2._eval_rewrite_as_hyper  s'    1v~~e$s1v~~e'<<<r7   c                 D   SSK Jn  [        US-  5      U-  [        R                  U" [        R
                  US-  5      [        [        5      -  -
  -  [        US-  5      U-  [        R                  U" [        R
                  US-  5      [        [        5      -  -
  -  -
  $ r   r   )r/   r2   r3   r   r   s        r5   r    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r7   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r9   r   r   rU  s       r5   r   erf2._eval_rewrite_as_expint  s'    1v~~f%Av(>>>r7   c                 ,    U R                  [        5      $ r   r   r  s     r5   r  erf2._eval_expand_func  r  r7   c                 &    [        U R                  6 $ r   )r   r)   rk   s    r5   r{   erf2._eval_is_zero  s    dii  r7   r   N)r   r   r   r   r   rA   r   r[   rl   r'  r  r   r   r   r   r   r   r   r   r  r{   r   r   r7   r5   rE  rE    si    BJ5 ! !0MO!'CCA=F
?!!r7   rE  c                   H    \ rS rSrSrS
S jrS
S jr\S 5       rS r	S r
Srg	)rF   i!  a  
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                     US:X  aK  [        [        5      [        U R                  U R                  S   5      S-  5      -  [
        R                  -  $ [        X5      eNr=   r   r(   r   r
   r   r.   r)   r   r   r   r?   s     r5   rA   erfinv.fdiffT  sG    q=8C		$))A, 7 :;;AFFBB$T44r7   c                     [         $ rD   rT  r?   s     r5   rG   erfinv.inverseZ  s	    
 
r7   c                    U[         R                  L a  [         R                  $ U[         R                  L a  [         R                  $ UR                  (       a  [         R
                  $ U[         R                  L a  [         R                  $ [        U[        5      (       a-  UR                  S   R                  (       a  UR                  S   $ UR                  (       a  [         R
                  $ UR                  S5      nUbE  [        U[        5      (       a/  UR                  S   R                  (       a  UR                  S   * $ g g g Nr   r   )r   rL   rP   rO   rQ   r,   rN   rM   rR   r9   r)   r*   rU   r  s      r5   r[   erfinv.evala  s    :55L!--%%%YY66M!%%Z::a!&&)"<"<66!99966M ''+>z"c22
7T7TGGAJ; 8U2>r7   c                     [        SU-
  5      $ Nr=   r   r   s      r5   _eval_rewrite_as_erfcinverfinv._eval_rewrite_as_erfcinvw  s    aclr7   c                 4    U R                   S   R                  $ rh   rz   rk   s    r5   r{   erfinv._eval_is_zeroz  r}   r7   r   Nr   )r   r   r   r   r   rA   rG   r   r[   ry  r{   r   r   r7   r5   rF   rF   !  s0    /d5  *$r7   rF   c                   N    \ rS rSrSrSS jrSS jr\S 5       rS r	S r
S rS	rg
)rS   i~  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                     US:X  aL  [        [        5      * [        U R                  U R                  S   5      S-  5      -  [
        R                  -  $ [        X5      ero  rp  r?   s     r5   rA   erfcinv.fdiff  sI    q=H9S499Q<!8!!;<<QVVCC$T44r7   c                     [         $ rD   rX  r?   s     r5   rG   erfcinv.inverse  s	    
 r7   c                 @   U[         R                  L a  [         R                  $ UR                  (       a  [         R                  $ U[         R                  L a  [         R
                  $ US:X  a  [         R                  $ UR                  (       a  [         R                  $ g r   )r   rL   rQ   rM   rN   r,   rO   rX   r   s     r5   r[   erfcinv.eval  sd    :55LYY::!%%Z66M!V%%%99:: r7   c                     [        SU-
  5      $ rx  rE   r   s      r5   _eval_rewrite_as_erfinverfcinv._eval_rewrite_as_erfinv  s    ac{r7   c                 :    U R                   S   S-
  R                  $ rJ   rz   rk   s    r5   r{   erfcinv._eval_is_zero  s    		!q )))r7   c                 4    U R                   S   R                  $ rh   rz   rk   s    r5   _eval_is_infiniteerfcinv._eval_is_infinite  r}   r7   r   Nr   )r   r   r   r   r   rA   rG   r   r[   r  r{   r  r   r   r7   r5   rS   rS   ~  s5    )X5  *$r7   rS   c                   4    \ rS rSrSrS r\S 5       rS rSr	g)rT   i  a  
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                    U R                   u  p#US:X  a#  [        U R                  X#5      S-  US-  -
  5      $ US:X  a>  [        [        5      [
        R                  -  [        U R                  X#5      S-  5      -  $ [        X5      eNr=   r(   )r)   r   r.   r   r
   r   r   r   rG  s       r5   rA   erf2inv.fdiff  sp    yyq=tyy~q(A-..]8AFF?3tyy~q'8#999$T44r7   c                    U[         R                  L d  U[         R                  L a  [         R                  $ UR                  (       a!  UR                  (       a  [         R                  $ UR                  (       a#  U[         R                  L a  [         R
                  $ U[         R                  L a!  UR                  (       a  [         R                  $ UR                  (       a  [        U5      $ U[         R
                  L a  [        U* 5      $ UR                  (       a  U$ U[         R
                  L a  [        U5      $ UR                  (       a,  UR                  (       a  [         R                  $ [        U5      $ UR                  (       a  U$ g r   )r   rL   rQ   r,   rN   rM   rF   rS   )rX   r2   r3   s      r5   r[   erf2inv.eval  s    :aee55LYY19966MYY1:::!%%ZAII55LYY!9!**_A2;YYH!**_!999yyvvay 99H r7   c                 h    U R                   u  pUR                  (       a  UR                  (       a  gg g )NTrz   )r/   r2   r3   s      r5   r{   erf2inv._eval_is_zero(  s$    yy99 #9r7   r   N)
r   r   r   r   r   rA   r   r[   r{   r   r   r7   r5   rT   rT     s&    0f5  4r7   rT   c                      ^  \ rS rSrSr\S 5       rSS jrS rS r	S r
S rS	 r\r\r\rSS
 jrS rSU 4S jjrSU 4S jjrU 4S jrSrU =r$ )Eii1  a   
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                    UR                   (       a  [        R                  $ U[        R                  L a  [        R                  $ U[        R                  L a  [        R                  $ UR                   (       a  [        R                  $ UR                  5       u  p#U(       a  [        U5      S[        -  [        -  U-  -   $ g r   )	rQ   r   rO   rM   r,   extract_branch_factorr  r	   r
   rX   r   r   rb   s       r5   r[   Ei.eval  s    99%%%!**_::!$$$66M99%%%'')b6AaCF1H$$ r7   c                 p    [        U R                  S   5      nUS:X  a  [        U5      U-  $ [        X5      erJ   )r   r)   r   r   r/   r@   rY   s      r5   rA   Ei.fdiff  s4    1&q=s8C<$T44r7   c                     U R                   S   [        S5      -  R                  (       a3  [        R                  " X5      [
        [        -  R	                  U5      -   $ [        R                  " X5      $ ru  )r)   r   r   r   _eval_evalfr	   r
   r/   precs     r5   r  Ei._eval_evalf  sR    IIaLB'44''3qt6H6H6NNN##D//r7   c                 V    SSK Jn  U" S[        S5      U-  5      * [        [        -  -
  $ )Nr   r   r   )r   r   r   r	   r
   r   s       r5   r   Ei._eval_rewrite_as_uppergamma  s)    F 1jnQ.//!B$66r7   c                 P    [        S[        S5      U-  5      * [        [        -  -
  $ )Nr=   r   )r   r   r	   r
   r   s      r5   r   Ei._eval_rewrite_as_expint  s$    q*R.*++ad22r7   c                     [        U[        5      (       a  [        UR                  S   5      $ [        [	        U5      5      $ rh   )rR   r   lir)   r   r   s      r5   _eval_rewrite_as_liEi._eval_rewrite_as_li  s1    aaffQi= 
 #a&zr7   c                     UR                   (       a%  [        U5      [        U5      -   [        [        -  -
  $ [        U5      [        U5      -   $ r   )is_negativeShiChir	   r
   r   s      r5   _eval_rewrite_as_SiEi._eval_rewrite_as_Si  s6    ==q6CF?QrT))q6CF?"r7   c                 0    [        U5      [        U5      -  $ r   )r   _eisr   s       r5   r   Ei._eval_rewrite_as_tractable  s    1vQr7   c                     SSK Jn  [        [        SU/5      R                  5      nU" [
        R                  U-  U-  U[
        R                  U45      $ Nr   IntegralrZ   )sympy.integrals.integralsr  r   r   namer   Exp1rO   r/   r   r   r  rZ   s        r5   _eval_rewrite_as_IntegralEi._eval_rewrite_as_Integral  sE    6'aS1667	!a););Q%?@@r7   c                   > SSK Jn  U R                  S   R                  US5      nU R                  S   R	                  XS9nUR                  X5      nUR                  (       aq  UR                  U5      u  pxUc  [        U5      OUn[        U5      X-  -   [        -   U" U5      R                  (       a  [        [        -  -
  $ [        R                  -
  $ [        T	U ]A  XUS9$ )Nr   )r   )r   r   )sympyr   r)   r   r   r   rQ   as_coeff_exponentr   r   r  r	   r
   r   r,   r   r   )
r/   r2   r   r   r   x0rY   cer   s
            r5   r   Ei._eval_as_leading_term  s    YYq\1%iil**1*8wwq::((+DA!\3q6tDq6AF?Z/4,,": :23&&: :w,Q,EEr7   c                    > U R                   S   R                  US5      nUR                  (       a+  U R                  " U R                   6 nUR	                  XU5      $ [
        TU ]  XU5      $ rh   )r)   r   rQ   r  _eval_nseriesr   r/   r2   rb   r   r   r  fr   s          r5   r  Ei._eval_nseries  s[    YYq\1%::(($))4A??1..w$Q400r7   c                 2  > SSK Jn  US   nU[        R                  L a`  U R                  S   n[        U5       Vs/ s H  n[        U5      Xx-  -  PM     snU" SXq-  -  U5      /-   n	[        U5      U-  [        U	6 -  $ [        [        U ]/  XX45      $ s  snf Nr   r   r=   )r   r   r   rM   r)   r   r   r   r   r   r  r   rB  s             r5   r   Ei._eval_aseries  s    ,aAJJ		!A05a911&91QT61%&'AF1HQ''R,Qq??	 :s   Br   r   r   rh   r   )r   r   r   r   r   r   r[   rA   r  r   r   r  r  _eval_rewrite_as_Ci_eval_rewrite_as_Chi_eval_rewrite_as_Shir   r  r   r  r   r   r   r   s   @r5   r  r  1  sr    Tn % %50
73#
 ... A

F1
@ 
@r7   r  c                   |   ^  \ rS rSrSr\S 5       rS rS rS r	S r
S r\r\r\rSU 4S	 jjrU 4S
 jrS rSrU =r$ )r   i  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           	         SSK JnJn  [        U5      nX:w  a  [	        XR5      $ UR
                  (       a  US::  d%  UR
                  (       d:  SU-  R
                  (       a&  [        [        X!S-
  -  U" SU-
  U5      -  5      5      $ UR                  5       u  p&U[        R                  L a  g UR                  (       a^  US:  d  g [	        X5      S[        -  [        -  U-  [        R                  US-
  -  -  [        US-
  5      -  [        U5      US-
  -  -  -
  $ [        S[        -  [        -  U-  U-  5      S-
  X!S-
  -  -  U" SU-
  5      -  [	        X5      -   $ )Nr   )gammar   r(   r=   )r   r  r   r   r   
is_Integerr   r  r   r,   
is_integerr
   r	   rP   r   r   )rX   nur   r  r   nu2rb   s          r5   r[   expint.evalP  s.   On9#>!==R1WR]]"?P?Pj!VZB5J)JKLL &&(;==6"=B$q&(1==26229R!V3DDZPQ]UWZ[U[E\\] ] !Br	!$q(!1f+5eAFmCfRmSSr7   c           	          U R                   u  p#US:X  a   X2S-
  -  * [        / SS/SSSU-
  // U5      -  $ US:X  a  [        US-
  U5      * $ [        X5      ero  )r)   r%   r   r   )r/   r@   r  r   s       r5   rA   expint.fdifff  sh    		q=QK<QFQ1r6NB JJJ]261%%%$T44r7   c                 6    SSK Jn  X!S-
  -  U" SU-
  U5      -  $ )Nr   r   r=   )r   r   )r/   r  r   r   r   s        r5   r   "expint._eval_rewrite_as_uppergammao  s!    F6{:a"fa000r7   c                    US:X  a2  [        U[        [        * [        -  5      -  5      * [        [        -  -
  $ UR                  (       a  US:  a  [        U5      * nXAS-
  -  [        US-
  5      -  [        U5      R                  [         5      -  [        U5      [        US-
  5      -  [        [        US-
  5       Vs/ s H  n[        X-
  S-
  5      XE-  -  PM     sn6 -  -   $ U $ s  snf r  )r  r   r	   r
   r  r   r   E1r   r   r   r   )r/   r  r   r   r2   rd   s         r5   _eval_rewrite_as_Eiexpint._eval_rewrite_as_Eis  s    7qA2b5))**QrT11]]rAvAAAv;ya00Ar1BBAya((%Q-H-Qi
+AD0-HIJJ J K Is   >C'c                 V    U R                  [        5      R                   " [        40 UD6$ r   )r   r  r   r  s     r5   r  expint._eval_expand_func  s!    ||B''8%88r7   c                 @    US:w  a  U $ [        U5      [        U5      -
  $ rx  )r  r  )r/   r  r   r   s       r5   r  expint._eval_rewrite_as_Si  s     7K1vAr7   c                 n  > U R                   S   R                  U5      (       d  U R                   S   nUS:X  a+  U R                  " U R                   6 nUR                  XU5      $ UR                  (       a1  US:  a+  U R
                  " U R                   6 nUR                  XU5      $ [        TU ]  XU5      $ rJ   )r)   hasr  r  r  r  r   )r/   r2   rb   r   r   r  r  r   s          r5   r  expint._eval_nseries  s    yy|""1BQw,,dii8qT2226,,dii8qT22w$Q400r7   c                 z  > SSK Jn  US   nU R                  S   nU[        R                  L au  U R                  S   n[        U5       V	s/ s H'  n	[        R                  U	-  [        Xy5      -  X-  -  PM)     sn	U" SX-  -  U5      /-   n
[        U* 5      U-  [        U
6 -  $ [        [        U ]3  XX45      $ s  sn	f r  )r   r   r)   r   rM   r   rP   r   r   r   r   r   r   )r/   rb   r   r2   r   r   r   r  r   rd   r   r   s              r5   r   expint._eval_aseries  s    ,aYYq\AJJ		!AKPQR8T8a!OB$::QTA8TX]^_`a`d^dfgXhWiiAGAIa((VT01CC Us   .B8c                     SSK Jn  U R                  u  pE[        [	        SU5      R
                  5      nU" Xd* -  [        U* U-  5      -  US[        R                  45      $ Nr   r  rZ   r=   )	r  r  r)   r   r   r  r   r   rM   )r/   r)   r   r  rb   r2   rZ   s          r5   r   expint._eval_rewrite_as_Integral  sS    6yy'T27782QBqD	)Aq!**+=>>r7   r   r  )r   r   r   r   r   r   r[   rA   r   r  r  r  r  r  r  r  r   r  r   r   r   s   @r5   r   r     sb    dN T T*51
9 ...	1
D? ?r7   r   c                     [        SU 5      $ )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   )r   s    r5   r  r    s    @ !Q<r7   c                       \ rS rSrSr\S 5       rSS jrS rS r	S r
S rS	 r\rS
 r\rS rS rSS jrSS jrS rSrg)r  i  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                    UR                   (       a  [        R                  $ U[        R                  L a  [        R                  $ U[        R
                  L a  [        R
                  $ UR                   (       a  [        R                  $ g r   )rQ   r   r,   rN   rO   rM   r  s     r5   r[   li.eval/  sS    9966M!%%Z%%%!**_::9966M r7   c                 z    U R                   S   nUS:X  a  [        R                  [        U5      -  $ [	        X5      erJ   r)   r   rN   r   r   r  s      r5   rA   li.fdiff:  4    iilq=553s8##$T44r7   c                     U R                   S   nUR                  (       d  U R                  UR                  5       5      $ g rh   )r)   is_extended_negativer.   rj   r/   r   s     r5   rl   li._eval_conjugateA  s2    IIaL%%99Q[[]++ &r7   c                 0    [        U5      [        S5      -   $ r   )Lir  r   s      r5   _eval_rewrite_as_Lili._eval_rewrite_as_LiG      !ur!u}r7   c                 *    [        [        U5      5      $ r   )r  r   r   s      r5   r  li._eval_rewrite_as_EiJ  s    #a&zr7   c           	          SSK Jn  U" S[        U5      * 5      * [        R                  [        [        U5      5      [        [        R
                  [        U5      -  5      -
  -  -   [        [        U5      * 5      -
  $ Nr   r   )r   r   r   r   r   rN   r   s       r5   r   li._eval_rewrite_as_uppergammaM  s`    FAAw''CFc!%%A,&7789;>Aw<H 	Ir7   c                 N   [        [        [        U5      -  5      [        [        [        [        U5      -  5      -  -
  [        R
                  [        [        R                  [        U5      -  5      [        [        U5      5      -
  -  -
  [        [        [        U5      -  5      -
  $ r   )Cir	   r   Sir   r   rN   r   s      r5   r  li._eval_rewrite_as_SiR  sp    1SV8qAc!fH~-AEE#a&L)CAK789;>qQx=I 	Jr7   c                     [        [        U5      5      [        [        U5      5      -
  [        R                  [        [        R
                  [        U5      -  5      [        [        U5      5      -
  -  -
  $ r   )r  r   r  r   r   rN   r   s      r5   r  li._eval_rewrite_as_ShiX  sJ    CFc#a&k)AFFCc!f4ECPQF4S,TTUr7   c           	          [        U5      [        SS[        U5      5      -  [        R                  [        [        U5      5      [        [        R                  [        U5      -  5      -
  -  -   [
        -   $ )N)r=   r=   )r(   r(   )r   r$   r   r   rN   r   r   s      r5   r   li._eval_rewrite_as_hyper]  sY    AuVVSV44CFc!%%A,&7789;EF 	Gr7   c                     [        [        U5      * 5      * [        R                  [        [        R                  [        U5      -  5      [        [        U5      5      -
  -  -
  [	        SS[        U5      * 5      -
  $ )N)r   r   ))r   r   r   )r   r   r   rN   r%   r   s      r5   r   li._eval_rewrite_as_meijerga  sY    c!fWAEE#a&L(9CAK(G HH*lSVG<= 	>r7   Nc                 0    U[        [        U5      5      -  $ r   )r  r   r   s       r5   r   li._eval_rewrite_as_tractablee  s    4A<r7   c                     U R                   S   n[        SU5       Vs/ s H   n[        U5      U-  [        U5      U-  -  PM"     nn[        [        [        U5      5      -   [        U6 -   $ s  snf rJ   )r)   r   r   r   r   r   )r/   r2   rb   r   r   r   rd   r   s           r5   r  li._eval_nseriesh  sa    IIaL7<Q{C{!c!fq[IaL1,-{CCAK'#q'11 Ds   'A+c                 F    U R                   S   nUR                  (       a  gg ru   rz   r  s     r5   r{   li._eval_is_zerom      IIaL99 r7   r   r   r   r  )r   r   r   r   r   r   r[   rA   rl   r  r  r   r  r  r  r  r   r   r   r  r{   r   r   r7   r5   r  r    sm    `F  5,I
J .V 0G> 2
r7   r  c                   R    \ rS rSrSr\S 5       rSS jrS rS r	SS jr
SS	 jrS
rg)r  ir  a  
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                     U[         R                  L a  [         R                  $ U[        S5      :X  a  [         R                  $ g r   )r   rM   r,   r  s     r5   r[   Li.eval  s0    

?::!A$Y66M r7   c                 z    U R                   S   nUS:X  a  [        R                  [        U5      -  $ [	        X5      erJ   r  r  s      r5   rA   Li.fdiff  r  r7   c                 J    U R                  [        5      R                  U5      $ r   )r   r  evalfr  s     r5   r  Li._eval_evalf  s    ||B%%d++r7   c                 0    [        U5      [        S5      -
  $ r   )r  r   s      r5   r  Li._eval_rewrite_as_li  r  r7   Nc                 H    U R                  [        5      R                  SSS9$ )Nr   T)r0   )r   r  r   s       r5   r   Li._eval_rewrite_as_tractable  s!    ||B''$'??r7   c                 X    U R                   " U R                  6 nUR                  XU5      $ r   )r  r)   r  )r/   r2   rb   r   r   r  s         r5   r  Li._eval_nseries  s'    $$dii0qT**r7   r   r   r   r  )r   r   r   r   r   r   r[   rA   r  r  r   r  r   r   r7   r5   r  r  r  s6    =@  5,@+r7   r  c                   V   ^  \ rS rSrSr\S 5       rS	S jrS rS r	S
U 4S jjr
SrU =r$ )TrigonometricIntegrali  z(Base class for trigonometric integrals. c                 t   U[         R                  L a  U R                  $ U[         R                  L a  U R	                  5       $ U[         R
                  L a  U R                  5       $ UR                  (       a  U R                  $ UR                  [        [        5      5      nUc*  U R                  S5      S:X  a  UR                  [        5      nUb  U R                  US5      $ UR                  [        [        * 5      5      nUb  U R                  US5      $ UR                  [        S5      5      nUc&  U R                  S5      S:X  a  UR                  S5      nUb  U R                  U5      $ UR                  5       u  p#US:X  a  X!:X  a  g S[        -  [        -  U-  U R                  S5      -  U " U5      -   $ )Nr   r=   r   r(   )r   r,   _atzerorM   _atinfrO   	_atneginfrQ   rU   r   r	   	_trigfunc_Ifactor_minusfactorr  r
   r  s       r5   r[   TrigonometricIntegral.eval  sj   ;;;!**_::<!$$$==?"99;;''
16:#--*a/++A.B><<A&&''
A27><<B''''
27:#--*a/++B/B>##B'''')6bgtAvaxa((3r722r7   c                 |    [        U R                  S   5      nUS:X  a  U R                  U5      U-  $ [        X5      erJ   )r   r)   r(  r   r  s      r5   rA   TrigonometricIntegral.fdiff  s:    1&q=>>#&s**$T44r7   c                 J    U R                  U5      R                  [        5      $ r   )r   r   r  r   s      r5   r  )TrigonometricIntegral._eval_rewrite_as_Ei  s    ++A.66r::r7   c                 N    SSK Jn  U R                  U5      R                  U5      $ r  )r   r   r   r   r   s       r5   r   1TrigonometricIntegral._eval_rewrite_as_uppergamma   s!    F++A.66zBBr7   c                   > U R                   S   R                  US5      S:w  a  [        TU ]  XU5      $ U R	                  U5      R                  XU5      nU R	                  S5      S:w  a  US-  nUR                  [        S SS9nU R	                  S5      S:w  a  U[        [        U5      -   -  nUR                  XR                   S   5      R                  XU5      $ )Nr   r=   c                     X-  U-  $ r   r   )rZ   rb   s     r5   <lambda>5TrigonometricIntegral._eval_nseries.<locals>.<lambda>  s
    !$q&r7   F)simultaneous)	r)   r   r   r  r(  replacer   r   r   )r/   r2   rb   r   r   
baseseriesr   s         r5   r  #TrigonometricIntegral._eval_nseries  s    99Q<Q"a'7(t44^^A&44Q4@
>>!!!OJ''-@u'U
>>!!*s1v--Jq))A,/==aDIIr7   r   r   r  )r   r   r   r   r   r   r[   rA   r  r   r  r   r   r   s   @r5   r#  r#    s6    3 3 3>5;C
J 
Jr7   r#  c                      ^  \ rS rSrSr\r\R                  r	\
S 5       r\
S 5       r\
S 5       r\
S 5       rS rS r\rSS	 jrU 4S
 jrS rSrU =r$ )r  i  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    [         [        R                  -  $ r   r
   r   r   rX   s    r5   r&  	Si._atinf[  s    !&&yr7   c                 2    [         * [        R                  -  $ r   r<  r=  s    r5   r'  Si._atneginf_  s    s166zr7   c                     [        U5      * $ r   )r  r  s     r5   r*  Si._minusfactorc  s    1vr7   c                 ,    [         [        U5      -  U-  $ r   )r	   r  rX   r   signs      r5   r)  Si._Ifactorg  s    Qx}r7   c                     [         S-  [        [        [        5      U-  5      [        [        [        * 5      U-  5      -
  S-  [        -  -   $ r   )r
   r  r   r	   r   s      r5   r   Si._eval_rewrite_as_expintk  s=    !tr*Q-/*R
A2q0@-AA1DQFFFr7   c                 x    SSK Jn  [        [        SU/5      R                  5      nU" [        U5      USU45      $ r  )r  r  r   r   r  r#   r  s        r5   r  Si._eval_rewrite_as_Integralo  s6    6'aS1667Q!Q++r7   c                 N   U R                   S   R                  XUS9nUR                  US5      nU[        R                  L a-  UR                  US[        U5      R                  (       a  SOSS9nUR                  (       a  U$ UR                  (       d  U R                  U5      $ U $ Nr   r   r   r   r   r)   r   r   r   rL   r   r   r  rQ   rJ  r.   r   s         r5   r   Si._eval_as_leading_termv  s    iil**1d*Cxx1~155=99Qbh.B.Bs9LD<<J!!99T?"Kr7   c                 x  > SSK Jn  US   nU[        R                  L a  U R                  S   n[        US-  S-   5       Vs/ s H1  n[        R                  U-  [        SU-  5      -  USU-  S-   -  -  PM3     snU" SXq-  -  U5      /-   n	[        US-  5       Vs/ s H4  n[        R                  U-  [        SU-  S-   5      -  USUS-   -  -  -  PM6     snU" SXq-  -  U5      /-   n
[        S-  [        U5      [        U	6 -  -
  [        U5      [        U
6 -  -
  $ [        [        U ];  XX45      $ s  snf s  snf r   )r   r   r   rM   r)   r   rP   r   r
   r!   r   r"   r   r  r   )r/   rb   r   r2   r   r   r   r   rd   pqr   s              r5   r   Si._eval_aseries  sJ   ,a AJJ		!A"1a4!8_., !IacN2Q1q\A,.16qvq1A0BCA #1a4[*( !IacAg$66QAYG(*-21QT61-=,>?Aa4#a&a.(3q6#q'>99 R,Qq??.*s   8D2;D7c                 F    U R                   S   nUR                  (       a  gg ru   rz   r  s     r5   r{   Si._eval_is_zero  r  r7   r   rh   )r   r   r   r   r   r"   r(  r   r,   r%  r   r&  r'  r*  r)  r   r  _eval_rewrite_as_sincr   r   r{   r   r   r   s   @r5   r  r    s    DL IffG       G,
 7@  r7   r  c                      ^  \ rS rSrSr\r\R                  r	\
S 5       r\
S 5       r\
S 5       r\
S 5       rS rS rSS	 jrU 4S
 jrSrU =r$ )r  i  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                 "    [         R                  $ r   )r   r,   r=  s    r5   r&  	Ci._atinf  s    vvr7   c                     [         [        -  $ r   )r	   r
   r=  s    r5   r'  Ci._atneginf  s    tr7   c                 4    [        U5      [        [        -  -   $ r   r  r	   r
   r  s     r5   r*  Ci._minusfactor  s    !uqt|r7   c                 @    [        U5      [        [        -  S-  U-  -   $ r   r  r	   r
   rD  s      r5   r)  Ci._Ifactor  s    1v"Qt##r7   c                 z    [        [        [        5      U-  5      [        [        [        * 5      U-  5      -   * S-  $ r   )r  r   r	   r   s      r5   r   Ci._eval_rewrite_as_expint  s2    JqM!O$r*aR.*:';;<Q>>r7   c                     SSK Jn  [        [        SU/5      R                  5      n[
        R                  [        U5      -   U" S[        U5      -
  U-  USU45      -
  $ r  )	r  r  r   r   r  r   r   r   r!   r  s        r5   r  Ci._eval_rewrite_as_Integral  sP    6'aS1667||c!f$x3q61q!Qi'HHHr7   c                    U R                   S   R                  XUS9nUR                  US5      nU[        R                  L a-  UR                  US[        U5      R                  (       a  SOSS9nUR                  (       a:  UR                  U5      u  pgUc  [        U5      OUn[        U5      Xr-  -   [        -   $ UR                  (       a  U R                  U5      $ U $ rL  r)   r   r   r   rL   r   r   r  rQ   r  r   r   rv   r.   r/   r2   r   r   rY   r   r  r  s           r5   r   Ci._eval_as_leading_term      iil**1d*Cxx1~155=99Qbh.B.Bs9LD<<((+DA!\3q6tDq6AF?Z//^^99T?"Kr7   c                   > SSK Jn  US   nU[        R                  [        R                  4;   Ga  U R
                  S   n[        US-  S-   5       Vs/ s H1  n[        R                  U-  [        SU-  5      -  USU-  S-   -  -  PM3     snU" SXq-  -  U5      /-   n	[        US-  5       Vs/ s H4  n[        R                  U-  [        SU-  S-   5      -  USUS-   -  -  -  PM6     snU" SXq-  -  U5      /-   n
[        U5      [        U	6 -  [        U5      [        U
6 -  -
  nU[        R                  L a  U[        [        -  -  nU$ [        [        U ]C  XX45      $ s  snf s  snf r   )r   r   r   rM   rO   r)   r   rP   r   r"   r   r!   r	   r
   r   r  r   )r/   rb   r   r2   r   r   r   r   rd   rP  rQ  resultr   s               r5   r   Ci._eval_aseries  si   ,aQZZ!3!344		!A"1a4!8_., !IacN2Q1q\A,.16qvq1A0BCA #1a4[*( !IacAg$66QAYG(*-21QT61-=,>?AVS!W%AQ(88F***!B$MR,Qq??.*s   8E/;E$r   rh   )r   r   r   r   r   r!   r(  r   r   r%  r   r&  r'  r*  r)  r   r  r   r   r   r   r   s   @r5   r  r    s    M^ IG      $ $?I
@ @r7   r  c                       \ rS rSrSr\r\R                  r	\
S 5       r\
S 5       r\
S 5       r\
S 5       rS rS rSS
 jrSrg	)r  i%  ai  
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                 "    [         R                  $ r   r   rM   r=  s    r5   r&  
Shi._atinfh      zzr7   c                 "    [         R                  $ r   )r   rO   r=  s    r5   r'  Shi._atneginfl  s    !!!r7   c                     [        U5      * $ r   )r  r  s     r5   r*  Shi._minusfactorp  s    Awr7   c                 ,    [         [        U5      -  U-  $ r   )r	   r  rD  s      r5   r)  Shi._Ifactort  s    Awt|r7   c                     [        U5      [        [        [        [        -  5      U-  5      -
  S-  [        [        -  S-  -
  $ r   )r  r   r	   r
   r   s      r5   r   Shi._eval_rewrite_as_expintx  s5    19QrT?1,--q01R4699r7   c                 F    U R                   S   nUR                  (       a  gg ru   rz   r  s     r5   r{   Shi._eval_is_zero|  r  r7   Nc                 P   U R                   S   R                  U5      nUR                  US5      nU[        R                  L a-  UR                  US[        U5      R                  (       a  SOSS9nUR                  (       a  U$ UR                  (       d  U R                  U5      $ U $ )Nr   r   r   r   rM  r   s         r5   r   Shi._eval_as_leading_term  s~    iil**1-xx1~155=99Qbh.B.Bs9LD<<J!!99T?"Kr7   r   rh   )r   r   r   r   r   r    r(  r   r,   r%  r   r&  r'  r*  r)  r   r{   r   r   r   r7   r5   r  r  %  su    =~ IffG  " "    :
r7   r  c                       \ rS rSrSr\r\R                  r	\
S 5       r\
S 5       r\
S 5       r\
S 5       rS rSS	 jrS
rg)r  i  aX  
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                 "    [         R                  $ r   ro  r=  s    r5   r&  
Chi._atinf  rq  r7   c                 "    [         R                  $ r   ro  r=  s    r5   r'  Chi._atneginf  rq  r7   c                 4    [        U5      [        [        -  -   $ r   r_  r  s     r5   r*  Chi._minusfactor  s    1v"}r7   c                 @    [        U5      [        [        -  S-  U-  -   $ r   r\  rD  s      r5   r)  Chi._Ifactor  s    !uqtAvd{""r7   c                     [         * [        -  S-  [        U5      [        [        [         [        -  5      U-  5      -   S-  -
  $ r   )r	   r
   r  r   r   s      r5   r   Chi._eval_rewrite_as_expint  s7    r"uQw"Q%"Yqt_Q%6"77:::r7   Nc                    U R                   S   R                  XUS9nUR                  US5      nU[        R                  L a-  UR                  US[        U5      R                  (       a  SOSS9nUR                  (       a:  UR                  U5      u  pgUc  [        U5      OUn[        U5      Xr-  -   [        -   $ UR                  (       a  U R                  U5      $ U $ rL  rf  rg  s           r5   r   Chi._eval_as_leading_term  ri  r7   r   rh   )r   r   r   r   r   r   r(  r   r   r%  r   r&  r'  r*  r)  r   r   r   r   r7   r5   r  r    ss    HT IG      # #;r7   r  c                   P    \ rS rSrSrSr\S 5       rSS jrS r	\	r
S rS r\rS	rg
)FresnelIntegrali	  z%Base class for the Fresnel integrals.Tc                 p   U[         R                  L a  [         R                  $ UR                  (       a  [         R                  $ [         R
                  nUnSnUR                  S5      nUb  U* nUnSnUR                  [        5      nUb  U R                  [        -  U-  nUnSnU(       a
  X " U5      -  $ g )NFr   T)	r   rM   r   rQ   r,   rN   rU   r	   _sign)rX   r   prefactnewargchangedr   s         r5   r[   FresnelIntegral.eval		  s     

?66M 9966M %%,,R0>hGFG,,Q/>iik')GFG3v;&& r7   c                     US:X  a9  U R                  [        R                  [        -  U R                  S   S-  -  5      $ [        X5      ero  )r(  r   r   r
   r)   r   r?   s     r5   rA   FresnelIntegral.fdiff(	  s<    q=>>!&&)DIIaL!O";<<$T44r7   c                 4    U R                   S   R                  $ rh   rp   rk   s    r5   r'  &FresnelIntegral._eval_is_extended_real.	  rs   r7   c                 4    U R                   S   R                  $ rh   rz   rk   s    r5   r{   FresnelIntegral._eval_is_zero3	  r}   r7   c                 Z    U R                  U R                  S   R                  5       5      $ rh   ri   rk   s    r5   rl   FresnelIntegral._eval_conjugate6	  rn   r7   r   Nr   )r   r   r   r   r   r   r   r[   rA   r'  rw   r{   rl   r6   r-   r   r   r7   r5   r  r  	  s>    0J' '<5- -O$3 -Lr7   r  c                      ^  \ rS rSrSr\r\R                  * r	\
\S 5       5       rS rS rS rS rSS jrU 4S	 jrS
rU =r$ )r   i<	  a  
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                 r   U S:  a  [         R                  $ [        U5      n[        U5      S:  a9  US   n[        S-  * US-  -  SU -  S-
  -  SU -  SU -  S-   -  SU -  S-   -  -  U-  $ US-  US-  * U -  -  [        S5      SU -  S-
  -  [        SU -  S-   -  -  -  SU -  S-   [        SU -  S-   5      -  -  $ )	Nr   r=   r   r(         r   r_   r   r,   r   r`   r
   r   rb   r2   rc   rP  s       r5   re   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lr7   c           	          [         R                  [        -   S-  [        [         R                  [        -   S-  [	        [
        5      -  U-  5      [        [        [         R                  [        -
  S-  [	        [
        5      -  U-  5      -  -
  -  $ Nr  r(   r   rN   r	   r9   r   r
   r   s      r5   r  fresnels._eval_rewrite_as_erf	  f    	1}QUUQYM$r($:1$< =#quuqyRSmTXY[T\F\]^F^B_@_ _``r7   c           	          [         US-  -  S-  [        [        SS5      /[        SS5      [        SS5      /[         S-  * US-  -  S-  5      -  $ )Nr      r  r(         )r
   r$   r   r   s      r5   r   fresnels._eval_rewrite_as_hyper	  sY    !Q$wqy5(1a.!1HQNHQPQN3SVXZ[V[U[\]_`\`U`acUcdddr7   c           
          [         U[        SS5      -  -  [        S5      US-  [        SS5      -  -  U* [        SS5      -  -  -  [        / S/[        SS5      /[        SS5      S/[         S-  * US-  -  S-  5      -  $ )N	   r  r(   r   r=   r   r  )r
   r   r   r%   r   s      r5   r   !fresnels._eval_rewrite_as_meijerg	  s    1hq!n$$QAA0F(FXVWYZ^G[([\"qcHQN#3hq!na5H2q5&QRTUQU+VX.YZ 	[r7   c                     SSK Jn  [        [        SU/5      R                  5      nU" [        [        US-  -  S-  5      USU45      $ Nr   r  rZ   r(   )r  r  r   r   r  r"   r
   r  s        r5   r  "fresnels._eval_rewrite_as_Integral	  B    6'aS1667Bq!tGAIAq	22r7   c                    SSK Jn  U R                  S   R                  XUS9nUR	                  US5      nU[
        R                  L a-  UR                  US[        U5      R                  (       a  SOSS9nUR                  (       a  [        US-  -  S-  $ U[
        R                  [
        R                  4;   a3  U[
        R                  L a  S	OS
nU[
        R                  -  U" X5      -   $ U R                  U5      $ )Nr   r   r   r   r   r   r   r  r=   r   )r   r   r)   r   r   r   r   r   r   r  rQ   r
   rM   rO   r   r.   r/   r2   r   r   r   rY   r   r   s           r5   r   fresnels._eval_as_leading_term	  s    ,iil**1d*Cxx1~1$$$99Qbh.B.Bs9LD<<c1f9Q;ajj!"4"455QZZ'RAQVV8eAk))99T?"r7   c           
        > SSK Jn  US   nU[        R                  [        R                  * 4;   Ga  U R                  S   n[        SU5       Vs/ s Hf  nSU-  S-   U:  d  M  [        R                  U-  [        SU-  S-   5      -  SSU-  S-   -  USU-  S-   -  -  SSU-  -  -  [        SU-  5      -  -  PMh     n	nSSU-  -  /[        SU5       Vs/ s Hl  nSU-  S-   U:  d  M  [        R                  U-  [        SU-  S-
  5      -  SSU-  S-   -  USU-  S-   -  -  SSU-  S-
  -  -  [        SU-  S-
  5      -  -  PMn     sn-   n
U	 Vs/ s H  n[        S[        -  5      * U-  PM     n	nU
 Vs/ s H  n[        S[        -  5      * U-  PM     n
nU[        R                  L a  SOSnU[        R                  -  [        US-  5      [        U	6 -  [        US-  5      [        U
6 -  -   R                  U[        S[        -  5      U-  5      -   U" SXq-  -  U5      -   $ [        TU ]A  XX45      $ s  snf s  snf s  snf s  snf Nr   r   r  r   r=   r(   r   )r   r   r   rM   r)   r   rP   r   r   r
   r   r"   r   r!   r   r   r   r/   rb   r   r2   r   r   r   r   rd   rP  rQ  rZ   r   r   s                r5   r   fresnels._eval_aseries	  s`   ,a QZZ!**--		!A  1+6%Q1q1I!IacAg$66acAg,QqS1W-AaC81Q3GI%  6 AaC	1+6%Q1q1QQ]]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,'(*/!$*:; ; w$Qq77#66 +*s&   H5$AH5H:)AH: H?7 Ir   rh   )r   r   r   r   r   r"   r(  r   rN   r  r   r   re   r  r   r   r  r   r   r   r   r   s   @r5   r   r   <	  s^    Sh IUUFE	m  	mae[3
#8 8r7   r   c                      ^  \ rS rSrSr\r\R                  r	\
\S 5       5       rS rS rS rS rSS jrU 4S	 jrS
rU =r$ )r   i	  a  
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                 X   U S:  a  [         R                  $ [        U5      n[        U5      S:  a9  US   n[        S-  * US-  -  SU -  S-
  -  SU -  SU -  S-
  -  SU -  S-   -  -  U-  $ XS-  * U -  -  [        S5      SU -  -  [        SU -  -  -  -  SU -  S-   [        SU -  5      -  -  $ )	Nr   r=   r   r(   r  r   r  r_   r  r  s       r5   re   fresnelc.taylor_term5
  s     q566M
A>"Q&"2&Qq!tQqS1W-qsAaC!G}acAg/FG1LLTEA:~11b1Q3i)?@QqS1WiXYZ[X[nD\]]r7   c           	          [         R                  [        -
  S-  [        [         R                  [        -   S-  [	        [
        5      -  U-  5      [        [        [         R                  [        -
  S-  [	        [
        5      -  U-  5      -  -   -  $ r  r  r   s      r5   r  fresnelc._eval_rewrite_as_erfB
  r  r7   c           	          U[        [        SS5      /[        R                  [        SS5      /[        S-  * US-  -  S-  5      -  $ )Nr=   r     r(   r  )r$   r   r   r   r
   r   s      r5   r   fresnelc._eval_rewrite_as_hyperE
  sA    5(1a.)AFFHQN+Cb!eVAqD[QS^TTTr7   c           
          [         U[        SS5      -  -  [        S5      [        US-  S5      -  [        U* S5      -  -  [	        / S/[        SS5      /[        SS5      S/[         S-  * US-  -  S-  5      -  $ )Nr   r  r(   r=   r   r  )r
   r   r   r   r%   r   s      r5   r   !fresnelc._eval_rewrite_as_meijergH
  s    1hq!n$$QQT1(=dA2qk(IJ"qcHQN#3hq!na5H2q5&QRTUQU+VX.YZ 	[r7   c                     SSK Jn  [        [        SU/5      R                  5      nU" [        [        US-  -  S-  5      USU45      $ r  )r  r  r   r   r  r!   r
   r  s        r5   r  "fresnelc._eval_rewrite_as_IntegralL
  r  r7   c                    SSK Jn  U R                  S   R                  XUS9nUR	                  US5      nU[
        R                  L a-  UR                  US[        U5      R                  (       a  SOSS9nUR                  (       a  U$ U[
        R                  [
        R                  4;   a3  U[
        R                  L a  SOSnU[
        R                  -  U" X5      -   $ U R                  U5      $ )	Nr   r   r   r   r   r   r=   r   )r   r   r)   r   r   r   r   r   r   r  rQ   rM   rO   r   r.   r  s           r5   r   fresnelc._eval_as_leading_termQ
  s    ,iil**1d*Cxx1~1$$$99Qbh.B.Bs9LD<<Jajj!"4"455QZZ'RAQVV8eAk))99T?"r7   c           
        > SSK Jn  US   nU[        R                  [        R                  * 4;   Ga  U R                  S   n[        U5       Vs/ s Hf  nSU-  S-   U:  d  M  [        R                  U-  [        SU-  S-   5      -  SSU-  S-   -  USU-  S-   -  -  SSU-  -  -  [        SU-  5      -  -  PMh     n	nSSU-  -  /[        SU5       Vs/ s Hl  nSU-  S-   U:  d  M  [        R                  U-  [        SU-  S-
  5      -  SSU-  S-   -  USU-  S-   -  -  SSU-  S-
  -  -  [        SU-  S-
  5      -  -  PMn     sn-   n
U	 Vs/ s H  n[        S[        -  5      * U-  PM     n	nU
 Vs/ s H  n[        S[        -  5      U-  PM     n
nU[        R                  L a  SOSnU[        R                  -  [        US-  5      [        U	6 -  [        US-  5      [        U
6 -  -   R                  U[        S[        -  5      U-  5      -   U" SXq-  -  U5      -   $ [        TU ]A  XX45      $ s  snf s  snf s  snf s  snf r  )r   r   r   rM   r)   r   rP   r   r   r
   r   r!   r   r"   r   r   r   r  s                r5   r   fresnelc._eval_aseries`
  s\   ,a QZZ!**--		!A  (3"QacAgkI!IacAg$66acAg,QqS1W-AaC81Q3GI"  3 AaC	1+6%Q1q1QQ]]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,'(*/!$*:; ; w$Qq77#36 +*s&   H3#AH3H8(AH8 H=6Ir   rh   )r   r   r   r   r   r!   r(  r   rN   r  r   r   re   r  r   r   r  r   r   r   r   r   s   @r5   r   r   	  s\    Sh IEEE	^  	^aU[3
#8 8r7   r   c                   L   ^  \ rS rSrSr\S 5       rU 4S jrSS jrS r	Sr
U =r$ )	r   i
  z]
Helper function to make the $\mathrm{erf}(z)$ function
tractable for the Gruntz algorithm.

c                 F    UR                   (       a  [        R                  $ g r   )rQ   r   rN   )rX   rY   s     r5   r[   
_erfs.eval
  s    ;;55L r7   c                 X  > SSK Jn  US   nU[        R                  L a  U R                  S   n[        U5       Vs/ s HP  nS[        [        5      -  [        SU-  5      -  [        S5      * U* -  -  [        U5      -  SU-  SU-  S-   -  -  PMR     n	nU" SUSU-  S-   -  -  U5      n
[        U	6 R                  X1U5      U
-   $ UR                  [        5      nU[        R                  L a  U R                  S   n[        U5       Vs/ s HP  nS[        [        5      -  [        SU-  5      -  [        S5      * U* -  -  [        U5      -  SU-  SU-  S-   -  -  PMR     n	nU" SUSU-  S-   -  -  U5      n
[        U	6 R                  X1U5      U
-   $ [        TU ]9  XX45      $ s  snf s  snf )Nr   r   r=   r(   r  )r   r   r   rM   r)   r   r   r
   r   r   r  rU   r	   r   r   )r/   rb   r   r2   r   r   r   r   rd   lorZ   r   s               r5   r   _erfs._eval_aseries
  s   ,a AJJ		!ADI!HNDLq 48i!n,q0 /r. $Q<(+,Q3!A#'*:;DL  NaAaC!Gna(AG**16:: **1-

?		!A EJ!HNDLq 48i!n,q0 /r. $Q<(+,Q3!A#'*:;DL  NaAaC!Gna(AG**16:: w$Qq77%NNs   AF"	AF'c                     US:X  a3  U R                   S   nS[        [        5      -  SU-  [        U5      -  -   $ [	        X5      e)Nr=   r   r_   r(   )r)   r   r
   r   r   r/   r@   r   s      r5   rA   _erfs.fdiff
  s@    q=		!Ad2h;1U1X--$T44r7   c                 X    [         R                  [        U5      -
  [        US-  5      -  $ r   )r   rN   r9   r   r   s      r5   _eval_rewrite_as_intractable"_erfs._eval_rewrite_as_intractable
  s!    AAqD	))r7   r   r   )r   r   r   r   r   r   r[   r   rA   r  r   r   r   s   @r5   r   r   
  s0    
  865* *r7   r   c                   \   ^  \ rS rSrSrU 4S jrS	S jrS rS
U 4S jjrSU 4S jjr	Sr
U =r$ )r  i
  zr
Helper function to make the $\mathrm{Ei}(z)$ and $\mathrm{li}(z)$
functions tractable for the Gruntz algorithm.

c                 F  > SSK Jn  US   [        R                  :w  a  [        [
        U ]  XX45      $ U R                  S   n[        U5       Vs/ s H  n[        U5      SU-  US-   -  -  PM     nnU" SXaS-   -  -  U5      n	[        U6 R                  X1U5      U	-   $ s  snf r  )r   r   r   rM   r   r   r   r)   r   r   r   r  )r/   rb   r   r2   r   r   r   rd   r  r  r   s             r5   r   _eis._eval_aseries
  s    ,8qzz!3AaFFIIaL49!H=HqYq\QqSAEN*H=!AAJ,"Q&&qT2Q66 >s   !Bc                     US:X  a.  U R                   S   n[        R                  U-  [        U5      -
  $ [	        X5      e)Nr=   r   )r)   r   rN   r  r   r  s      r5   rA   
_eis.fdiff
  s8    q=		!A5519tAw&&$T44r7   c                 2    [        U* 5      [        U5      -  $ r   )r   r  r   s      r5   r  !_eis._eval_rewrite_as_intractable
  s    A2wr!u}r7   c                    > U R                   S   R                  US5      nUR                  (       a)  U R                  " U R                   6 nUR	                  XUS9$ [
        TU ]  XUS9$ )Nr   r   )r)   r   rQ   r  r   r   )r/   r2   r   r   r  r  r   s         r5   r   _eis._eval_as_leading_term
  sc    YYq\1%::11499=A**1d*CCw,Q,EEr7   c                    > U R                   S   R                  US5      nUR                  (       a+  U R                  " U R                   6 nUR	                  XU5      $ [
        TU ]  XU5      $ rh   )r)   r   rQ   r  r  r   r  s          r5   r  _eis._eval_nseries
  s[    YYq\1%::11499=A??1..w$Q400r7   r   r   rh   r  )r   r   r   r   r   r   rA   r  r   r  r   r   r   s   @r5   r  r  
  s'    	75F1 1r7   r  N)T)Mr   
sympy.corer   sympy.core.addr   sympy.core.cacher   sympy.core.functionr   r   r   sympy.core.numbersr	   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%   r6   r9   r   r   rE  rF   rS   rT   r  r   r  r  r  r#  r  r  r  r  r  r   r   r   r  r   r7   r5   <module>r     s  F "  $ H H . . '   " : & [ [ L L > ? F F < C C 8*^-( ^-B|H8 |H~}B8 }B@O!8 O!bZ$X Z$zO$x O$d[h [Bt@ t@n}?X }?@ Fe eNZ+ Z+@<JH <J~E	 EPJ@	 J@Xg
 gTn
 nj5-h 5-p^8 ^8B^8 ^8L.*H .*b*18 *1r7   