
    Rief9                         d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ  G d de          Z G d de          Z G d de          Z G d de          ZdS )z Elliptic Integrals.     )SpiIRational)FunctionArgumentIndexError)Dummy)sign)atanh)sqrt)sintan)gamma)hypermeijergc                   V    e Zd ZdZed             ZddZd ZddZd Z	d	 Z
d
 Zd ZdS )
elliptic_kaN  
    The complete elliptic integral of the first kind, defined by

    .. math:: K(m) = F\left(\tfrac{\pi}{2}\middle| m\right)

    where $F\left(z\middle| m\right)$ is the Legendre incomplete
    elliptic integral of the first kind.

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

    The function $K(m)$ is a single-valued function on the complex
    plane with branch cut along the interval $(1, \infty)$.

    Note that our notation defines the incomplete elliptic integral
    in terms of the parameter $m$ instead of the elliptic modulus
    (eccentricity) $k$.
    In this case, the parameter $m$ is defined as $m=k^2$.

    Examples
    ========

    >>> from sympy import elliptic_k, I
    >>> from sympy.abc import m
    >>> elliptic_k(0)
    pi/2
    >>> elliptic_k(1.0 + I)
    1.50923695405127 + 0.625146415202697*I
    >>> elliptic_k(m).series(n=3)
    pi/2 + pi*m/8 + 9*pi*m**2/128 + O(m**3)

    See Also
    ========

    elliptic_f

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Elliptic_integrals
    .. [2] https://functions.wolfram.com/EllipticIntegrals/EllipticK

    c                 D   |j         rt          t          j        z  S |t          j        u r<dt          t	          dd          z  z  t          t	          dd                    dz  z  S |t          j        u rt          j        S |t          j        u r;t          t	          dd                    dz  dt          dt          z            z  z  S |t          j
        t          j        t          t          j
        z  t          t          j        z  t          j        fv rt          j        S d S )N               )is_zeror   r   Halfr   r   OneComplexInfinityNegativeOner   InfinityNegativeInfinityr   Zero)clsms     Jlib/python3.11/site-packages/sympy/functions/special/elliptic_integrals.pyevalzelliptic_k.eval:   s    9 
	af9!&[[R!Q''hr1oo(>(>(AAA!%ZZ$$!-!Q((!+QtAbDzz\::1:q11QZ<Q''):< < <6M< <    r   c                 ~    | j         d         }t          |          d|z
  t          |          z  z
  d|z  d|z
  z  z  S )Nr   r   r   )args
elliptic_er   )selfargindexr$   s      r%   fdiffzelliptic_k.fdiffH   s>    IaL1Q
1 55!QUDDr'   c                     | j         d         }|j        o	|dz
  j        du r'|                     |                                          S d S )Nr   r   Fr)   is_realis_positivefunc	conjugater+   r$   s     r%   _eval_conjugatezelliptic_k._eval_conjugateL   sH    IaLI-1q5-%7799Q[[]]+++ 87r'   r   c                     ddl m}  ||                     t                                        |||                    S )Nr   hyperexpandnlogx)sympy.simplifyr8   rewriter   _eval_nseries)r+   xr:   r;   cdirr8   s         r%   r>   zelliptic_k._eval_nseriesQ   sE    ......{4<<..<<Q!$<OOPPPr'   c                     t           t          j        z  t          t          j        t          j        ft          j        f|          z  S N)r   r   r   r   r   r+   r$   kwargss      r%   _eval_rewrite_as_hyperz!elliptic_k._eval_rewrite_as_hyperU   s,    !&y/!%1====r'   c                     t          t          j        t          j        fg ft          j        ft          j        ff|           dz  S Nr   )r   r   r   r"   rC   s      r%   _eval_rewrite_as_meijergz#elliptic_k._eval_rewrite_as_meijergX   s6    ("-	AF9/ErJJ1LLr'   c                 2    | j         d         }|j        rdS d S )Nr   T)r)   is_infiniter4   s     r%   _eval_is_zerozelliptic_k._eval_is_zero[   s&    IaL= 	4	 	r'   c           
          ddl m} t          d          }| j        d         } |dt	          d|t          |          dz  z  z
            z  |dt          dz  f          S Nr   Integraltr   r   )sympy.integrals.integralsrO   r	   r)   r   r   r   )r+   r)   rO   rP   r$   s        r%   _eval_rewrite_as_Integralz$elliptic_k._eval_rewrite_as_Integral`   se    666666#JJIaLx$q1SVVQY;///!Q1>>>r'   Nr   r   )__name__
__module____qualname____doc__classmethodr&   r-   r5   r>   rE   rH   rK   rR    r'   r%   r   r      s        * *X   [E E E E, , ,
Q Q Q Q> > >M M M  
? ? ? ? ?r'   r   c                   B    e Zd ZdZed             Zd	dZd Zd Zd Z	dS )

elliptic_fa  
    The Legendre incomplete elliptic integral of the first
    kind, defined by

    .. math:: F\left(z\middle| m\right) =
              \int_0^z \frac{dt}{\sqrt{1 - m \sin^2 t}}

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

    This function reduces to a complete elliptic integral of
    the first kind, $K(m)$, when $z = \pi/2$.

    Note that our notation defines the incomplete elliptic integral
    in terms of the parameter $m$ instead of the elliptic modulus
    (eccentricity) $k$.
    In this case, the parameter $m$ is defined as $m=k^2$.

    Examples
    ========

    >>> from sympy import elliptic_f, I
    >>> from sympy.abc import z, m
    >>> elliptic_f(z, m).series(z)
    z + z**5*(3*m**2/40 - m/30) + m*z**3/6 + O(z**6)
    >>> elliptic_f(3.0 + I/2, 1.0 + I)
    2.909449841483 + 1.74720545502474*I

    See Also
    ========

    elliptic_k

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Elliptic_integrals
    .. [2] https://functions.wolfram.com/EllipticIntegrals/EllipticF

    c                 "   |j         rt          j        S |j         r|S d|z  t          z  }|j        r|t          |          z  S |t          j        t          j        fv rt          j        S |                                rt          | |           S d S rG   )
r   r   r"   r   
is_integerr   r    r!   could_extract_minus_signr\   )r#   zr$   ks       r%   r&   zelliptic_f.eval   s    9 	6M9 	HaCF< 	&Z]]?"1:q12226M'')) 	&r1%%%%	& 	&r'   r   c                 F   | j         \  }}t          d|t          |          dz  z  z
            }|dk    rd|z  S |dk    rRt          ||          d|z  d|z
  z  z  t	          ||          d|z  z  z
  t          d|z            dd|z
  z  |z  z  z
  S t          | |          )Nr   r   r   )r)   r   r   r*   r\   r   )r+   r,   r`   r$   fms        r%   r-   zelliptic_f.fdiff   s    y1!aA	k/""q==R4K]]q!$$ac1q5k2Z15E5Eqs5KK!HHaQil+, - x000r'   c                     | j         \  }}|j        o	|dz
  j        du r:|                     |                                |                                          S d S )Nr   Fr/   r+   r`   r$   s      r%   r5   zelliptic_f._eval_conjugate   sR    y1I-1q5-%7799Q[[]]AKKMM::: 87r'   c           
          ddl m} t          d          }| j        d         | j        d         }} |dt	          d|t          |          dz  z  z
            z  |d|f          S rM   )rQ   rO   r	   r)   r   r   )r+   r)   rO   rP   r`   r$   s         r%   rR   z$elliptic_f._eval_rewrite_as_Integral   sk    666666#JJy|TYq\1x4Ac!ffaiK001Aq!9===r'   c                 P    | j         \  }}|j        rdS |j        r	|j        rdS d S d S )NT)r)   r   is_extended_realrJ   re   s      r%   rK   zelliptic_f._eval_is_zero   sI    y19 	4 	!- 	4	 	 	 	r'   NrS   )
rU   rV   rW   rX   rY   r&   r-   r5   rR   rK   rZ   r'   r%   r\   r\   g   s{        ' 'R & & [&1 1 1 1; ; ;
> > >    r'   r\   c                   \     e Zd ZdZedd            ZddZd Zd fd	Zd	 Z	d
 Z
d Z xZS )r*   a  
    Called with two arguments $z$ and $m$, evaluates the
    incomplete elliptic integral of the second kind, defined by

    .. math:: E\left(z\middle| m\right) = \int_0^z \sqrt{1 - m \sin^2 t} dt

    Called with a single argument $m$, evaluates the Legendre complete
    elliptic integral of the second kind

    .. math:: E(m) = E\left(\tfrac{\pi}{2}\middle| m\right)

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

    The function $E(m)$ is a single-valued function on the complex
    plane with branch cut along the interval $(1, \infty)$.

    Note that our notation defines the incomplete elliptic integral
    in terms of the parameter $m$ instead of the elliptic modulus
    (eccentricity) $k$.
    In this case, the parameter $m$ is defined as $m=k^2$.

    Examples
    ========

    >>> from sympy import elliptic_e, I
    >>> from sympy.abc import z, m
    >>> elliptic_e(z, m).series(z)
    z + z**5*(-m**2/40 + m/30) - m*z**3/6 + O(z**6)
    >>> elliptic_e(m).series(n=4)
    pi/2 - pi*m/8 - 3*pi*m**2/128 - 5*pi*m**3/512 + O(m**4)
    >>> elliptic_e(1 + I, 2 - I/2).n()
    1.55203744279187 + 0.290764986058437*I
    >>> elliptic_e(0)
    pi/2
    >>> elliptic_e(2.0 - I)
    0.991052601328069 + 0.81879421395609*I

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Elliptic_integrals
    .. [2] https://functions.wolfram.com/EllipticIntegrals/EllipticE2
    .. [3] https://functions.wolfram.com/EllipticIntegrals/EllipticE

    Nc                 4   |||}}d|z  t           z  }|j        r|S |j        rt          j        S |j        r|t          |          z  S |t          j        t          j        fv rt          j        S |	                                rt          | |           S d S |j        r
t           dz  S |t          j
        u rt          j
        S |t          j        u rt          t          j        z  S |t          j        u rt          j        S |t          j        u rt          j        S d S rG   )r   r   r   r"   r^   r*   r    r!   r   r_   r   r   )r#   r$   r`   ra   s       r%   r&   zelliptic_e.eval   s   =aqA!BAy y *v *A&qz1#5666((++-- *"A2q))))* * y 	)!taeuaj|#a(((z!a'''(( ('r'   r   c                    t          | j                  dk    rc| j        \  }}|dk    r%t          d|t          |          dz  z  z
            S |dk    r't	          ||          t          ||          z
  d|z  z  S n8| j        d         }|dk    r%t	          |          t          |          z
  d|z  z  S t          | |          )Nr   r   r   )lenr)   r   r   r*   r\   r   r   )r+   r,   r`   r$   s       r%   r-   zelliptic_e.fdiff  s    ty>>Q9DAq1}}A#a&&!)O,,,Q"1a((:a+;+;;acBB  	!A1}}"1
15!<< x000r'   c                 v   t          | j                  dk    rY| j        \  }}|j        o	|dz
  j        du r:|                     |                                |                                          S d S | j        d         }|j        o	|dz
  j        du r'|                     |                                          S d S )Nr   r   Fr   rl   r)   r0   r1   r2   r3   re   s      r%   r5   zelliptic_e._eval_conjugate  s    ty>>Q9DAq	1q1u1e;;yy>>> <; 	!A	1q1u1e;;yy/// <;r'   r   c                     ddl m} t          | j                  dk    r9 ||                     t
                                        |||                    S t                                          |||          S )Nr   r7   r   r9   )r<   r8   rl   r)   r=   r   r>   super)r+   r?   r:   r;   r@   r8   	__class__s         r%   r>   zelliptic_e._eval_nseries  sx    ......ty>>Q;t||E22@@ad@SSTTTww$$Q!$$777r'   c                     t          |          dk    rI|d         }t          dz  t          t          dd          t          j        ft          j        f|          z  S d S )Nr   r   r   r   )rl   r   r   r   r   r   r   r+   r)   rD   r$   s       r%   rE   z!elliptic_e._eval_rewrite_as_hyper$  sO    t99>>QAqD%"a!& 9AE8QGGGG >r'   c                     t          |          dk    rR|d         }t          t          j        t	          dd          fg ft          j        ft          j        ff|            dz  S d S )Nr   r   r   r   r   )rl   r   r   r   r   r"   rs   s       r%   rH   z#elliptic_e._eval_rewrite_as_meijerg)  sj    t99>>QAafhq!nn5r:fY	2QB8 8 889: : >r'   c           	         ddl m} t          | j                  dk    rt          dz  | j        d         fn| j        \  }}t          d          } |t          d|t          |          dz  z  z
            |d|f          S )Nr   rN   r   r   rP   )rQ   rO   rl   r)   r   r	   r   r   )r+   r)   rO   r`   r$   rP   s         r%   rR   z$elliptic_e._eval_rewrite_as_Integral/  s    666666'*49~~':':1dil##	1#JJxQ3q6619_--1ay999r'   rB   rS   rT   )rU   rV   rW   rX   rY   r&   r-   r5   r>   rE   rH   rR   __classcell__)rq   s   @r%   r*   r*      s        - -^ ) ) ) [)41 1 1 10 0 08 8 8 8 8 8H H H
: : :: : : : : : :r'   r*   c                   >    e Zd ZdZedd            Zd Zd	dZd ZdS )
elliptic_piaO  
    Called with three arguments $n$, $z$ and $m$, evaluates the
    Legendre incomplete elliptic integral of the third kind, defined by

    .. math:: \Pi\left(n; z\middle| m\right) = \int_0^z \frac{dt}
              {\left(1 - n \sin^2 t\right) \sqrt{1 - m \sin^2 t}}

    Called with two arguments $n$ and $m$, evaluates the complete
    elliptic integral of the third kind:

    .. math:: \Pi\left(n\middle| m\right) =
              \Pi\left(n; \tfrac{\pi}{2}\middle| m\right)

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

    Note that our notation defines the incomplete elliptic integral
    in terms of the parameter $m$ instead of the elliptic modulus
    (eccentricity) $k$.
    In this case, the parameter $m$ is defined as $m=k^2$.

    Examples
    ========

    >>> from sympy import elliptic_pi, I
    >>> from sympy.abc import z, n, m
    >>> elliptic_pi(n, z, m).series(z, n=4)
    z + z**3*(m/6 + n/3) + O(z**4)
    >>> elliptic_pi(0.5 + I, 1.0 - I, 1.2)
    2.50232379629182 - 0.760939574180767*I
    >>> elliptic_pi(0, 0)
    pi/2
    >>> elliptic_pi(1.0 - I/3, 2.0 + I)
    3.29136443417283 + 0.32555634906645*I

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Elliptic_integrals
    .. [2] https://functions.wolfram.com/EllipticIntegrals/EllipticPi3
    .. [3] https://functions.wolfram.com/EllipticIntegrals/EllipticPi

    Nc           	      x   ||||}}}|j         rt          ||          S |t          j        u r]t          ||          t	          d|t          |          dz  z  z
            t          |          z  t          ||          z
  d|z
  z  z   S d|z  t          z  }|j	        r|t          ||          z  S |j         rBt          t	          |dz
            t          |          z            t	          |dz
            z  S ||k    rXt          ||          t          d||          z
  t          |          t	          d|t          |          dz  z  z
            z  z   S |t          j        t          j        fv rt          j        S |t          j        t          j        fv rt          j        S |                                rt          || |           S |j         rt          ||          S |j        r|j        s|j        r|j        rt          j        S d S d S |j         rt%          |          S |t          j        u rt          j        S |j         rt          dt	          d|z
            z  z  S |t          j        k    rt          j        t)          |dz
            z  S ||k    rt          |          d|z
  z  S |t          j        t          j        fv rt          j        S |t          j        t          j        fv rt          j        S |j         rt%          |          S |j        r|j        s|j        r|j        rt          j        S d S d S )Nr   r   )r   r\   r   r   r   r   r   r*   r   r^   rx   r   r    r!   r"   r_   rh   rJ   r   r   r
   )r#   r:   r$   r`   ra   s        r%   r&   zelliptic_pi.evalc  s<   =A!qAy 4!!Q'''ae"1a((a!CFFAI+o..s1vv5#Aq))*,-E33 4 !BA| .Q**** 
.T!a%[[Q/00a!e<<a"1a((;q!Q+?+??AtA#a&&!)O4445 6qz1#5666vqz1#5666v++-- .#Ar1----y (!!Q'''! am &+,=v    y !!}}$ae(( 	1T!a%[[=))ae)$q1u++55a!!}}a!e,,qz1#5666vqz1#5666vy %!!}}$! am &+,=v   r'   c                    t          | j                  dk    r| j        \  }}}|j        o	|dz
  j        du r`|j        o	|dz
  j        du rO|                     |                                |                                |                                          S d S d S | j        \  }}|                     |                                |                                          S )Nr   r   Frn   )r+   r:   r`   r$   s       r%   r5   zelliptic_pi._eval_conjugate  s    ty>>QiGAq!	1q1u1e;;	1q1u1e;;yyq{{}}MMM <;;; 9DAq99Q[[]]AKKMM:::r'   r   c                    t          | j                  dk    r,| j        \  }}}t          d|t          |          dz  z  z
            d|t          |          dz  z  z
  }}|dk    rvt	          ||          ||z
  t          ||          z  |z  z   |dz  |z
  t          |||          z  |z  z   ||z  t          d|z            z  d|z  z  z
  d||z
  z  |dz
  z  z  S |dk    rd||z  z  S |dk    rSt	          ||          |dz
  z  t          |||          z   |t          d|z            z  d|dz
  z  |z  z  z
  d||z
  z  z  S n| j        \  }}|dk    rTt	          |          ||z
  t          |          z  |z  z   |dz  |z
  t          ||          z  |z  z   d||z
  z  |dz
  z  z  S |dk    r/t	          |          |dz
  z  t          ||          z   d||z
  z  z  S t          | |          )Nr   r   r   )	rl   r)   r   r   r*   r\   rx   r   r   )r+   r,   r:   r`   r$   rc   fns          r%   r-   zelliptic_pi.fdiff  sF   ty>>QiGAq!!aA	k/**A#a&&!)OB1}}"1a((AE:a3C3C+CA+EEA;q!Q#7#779:"S1XXqt,-/0!a%y!a%/@B B Q"R%y Q"1a((!a%0#Aq!,,-#ac((
Aq1uIbL1245q1uI? ? 
 9DAq1}}"1Q
1(=a(??A;q!#4#44Q679:AEAE9JL LQ"1q1u-Aq0A0AAAq1uINN x000r'   c                 X   ddl m} t          | j                  dk    r%| j        d         | j        d         t          dz  }}}n| j        \  }}}t          d          } |dd|t          |          dz  z  z
  t          d|t          |          dz  z  z
            z  z  |d|f          S )Nr   rN   r   r   rP   )rQ   rO   rl   r)   r   r	   r   r   )r+   r)   rO   r:   r$   r`   rP   s          r%   rR   z%elliptic_pi._eval_rewrite_as_Integral  s    666666ty>>QilDIaL"Q$!qAAiGAq!#JJxA#a&&!)OT!aA	k/-B-BBCaAYOOOr'   rB   rS   )	rU   rV   rW   rX   rY   r&   r5   r-   rR   rZ   r'   r%   rx   rx   6  sw        * *X / / / [/b; ; ;1 1 1 1.P P P P Pr'   rx   N)rX   
sympy.corer   r   r   r   sympy.core.functionr   r   sympy.core.symbolr	   $sympy.functions.elementary.complexesr
   %sympy.functions.elementary.hyperbolicr   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   r   'sympy.functions.special.gamma_functionsr   sympy.functions.special.hyperr   r   r   r\   r*   rx   rZ   r'   r%   <module>r      s     ) ) ) ) ) ) ) ) ) ) ) ) < < < < < < < < # # # # # # 5 5 5 5 5 5 7 7 7 7 7 7 9 9 9 9 9 9 = = = = = = = = 9 9 9 9 9 9 8 8 8 8 8 8 8 8W? W? W? W? W? W? W? W?tR R R R R R R Rjw: w: w: w: w: w: w: w:tGP GP GP GP GP( GP GP GP GP GPr'   