
    \h6                       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  SSKJr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/J0r0J1r1  SSK2J3r3J4r4J5r5  SSK6J7r7J8r8  SBS j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" S#\5      r@ " S$ S%\5      rA " S& S'\5      rBS( rC " S) S*\5      rD " S+ S,\5      rE " S- S.\5      rF " S/ S0\F5      rG " S1 S2\F5      rH " S3 S4\F5      rI " S5 S6\F5      rJ " S7 S8\5      rK " S9 S:\K5      rL " S; S<\K5      rM " S= S>\5      rN " S? S@\5      rOgA)Cz|This module contains various functions that are special cases
of incomplete gamma functions. It should probably be renamed.     )
EulerGamma)Add)cacheit)DefinedFunctionArgumentIndexError
expand_mul)fuzzy_or)IpiRationalInteger)is_eq)Pow)S)Dummyuniquely_named_symbol)sympify)	factorial
factorial2RisingFactorial)
polar_liftre
unpolarify)ceilingfloor)sqrtroot)explog	exp_polar)coshsinh)cossinsinc)hypermeijergc                 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          _/var/www/auris/envauris/lib/python3.13/site-packages/sympy/functions/special/error_functions.pyreal_to_real_as_real_imagr8      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 rS rS rSS jrS rS rS rU 4S jr\r Sr!U =r"$ )erf1   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   r1   argindexs     r7   fdiff	erf.fdiff   s<    q=S$))A,/)**4833$T44r9   c                     [         $ z(
Returns the inverse of this function.

erfinvrA   s     r7   inverseerf.inverse   s	    
 r9   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.   
isinstancerH   r+   erfcinverf2invextract_multiplicativelyr
   could_extract_minus_signclsargts      r7   evalerf.eval   s(   ==aee|uu

"uu***}}$vvc6""88A;c7##55388A;&&;;66M c7##(;(;88A; ((+Q//00J ''))I: *r9   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   lenrR   r   r   r   nr4   previous_termsks       r7   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Jr9   c                 Z    U R                  U R                  S   R                  5       5      $ Nr   r0   r+   	conjugater1   s    r7   _eval_conjugateerf._eval_conjugate   "    yy1//122r9   c                 >    U R                   S   R                  SL a  gg Nr   Tr+   r,   rm   s    r7   _eval_is_realerf._eval_is_real   s     99Q<((D0 1r9   c                 >    U R                   S   R                  SL a  gg rr   )r+   is_imaginaryrm   s    r7   _eval_is_imaginaryerf._eval_is_imaginary   s     99Q<$$, -r9   c                 b    U R                   S   n[        UR                  UR                  /5      $ rj   )r+   r	   	is_finiter,   r1   zs     r7   _eval_is_finiteerf._eval_is_finite   s)    IIaLa&8&89::r9   c                 n    U R                   S   R                  SL a  U R                   S   R                  $ g rr   )r+   r,   rS   rm   s    r7   _eval_is_zeroerf._eval_is_zero   s1    99Q<((D099Q<''' 1r9   c                 n    U R                   S   R                  SL a  U R                   S   R                  $ g rr   )r+   r,   is_extended_positiverm   s    r7   _eval_is_positiveerf._eval_is_positive   1    99Q<((D099Q<444 1r9   c                 n    U R                   S   R                  SL a  U R                   S   R                  $ g rr   )r+   r,   is_extended_negativerm   s    r7   _eval_is_negativeerf._eval_is_negative   r   r9   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   rP   Halfr   r1   r}   kwargsr   s       r7   _eval_rewrite_as_uppergammaerf._eval_rewrite_as_uppergamma   s=    FAqDz!|QUUZ1%=d2h%FFGGr9   c                     [         R                  [        -
  U-  [        [        5      -  n[         R                  [        -   [        U5      [        [        U5      -  -
  -  $ Nr   rP   r
   r   r   fresnelcfresnelsr1   r}   r   r[   s       r7   _eval_rewrite_as_fresnelserf._eval_rewrite_as_fresnels   @    uuqy!mDH$	HSMAhsmO;<<r9   c                     [         R                  [        -
  U-  [        [        5      -  n[         R                  [        -   [        U5      [        [        U5      -  -
  -  $ r   r   r   s       r7   _eval_rewrite_as_fresnelcerf._eval_rewrite_as_fresnelc   r   r9   c           
          U[        [        5      -  [        [        R                  // S/[        SS5      /US-  5      -  $ Nr   r*   r   r   r'   r   r   r   r1   r}   r   s      r7   _eval_rewrite_as_meijergerf._eval_rewrite_as_meijerg   s7    bz'166(Bhr1o5F1MMMr9   c                     SU-  [        [        5      -  [        [        R                  /S[        R                  -  /US-  * 5      -  $ Nr*      r   r   r&   r   r   r   s      r7   _eval_rewrite_as_hypererf._eval_rewrite_as_hyper   s8    s48|E166(QqvvXJA>>>r9   c                     [        US-  5      U-  U[        [        R                  US-  5      -  [        [        5      -  -
  $ Nr*   r   expintr   r   r   r   s      r7   _eval_rewrite_as_expinterf._eval_rewrite_as_expint   s6    AqDz!|aqvvq!t 44T"X===r9   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   rO   rQ   rR   _erfsr   rP   )r1   r}   limitvarr   r   lims         r7   _eval_rewrite_as_tractableerf._eval_rewrite_as_tractable   sl    -QZZ0Ca(((}}uaRyadU';;;uuuQxQTE
***r9   c                 :    [         R                  [        U5      -
  $ r   )r   rP   erfcr   s      r7   _eval_rewrite_as_erfcerf._eval_rewrite_as_erfc   s    uutAwr9   c                 6    [         * [        [         U-  5      -  $ r   r
   erfir   s      r7   _eval_rewrite_as_erfierf._eval_rewrite_as_erfi   s    r$qs)|r9   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_symbolsrS   r   r   r0   r1   r4   r   r   r[   arg0s         r7   _eval_as_leading_termerf._eval_as_leading_term   s    iil**1d*Cxx1~1$$$99Qdbjsc9BD   T\\S5b>!99T?"r9   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   rO   rQ   r+   leadterm
ValueErrorNotImplementedErroris_positiver   rangerR   r   rP   r   r   r   r   superr;   _eval_aseries)r1   rd   args0r4   r   r   pointr}   _exnewnrf   s	__class__s                r7   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   )#__name__
__module____qualname____firstlineno____doc__
unbranchedrC   rI   classmethodr]   staticmethodr   rg   rn   rt   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r/   __static_attributes____classcell__r   s   @r7   r;   r;   1   s    JX J5  B 	K  	K3;(55H==N?>+	#A* -Lr9   r;   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 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?   ra   r   r*   r@   rA   s     r7   rC   
erfc.fdiffo  s<    q=c499Q<?*++DH44$T44r9   c                     [         $ rF   rU   rA   s     r7   rI   erfc.inverseu  s	    
 r9   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*   )rM   r   rN   rO   r.   rS   rP   rT   rH   r+   rU   rW   r
   rQ   rX   rY   s      r7   r]   	erfc.eval|  s    ==aee|uu

"vvuuc6""55388A;&&c7##88A;;;55L ((+Q//004K ''))sC4y=  *r9   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   rP   r.   r   r   rb   rR   r   r   r   rc   s       r7   rg   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Kr9   c                 Z    U R                  U R                  S   R                  5       5      $ rj   rk   rm   s    r7   rn   erfc._eval_conjugate  rp   r9   c                 x    U R                   S   R                  SL a  gU R                   S   R                  SL a  gg )Nr   TF)r+   r,   rw   rm   s    r7   rt   erfc._eval_is_real  s9    99Q<((D099Q<$$, -r9   Nc                 J    U R                  [        5      R                  SSUS9$ N	tractableT)r2   r   rewriter;   r1   r}   r   r   s       r7   r   erfc._eval_rewrite_as_tractable  #    ||C ((4((SSr9   c                 :    [         R                  [        U5      -
  $ r   )r   rP   r;   r   s      r7   _eval_rewrite_as_erferfc._eval_rewrite_as_erf  s    uus1v~r9   c                 V    [         R                  [        [        [        U-  5      -  -   $ r   )r   rP   r
   r   r   s      r7   r   erfc._eval_rewrite_as_erfi  s    uuqac{""r9   c                     [         R                  [        -
  U-  [        [        5      -  n[         R                  [         R                  [        -   [        U5      [        [        U5      -  -
  -  -
  $ r   r   r   s       r7   r   erfc._eval_rewrite_as_fresnels  sI    uuqy!mDH$uu	HSMAhsmO$CDDDr9   c                     [         R                  [        -
  U-  [        [        5      -  n[         R                  [         R                  [        -   [        U5      [        [        U5      -  -
  -  -
  $ r   r   r   s       r7   r   erfc._eval_rewrite_as_fresnelc  sI    uuQwk$r("uu	HSMAhsmO$CDDDr9   c                     [         R                  U[        [        5      -  [	        [         R
                  // S/[        SS5      /US-  5      -  -
  $ r   )r   rP   r   r   r'   r   r   r   s      r7   r   erfc._eval_rewrite_as_meijerg  sC    uuqbz'166(Bhr1o=NPQSTPT"UUUUr9   c                     [         R                  SU-  [        [        5      -  [	        [         R
                  /S[         R
                  -  /US-  * 5      -  -
  $ r   )r   rP   r   r   r&   r   r   s      r7   r   erfc._eval_rewrite_as_hyper  sA    uuqs48|E166(QqvvXJA$FFFFr9   c                     SSK Jn  [        R                  [	        US-  5      U-  [        R                  U" [        R
                  US-  5      [	        [        5      -  -
  -  -
  $ r   )r   r   r   rP   r   r   r   r   s       r7   r    erfc._eval_rewrite_as_uppergamma  sF    FuutAqDz!|QUUZ1-Ed2h-N%NOOOr9   c                     [         R                  [        US-  5      U-  -
  U[        [         R                  US-  5      -  [        [
        5      -  -   $ r   )r   rP   r   r   r   r   r   s      r7   r   erfc._eval_rewrite_as_expint  s?    uutAqDz!|#aqvvq!t(<&<T"X&EEEr9   c                 ,    U R                  [        5      $ r   r
  r1   r3   s     r7   _eval_expand_funcerfc._eval_expand_func      ||C  r9   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   rS   rP   r0   r   s         r7   r   erfc._eval_as_leading_term  sv    iil**1d*Cxx1~1$$$99Qdbjsc9BD<<55L99T?"r9   c                 h    [         R                  [        U R                  6 R	                  XX45      -
  $ r   )r   rP   r;   r+   r   )r1   rd   r   r4   r   s        r7   r   erfc._eval_aseries  s&    uusDII44QqGGGr9   r   r   r   )r   r   r   r   r   r   rC   rI   r   r]   r   r   rg   rn   rt   r   r  r   r   r   r   r   r   r   r"  r   r8   r/   r   r   r   r9   r7   r   r      s    JX J5 ! !6 L  L3T#EEVGPF!	# -LHr9   r   c                      ^  \ 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 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@   rA   s     r7   rC   
erfi.fdiff.  s9    q=S1q))$r(22$T44r9   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 rL   )rM   r   rN   rS   r.   rO   rX   rW   r
   rT   rH   r+   rU   rP   rV   rZ   r}   nzs      r7   r]   	erfi.eval4  s   ;;AEEzuuvvajjzz!9966M %%''G8O ''*>QZZ"f%%|#"g&&!%%"''!*,--"g&&2771:+=+=|# ,>& r9   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   rb   r   r   r   rc   s       r7   rg   erfi.taylor_termR  s     q5AEQJ66M
Aq1uadl#A>"Q&%b)AqD0AE:AC@@14x9Q<R!899r9   c                 Z    U R                  U R                  S   R                  5       5      $ rj   rk   rm   s    r7   rn   erfi._eval_conjugate_  rp   r9   c                 4    U R                   S   R                  $ rj   rs   rm   s    r7   _eval_is_extended_realerfi._eval_is_extended_realb      yy|,,,r9   c                 4    U R                   S   R                  $ rj   r+   rS   rm   s    r7   r   erfi._eval_is_zeroe      yy|###r9   c                 J    U R                  [        5      R                  SSUS9$ r  r
  r  s       r7   r   erfi._eval_rewrite_as_tractableh  r  r9   c                 6    [         * [        [         U-  5      -  $ r   )r
   r;   r   s      r7   r  erfi._eval_rewrite_as_erfk  s    r#ac({r9   c                 B    [         [        [         U-  5      -  [         -
  $ r   )r
   r   r   s      r7   r   erfi._eval_rewrite_as_erfcn  s    ac{Qr9   c                     [         R                  [        -   U-  [        [        5      -  n[         R                  [        -
  [        U5      [        [        U5      -  -
  -  $ r   r   r   s       r7   r   erfi._eval_rewrite_as_fresnelsq  r   r9   c                     [         R                  [        -   U-  [        [        5      -  n[         R                  [        -
  [        U5      [        [        U5      -  -
  -  $ r   r   r   s       r7   r   erfi._eval_rewrite_as_fresnelcu  r   r9   c           
          U[        [        5      -  [        [        R                  // S/[        SS5      /US-  * 5      -  $ r   r   r   s      r7   r   erfi._eval_rewrite_as_meijergy  s9    bz'166(Bhr1o5FANNNr9   c                     SU-  [        [        5      -  [        [        R                  /S[        R                  -  /US-  5      -  $ r   r   r   s      r7   r   erfi._eval_rewrite_as_hyper|  s6    s48|E166(QqvvXJ1===r9   c                     SSK Jn  [        US-  * 5      U-  U" [        R                  US-  * 5      [        [
        5      -  [        R                  -
  -  $ r   )r   r   r   r   r   r   rP   r   s       r7   r    erfi._eval_rewrite_as_uppergamma  sA    FQTE{1}j!Q$7R@155HIIr9   c                     [        US-  * 5      U-  U[        [        R                  US-  * 5      -  [        [        5      -  -
  $ r   r   r   s      r7   r   erfi._eval_rewrite_as_expint  s:    QTE{1}qA!66tBx???r9   c                 ,    U R                  [        5      $ r   r
  r!  s     r7   r"  erfi._eval_expand_func  r$  r9   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   rS   r   r   r{   r0   r   s         r7   r   erfi._eval_as_leading_term  su    iil**1d*Cxx1~   T\\S5b>!^^99T?"yy~r9   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   rO   r+   r   r   r
   r   r   r   r   r   r   r   r1   rd   r   r4   r   r   r   r}   rf   r   r   s             r7   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   )r   r   r   r   r   r   rC   r   r]   r   r   rg   rn   r5  r   r   r  r   r   r   r   r   r   r   r"  r8   r/   r   r   r   r   r   s   @r7   r   r     s    GR J5 $ $: 	:  	:3-$T==O>J@! -L
B 
Br9   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?   ra   r*   )r+   r   r   r   r   r1   rB   r4   r5   s       r7   rC   
erf2.fdiff  s`    yyq=c1a4%j=b))]S!Q$Z<R(($T44r9   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 rL   )r   rO   rQ   r.   rN   r;   rT   rV   r+   rS   r,   is_infiniterX   )rZ   r4   r5   chksign_xsign_ys         r7   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&=  r9   c                     U R                  U R                  S   R                  5       U R                  S   R                  5       5      $ rL   rk   rm   s    r7   rn   erf2._eval_conjugate
  s5    yy1//1499Q<3I3I3KLLr9   c                 t    U R                   S   R                  =(       a    U R                   S   R                  $ rL   rs   rm   s    r7   r5  erf2._eval_is_extended_real  s)    yy|,,N11N1NNr9   c                 0    [        U5      [        U5      -
  $ r   r;   r1   r4   r5   r   s       r7   r  erf2._eval_rewrite_as_erf  s    1vAr9   c                 0    [        U5      [        U5      -
  $ r   r   rf  s       r7   r   erf2._eval_rewrite_as_erfc  s    Awa  r9   c                 Z    [         [        [         U-  5      [        [         U-  5      -
  -  $ r   r   rf  s       r7   r   erf2._eval_rewrite_as_erfi  s"    $qs)D1I%&&r9   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r;   r  r   rf  s       r7   r   erf2._eval_rewrite_as_fresnels  '    1v~~h'#a&..*BBBr9   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r;   r  r   rf  s       r7   r   erf2._eval_rewrite_as_fresnelc  ro  r9   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r;   r  r'   rf  s       r7   r   erf2._eval_rewrite_as_meijerg  s'    1v~~g&Q)@@@r9   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r;   r  r&   rf  s       r7   r   erf2._eval_rewrite_as_hyper"  s'    1v~~e$s1v~~e'<<<r9   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   )r1   r4   r5   r   r   s        r7   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r9   c                 |    [        U5      R                  [        5      [        U5      R                  [        5      -
  $ r   )r;   r  r   rf  s       r7   r   erf2._eval_rewrite_as_expint*  s'    1v~~f%Av(>>>r9   c                 ,    U R                  [        5      $ r   r
  r!  s     r7   r"  erf2._eval_expand_func-  r$  r9   c                 &    [        U R                  6 $ r   )r   r+   rm   s    r7   r   erf2._eval_is_zero0  s    dii  r9   r   N)r   r   r   r   r   rC   r   r]   rn   r5  r  r   r   r   r   r   r   r   r   r"  r   r   r   r9   r7   rV  rV    si    BJ5 ! !0MO!'CCA=F
?!!r9   rV  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	)rH   i3  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   r0   r+   r   r   r   rA   s     r7   rC   erfinv.fdifff  sG    q=8C		$))A, 7 :;;AFFBB$T44r9   c                     [         $ rF   re  rA   s     r7   rI   erfinv.inversel  s	    
 
r9   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   rN   rR   rQ   rS   r.   rP   rO   rT   r;   r+   r,   rW   r-  s      r7   r]   erfinv.evals  s    :55L!--%%%YY66M!%%Z::a!&&)"<"<66!99966M ''+>z"c22
7T7TGGAJ; 8U2>r9   c                     [        SU-
  5      $ Nr?   r   r   s      r7   _eval_rewrite_as_erfcinverfinv._eval_rewrite_as_erfcinv  s    qs|r9   c                 4    U R                   S   R                  $ rj   r9  rm   s    r7   r   erfinv._eval_is_zero  r;  r9   r   Nr   )r   r   r   r   r   rC   rI   r   r]   r  r   r   r   r9   r7   rH   rH   3  s0    /d5  *$r9   rH   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
)rU   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r  r  rA   s     r7   rC   erfcinv.fdiff  sI    q=H9S499Q<!8!!;<<QVVCC$T44r9   c                     [         $ rF   ri  rA   s     r7   rI   erfcinv.inverse  s	    
 r9   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   rN   rS   rO   rP   r.   rQ   rZ   r}   s     r7   r]   erfcinv.eval  sd    :55LYY::!%%Z66M!V%%%99:: r9   c                     [        SU-
  5      $ r  rG   r   s      r7   _eval_rewrite_as_erfinverfcinv._eval_rewrite_as_erfinv  s    ac{r9   c                 :    U R                   S   S-
  R                  $ rL   r9  rm   s    r7   r   erfcinv._eval_is_zero  s    		!q )))r9   c           	      t    U R                   S   n[        UR                  [        U[	        S5      5      /5      $ r   )r+   r	   rS   r   r   r|   s     r7   _eval_is_infiniteerfcinv._eval_is_infinite  s.    IIaLE!WQZ$89::r9   r   Nr   )r   r   r   r   r   rC   rI   r   r]   r  r   r  r   r   r9   r7   rU   rU     s5    )X5  *;r9   rU   c                   4    \ rS rSrSrS r\S 5       rS rSr	g)rV   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   r0   r   r   r   r   r   rX  s       r7   rC   erf2inv.fdiff  sp    yyq=tyy~q(A-..]8AFF?3tyy~q'8#999$T44r9   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   rN   rS   r.   rP   rO   rH   rU   )rZ   r4   r5   s      r7   r]   erf2inv.eval   s    :aee55LYY19966MYY1:::!%%ZAII55LYY!9!**_A2;YYH!**_!999yyvvay 99H r9   c                 h    U R                   u  pUR                  (       a  UR                  (       a  gg g )NTr9  )r1   r4   r5   s      r7   r   erf2inv._eval_is_zero;  s$    yy99 #9r9   r   N)
r   r   r   r   r   rC   r   r]   r   r   r   r9   r7   rV   rV     s&    0f5  4r9   rV   c                      ^  \ rS rSrSr\S 5       rSS jrU 4S jrS r	S r
S rS	 r\r\r\rSS
 jrS rU 4S jrSU 4S jjrU 4S jrSrU =r$ )EiiD  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   )	rS   r   rQ   rO   r.   extract_branch_factorr  r
   r   rZ   r}   r.  rd   s       r7   r]   Ei.eval  s    99%%%!**_::!$$$66M99%%%'')b6AaCF1H$$ r9   c                 p    [        U R                  S   5      nUS:X  a  [        U5      U-  $ [        X5      erL   )r   r+   r   r   r1   rB   r[   s      r7   rC   Ei.fdiff  s4    1&q=s8C<$T44r9   c                    > U R                   S   [        S5      -  R                  (       a,  [        TU ]  U5      [
        [        -  R	                  U5      -   $ [        TU ]  U5      $ r  )r+   r   r   r   _eval_evalfr
   r   )r1   precr   s     r7   r  Ei._eval_evalf  sQ    IIaLB'447&t,"/A/A$/GGGw"4((r9   c                 V    SSK Jn  U" S[        S5      U-  5      * [        [        -  -
  $ )Nr   r   r   )r   r   r   r
   r   r   s       r7   r   Ei._eval_rewrite_as_uppergamma  s)    F 1jnQ.//!B$66r9   c                 P    [        S[        S5      U-  5      * [        [        -  -
  $ )Nr?   r   )r   r   r
   r   r   s      r7   r   Ei._eval_rewrite_as_expint  s$    q*R.*++ad22r9   c                     [        U[        5      (       a  [        UR                  S   5      $ [        [	        U5      5      $ rj   )rT   r   lir+   r   r   s      r7   _eval_rewrite_as_liEi._eval_rewrite_as_li  s1    aaffQi= 
 #a&zr9   c                     UR                   (       a%  [        U5      [        U5      -   [        [        -  -
  $ [        U5      [        U5      -   $ r   )is_negativeShiChir
   r   r   s      r7   _eval_rewrite_as_SiEi._eval_rewrite_as_Si  s6    ==q6CF?QrT))q6CF?"r9   c                 0    [        U5      [        U5      -  $ r   )r   _eisr  s       r7   r   Ei._eval_rewrite_as_tractable  s    1vQr9   c                     SSK Jn  [        [        SU/5      R                  5      nU" [
        R                  U-  U-  U[
        R                  U45      $ Nr   Integralr\   )sympy.integrals.integralsr  r   r   namer   Exp1rQ   r1   r}   r   r  r\   s        r7   _eval_rewrite_as_IntegralEi._eval_rewrite_as_Integral  sE    6'aS1667	!a););Q%?@@r9   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   rS   as_coeff_exponentr   r   r  r
   r   r   r.   r   r   )
r1   r4   r   r   r   x0r[   cer   s
            r7   r   Ei._eval_as_leading_term  s    YYq\1%iil**1*8wwq::((+DA!\3q6tDq6AF?Z/4,,": :23&&: :w,Q,EEr9   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      $ rj   )r+   r   rS   r  _eval_nseriesr   r1   r4   rd   r   r   r  fr   s          r7   r  Ei._eval_nseries  s[    YYq\1%::(($))4A??1..w$Q400r9   c                 T  > SSK Jn  US   nU[        R                  [        R                  4;   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 ]3  XX45      $ s  snf Nr   r   r?   )r   r   r   rO   rQ   r+   r   r   r   r   r   r  r   rS  s             r7   r   Ei._eval_aseries  s    ,aQZZ!3!344		!A05a911&91QT61%&'AF1HQ''R,Qq??	 :s   B%r   r   r   r   )r   r   r   r   r   r   r]   rC   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   @r7   r  r  D  sr    Tn % %5)
73#
 ... A

F1
@ 
@r9   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
   rR   r   r   )rZ   nur}   r  r   nu2rd   s          r7   r]   expint.evalc  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Sr9   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r  )r+   r'   r   r   )r1   rB   r  r}   s       r7   rC   expint.fdiffy  sh    		q=QK<QFQ1r6NB JJJ]261%%%$T44r9   c                 6    SSK Jn  X!S-
  -  U" SU-
  U5      -  $ )Nr   r   r?   )r   r   )r1   r  r}   r   r   s        r7   r   "expint._eval_rewrite_as_uppergamma  s!    F6{:a"fa000r9   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   )r1   r  r}   r   r4   rf   s         r7   _eval_rewrite_as_Eiexpint._eval_rewrite_as_Ei  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     r7   r"  expint._eval_expand_func  s!    ||B''8%88r9   c                 @    US:w  a  U $ [        U5      [        U5      -
  $ r  )r  r  )r1   r  r}   r   s       r7   r  expint._eval_rewrite_as_Si  s     7K1vAr9   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      $ rL   )r+   hasr  r  r  r  r   )r1   r4   rd   r   r   r  r  r   s          r7   r  expint._eval_nseries  s    yy|""1BQw,,dii8qT2226,,dii8qT22w$Q400r9   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   rO   r   rR   r   r   r   r   r   r   )r1   rd   r   r4   r   r   r   r  r}   rf   r   r   s              r7   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  r\   r?   )	r  r  r+   r   r   r  r   r   rO   )r1   r+   r   r  rd   r4   r\   s          r7   r   expint._eval_rewrite_as_Integral  sS    6yy'T27782QBqD	)Aq!**+=>>r9   r   r  )r   r   r   r   r   r   r]   rC   r   r  r"  r  r  r  r  r  r   r  r   r   r   s   @r7   r   r     sb    dN T T*51
9 ...	1
D? ?r9   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    r7   r  r    s    @ !Q<r9   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   )rS   r   r.   rP   rQ   rO   r  s     r7   r]   li.evalB  sS    9966M!%%Z%%%!**_::9966M r9   c                 z    U R                   S   nUS:X  a  [        R                  [        U5      -  $ [	        X5      erL   r+   r   rP   r   r   r  s      r7   rC   li.fdiffM  4    iilq=553s8##$T44r9   c                     U R                   S   nUR                  (       d  U R                  UR                  5       5      $ g rj   )r+   r   r0   rl   r|   s     r7   rn   li._eval_conjugateT  s2    IIaL%%99Q[[]++ &r9   c                 0    [        U5      [        S5      -   $ r   )Lir  r   s      r7   _eval_rewrite_as_Lili._eval_rewrite_as_LiZ      !ur!u}r9   c                 *    [        [        U5      5      $ r   )r  r   r   s      r7   r  li._eval_rewrite_as_Ei]  s    #a&zr9   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   rP   r   s       r7   r   li._eval_rewrite_as_uppergamma`  s`    FAAw''CFc!%%A,&7789;>Aw<H 	Ir9   c                 N   [        [        [        U5      -  5      [        [        [        [        U5      -  5      -  -
  [        R
                  [        [        R                  [        U5      -  5      [        [        U5      5      -
  -  -
  [        [        [        U5      -  5      -
  $ r   )Cir
   r   Sir   r   rP   r   s      r7   r  li._eval_rewrite_as_Sie  sp    1SV8qAc!fH~-AEE#a&L)CAK789;>qQx=I 	Jr9   c                     [        [        U5      5      [        [        U5      5      -
  [        R                  [        [        R
                  [        U5      -  5      [        [        U5      5      -
  -  -
  $ r   )r  r   r  r   r   rP   r   s      r7   r  li._eval_rewrite_as_Shik  sJ    CFc#a&k)AFFCc!f4ECPQF4S,TTUr9   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   rP   r   r   s      r7   r   li._eval_rewrite_as_hyperp  sY    AuVVSV44CFc!%%A,&7789;EF 	Gr9   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   rP   r'   r   s      r7   r   li._eval_rewrite_as_meijergt  sY    c!fWAEE#a&L(9CAK(G HH*lSVG<= 	>r9   Nc                 0    U[        [        U5      5      -  $ r   )r  r   r  s       r7   r   li._eval_rewrite_as_tractablex  s    4A<r9   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 rL   )r+   r   r   r   r   r   )r1   r4   rd   r   r   r}   rf   r   s           r7   r  li._eval_nseries{  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 rr   r9  r|   s     r7   r   li._eval_is_zero      IIaL99 r9   r   r   r   r  )r   r   r   r   r   r   r]   rC   rn   r	  r  r   r  r  r  r  r   r   r   r  r   r   r   r9   r7   r  r    sm    `F  5,I
J .V 0G> 2
r9   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  i  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   rO   r.   r  s     r7   r]   Li.eval  s0    

?::!A$Y66M r9   c                 z    U R                   S   nUS:X  a  [        R                  [        U5      -  $ [	        X5      erL   r  r  s      r7   rC   Li.fdiff  r  r9   c                 J    U R                  [        5      R                  U5      $ r   )r  r  evalf)r1   r  s     r7   r  Li._eval_evalf  s    ||B%%d++r9   c                 0    [        U5      [        S5      -
  $ r   )r  r   s      r7   r  Li._eval_rewrite_as_li  r  r9   Nc                 H    U R                  [        5      R                  SSS9$ )Nr	  T)r2   )r  r  r  s       r7   r   Li._eval_rewrite_as_tractable  s!    ||B''$'??r9   c                 X    U R                   " U R                  6 nUR                  XU5      $ r   )r  r+   r  )r1   r4   rd   r   r   r  s         r7   r  Li._eval_nseries  s'    $$dii0qT**r9   r   r   r   r  )r   r   r   r   r   r   r]   rC   r  r  r   r  r   r   r9   r7   r  r    s6    =@  5,@+r9   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.   _atzerorO   _atinfrQ   	_atneginfrS   rW   r   r
   	_trigfunc_Ifactor_minusfactorr  r   r  s       r7   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2r9   c                 |    [        U R                  S   5      nUS:X  a  U R                  U5      U-  $ [        X5      erL   )r   r+   r6  r   r  s      r7   rC   TrigonometricIntegral.fdiff	  s:    1&q=>>#&s**$T44r9   c                 J    U R                  U5      R                  [        5      $ r   )r   r  r  r   s      r7   r  )TrigonometricIntegral._eval_rewrite_as_Ei  s    ++A.66r::r9   c                 N    SSK Jn  U R                  U5      R                  U5      $ r  )r   r   r   r  r   s       r7   r   1TrigonometricIntegral._eval_rewrite_as_uppergamma  s!    F++A.66zBBr9   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   )r\   rd   s     r7   <lambda>5TrigonometricIntegral._eval_nseries.<locals>.<lambda>  s
    !$q&r9   F)simultaneous)	r+   r   r   r  r6  replacer   r   r   )r1   r4   rd   r   r   
baseseriesr   s         r7   r  #TrigonometricIntegral._eval_nseries  s    99Q<Q"a'7(t44^^A&44Q4@
>>!!!OJ''-@u'U
>>!!*s1v--Jq))A,/==aDIIr9   r   r   r  )r   r   r   r   r   r   r]   rC   r  r   r  r   r   r   s   @r7   r1  r1    s6    3 3 3>5;C
J 
Jr9   r1  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	 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   rZ   s    r7   r4  	Si._atinfn  s    !&&yr9   c                 2    [         * [        R                  -  $ r   rJ  rK  s    r7   r5  Si._atneginfr  s    s166zr9   c                     [        U5      * $ r   )r  r  s     r7   r8  Si._minusfactorv  s    1vr9   c                 ,    [         [        U5      -  U-  $ r   )r
   r  rZ   r}   signs      r7   r7  Si._Ifactorz  s    Qx}r9   c                     [         S-  [        [        [        5      U-  5      [        [        [        * 5      U-  5      -
  S-  [        -  -   $ r   )r   r  r   r
   r   s      r7   r   Si._eval_rewrite_as_expint~  s=    !tr*Q-/*R
A2q0@-AA1DQFFFr9   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        r7   r  Si._eval_rewrite_as_Integral  s6    6'aS1667Q!Q++r9   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   rN   r   r   r  rS   r[  r0   r   s         r7   r   Si._eval_as_leading_term  s    iil**1d*Cxx1~155=99Qbh.B.Bs9LD<<J!!99T?"Kr9   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   rO   r+   r   rR   r   r   r#   r   r$   r   r  r   )r1   rd   r   r4   r   r   r   r}   rf   pqr   s              r7   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 rr   r9  r|   s     r7   r   Si._eval_is_zero  r!  r9   r   )r   r   r   r   r   r$   r6  r   r.   r3  r   r4  r5  r8  r7  r   r  _eval_rewrite_as_sincr   r   r   r   r   r   s   @r7   r  r  $  s    DL IffG       G,
 7@  r9   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	 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.   rK  s    r7   r4  	Ci._atinf  s    vvr9   c                     [         [        -  $ r   )r
   r   rK  s    r7   r5  Ci._atneginf  s    tr9   c                 4    [        U5      [        [        -  -   $ r   r  r
   r   r  s     r7   r8  Ci._minusfactor  s    !uqt|r9   c                 @    [        U5      [        [        -  S-  U-  -   $ r   r  r
   r   rR  s      r7   r7  Ci._Ifactor  s    1v"Qt##r9   c                 z    [        [        [        5      U-  5      [        [        [        * 5      U-  5      -   * S-  $ r   )r  r   r
   r   s      r7   r   Ci._eval_rewrite_as_expint  s2    JqM!O$r*aR.*:';;<Q>>r9   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        r7   r  Ci._eval_rewrite_as_Integral  sP    6'aS1667||c!f$x3q61q!Qi'HHHr9   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 $ rZ  r+   r   r   r   rN   r   r   r  rS   r  r   r   r{   r0   r1   r4   r   r   r[   r   r  r  s           r7   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?"Kr9   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   rO   rQ   r+   r   rR   r   r$   r   r#   r
   r   r   r  r   )r1   rd   r   r4   r   r   r   r}   rf   r^  r_  resultr   s               r7   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   )r   r   r   r   r   r#   r6  r   r   r3  r   r4  r5  r8  r7  r   r  r   r   r   r   r   s   @r7   r  r    s    M^ IG      $ $?I
@ @r9   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	 rS
rg)r  i8  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   rO   rK  s    r7   r4  
Shi._atinf{      zzr9   c                 "    [         R                  $ r   )r   rQ   rK  s    r7   r5  Shi._atneginf  s    !!!r9   c                     [        U5      * $ r   )r  r  s     r7   r8  Shi._minusfactor  s    Awr9   c                 ,    [         [        U5      -  U-  $ r   )r
   r  rR  s      r7   r7  Shi._Ifactor  s    Awt|r9   c                     [        U5      [        [        [        [        -  5      U-  5      -
  S-  [        [        -  S-  -
  $ r   )r  r    r
   r   r   s      r7   r   Shi._eval_rewrite_as_expint  s5    19QrT?1,--q01R4699r9   c                 F    U R                   S   nUR                  (       a  gg rr   r9  r|   s     r7   r   Shi._eval_is_zero  r!  r9   c                 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   r[  r   s         r7   r   Shi._eval_as_leading_term  s~    iil**1-xx1~155=99Qbh.B.Bs9LD<<J!!99T?"Kr9   r   N)r   r   r   r   r   r"   r6  r   r.   r3  r   r4  r5  r8  r7  r   r   r   r   r   r9   r7   r  r  8  su    =~ IffG  " "    :
r9   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	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   r}  rK  s    r7   r4  
Chi._atinf  r  r9   c                 "    [         R                  $ r   r}  rK  s    r7   r5  Chi._atneginf  r  r9   c                 4    [        U5      [        [        -  -   $ r   rm  r  s     r7   r8  Chi._minusfactor  s    1v"}r9   c                 @    [        U5      [        [        -  S-  U-  -   $ r   rj  rR  s      r7   r7  Chi._Ifactor  s    !uqtAvd{""r9   c                     [         * [        -  S-  [        U5      [        [        [         [        -  5      U-  5      -   S-  -
  $ r   )r
   r   r  r    r   s      r7   r   Chi._eval_rewrite_as_expint 	  s7    r"uQw"Q%"Yqt_Q%6"77:::r9   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 $ rZ  rt  ru  s           r7   r   Chi._eval_as_leading_term	  rw  r9   r   N)r   r   r   r   r   r!   r6  r   r   r3  r   r4  r5  r8  r7  r   r   r   r   r9   r7   r  r    ss    HT IG      # #;r9   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   rO   r   rS   r.   rP   rW   r
   _sign)rZ   r}   prefactnewargchangedr.  s         r7   r]   FresnelIntegral.eval	  s     

?66M 9966M %%,,R0>hGFG,,Q/>iik')GFG3v;&& r9   c                     US:X  a9  U R                  [        R                  [        -  U R                  S   S-  -  5      $ [        X5      er  )r6  r   r   r   r+   r   rA   s     r7   rC   FresnelIntegral.fdiff;	  s<    q=>>!&&)DIIaL!O";<<$T44r9   c                 4    U R                   S   R                  $ rj   rs   rm   s    r7   r5  &FresnelIntegral._eval_is_extended_realA	  r7  r9   c                 4    U R                   S   R                  $ rj   r9  rm   s    r7   r   FresnelIntegral._eval_is_zeroF	  r;  r9   c                 Z    U R                  U R                  S   R                  5       5      $ rj   rk   rm   s    r7   rn   FresnelIntegral._eval_conjugateI	  rp   r9   r   Nr   )r   r   r   r   r   r   r   r]   rC   r5  r~   r   rn   r8   r/   r   r   r9   r7   r  r  	  s>    0J' '<5- -O$3 -Lr9   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 rU 4S	 jrS
rU =r$ )r   iO	  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   ra   r   r.   r   rb   r   r   rd   r4   re   r^  s       r7   rg   fresnels.taylor_term	  s     q566M
A>"Q&"2&Qq!tQqS1W-qsAaC!G}acAg/FG1LL!t1uqj(AaD2a4!8,<R!A#'],JKPQRSPSVWPWYbcdefcfijcjYkOkllr9   c           	          [         R                  [        -   S-  [        [         R                  [        -   S-  [	        [
        5      -  U-  5      [        [        [         R                  [        -
  S-  [	        [
        5      -  U-  5      -  -
  -  $ Nr  r*   r   rP   r
   r;   r   r   r   s      r7   r  fresnels._eval_rewrite_as_erf	  f    	1}QUUQYM$r($:1$< =#quuqyRSmTXY[T\F\]^F^B_@_ _``r9   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      r7   r   fresnels._eval_rewrite_as_hyper	  sY    !Q$wqy5(1a.!1HQNHQPQN3SVXZ[V[U[\]_`\`U`acUcdddr9   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      r7   r   !fresnels._eval_rewrite_as_meijerg	  s    1hq!n$$QAA0F(FXVWYZ^G[([\"qcHQN#3hq!na5H2q5&QRTUQU+VX.YZ 	[r9   c                     SSK Jn  [        [        SU/5      R                  5      nU" [        [        US-  -  S-  5      USU45      $ Nr   r  r\   r*   )r  r  r   r   r  r$   r   r  s        r7   r  "fresnels._eval_rewrite_as_Integral	  B    6'aS1667Bq!tGAIAq	22r9   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  rS   r   rO   rQ   r   r0   r1   r4   r   r   r   r[   r   r   s           r7   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?"r9   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   rO   r+   r   rR   r   r   r   r   r$   r   r#   r   r   r   r1   rd   r   r4   r   r   r   r}   rf   r^  r_  r\   r   r   s                r7   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   )r   r   r   r   r   r$   r6  r   rP   r  r   r   rg   r  r   r   r  r   r   r   r   r   s   @r7   r   r   O	  s^    Sh IUUFE	m  	mae[3
#8 8r9   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 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  ra   r  r  s       r7   rg   fresnelc.taylor_termH
  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\]]r9   c           	          [         R                  [        -
  S-  [        [         R                  [        -   S-  [	        [
        5      -  U-  5      [        [        [         R                  [        -
  S-  [	        [
        5      -  U-  5      -  -   -  $ r  r  r   s      r7   r  fresnelc._eval_rewrite_as_erfU
  r  r9   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      r7   r   fresnelc._eval_rewrite_as_hyperX
  sA    5(1a.)AFFHQN+Cb!eVAqD[QS^TTTr9   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      r7   r   !fresnelc._eval_rewrite_as_meijerg[
  s    1hq!n$$QQT1(=dA2qk(IJ"qcHQN#3hq!na5H2q5&QRTUQU+VX.YZ 	[r9   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        r7   r  "fresnelc._eval_rewrite_as_Integral_
  r  r9   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  rS   rO   rQ   r   r0   r  s           r7   r   fresnelc._eval_as_leading_termd
  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?"r9   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   rO   r+   r   rR   r   r   r   r   r#   r   r$   r   r   r   r  s                r7   r   fresnelc._eval_aseriess
  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   )r   r   r   r   r   r#   r6  r   rP   r  r   r   rg   r  r   r   r  r   r   r   r   r   s   @r7   r   r   	  s\    Sh IEEE	^  	^aU[3
#8 8r9   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   )rS   r   rP   )rZ   r[   s     r7   r]   
_erfs.eval
  s    ;;55L r9   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   rO   r+   r   r   r   r   r   r  rW   r
   r   r   )r1   rd   r   r4   r   r   r   r}   rf   lor\   r   s               r7   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   ra   r*   )r+   r   r   r   r   r1   rB   r}   s      r7   rC   _erfs.fdiff
  s@    q=		!Ad2h;1U1X--$T44r9   c                 X    [         R                  [        U5      -
  [        US-  5      -  $ r   )r   rP   r;   r   r   s      r7   _eval_rewrite_as_intractable"_erfs._eval_rewrite_as_intractable
  s!    AAqD	))r9   r   r   )r   r   r   r   r   r   r]   r   rC   r  r   r   r   s   @r7   r   r   
  s0    
  865* *r9   r   c                   X   ^  \ rS rSrSrU 4S jrS	S jrS rU 4S 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                 ^  > SSK Jn  US   [        R                  [        R                  4;  a  [
        T
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   rO   rQ   r   r   r+   r   r   r   r  )r1   rd   r   r4   r   r   r}   rf   r  r  r   s             r7   r   _eis._eval_aseries
  s    ,8AJJ(:(:;;7(1;;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   rP   r  r   r  s      r7   rC   
_eis.fdiff
  s8    q=		!A5519tAw&&$T44r9   c                 2    [        U* 5      [        U5      -  $ r   )r   r  r   s      r7   r  !_eis._eval_rewrite_as_intractable
  s    A2wr!u}r9   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   rS   r  r   r   )r1   r4   r   r   r  r  r   s         r7   r   _eis._eval_as_leading_term
  sc    YYq\1%::11499=A**1d*CCw,Q,EEr9   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      $ rj   )r+   r   rS   r  r  r   r  s          r7   r  _eis._eval_nseries
  s[    YYq\1%::11499=A??1..w$Q400r9   r   r   r  )r   r   r   r   r   r   rC   r  r   r  r   r   r   s   @r7   r  r  
  s'    	75F1 1r9   r  N)T)Pr   
sympy.corer   sympy.core.addr   sympy.core.cacher   sympy.core.functionr   r   r   sympy.core.logicr	   sympy.core.numbersr
   r   r   r   sympy.core.relationalr   sympy.core.powerr   sympy.core.singletonr   sympy.core.symbolr   r   sympy.core.sympifyr   (sympy.functions.combinatorial.factorialsr   r   r   $sympy.functions.elementary.complexesr   r   r   #sympy.functions.elementary.integersr   r   (sympy.functions.elementary.miscellaneousr   r   &sympy.functions.elementary.exponentialr   r   r    %sympy.functions.elementary.hyperbolicr!   r"   (sympy.functions.elementary.trigonometricr#   r$   r%   sympy.functions.special.hyperr&   r'   r8   r;   r   r   rV  rH   rU   rV   r  r   r  r  r  r1  r  r  r  r  r  r   r   r   r  r   r9   r7   <module>r     s  F "  $ O O % 7 7 '   " : & [ [ L L > ? F F < C C 8*l-/ l-^H? HD}B? }B@O!? O!bZ$_ Z$zP; P;f[o [Bt@ t@n}?_ }?@ Fe eNZ+ Z+@<JO <J~E	 EPJ@	 J@Xg
 gTn
 nj5-o 5-p^8 ^8B^8 ^8L.*O .*b*1? *1r9   