U
    ZÊ¹j°Â ã                   @   sÄ  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mZmZmZ d dlmZmZmZmZ d dlmZ d dlmZ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#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z: d dl;m<Z< d dl=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZH dd„ ZIG dd„ deƒZJedd„ ƒZKdd „ ZLdFe
eMee
d"f d#œd$d%„ZNG d&d'„ d'eJƒZOG d(d)„ d)eJƒZPG d*d+„ d+eJƒZQG d,d-„ d-eJƒZRG d.d/„ d/eJƒZSG d0d1„ d1eSƒZTG d2d3„ d3eSƒZUG d4d5„ d5eƒZVG d6d7„ d7eƒZWG d8d9„ d9eWƒZXG d:d;„ d;eWƒZYG d<d=„ d=eWƒZZG d>d?„ d?eWƒZ[G d@dA„ dAeWƒZ\G dBdC„ dCeWƒZ]G dDdE„ dEeWƒZ^d"S )Gé    )ÚTupleÚUnion)ÚAdd)Úcacheit)ÚExpr)ÚFunctionÚArgumentIndexErrorÚ	PoleErrorÚ
expand_mul)Ú	fuzzy_notÚfuzzy_orÚ	FuzzyBoolÚ	fuzzy_and)ÚMod)ÚRationalÚpiÚIntegerÚFloatÚequal_valued)ÚNeÚEq)ÚS)ÚSymbolÚDummy)Úsympify)Ú	factorialÚRisingFactorial)Ú	bernoulliÚeuler)ÚargÚimÚre)ÚlogÚexp)Úfloor)ÚsqrtÚMinÚMax)Ú	Piecewise)Ú	cos_tableÚ	ipartfracÚfermat_coords)ÚAnd)Ú	factorint)Úsymmetric_poly)Únumbered_symbolsc                 C   s   t | tƒrdS |  tj¡S dS )z; Helper to extract symbolic coefficient for imaginary unit N)Ú
isinstancer   Zas_coefficientr   ÚImaginaryUnit©r   © r3   úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/functions/elementary/trigonometric.pyÚ_imaginary_unit_as_coefficient!   s    
r5   c                   @   sJ   e Zd ZdZdZejfZdd„ Zdd„ Z	ddd„Z
dd	d
„Zddd„ZdS )ÚTrigonometricFunctionz(Base class for trigonometric functions. Tc                 C   sD   | j | jŽ }|j | j kr:|jd jr@t|jd jƒr@dS n|jS d S ©Nr   F)ÚfuncÚargsÚis_rationalr   Úis_zero©ÚselfÚsr3   r3   r4   Ú_eval_is_rational3   s
    z'TrigonometricFunction._eval_is_rationalc                 C   sd   | j | jŽ }|j | j krZt| jd jƒr8| jd jr8dS t| jd ƒ}|d k	r`|jr`dS n|jS d S ©Nr   FT)r8   r9   r   r;   Zis_algebraicÚ	_pi_coeffr:   )r=   r>   Úpi_coeffr3   r3   r4   Ú_eval_is_algebraic;   s    z(TrigonometricFunction._eval_is_algebraicc                 K   s&   | j f d|i|—Ž\}}||tj  S )NÚdeep)Úas_real_imagr   r1   )r=   rD   ÚhintsZre_partZim_partr3   r3   r4   Ú_eval_expand_complexF   s    z*TrigonometricFunction._eval_expand_complexc                 K   s~   | j d jrB|r2d|d< | j d j|f|ŽtjfS | j d tjfS |rd| j d j|f|Ž ¡ \}}n| j d  ¡ \}}||fS )Nr   FÚcomplex)r9   Úis_extended_realÚexpandr   ÚZerorE   )r=   rD   rF   r!   r    r3   r3   r4   Ú_as_real_imagJ   s    z#TrigonometricFunction._as_real_imagNc                 C   s¸   t | jd ƒ}|d kr$t|jƒd }| |¡s4tjS ||kr@|S ||jkr¬|jrr| |¡\}}||krr|t	|ƒ S |j
r¬| |¡\}}|j|dd�\}}||kr¬|t	|ƒ S tdƒ‚d S )Nr   F)Zas_Addz%Use the periodicity function instead.)r
   r9   ÚtupleZfree_symbolsÚhasr   rK   Úis_MulZas_independentÚabsÚis_AddÚNotImplementedError)r=   Zgeneral_periodÚsymbolÚfÚgÚhÚar3   r3   r4   Ú_periodW   s$    

zTrigonometricFunction._period)T)T)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Z
unbranchedr   ÚComplexInfinityÚ_singularitiesr?   rC   rG   rL   rX   r3   r3   r3   r4   r6   -   s   

r6   c                	   C   s   ddddddddd	œS )
N)é   é   )r`   é   )ra   é   )rb   é
   )rb   é   )rd   rc   )é   é   )é(   é<   )é   re   rf   é   é   rg   rh   éx   r3   r3   r3   r3   r4   Ú_table2q   s    ørm   c                 C   s¢   t j}g }t | ¡D ],}| t¡}|r6|jr6||7 }q| |¡ q|t jkrV| t jfS |t j }|| }|j	s‚d| j	r˜|j
dkr˜t||t g Ž |fS | t jfS )aË  
    Split ARG into two parts, a "rest" and a multiple of $\pi$.
    This assumes ARG to be an Add.
    The multiple of $\pi$ returned in the second position is always a Rational.

    Examples
    ========

    >>> from sympy.functions.elementary.trigonometric import _peeloff_pi
    >>> from sympy import pi
    >>> from sympy.abc import x, y
    >>> _peeloff_pi(x + pi/2)
    (x, 1/2)
    >>> _peeloff_pi(x + 2*pi/3 + pi*y)
    (x + pi*y + pi/6, 1/2)

    é   F)r   rK   r   Z	make_argsÚcoeffr   r:   ÚappendÚHalfÚ
is_integerÚis_even)r   rB   Z
rest_termsrW   ÚKÚm1Úm2r3   r3   r4   Ú_peeloff_piƒ   s    





rw   é   N)r   ÚcyclesÚreturnc                 C   s  | t krtjS | stjS | j� rþ|  t ¡}|�r| ¡ \}}|jr¸t|ƒd }|dkr¤t	t
t|dƒ ¡ ƒƒ }d| }|| }t	|ƒ}	t|	|ƒr¸t|	|ƒ}|| }ntt	|ƒƒ}|| }|j� rø|d }
|
dkrÔ|S |
sð|jdk	rètjS tdƒS |
| S |S n| j�rtjS dS )a6  
    When arg is a Number times $\pi$ (e.g. $3\pi/2$) then return the Number
    normalized to be in the range $[0, 2]$, else `None`.

    When an even multiple of $\pi$ is encountered, if it is multiplying
    something with known parity then the multiple is returned as 0 otherwise
    as 2.

    Examples
    ========

    >>> from sympy.functions.elementary.trigonometric import _pi_coeff
    >>> from sympy import pi, Dummy
    >>> from sympy.abc import x
    >>> _pi_coeff(3*x*pi)
    3*x
    >>> _pi_coeff(11*pi/7)
    11/7
    >>> _pi_coeff(-11*pi/7)
    3/7
    >>> _pi_coeff(4*pi)
    0
    >>> _pi_coeff(5*pi)
    1
    >>> _pi_coeff(5.0*pi)
    1
    >>> _pi_coeff(5.5*pi)
    3/2
    >>> _pi_coeff(2 + pi)

    >>> _pi_coeff(2*Dummy(integer=True)*pi)
    2
    >>> _pi_coeff(2*Dummy(even=True)*pi)
    0

    rx   r   rn   N)r   r   ÚOnerK   rO   ro   Úas_coeff_MulZis_FloatrP   ÚintÚroundr"   Zevalfr   r   rr   rs   r   r;   )r   ry   ÚcxÚcÚxrT   ÚpÚmÚcmÚiÚc2r3   r3   r4   rA   ¨   sB    %




rA   c                   @   sî   e Zd ZdZd8dd„Zd9dd„Zedd	„ ƒZee	d
d„ ƒƒZ
d:dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd;d*d+„Zd,d-„ Zd<d.d/„Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ ZdS )=Úsina»  
    The sine function.

    Returns the sine of x (measured in radians).

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

    This function will evaluate automatically in the
    case $x/\pi$ is some rational number [4]_.  For example,
    if $x$ is a multiple of $\pi$, $\pi/2$, $\pi/3$, $\pi/4$, and $\pi/6$.

    Examples
    ========

    >>> from sympy import sin, pi
    >>> from sympy.abc import x
    >>> sin(x**2).diff(x)
    2*x*cos(x**2)
    >>> sin(1).diff(x)
    0
    >>> sin(pi)
    0
    >>> sin(pi/2)
    1
    >>> sin(pi/6)
    1/2
    >>> sin(pi/12)
    -sqrt(2)/4 + sqrt(6)/4


    See Also
    ========

    csc, cos, sec, tan, cot
    asin, acsc, acos, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.14
    .. [3] https://functions.wolfram.com/ElementaryFunctions/Sin
    .. [4] https://mathworld.wolfram.com/TrigonometryAngles.html

    Nc                 C   s   |   dt |¡S ©Nrn   ©rX   r   ©r=   rS   r3   r3   r4   Úperiod#  s    z
sin.periodrx   c                 C   s$   |dkrt | jd ƒS t| |ƒ‚d S ©Nrx   r   )Úcosr9   r   ©r=   Úargindexr3   r3   r4   Úfdiff&  s    z	sin.fdiffc                 C   sª  ddl m} ddlm} |jrT|tjkr.tjS |jr:tjS |tj	tj
fkrT|ddƒS |tjkrdtjS t||ƒ�rìddlm} |j|j }}t|dt  ƒ}|tj
k	r´||d t  }|tj	k	rÎ||d t  }|||ƒ |td ttddƒ ƒ¡tjk	�r6|||ƒ |ttd	dƒ ttd
dƒ ƒ¡tjk	�r6|ddƒS |||ƒ |td ttddƒ ƒ¡tjk	�rz|tt|ƒt|ƒƒdƒS |||ƒ |ttd	dƒ ttddƒ ƒ¡tjk	�rÄ|dtt|ƒt|ƒƒƒS |tt|ƒt|ƒƒtt|ƒt|ƒƒƒS nt||ƒ�r| | ¡S | ¡ �r| | ƒ S t|ƒ}|d k	�rDddlm}	 tj|	|ƒ S t|ƒ}
|
d k	�rH|
j �rdtjS d|
 j �rŒ|
j!dk�rŒtj"|
tj#  S |
j$�s²|
t }||k�r®| |ƒS d S |
j$�rH|
d }|dk�rÞ| |d t ƒ S d| dk�rü| d| t ƒS |
td	dƒ d t }t%|ƒ}t|t%ƒ�s*|S |
t |k�rD| |
t ƒS d S |j&�rŠt'|ƒ\}}|�rŠ|t }t|ƒt%|ƒ t%|ƒt|ƒ  S |j�r˜tjS t|t(ƒ�r®|j)d S t|t*ƒ�rØ|j)d }|t+d|d  ƒ S t|t,ƒ�r|j)\}}|t+|d |d  ƒ S t|t-ƒ�r,|j)d }t+d|d  ƒS t|t.ƒ�r^|j)d }dt+dd|d   ƒ|  S t|t/ƒ�r||j)d }d| S t|t0ƒ�r¦|j)d }t+dd|d   ƒS d S )Nr   ©ÚAccumBounds©ÚSetExpréÿÿÿÿrx   ©Ú	FiniteSetrn   ra   r_   é   rd   )ÚsinhF)1Ú!sympy.calculus.accumulationboundsr’   Úsympy.sets.setexprr”   Ú	is_Numberr   ÚNaNr;   rK   ÚInfinityÚNegativeInfinityr]   r0   Úsympy.sets.setsr—   ÚminÚmaxr$   r   Úintersectionr   ZEmptySetr&   r‡   r'   Ú
_eval_funcÚcould_extract_minus_signr5   Ú%sympy.functions.elementary.hyperbolicr™   r1   rA   rr   rs   ÚNegativeOnerq   Úis_Rationalr�   rQ   rw   Úasinr9   Úatanr%   Úatan2ÚacosÚacotÚacscÚasec)Úclsr   r’   r”   r—   r¡   r¢   ÚdÚi_coeffr™   rB   Únargr�   Úresultrƒ   Úyr3   r3   r4   Úeval,  sÈ    




"ÿÿÿþ
"ÿ(ÿÿ





 






zsin.evalc                 G   sr   | dk s| d dkrt jS t|ƒ}t|ƒdkrP|d }| |d  | | d   S t j| d  ||   t| ƒ S d S ©Nr   rn   éþÿÿÿrx   ©r   rK   r   Úlenr§   r   ©Únr�   Úprevious_termsr‚   r3   r3   r4   Útaylor_term¡  s    zsin.taylor_termr   c                 C   sZ   | j d }|d k	r"| t|ƒ|¡}| |d¡ tjtj¡rFtd|  ƒ‚tj	| ||||d�S ©Nr   zCannot expand %s around 0)r¼   ÚlogxÚcdir©
r9   Úsubsr"   rN   r   r�   r]   r	   r   Ú_eval_nseries©r=   r�   r¼   rÀ   rÁ   r   r3   r3   r4   rÄ   ¯  s    
zsin._eval_nseriesc                 K   sX   ddl m} tj}t|t|fƒr6| |jd ¡ t	¡}t	|| ƒt	| | ƒ d|  S ©Nr   ©ÚHyperbolicFunctionrn   ©
r¦   rÈ   r   r1   r0   r6   r8   r9   Úrewriter#   )r=   r   ÚkwargsrÈ   ÚIr3   r3   r4   Ú_eval_rewrite_as_exp·  s
    zsin._eval_rewrite_as_expc                 K   s@   t |tƒr<tj}|jd }|||   d |||  d  S d S ©Nr   rn   ©r0   r"   r   r1   r9   ©r=   r   rË   rÌ   r�   r3   r3   r4   Ú_eval_rewrite_as_Pow¾  s    

zsin._eval_rewrite_as_Powc                 K   s   t |td  dd�S ©Nrn   F©Úevaluate©r�   r   ©r=   r   rË   r3   r3   r4   Ú_eval_rewrite_as_cosÄ  s    zsin._eval_rewrite_as_cosc                 K   s"   t tj| ƒ}d| d|d   S ©Nrn   rx   ©Útanr   rq   ©r=   r   rË   Ztan_halfr3   r3   r4   Ú_eval_rewrite_as_tanÇ  s    zsin._eval_rewrite_as_tanc                 K   s   t |ƒt|ƒ t|ƒ S ©N©r‡   r�   rÖ   r3   r3   r4   Ú_eval_rewrite_as_sincosË  s    zsin._eval_rewrite_as_sincosc                 K   sL   t tj| ƒ}tdttt|ƒdƒtt|tƒdƒƒfd| d|d   dfƒS )Nr   rn   rx   T©	Úcotr   rq   r(   r,   r   r    r   r   ©r=   r   rË   Zcot_halfr3   r3   r4   Ú_eval_rewrite_as_cotÎ  s    $ÿzsin._eval_rewrite_as_cotc                 K   s   | j tf|Žj tf|ŽS rÝ   )rÊ   r�   ÚpowrÖ   r3   r3   r4   Ú_eval_rewrite_as_powÓ  s    zsin._eval_rewrite_as_powc                 K   s   | j tf|Žj tf|ŽS rÝ   )rÊ   r�   r%   rÖ   r3   r3   r4   Ú_eval_rewrite_as_sqrtÖ  s    zsin._eval_rewrite_as_sqrtc                 K   s   dt |ƒ S ©Nrx   ©ÚcscrÖ   r3   r3   r4   Ú_eval_rewrite_as_cscÙ  s    zsin._eval_rewrite_as_cscc                 K   s   dt |td  dd� S )Nrx   rn   FrÓ   ©Úsecr   rÖ   r3   r3   r4   Ú_eval_rewrite_as_secÜ  s    zsin._eval_rewrite_as_secc                 K   s   |t |ƒ S rÝ   )ÚsincrÖ   r3   r3   r4   Ú_eval_rewrite_as_sincß  s    zsin._eval_rewrite_as_sincc                 K   s(   ddl m} tt| d ƒ|tj|ƒ S )Nr   ©Úbesseljrn   ©Úsympy.functions.special.besselrñ   r%   r   r   rq   ©r=   r   rË   rñ   r3   r3   r4   Ú_eval_rewrite_as_besseljâ  s    zsin._eval_rewrite_as_besseljc                 C   s   |   | jd  ¡ ¡S ©Nr   ©r8   r9   Ú	conjugate©r=   r3   r3   r4   Ú_eval_conjugateæ  s    zsin._eval_conjugateTc                 K   sH   ddl m}m} | jf d|i|—Ž\}}t|ƒ||ƒ t|ƒ||ƒ fS ©Nr   ©Úcoshr™   rD   )r¦   rý   r™   rL   r‡   r�   ©r=   rD   rF   rý   r™   r!   r    r3   r3   r4   rE   é  s    zsin.as_real_imagc                 K   sþ   ddl m}m} | jd }d }|jr€| ¡ \}}t|dd� ¡ }t|dd� ¡ }t|dd� ¡ }	t|dd� ¡ }
||
 ||	  S |j	rö|j
dd�\}}|jrö|jrÂtj|d d  ||t|ƒƒ S ttj|d d  t|ƒ ||d t|ƒƒ dd	�S t|ƒS )
Nr   )Ú
chebyshevtÚ
chebyshevuFrÓ   T©Zrationalrx   rn   )rD   )Ú#sympy.functions.special.polynomialsrÿ   r   r9   rQ   Úas_two_termsr‡   Ú_eval_expand_trigr�   rO   r|   Ú
is_IntegerZis_oddr   r§   r
   )r=   rF   rÿ   r   r   r�   rµ   ÚsxÚsyr   Úcyr¼   r3   r3   r4   r  î  s*    
 ÿÿzsin._eval_expand_trigc           	      C   sª   ddl m} | jd }| |d¡ ¡ }|t }|jrT||t   |¡}tj	| | S |tj
kr||j|dt|ƒjrtdndd�}|tjtjfkr–|ddƒS |jr¦|  |¡S | S )Nr   r‘   ú-ú+©Údirr•   rx   ©rš   r’   r9   rÃ   Úcancelr   rr   Úas_leading_termr   r§   r]   Úlimitr!   Úis_negativerž   rŸ   Ú	is_finiter8   ©	r=   r�   rÀ   rÁ   r’   r   Úx0r¼   Últr3   r3   r4   Ú_eval_as_leading_term  s    


zsin._eval_as_leading_termc                 C   s   | j d jrdS d S ©Nr   T©r9   rI   rù   r3   r3   r4   Ú_eval_is_extended_real  s    zsin._eval_is_extended_realc                 C   s   | j d }|jrdS d S r  r  ©r=   r   r3   r3   r4   Ú_eval_is_finite  s    
zsin._eval_is_finitec                 C   s"   t | jd ƒ\}}|jr|jS d S rö   ©rw   r9   r;   rr   ©r=   ÚrestZpi_multr3   r3   r4   Ú_eval_is_zero  s    zsin._eval_is_zeroc                 C   s    | j d js| j d jrdS d S r  ©r9   rI   Ú
is_complexrù   r3   r3   r4   Ú_eval_is_complex#  s    
ÿzsin._eval_is_complex)N)rx   )r   )T)Nr   ) rY   rZ   r[   r\   r‹   r�   Úclassmethodr¶   Ústaticmethodr   r¾   rÄ   rÍ   rÑ   r×   rÜ   rß   rã   rå   ræ   rê   rí   rï   rõ   rú   rE   r  r  r  r  r  r"  r3   r3   r3   r4   r‡   ó   s:   /


t


r‡   c                   @   sì   e Zd ZdZd7dd„Zd8dd„Zedd	„ ƒZee	d
d„ ƒƒZ
d9dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedœdd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd:d)d*„Zd+d,„ Zd;d-d.„Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ ZdS )<r�   aþ  
    The cosine function.

    Returns the cosine of x (measured in radians).

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

    See :func:`sin` for notes about automatic evaluation.

    Examples
    ========

    >>> from sympy import cos, pi
    >>> from sympy.abc import x
    >>> cos(x**2).diff(x)
    -2*x*sin(x**2)
    >>> cos(1).diff(x)
    0
    >>> cos(pi)
    -1
    >>> cos(pi/2)
    0
    >>> cos(2*pi/3)
    -1/2
    >>> cos(pi/12)
    sqrt(2)/4 + sqrt(6)/4

    See Also
    ========

    sin, csc, sec, tan, cot
    asin, acsc, acos, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.14
    .. [3] https://functions.wolfram.com/ElementaryFunctions/Cos

    Nc                 C   s   |   dt |¡S rˆ   r‰   rŠ   r3   r3   r4   r‹   U  s    z
cos.periodrx   c                 C   s&   |dkrt | jd ƒ S t| |ƒ‚d S rŒ   )r‡   r9   r   rŽ   r3   r3   r4   r�   X  s    z	cos.fdiffc                 C   sZ  ddl m} ddlm} ddlm} |jr`|tjkr:tjS |j	rFtj
S |tjtjfkr`|ddƒS |tjkrptjS t||ƒrŠt|td  ƒS t||ƒrž| | ¡S |jr¸|jdkr¸|ddƒS | ¡ rÊ| | ƒS t|ƒ}|d k	rîdd	lm} ||ƒS t|ƒ}|d k	�rü|j�rtj| S d| j�r0|jdk�r0tjS |j�sV|t }||k�rR| |ƒS d S |j�rø|j}	|jd|	  }
|
|	k�r’|d t }| |ƒ S d|
 |	k�r¶d| t }| |ƒ S t ƒ }|	|k�r8||	 \}}|
t | |
t |  }}| |ƒ| |ƒ }}d ||fk�rd S || | td | ƒ| td | ƒ  S |	d
k�rFd S tj!t"dƒd d dœ}|	|k�r‚||j }||j|ƒ #¡ S d|	d k�rø|d t }| |ƒ}d |k�r²d S d| d d }d|dk �rÒdndt$t%|ƒƒ  }|t"d| d ƒ S d S |j&�r>t'|ƒ\}}|�r>|t }t(|ƒt(|ƒ t|ƒt|ƒ  S |j	�rLtj
S t|t)ƒ�rb|j*d S t|t+ƒ�rŒ|j*d }dt"d|d  ƒ S t|t,ƒ�rº|j*\}}|t"|d |d  ƒ S t|t-ƒ�rà|j*d }t"d|d  ƒS t|t.ƒ�r|j*d }dt"dd|d   ƒ S t|t/ƒ�r8|j*d }t"dd|d   ƒS t|t0ƒ�rV|j*d }d| S d S )Nr   ©rÿ   r‘   r“   r•   rx   rn   F)rý   ri   ra   r`   )r_   ra   )1r  rÿ   rš   r’   r›   r”   rœ   r   r�   r;   r{   rž   rŸ   r]   r0   r‡   r   r¤   rI   r  r¥   r5   r¦   rý   rA   rr   r§   rs   rK   r¨   Úqr‚   rm   rq   r%   rJ   r}   rP   rQ   rw   r�   r¬   r9   rª   r«   r©   r­   r®   r¯   )r°   r   rÿ   r’   r”   r²   rý   rB   r³   r&  r‚   Útable2rW   ÚbÚnvalaÚnvalbÚcst_table_someZctsÚnvalr�   Úsign_cosrƒ   rµ   r3   r3   r4   r¶   ^  sÂ    










	



(
þ


" 






zcos.evalc                 G   sr   | dk s| d dkrt jS t|ƒ}t|ƒdkrP|d }| |d  | | d   S t j| d  ||   t| ƒ S d S )Nr   rn   rx   r¸   r¹   r»   r3   r3   r4   r¾   ê  s    zcos.taylor_termr   c                 C   sZ   | j d }|d k	r"| t|ƒ|¡}| |d¡ tjtj¡rFtd|  ƒ‚tj	| ||||d�S r¿   rÂ   rÅ   r3   r3   r4   rÄ   ø  s    
zcos._eval_nseriesc                 K   sX   t j}ddlm} t|t|fƒr:| |jd ¡jt	f|Ž}t	|| ƒt	| | ƒ d S rÆ   ©
r   r1   r¦   rÈ   r0   r6   r8   r9   rÊ   r#   )r=   r   rË   rÌ   rÈ   r3   r3   r4   rÍ      s
    zcos._eval_rewrite_as_expc                 K   s8   t |tƒr4tj}|jd }|| d ||  d  S d S rÎ   rÏ   rÐ   r3   r3   r4   rÑ     s    

zcos._eval_rewrite_as_Powc                 K   s   t |td  dd�S rÒ   )r‡   r   rÖ   r3   r3   r4   Ú_eval_rewrite_as_sin  s    zcos._eval_rewrite_as_sinc                 K   s"   t tj| ƒd }d| d|  S rØ   rÙ   rÛ   r3   r3   r4   rÜ     s    zcos._eval_rewrite_as_tanc                 K   s   t |ƒt|ƒ t |ƒ S rÝ   rÞ   rÖ   r3   r3   r4   rß     s    zcos._eval_rewrite_as_sincosc              	   K   sP   t tj| ƒd }tdttt|ƒdƒtt|dt ƒdƒƒf|d |d  dfƒS )Nrn   rx   r   Trà   râ   r3   r3   r4   rã     s    (ÿzcos._eval_rewrite_as_cotc                 K   s   | j |f|ŽS rÝ   )ræ   rÖ   r3   r3   r4   rå     s    zcos._eval_rewrite_as_powr2   c                    s|  ddl m} t|ƒ‰ ˆ d kr d S tˆ tƒr.d S tˆ tƒs<d S tƒ }ˆ j|krv|ˆ j|ˆ j ƒ ƒ}ˆ jdk rr| 	¡ }|S ˆ jd sÒˆ d }t
|t ƒjtf|Ž}|d d }t|ƒd rºdnd}	|	td| d ƒ S tˆ jƒ}
|
ræ|
}ndd„ tˆ jƒ ¡ D ƒ}t|Ž }‡ fd	d
„t||ƒD ƒ}dd„ t|tdƒƒD ƒ}t
tdd
„ |D ƒƒƒ ¡  |¡}|
�rjt|
ƒdk�rn|S |jtf|ŽS )Nr   r%  i  rn   rx   r•   c                 S   s   g | ]\}}|| ‘qS r3   r3   )Ú.0r(  Úer3   r3   r4   Ú
<listcomp>?  s     z-cos._eval_rewrite_as_sqrt.<locals>.<listcomp>c                 3   s"   | ]\}}ˆ j t||ƒ V  qd S rÝ   )r‚   r   )r0  r¼   r±   ©rB   r3   r4   Ú	<genexpr>B  s     z,cos._eval_rewrite_as_sqrt.<locals>.<genexpr>c                 S   s    g | ]}|d  |d t  f‘qS )rx   r   )r   ©r0  r�   r3   r3   r4   r2  C  s     Úzc                 s   s   | ]}|d  V  qdS )r   Nr3   r5  r3   r3   r4   r4  D  s     )r  rÿ   rA   r0   r   r   r)   r&  r‚   rJ   r�   r   rÊ   r%   r}   r+   r-   Úitemsr*   Úzipr/   Úsumr  rÃ   rº   )r=   r   rË   rÿ   r+  ÚrvZpico2r,  r�   r-  ZFCZdenomsZapartÚdecompÚXZpclsr3   r3  r4   ræ     s>    





 zcos._eval_rewrite_as_sqrtc                 K   s   dt |ƒ S rç   ©rì   rÖ   r3   r3   r4   rí   J  s    zcos._eval_rewrite_as_secc                 K   s   dt |ƒjtf|Ž S rç   )rì   rÊ   ré   rÖ   r3   r3   r4   rê   M  s    zcos._eval_rewrite_as_cscc                 K   s:   ddl m} ttt| d ƒ|tj |ƒ t|dƒfdƒS )Nr   rð   rn   ©rx   T©ró   rñ   r(   r%   r   r   rq   r   rô   r3   r3   r4   rõ   P  s
    &þzcos._eval_rewrite_as_besseljc                 C   s   |   | jd  ¡ ¡S rö   r÷   rù   r3   r3   r4   rú   W  s    zcos._eval_conjugateTc                 K   sJ   ddl m}m} | jf d|i|—Ž\}}t|ƒ||ƒ t|ƒ ||ƒ fS rû   )r¦   rý   r™   rL   r�   r‡   rþ   r3   r3   r4   rE   Z  s    zcos.as_real_imagc                 K   s®   ddl m} | jd }d }|jr|| ¡ \}}t|dd� ¡ }t|dd� ¡ }t|dd� ¡ }t|dd� ¡ }	||	 ||  S |jr¦|j	dd�\}
}|
j
r¦||
t|ƒƒS t|ƒS )Nr   r%  FrÓ   Tr  )r  rÿ   r9   rQ   r  r‡   r  r�   rO   r|   r  )r=   rF   rÿ   r   r�   rµ   r  r  r   r  ro   Útermsr3   r3   r4   r  _  s    
zcos._eval_expand_trigc           	      C   sº   ddl m} | jd }| |d¡ ¡ }|td  t }|jrd||t  td   |¡}tj	| | S |tj
krŒ|j|dt|ƒjr„dndd�}|tjtjfkr¦|ddƒS |jr¶|  |¡S | S )	Nr   r‘   rn   r	  r
  r  r•   rx   r  r  r3   r3   r4   r  p  s    


zcos._eval_as_leading_termc                 C   s   | j d jrdS d S r  r  rù   r3   r3   r4   r  ~  s    zcos._eval_is_extended_realc                 C   s   | j d }|jrdS d S r  r  r  r3   r3   r4   r  ‚  s    
zcos._eval_is_finitec                 C   s    | j d js| j d jrdS d S r  r   rù   r3   r3   r4   r"  ˆ  s    
ÿzcos._eval_is_complexc                 C   s,   t | jd ƒ\}}|jr(|r(|tj jS d S rö   ©rw   r9   r;   r   rq   rr   r  r3   r3   r4   r  �  s    
zcos._eval_is_zero)N)rx   )r   )T)Nr   ) rY   rZ   r[   r\   r‹   r�   r#  r¶   r$  r   r¾   rÄ   rÍ   rÑ   r/  rÜ   rß   rã   rå   r   ræ   rí   rê   rõ   rú   rE   r  r  r  r  r"  r  r3   r3   r3   r4   r�   )  s:   +


 
+

r�   c                   @   sø   e Zd ZdZd:dd„Zd;dd„Zd<dd	„Zed
d„ ƒZe	e
dd„ ƒƒZd=dd„Zdd„ Zdd„ Zd>dd„Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd?d.d/„Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z dS )@rÚ   a¼  
    The tangent function.

    Returns the tangent of x (measured in radians).

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

    See :class:`sin` for notes about automatic evaluation.

    Examples
    ========

    >>> from sympy import tan, pi
    >>> from sympy.abc import x
    >>> tan(x**2).diff(x)
    2*x*(tan(x**2)**2 + 1)
    >>> tan(1).diff(x)
    0
    >>> tan(pi/8).expand()
    -1 + sqrt(2)

    See Also
    ========

    sin, csc, cos, sec, cot
    asin, acsc, acos, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.14
    .. [3] https://functions.wolfram.com/ElementaryFunctions/Tan

    Nc                 C   s   |   t|¡S rÝ   r‰   rŠ   r3   r3   r4   r‹   ¹  s    z
tan.periodrx   c                 C   s$   |dkrt j| d  S t| |ƒ‚d S ©Nrx   rn   )r   r{   r   rŽ   r3   r3   r4   r�   ¼  s    z	tan.fdiffc                 C   s   t S ©z7
        Returns the inverse of this function.
        ©rª   rŽ   r3   r3   r4   ÚinverseÂ  s    ztan.inversec                 C   sÎ  ddl m} |jrL|tjkr"tjS |jr.tjS |tjtjfkrL|tjtjƒS |tj	kr\tjS t
||ƒ� rþ|j|j }}t|t ƒ}|tjk	r˜||t  }|tjk	r®||t  }ddlm} |||ƒ |td ttddƒ ƒ¡rì|tjtjƒS |t|ƒt|ƒƒS | ¡ �r| | ƒ S t|ƒ}|d k	�r@ddlm} tj||ƒ S t|dƒ}	|	d k	�rr|	j�rbtjS |	j�sˆ|	t }
|
|k�r„| |
ƒS d S |	j�rr|	j}|	j| }tddtdƒ d  ƒtddtdƒ  ƒtddtdƒ d  ƒtddtdƒ  ƒd	œ}|d
k�r0d| | }|dk�r(d| }||  S || S |	jd �sš|	t d }
t|
ƒt|
td  ƒ }}t
|tƒ�sšt
|tƒ�sš|dk�rŠtj	S d| ||  S t ƒ }||k�rþ|| \}}| |t | ƒ| |t | ƒ }}d ||fk�rêd S || d||   S |	tj! d tj! t }
t|
ƒt|
td  ƒ }}t
|tƒ�s`t
|tƒ�s`|dk�rXtj	S || S |
|k�rr| |
ƒS |j"�r¶t#|ƒ\}}|�r¶t|t ƒ}|tj	k�r®t$|ƒ S t|ƒS |j�rÄtjS t
|t%ƒ�rÚ|j&d S t
|t'ƒ�rø|j&\}}|| S t
|t(ƒ�r"|j&d }|td|d  ƒ S t
|t)ƒ�rL|j&d }td|d  ƒ| S t
|t*ƒ�rj|j&d }d| S t
|t+ƒ�rœ|j&d }dtdd|d   ƒ|  S t
|t,ƒ�rÊ|j&d }tdd|d   ƒ| S d S )Nr   r‘   r–   rn   r_   )Útanhrx   ra   )rx   rn   r_   r`   ©ra   rc   rc   )-rš   r’   rœ   r   r�   r;   rK   rž   rŸ   r]   r0   r¡   r¢   r$   r   r    r—   r£   r   rÚ   r¥   r5   r¦   rF  r1   rA   rr   r¨   r&  r‚   r%   r�   rm   rq   rQ   rw   rá   rª   r9   r«   r©   r¬   r­   r®   r¯   )r°   r   r’   r¡   r¢   r±   r—   r²   rF  rB   r³   r&  r‚   Ztable10r¼   ÚcresultÚsresultr'  rW   r(  r)  r*  r�   rƒ   Ztanmrµ   r3   r3   r4   r¶   È  sÒ    



$





ü


ÿ

"ÿ









ztan.evalc                 G   s~   | dk s| d dkrt jS t|ƒ}| d d d| d   }}t| d ƒ}t| d ƒ}t j| | |d  | | ||   S d S ©Nr   rn   rx   )r   rK   r   r   r   r§   )r¼   r�   r½   rW   r(  ÚBÚFr3   r3   r4   r¾   J  s    ztan.taylor_termr   c                 C   sL   | j d  |d¡d t }|r:|jr:|  t¡j|||d�S tj| |||d�S )Nr   rn   ©r¼   rÀ   )r9   r  r   r  rÊ   r�   rÄ   r   ©r=   r�   r¼   rÀ   rÁ   r…   r3   r3   r4   rÄ   Y  s    
ztan._eval_nseriesc                 K   sF   t |tƒrBtj}|jd }|||  ||   ||  ||   S d S rö   rÏ   rÐ   r3   r3   r4   rÑ   _  s    

ztan._eval_rewrite_as_Powc                 C   s   |   | jd  ¡ ¡S rö   r÷   rù   r3   r3   r4   rú   e  s    ztan._eval_conjugateTc                 K   sx   | j f d|i|—Ž\}}|rdddlm}m} td| ƒ|d| ƒ }td| ƒ| |d| ƒ| fS |  |¡tjfS d S ©NrD   r   rü   rn   ©	rL   r¦   rý   r™   r�   r‡   r8   r   rK   ©r=   rD   rF   r!   r    rý   r™   Údenomr3   r3   r4   rE   h  s     ztan.as_real_imagc                    sF  | j d }d }|jrÎt|j ƒ}g }|j D ]}t|dd� ¡ }| |¡ q(tdƒ‰ ‡ fdd„t|ƒD ƒ}ddg}t|d ƒD ]2}	|d|	d    t|	|ƒd	|	d
 d   7  < qz|d |d   	t
t||ƒƒ¡S |j�r>|jdd�\}
}|
j�r>|
dk�r>tj}tddd�}d||  |
  ¡ }t|ƒt|ƒ  	|t|ƒfg¡S t|ƒS )Nr   FrÓ   ÚYc                    s   g | ]}t ˆ ƒ‘qS r3   ©Únext©r0  r…   ©ZYgr3   r4   r2  |  s     z)tan._eval_expand_trig.<locals>.<listcomp>rx   rn   r•   r`   Tr  Údummy©Úreal)r9   rQ   rº   rÚ   r  rp   r/   Úranger.   rÃ   Úlistr8  rO   r|   r  r   r1   r   rJ   r    r!   )r=   rF   r   r�   r¼   ZTXZtxrS  r‚   r…   ro   r@  rÌ   r6  ÚPr3   rW  r4   r  q  s,    


0  ztan._eval_expand_trigc                 K   sf   t j}ddlm} t|t|fƒr6| |jd ¡ t	¡}t	| | ƒt	|| ƒ }}|||  ||  S ©Nr   rÇ   r.  )r=   r   rË   rÌ   rÈ   Úneg_expÚpos_expr3   r3   r4   rÍ   Œ  s    ztan._eval_rewrite_as_expc                 K   s   dt |ƒd  t d| ƒ S rˆ   ©r‡   ©r=   r�   rË   r3   r3   r4   r/  ”  s    ztan._eval_rewrite_as_sinc                 K   s   t |td  dd�t |ƒ S rÒ   rÕ   rb  r3   r3   r4   r×   —  s    ztan._eval_rewrite_as_cosc                 K   s   t |ƒt|ƒ S rÝ   rÞ   rÖ   r3   r3   r4   rß   š  s    ztan._eval_rewrite_as_sincosc                 K   s   dt |ƒ S rç   ©rá   rÖ   r3   r3   r4   rã   �  s    ztan._eval_rewrite_as_cotc                 K   s,   t |ƒjtf|Ž}t|ƒjtf|Ž}|| S rÝ   )r‡   rÊ   rì   r�   )r=   r   rË   Úsin_in_sec_formÚcos_in_sec_formr3   r3   r4   rí      s    ztan._eval_rewrite_as_secc                 K   s,   t |ƒjtf|Ž}t|ƒjtf|Ž}|| S rÝ   )r‡   rÊ   ré   r�   )r=   r   rË   Úsin_in_csc_formÚcos_in_csc_formr3   r3   r4   rê   ¥  s    ztan._eval_rewrite_as_cscc                 K   s*   | j tf|Žj tf|Ž}| t¡r&d S |S rÝ   ©rÊ   r�   rä   rN   ©r=   r   rË   rµ   r3   r3   r4   rå   ª  s    
ztan._eval_rewrite_as_powc                 K   s*   | j tf|Žj tf|Ž}| t¡r&d S |S rÝ   ©rÊ   r�   r%   rN   ri  r3   r3   r4   ræ   °  s    
ztan._eval_rewrite_as_sqrtc                 K   s&   ddl m} |tj|ƒ|tj |ƒ S ©Nr   rð   ©ró   rñ   r   rq   rô   r3   r3   r4   rõ   ¶  s    ztan._eval_rewrite_as_besseljc           
      C   sÆ   ddl m} ddlm} | jd }| |d¡ ¡ }d| t }|jrl||t d   	|¡}	|j
rd|	S d|	 S |tjkr”|j|d||ƒjrŒdndd�}|tjtjfkr²|tjtjƒS |jrÂ|  |¡S | S )	Nr   r‘   ©r!   rn   r•   r	  r
  r  ©rš   r’   Ú$sympy.functions.elementary.complexesr!   r9   rÃ   r  r   rr   r  rs   r   r]   r  r  rž   rŸ   r  r8   ©
r=   r�   rÀ   rÁ   r’   r!   r   r  r¼   r  r3   r3   r4   r  º  s    

ztan._eval_as_leading_termc                 C   s   | j d jS rö   r  rù   r3   r3   r4   r  É  s    ztan._eval_is_extended_realc                 C   s,   | j d }|jr(|t tj jdkr(dS d S r@   ©r9   Úis_realr   r   rq   rr   r  r3   r3   r4   Ú_eval_is_realÍ  s    
ztan._eval_is_realc                 C   s6   | j d }|jr(|t tj jdkr(dS |jr2dS d S r@   )r9   rr  r   r   rq   rr   Úis_imaginaryr  r3   r3   r4   r  Ò  s
    
ztan._eval_is_finitec                 C   s"   t | jd ƒ\}}|jr|jS d S rö   r  r  r3   r3   r4   r  Û  s    ztan._eval_is_zeroc                 C   s,   | j d }|jr(|t tj jdkr(dS d S r@   rq  r  r3   r3   r4   r"  à  s    
ztan._eval_is_complex)N)rx   )rx   )r   )T)Nr   )!rY   rZ   r[   r\   r‹   r�   rE  r#  r¶   r$  r   r¾   rÄ   rÑ   rú   rE   r  rÍ   r/  r×   rß   rã   rí   rê   rå   ræ   rõ   r  r  rs  r  r  r"  r3   r3   r3   r4   rÚ   “  s>   %



 

	
	rÚ   c                   @   s   e Zd ZdZd<dd„Zd=dd„Zd>dd	„Zed
d„ ƒZe	e
dd„ ƒƒZd?dd„Zdd„ Zd@dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ ZdAd,d-„Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z d:d;„ Z!dS )Brá   a¸  
    The cotangent function.

    Returns the cotangent of x (measured in radians).

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

    See :class:`sin` for notes about automatic evaluation.

    Examples
    ========

    >>> from sympy import cot, pi
    >>> from sympy.abc import x
    >>> cot(x**2).diff(x)
    2*x*(-cot(x**2)**2 - 1)
    >>> cot(1).diff(x)
    0
    >>> cot(pi/12)
    sqrt(3) + 2

    See Also
    ========

    sin, csc, cos, sec, tan
    asin, acsc, acos, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.14
    .. [3] https://functions.wolfram.com/ElementaryFunctions/Cot

    Nc                 C   s   |   t|¡S rÝ   r‰   rŠ   r3   r3   r4   r‹     s    z
cot.periodrx   c                 C   s$   |dkrt j| d  S t| |ƒ‚d S rB  )r   r§   r   rŽ   r3   r3   r4   r�     s    z	cot.fdiffc                 C   s   t S rC  ©r­   rŽ   r3   r3   r4   rE    s    zcot.inversec                 C   sÈ  ddl m} |jrL|tjkr"tjS |jr.tjS |tjtjfkrL|tjtjƒS |tjkr\tjS t	||ƒrxt
|td  ƒ S | ¡ rŒ| | ƒ S t|ƒ}|d k	r¸ddlm} tj ||ƒ S t|dƒ}|d k	�rl|jrØtjS |jsú|t }||krö| |ƒS d S |j�rl|jdk�rt
td | ƒS |jdk�r„|jd �s„|t d }t|ƒt|td  ƒ }}t	|tƒ�s„t	|tƒ�s„d| ||  S |j}	|j|	 }
tƒ }|	|k�rø||	 \}}| |
t | ƒ| |
t | ƒ }}d ||fk�räd S d||  ||  S |tj d tj t }t|ƒt|td  ƒ }}t	|tƒ�sZt	|tƒ�sZ|dk�rRtjS || S ||k�rl| |ƒS |j�r°t|ƒ\}}|�r°t|t ƒ}|tjk�r¦t|ƒS t
|ƒ S |j�r¾tjS t	|tƒ�rÔ|jd S t	|tƒ�rò|jd }d| S t	|tƒ�r|j\}}|| S t	|t ƒ�r:|jd }t!d|d  ƒ| S t	|t"ƒ�rd|jd }|t!d|d  ƒ S t	|t#ƒ�r’|jd }t!dd|d   ƒ| S t	|t$ƒ�rÄ|jd }dt!dd|d   ƒ|  S d S )Nr   r‘   rn   )ÚcothrG  rx   )%rš   r’   rœ   r   r�   r;   r]   rž   rŸ   r0   rÚ   r   r¥   r5   r¦   rv  r1   rA   rr   r¨   r&  r�   r‚   rm   rq   rQ   rw   rá   r­   r9   rª   r«   r©   r%   r¬   r®   r¯   )r°   r   r’   r²   rv  rB   r³   rH  rI  r&  r‚   r'  rW   r(  r)  r*  r�   rƒ   Zcotmrµ   r3   r3   r4   r¶     sª    




ÿ

"ÿ









zcot.evalc                 G   s€   | dkrdt |ƒ S | dk s(| d dkr.tjS t |ƒ}t| d ƒ}t| d ƒ}tj| d d  d| d   | | ||   S d S ©Nr   rx   rn   )r   r   rK   r   r   r§   )r¼   r�   r½   rK  rL  r3   r3   r4   r¾   …  s    zcot.taylor_termr   c                 C   sL   | j d  |d¡t }|r6|jr6|  t¡j|||d�S |  t¡j|||d�S )Nr   rM  )r9   r  r   r  rÊ   r�   rÄ   rÚ   rN  r3   r3   r4   rÄ   ”  s    
zcot._eval_nseriesc                 C   s   |   | jd  ¡ ¡S rö   r÷   rù   r3   r3   r4   rú   š  s    zcot._eval_conjugateTc                 K   sz   | j f d|i|—Ž\}}|rfddlm}m} td| ƒ|d| ƒ }td| ƒ | |d| ƒ| fS |  |¡tjfS d S rO  rP  rQ  r3   r3   r4   rE   �  s    "zcot.as_real_imagc                 K   sj   ddl m} tj}t|t|fƒr:| |jd ¡jt	f|Ž}t	| | ƒt	|| ƒ }}|||  ||  S r^  rÉ   )r=   r   rË   rÈ   rÌ   r_  r`  r3   r3   r4   rÍ   ¦  s    zcot._eval_rewrite_as_expc                 K   sH   t |tƒrDtj}|jd }| ||  ||   ||  ||   S d S rö   rÏ   rÐ   r3   r3   r4   rÑ   ®  s    

zcot._eval_rewrite_as_Powc                 K   s   t d| ƒdt |ƒd   S rˆ   ra  rb  r3   r3   r4   r/  ´  s    zcot._eval_rewrite_as_sinc                 K   s   t |ƒt |td  dd� S rÒ   rÕ   rb  r3   r3   r4   r×   ·  s    zcot._eval_rewrite_as_cosc                 K   s   t |ƒt|ƒ S rÝ   ©r�   r‡   rÖ   r3   r3   r4   rß   º  s    zcot._eval_rewrite_as_sincosc                 K   s   dt |ƒ S rç   ©rÚ   rÖ   r3   r3   r4   rÜ   ½  s    zcot._eval_rewrite_as_tanc                 K   s,   t |ƒjtf|Ž}t|ƒjtf|Ž}|| S rÝ   )r�   rÊ   rì   r‡   )r=   r   rË   re  rd  r3   r3   r4   rí   À  s    zcot._eval_rewrite_as_secc                 K   s,   t |ƒjtf|Ž}t|ƒjtf|Ž}|| S rÝ   )r�   rÊ   ré   r‡   )r=   r   rË   rg  rf  r3   r3   r4   rê   Å  s    zcot._eval_rewrite_as_cscc                 K   s*   | j tf|Žj tf|Ž}| t¡r&d S |S rÝ   rh  ri  r3   r3   r4   rå   Ê  s    
zcot._eval_rewrite_as_powc                 K   s*   | j tf|Žj tf|Ž}| t¡r&d S |S rÝ   rj  ri  r3   r3   r4   ræ   Ð  s    
zcot._eval_rewrite_as_sqrtc                 K   s&   ddl m} |tj |ƒ|tj|ƒ S rk  rl  rô   r3   r3   r4   rõ   Ö  s    zcot._eval_rewrite_as_besseljc           
      C   sÈ   ddl m} ddlm} | jd }| |d¡ ¡ }d| t }|jrn||t d   	|¡}	|j
rhd|	 S |	 S |tjkr–|j|d||ƒjrŽdndd�}|tjtjfkr´|tjtjƒS |jrÄ|  |¡S | S )	Nr   r‘   rm  rn   rx   r	  r
  r  rn  rp  r3   r3   r4   r  Ú  s    

zcot._eval_as_leading_termc                 C   s   | j d jS rö   r  rù   r3   r3   r4   r  é  s    zcot._eval_is_extended_realc                    sF  | j d }d }|jrÒt|j ƒ}g }|j D ]}t|dd� ¡ }| |¡ q(tdƒ‰ ‡ fdd„t|ƒD ƒ}ddg}t|ddƒD ]6}	|||	 d   t|	|ƒd||	 d	 d   7  < qz|d |d
   	t
t||ƒƒ¡S |j�r>|jdd�\}
}|
j�r>|
d
k�r>tj}tddd�}|| |
  ¡ }t|ƒt|ƒ  	|t|ƒfg¡S t|ƒS )Nr   FrÓ   rS  c                    s   g | ]}t ˆ ƒ‘qS r3   rT  rV  rW  r3   r4   r2  ÷  s     z)cot._eval_expand_trig.<locals>.<listcomp>r•   rn   r`   rx   Tr  rX  rY  )r9   rQ   rº   rá   r  rp   r/   r[  r.   rÃ   r\  r8  rO   r|   r  r   r1   r   rJ   r!   r    )r=   rF   r   r�   r¼   ZCXr   rS  r‚   r…   ro   r@  rÌ   r6  r]  r3   rW  r4   r  ì  s,    


4  zcot._eval_expand_trigc                 C   s0   | j d }|jr"|t jdkr"dS |jr,dS d S r@   )r9   rr  r   rr   rt  r  r3   r3   r4   r    s
    
zcot._eval_is_finitec                 C   s&   | j d }|jr"|t jdkr"dS d S r@   ©r9   rr  r   rr   r  r3   r3   r4   rs    s    
zcot._eval_is_realc                 C   s&   | j d }|jr"|t jdkr"dS d S r@   rz  r  r3   r3   r4   r"    s    
zcot._eval_is_complexc                 C   s,   t | jd ƒ\}}|r(|jr(|tj jS d S rö   rA  )r=   r  Zpimultr3   r3   r4   r    s    
zcot._eval_is_zeroc                 C   s6   | j d }| ||¡}||kr.|t jr.tjS t|ƒS rö   )r9   rÃ   r   rr   r   r]   rá   )r=   ÚoldÚnewr   Zargnewr3   r3   r4   Ú
_eval_subs  s
    
zcot._eval_subs)N)rx   )rx   )r   )T)Nr   )"rY   rZ   r[   r\   r‹   r�   rE  r#  r¶   r$  r   r¾   rÄ   rú   rE   rÍ   rÑ   r/  r×   rß   rÜ   rí   rê   rå   ræ   rõ   r  r  r  r  rs  r"  r  r}  r3   r3   r3   r4   rá   ç  s>   %



h

	
rá   c                   @   sâ   e Zd ZU dZdZejfZdZe	e
d< dZe	e
d< edd„ ƒZdd„ Zd	d
„ Zdd„ Zdd„ Zd0dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd1d#d$„Zd%d&„ Zd'd(„ Zd2d*d+„Zd,d-„ Zd3d.d/„Z dS )4ÚReciprocalTrigonometricFunctionz@Base class for reciprocal functions of trigonometric functions. NÚ_is_evenÚ_is_oddc                 C   sF  |  ¡ r*| jr| | ƒS | jr*| | ƒ S t|ƒ}|d k	r²d| js²|jr²|j}|jd|  }||kr||d t }| |ƒ S d| |kr²d| t }| jr¢| |ƒS | jr²| |ƒ S t	|dƒrÒ| 
¡ | krÒ|jd S | j |¡}|d krê|S tdd„ || fD ƒƒ�rd|  t¡S tdd„ || fD ƒƒ�r:d|  t¡S d| S d S )Nrn   rx   rE  r   c                 s   s   | ]}t |tƒV  qd S rÝ   )r0   r�   rV  r3   r3   r4   r4  P  s     z7ReciprocalTrigonometricFunction.eval.<locals>.<genexpr>c                 s   s   | ]}t |tƒV  qd S rÝ   )r0   r‡   rV  r3   r3   r4   r4  R  s     )r¥   r  r€  rA   rr   r¨   r&  r‚   r   ÚhasattrrE  r9   Ú_reciprocal_ofr¶   ÚanyrÊ   rì   ré   )r°   r   rB   r&  r‚   r³   Útr3   r3   r4   r¶   2  s@    
ÿþ


z$ReciprocalTrigonometricFunction.evalc                 O   s    |   | jd ¡}t||ƒ||ŽS rö   )r‚  r9   Úgetattr)r=   Úmethod_namer9   rË   Úor3   r3   r4   Ú_call_reciprocalW  s    z0ReciprocalTrigonometricFunction._call_reciprocalc                 O   s&   | j |f|ž|Ž}|d k	r"d| S |S rç   )rˆ  )r=   r†  r9   rË   r„  r3   r3   r4   Ú_calculate_reciprocal\  s    z5ReciprocalTrigonometricFunction._calculate_reciprocalc                 C   s.   |   ||¡}|d k	r*||  |¡kr*d| S d S rç   )rˆ  r‚  )r=   r†  r   r„  r3   r3   r4   Ú_rewrite_reciprocalb  s    z3ReciprocalTrigonometricFunction._rewrite_reciprocalc                 C   s   t | jd ƒ}|  |¡ |¡S rö   )r
   r9   r‚  r‹   )r=   rS   rT   r3   r3   r4   rX   i  s    z'ReciprocalTrigonometricFunction._periodrx   c                 C   s   |   d|¡ | d  S )Nr�   rn   ©r‰  rŽ   r3   r3   r4   r�   m  s    z%ReciprocalTrigonometricFunction.fdiffc                 K   s   |   d|¡S )NrÍ   ©rŠ  rÖ   r3   r3   r4   rÍ   p  s    z4ReciprocalTrigonometricFunction._eval_rewrite_as_expc                 K   s   |   d|¡S )NrÑ   rŒ  rÖ   r3   r3   r4   rÑ   s  s    z4ReciprocalTrigonometricFunction._eval_rewrite_as_Powc                 K   s   |   d|¡S )Nr/  rŒ  rÖ   r3   r3   r4   r/  v  s    z4ReciprocalTrigonometricFunction._eval_rewrite_as_sinc                 K   s   |   d|¡S )Nr×   rŒ  rÖ   r3   r3   r4   r×   y  s    z4ReciprocalTrigonometricFunction._eval_rewrite_as_cosc                 K   s   |   d|¡S )NrÜ   rŒ  rÖ   r3   r3   r4   rÜ   |  s    z4ReciprocalTrigonometricFunction._eval_rewrite_as_tanc                 K   s   |   d|¡S )Nrå   rŒ  rÖ   r3   r3   r4   rå     s    z4ReciprocalTrigonometricFunction._eval_rewrite_as_powc                 K   s   |   d|¡S )Nræ   rŒ  rÖ   r3   r3   r4   ræ   ‚  s    z5ReciprocalTrigonometricFunction._eval_rewrite_as_sqrtc                 C   s   |   | jd  ¡ ¡S rö   r÷   rù   r3   r3   r4   rú   …  s    z/ReciprocalTrigonometricFunction._eval_conjugateTc                 K   s   d|   | jd ¡ j|f|ŽS rŒ   )r‚  r9   rE   )r=   rD   rF   r3   r3   r4   rE   ˆ  s    ÿz,ReciprocalTrigonometricFunction.as_real_imagc                 K   s   | j d|ŽS )Nr  )r  r‹  )r=   rF   r3   r3   r4   r  Œ  s    z1ReciprocalTrigonometricFunction._eval_expand_trigc                 C   s   |   | jd ¡ ¡ S rö   )r‚  r9   r  rù   r3   r3   r4   r  �  s    z6ReciprocalTrigonometricFunction._eval_is_extended_realr   c                 C   s   d|   | jd ¡  |¡S rŒ   )r‚  r9   r  )r=   r�   rÀ   rÁ   r3   r3   r4   r  ’  s    z5ReciprocalTrigonometricFunction._eval_as_leading_termc                 C   s   d|   | jd ¡ jS rŒ   )r‚  r9   r  rù   r3   r3   r4   r  •  s    z/ReciprocalTrigonometricFunction._eval_is_finitec                 C   s   d|   | jd ¡  |||¡S rŒ   )r‚  r9   rÄ   ©r=   r�   r¼   rÀ   rÁ   r3   r3   r4   rÄ   ˜  s    z-ReciprocalTrigonometricFunction._eval_nseries)rx   )T)Nr   )r   )!rY   rZ   r[   r\   r‚  r   r]   r^   r  r   Ú__annotations__r€  r#  r¶   rˆ  r‰  rŠ  rX   r�   rÍ   rÑ   r/  r×   rÜ   rå   ræ   rú   rE   r  r  r  r  rÄ   r3   r3   r3   r4   r~  $  s4   

$


r~  c                   @   s†   e Zd ZdZeZdZddd„Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ Zddd„Zdd„ Zdd„ Zeedd„ ƒƒZd dd„ZdS )!rì   a‹  
    The secant function.

    Returns the secant of x (measured in radians).

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

    See :class:`sin` for notes about automatic evaluation.

    Examples
    ========

    >>> from sympy import sec
    >>> from sympy.abc import x
    >>> sec(x**2).diff(x)
    2*x*tan(x**2)*sec(x**2)
    >>> sec(1).diff(x)
    0

    See Also
    ========

    sin, csc, cos, tan, cot
    asin, acsc, acos, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.14
    .. [3] https://functions.wolfram.com/ElementaryFunctions/Sec

    TNc                 C   s
   |   |¡S rÝ   ©rX   rŠ   r3   r3   r4   r‹   Ã  s    z
sec.periodc                 K   s    t |d ƒd }|d |d  S rØ   rc  )r=   r   rË   Zcot_half_sqr3   r3   r4   rã   Æ  s    zsec._eval_rewrite_as_cotc                 K   s   dt |ƒ S rç   ©r�   rÖ   r3   r3   r4   r×   Ê  s    zsec._eval_rewrite_as_cosc                 K   s   t |ƒt|ƒt |ƒ  S rÝ   rÞ   rÖ   r3   r3   r4   rß   Í  s    zsec._eval_rewrite_as_sincosc                 K   s   dt |ƒjtf|Ž S rç   )r�   rÊ   r‡   rÖ   r3   r3   r4   r/  Ð  s    zsec._eval_rewrite_as_sinc                 K   s   dt |ƒjtf|Ž S rç   )r�   rÊ   rÚ   rÖ   r3   r3   r4   rÜ   Ó  s    zsec._eval_rewrite_as_tanc                 K   s   t td | dd�S rÒ   )ré   r   rÖ   r3   r3   r4   rê   Ö  s    zsec._eval_rewrite_as_cscrx   c                 C   s2   |dkr$t | jd ƒt| jd ƒ S t| |ƒ‚d S rŒ   )rÚ   r9   rì   r   rŽ   r3   r3   r4   r�   Ù  s    z	sec.fdiffc                 K   sB   ddl m} tdtt| ƒtdƒ |tj |ƒ  t|dƒfdƒS )Nr   rð   rx   rn   r>  r?  rô   r3   r3   r4   rõ   ß  s
    .þzsec._eval_rewrite_as_besseljc                 C   s,   | j d }|jr(|t tj jdkr(dS d S r@   )r9   r!  r   r   rq   rr   r  r3   r3   r4   r"  æ  s    
zsec._eval_is_complexc                 G   s\   | dk s| d dkrt jS t|ƒ}| d }t j| td| ƒ td| ƒ |d|   S d S rJ  )r   rK   r   r§   r   r   ©r¼   r�   r½   Úkr3   r3   r4   r¾   ì  s
    zsec.taylor_termr   c           
      C   sÊ   ddl m} ddlm} | jd }| |d¡ ¡ }|td  t }|jrp||t  td   	|¡}	t
j| |	 S |t
jkr˜|j|d||ƒjr�dndd�}|t
jt
jfkr¶|t
jt
jƒS |jrÆ|  |¡S | S )Nr   r‘   rm  rn   r	  r
  r  ©rš   r’   ro  r!   r9   rÃ   r  r   rr   r  r   r§   r]   r  r  rž   rŸ   r  r8   rp  r3   r3   r4   r  ø  s    

zsec._eval_as_leading_term)N)rx   )Nr   )rY   rZ   r[   r\   r�   r‚  r  r‹   rã   r×   rß   r/  rÜ   rê   r�   rõ   r"  r$  r   r¾   r  r3   r3   r3   r4   rì   œ  s"   #


rì   c                   @   s†   e Zd ZdZeZdZddd„Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zddd„Zdd„ Zeedd„ ƒƒZd dd„ZdS )!ré   a�  
    The cosecant function.

    Returns the cosecant of x (measured in radians).

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

    See :func:`sin` for notes about automatic evaluation.

    Examples
    ========

    >>> from sympy import csc
    >>> from sympy.abc import x
    >>> csc(x**2).diff(x)
    -2*x*cot(x**2)*csc(x**2)
    >>> csc(1).diff(x)
    0

    See Also
    ========

    sin, cos, sec, tan, cot
    asin, acsc, acos, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.14
    .. [3] https://functions.wolfram.com/ElementaryFunctions/Csc

    TNc                 C   s
   |   |¡S rÝ   r�  rŠ   r3   r3   r4   r‹   /  s    z
csc.periodc                 K   s   dt |ƒ S rç   ra  rÖ   r3   r3   r4   r/  2  s    zcsc._eval_rewrite_as_sinc                 K   s   t |ƒt|ƒt |ƒ  S rÝ   rx  rÖ   r3   r3   r4   rß   5  s    zcsc._eval_rewrite_as_sincosc                 K   s    t |d ƒ}d|d  d|  S rØ   rc  râ   r3   r3   r4   rã   8  s    zcsc._eval_rewrite_as_cotc                 K   s   dt |ƒjtf|Ž S rç   )r‡   rÊ   r�   rÖ   r3   r3   r4   r×   <  s    zcsc._eval_rewrite_as_cosc                 K   s   t td | dd�S rÒ   rë   rÖ   r3   r3   r4   rí   ?  s    zcsc._eval_rewrite_as_secc                 K   s   dt |ƒjtf|Ž S rç   )r‡   rÊ   rÚ   rÖ   r3   r3   r4   rÜ   B  s    zcsc._eval_rewrite_as_tanc                 K   s0   ddl m} tdt ƒdt|ƒ|tj|ƒ   S )Nr   rð   rn   rx   rò   rô   r3   r3   r4   rõ   E  s    zcsc._eval_rewrite_as_besseljrx   c                 C   s4   |dkr&t | jd ƒ t| jd ƒ S t| |ƒ‚d S rŒ   )rá   r9   ré   r   rŽ   r3   r3   r4   r�   I  s    z	csc.fdiffc                 C   s&   | j d }|jr"|t jdkr"dS d S r@   rz  r  r3   r3   r4   r"  O  s    
zcsc._eval_is_complexc                 G   s”   | dkrdt |ƒ S | dk s(| d dkr.tjS t |ƒ}| d d }tj|d  d dd| d  d  td| ƒ |d| d   td| ƒ S d S rw  )r   r   rK   r§   r   r   r‘  r3   r3   r4   r¾   T  s    $
ÿÿ
ÿzcsc.taylor_termr   c           
      C   sº   ddl m} ddlm} | jd }| |d¡ ¡ }|t }|jr`||t   	|¡}	t
j| |	 S |t
jkrˆ|j|d||ƒjr€dndd�}|t
jt
jfkr¦|t
jt
jƒS |jr¶|  |¡S | S )Nr   r‘   rm  r	  r
  r  r“  rp  r3   r3   r4   r  a  s    

zcsc._eval_as_leading_term)N)rx   )Nr   )rY   rZ   r[   r\   r‡   r‚  r€  r‹   r/  rß   rã   r×   rí   rÜ   rõ   r�   r"  r$  r   r¾   r  r3   r3   r3   r4   ré     s"   #

ré   c                   @   s\   e Zd ZdZejfZddd„Zedd„ ƒZ	ddd	„Z
d
d„ Zdd„ Zdd„ Zdd„ ZeZdS )rî   a  
    Represents an unnormalized sinc function:

    .. math::

        \operatorname{sinc}(x) =
        \begin{cases}
          \frac{\sin x}{x} & \qquad x \neq 0 \\
          1 & \qquad x = 0
        \end{cases}

    Examples
    ========

    >>> from sympy import sinc, oo, jn
    >>> from sympy.abc import x
    >>> sinc(x)
    sinc(x)

    * Automated Evaluation

    >>> sinc(0)
    1
    >>> sinc(oo)
    0

    * Differentiation

    >>> sinc(x).diff()
    cos(x)/x - sin(x)/x**2

    * Series Expansion

    >>> sinc(x).series()
    1 - x**2/6 + x**4/120 + O(x**6)

    * As zero'th order spherical Bessel Function

    >>> sinc(x).rewrite(jn)
    jn(0, x)

    See also
    ========

    sin

    References
    ==========

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

    rx   c                 C   s<   | j d }|dkr.t|ƒ| t|ƒ|d   S t| |ƒ‚d S rw  )r9   r�   r‡   r   )r=   r�   r�   r3   r3   r4   r�   ¨  s    
z
sinc.fdiffc                 C   s¤   |j rtjS |jr8|tjtjfkr(tjS |tjkr8tjS |tjkrHtjS | 	¡ rZ| | ƒS t
|ƒ}|d k	r |jr‚t|j ƒr tjS nd| jr tj|tj  | S d S rˆ   )r;   r   r{   rœ   rž   rŸ   rK   r�   r]   r¥   rA   rr   r   r§   rq   )r°   r   rB   r3   r3   r4   r¶   µ  s$    




z	sinc.evalr   c                 C   s    | j d }t|ƒ|  |||¡S rö   )r9   r‡   rÄ   r�  r3   r3   r4   rÄ   Í  s    
zsinc._eval_nseriesc                 K   s   ddl m} |d|ƒS )Nr   )Újn)ró   r”  )r=   r   rË   r”  r3   r3   r4   Ú_eval_rewrite_as_jnÑ  s    zsinc._eval_rewrite_as_jnc                 K   s&   t t|ƒ| t|tjƒftjtjfƒS rÝ   )r(   r‡   r   r   rK   r{   ÚtruerÖ   r3   r3   r4   r/  Õ  s    zsinc._eval_rewrite_as_sinc                 C   sL   | j d jrdS t| j d ƒ\}}|jr8t|j|jgƒS |jrH|jrHdS d S )Nr   TF)r9   Úis_infiniterw   r;   r   rr   Z
is_nonzerorœ   r  r3   r3   r4   r  Ø  s    zsinc._eval_is_zeroc                 C   s    | j d js| j d jrdS d S r  )r9   rI   rt  rù   r3   r3   r4   rs  á  s    zsinc._eval_is_realN)rx   )r   )rY   rZ   r[   r\   r   r]   r^   r�   r#  r¶   rÄ   r•  r/  r  rs  r  r3   r3   r3   r4   rî   q  s   4


	rî   c                   @   sT   e Zd ZdZejejejejfZ	e
edd„ ƒƒZe
edd„ ƒƒZe
edd„ ƒƒZdS )	ÚInverseTrigonometricFunctionz/Base class for inverse trigonometric functions.c                -   C   s  t dƒd td t dƒd td dt dƒ td t dt dƒ d ƒtd t dƒt dt dƒ ƒ d td t dt dƒ d ƒttddƒ t dƒt dt dƒ ƒ d ttddƒ tjtd t dt dƒ ƒd td t tjt dƒd  ƒtd t dt dƒ ƒd ttddƒ t tjt dƒd  ƒttddƒ t dƒd d td dt dƒ d t d t dƒd d ttddƒ t dƒd t dƒd  td	 t dƒ d t dƒd  t d	 t dƒd t dƒ td	 dt dƒ t dƒ t d	 t dƒd t dƒd  ttdd	ƒ dt dƒ t dƒ ttdd	ƒ iS )
Nr_   rn   r`   rx   ra   rd   rb   rc   ri   )r%   r   r   r   rq   r3   r3   r3   r4   Ú_asin_tableñ  sV    
 
 
                   ëz(InverseTrigonometricFunction._asin_tablec                   C   s  t dƒd td dt dƒ td t dƒtd t dƒd td dt dƒ t d dt dƒ ttddƒ t ddt dƒ  ƒtd t ddt dƒ  ƒttddƒ t ddt dƒ d  ƒtd t ddt dƒ d  ƒttddƒ dt dƒ td d	t dƒ t d dt dƒ ttddƒ iS )
Nr_   rb   rx   rn   rd   ra   rc   ri   r¸   ©r%   r   r   r3   r3   r3   r4   Ú_atan_table  s6    
 
  
 
 
     
 
 
 óz(InverseTrigonometricFunction._atan_tablec                %   C   s¨  dt dƒ d td t dƒtd t ddt dƒ d  ƒtd dt tddƒt dƒd  ƒ td t ddt dƒ d  ƒttddƒ dt tddƒt dƒd  ƒ ttddƒ dtd t ddt dƒ  ƒtd dt dt dƒ ƒ td t ddt dƒ  ƒttddƒ dt dt dƒ ƒ ttddƒ dt dƒ td t dƒd ttddƒ t dƒd  ttd	dƒ t dƒt dƒ td
 t dƒt dƒ ttdd
ƒ t dƒt dƒ  ttdd
ƒ iS )Nrn   r_   r`   ra   rx   rd   rb   rc   éýÿÿÿri   éûÿÿÿrš  r3   r3   r3   r4   Ú_acsc_table$  sF               
 
     ïz(InverseTrigonometricFunction._acsc_tableN)rY   rZ   r[   r\   r   r{   r§   rK   r]   r^   r$  r   r™  r›  rž  r3   r3   r3   r4   r˜  í  s   r˜  c                   @   s¨   e Zd ZdZd%dd„Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZ	e
edd„ ƒƒZd&dd„Zd'dd„Zdd„ Zdd„ Zdd„ ZeZdd„ Zdd„ Zdd „ Zd!d"„ Zd(d#d$„ZdS ))r©   ad  
    The inverse sine function.

    Returns the arcsine of x in radians.

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

    ``asin(x)`` will evaluate automatically in the cases
    $x \in \{\infty, -\infty, 0, 1, -1\}$ and for some instances when the
    result is a rational multiple of $\pi$ (see the ``eval`` class method).

    A purely imaginary argument will lead to an asinh expression.

    Examples
    ========

    >>> from sympy import asin, oo
    >>> asin(1)
    pi/2
    >>> asin(-1)
    -pi/2
    >>> asin(-oo)
    oo*I
    >>> asin(oo)
    -oo*I

    See Also
    ========

    sin, csc, cos, sec, tan, cot
    acsc, acos, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.23
    .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcSin

    rx   c                 C   s0   |dkr"dt d| jd d  ƒ S t| |ƒ‚d S ©Nrx   r   rn   ©r%   r9   r   rŽ   r3   r3   r4   r�   i  s    z
asin.fdiffc                 C   s4   | j | jŽ }|j | j kr*|jd jr0dS n|jS d S r7   ©r8   r9   r:   r<   r3   r3   r4   r?   o  s
    zasin._eval_is_rationalc                 C   s   |   ¡ o| jd jS rö   )r  r9   Úis_positiverù   r3   r3   r4   Ú_eval_is_positivew  s    zasin._eval_is_positivec                 C   s   |   ¡ o| jd jS rö   )r  r9   r  rù   r3   r3   r4   Ú_eval_is_negativez  s    zasin._eval_is_negativec                 C   sŽ  |j rt|tjkrtjS |tjkr,tjtj S |tjkrBtjtj S |jrNtjS |tjkr`t	d S |tj
krtt	 d S |tjkr„tjS | ¡ r˜| | ƒ S |jr¶|  ¡ }||kr¶|| S t|ƒ}|d k	ràddlm} tj||ƒ S |jrìtjS t|tƒ�r\|jd }|j�r\|dt	 ; }|t	k�r(t	| }|t	d k�r>t	| }|t	 d k �rXt	 | }|S t|tƒ�rŠ|jd }|j�rŠt	d t|ƒ S d S )Nrn   r   )Úasinh)rœ   r   r�   rž   rŸ   r1   r;   rK   r{   r   r§   r]   r¥   Ú	is_numberr™  r5   r¦   r¥  r0   r‡   r9   Úis_comparabler�   r¬   )r°   r   Ú
asin_tabler²   r¥  Úangr3   r3   r4   r¶   }  sT    










z	asin.evalc                 G   sš   | dk s| d dkrt jS t|ƒ}t|ƒdkrb| dkrb|d }|| d d  | | d   |d  S | d d }tt j|ƒ}t|ƒ}|| ||   |  S d S r·   )r   rK   r   rº   r   rq   r   ©r¼   r�   r½   r‚   r’  ÚRrL  r3   r3   r4   r¾   ´  s    $zasin.taylor_termNr   c                 C   sü   | j d }| |d¡ ¡ }|tjkr4|  | |¡¡S |jrD| |¡S |tj tjtj	fkrt|  
t¡j|||d� ¡ S d|d  jrò| ||r�|nd¡}t|ƒjr¸|jròt |  |¡ S n:t|ƒjrØ|jròt|  |¡ S n|  
t¡j|||d� ¡ S |  |¡S ©Nr   ©rÀ   rÁ   rx   rn   )r9   rÃ   r  r   r�   r8   r  r;   r{   r]   rÊ   r"   r  rJ   r  r  r    r   r¢  ©r=   r�   rÀ   rÁ   r   r  Úndirr3   r3   r4   r  Ä  s$    




zasin._eval_as_leading_termc                 C   sœ  ddl m} | jd  |d¡}|tjk�rtddd�}ttj|d  ƒ t	¡ 
|dd| ¡}tj| jd  }	|	 |¡}
|	|
 |
 }| |d¡s²|dkrž|dƒS td |t|ƒƒ S ttj| ƒj|||d�}| ¡ t|
ƒ  ¡ }| ¡  ||¡ ¡  ¡ ||| |ƒ S |tjk�rôtddd�}ttj|d  ƒ t	¡ 
|dd| ¡}tj| jd  }	|	 |¡}
|	|
 |
 }| |d¡�s |dk�rŠ|dƒS t d |t|ƒƒ S ttj| ƒj|||d�}| ¡ t|
ƒ  ¡ }| ¡  ||¡ ¡  ¡ ||| |ƒ S tj| |||d�}|tjk�r|S d|d  j�r˜| jd  ||�r<|nd¡}t|ƒj�rb|j�r˜t | S n6t|ƒj�r€|j�r˜t| S n|  t	¡j||||d	�S |S ©
Nr   ©ÚOr„  T©Zpositivern   rx   rM  r­  )Úsympy.series.orderr²  r9   rÃ   r   r{   r   r©   rÊ   r"   Únseriesr  Úis_meromorphicr   r%   rÄ   ÚremoveOrJ   Úpowsimpr§   r   r]   r  r  r    r¢  ©r=   r�   r¼   rÀ   rÁ   r²  Úarg0r„  ZserZarg1rT   rU   Zres1Úresr¯  r3   r3   r4   rÄ   Ü  sJ    &
$&&
(&
zasin._eval_nseriesc                 K   s   t d t|ƒ S rˆ   ©r   r¬   rb  r3   r3   r4   Ú_eval_rewrite_as_acos	  s    zasin._eval_rewrite_as_acosc                 K   s    dt |dtd|d  ƒ  ƒ S rØ   )rª   r%   rb  r3   r3   r4   Ú_eval_rewrite_as_atan	  s    zasin._eval_rewrite_as_atanc                 K   s&   t j tt j| td|d  ƒ ƒ S rB  ©r   r1   r"   r%   rb  r3   r3   r4   Ú_eval_rewrite_as_log	  s    zasin._eval_rewrite_as_logc                 K   s    dt dtd|d  ƒ | ƒ S rØ   )r­   r%   rÖ   r3   r3   r4   Ú_eval_rewrite_as_acot	  s    zasin._eval_rewrite_as_acotc                 K   s   t d td| ƒ S rØ   ©r   r¯   rÖ   r3   r3   r4   Ú_eval_rewrite_as_asec	  s    zasin._eval_rewrite_as_asecc                 K   s   t d| ƒS rç   )r®   rÖ   r3   r3   r4   Ú_eval_rewrite_as_acsc	  s    zasin._eval_rewrite_as_acscc                 C   s   | j d }|jodt|ƒ jS ©Nr   rx   ©r9   rI   rP   Úis_nonnegative©r=   r�   r3   r3   r4   r  	  s    
zasin._eval_is_extended_realc                 C   s   t S rC  ra  rŽ   r3   r3   r4   rE   	  s    zasin.inverse)rx   )Nr   )r   )rx   )rY   rZ   r[   r\   r�   r?   r£  r¤  r#  r¶   r$  r   r¾   r  rÄ   r½  r¾  rÀ  Ú_eval_rewrite_as_tractablerÁ  rÃ  rÄ  r  rE  r3   r3   r3   r4   r©   >  s*   *

6

,r©   c                   @   s¨   e Zd ZdZd%dd„Zdd„ Zedd„ ƒZee	d	d
„ ƒƒZ
d&dd„Zdd„ Zdd„ Zd'dd„Zdd„ ZeZdd„ Zdd„ Zd(dd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ ZdS ))r¬   aº  
    The inverse cosine function.

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

    Returns the arc cosine of x (measured in radians).

    ``acos(x)`` will evaluate automatically in the cases
    $x \in \{\infty, -\infty, 0, 1, -1\}$ and for some instances when
    the result is a rational multiple of $\pi$ (see the eval class method).

    ``acos(zoo)`` evaluates to ``zoo``
    (see note in :class:`sympy.functions.elementary.trigonometric.asec`)

    A purely imaginary argument will be rewritten to asinh.

    Examples
    ========

    >>> from sympy import acos, oo
    >>> acos(1)
    0
    >>> acos(0)
    pi/2
    >>> acos(oo)
    oo*I

    See Also
    ========

    sin, csc, cos, sec, tan, cot
    asin, acsc, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.23
    .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcCos

    rx   c                 C   s0   |dkr"dt d| jd d  ƒ S t| |ƒ‚d S ©Nrx   r•   r   rn   r   rŽ   r3   r3   r4   r�   S	  s    z
acos.fdiffc                 C   s4   | j | jŽ }|j | j kr*|jd jr0dS n|jS d S r7   r¡  r<   r3   r3   r4   r?   Y	  s
    zacos._eval_is_rationalc                 C   sV  |j rn|tjkrtjS |tjkr,tjtj S |tjkrBtjtj S |jrPtd S |tjkr`tj	S |tj
krntS |tjkr~tjS |jrÀ|  ¡ }||kr¤td ||  S | |krÀtd ||   S t|ƒ}|d k	ràtd t|ƒ S t|tƒ�r$|jd }|j�r$|dt ; }|tk�r dt | }|S t|tƒ�rR|jd }|j�rRtd t|ƒ S d S ©Nrn   r   )rœ   r   r�   rž   r1   rŸ   r;   r   r{   rK   r§   r]   r¦  r™  r5   r©   r0   r�   r9   r§  r‡   )r°   r   r¨  r²   r©  r3   r3   r4   r¶   a	  sF    









z	acos.evalc                 G   s¬   | dkrt d S | dk s$| d dkr*tjS t|ƒ}t|ƒdkrr| dkrr|d }|| d d  | | d   |d  S | d d }ttj|ƒ}t|ƒ}| | ||   |  S d S r·   )r   r   rK   r   rº   r   rq   r   rª  r3   r3   r4   r¾   �	  s    $zacos.taylor_termNr   c                 C   s  | j d }| |d¡ ¡ }|tjkr4|  | |¡¡S |dkrXtdƒttj|  |¡ƒ S |tj tj	fkr€|  
t¡j|||d�S d|d  jrþ| ||rœ|nd¡}t|ƒjrÆ|jrþdt |  |¡ S n8t|ƒjrä|jrþ|  |¡ S n|  
t¡j|||d� ¡ S |  |¡S ©Nr   rx   rn   r­  )r9   rÃ   r  r   r�   r8   r  r%   r{   r]   rÊ   r"   r  r  r  r    r   r¢  rJ   r®  r3   r3   r4   r  Ÿ	  s$    



zacos._eval_as_leading_termc                 C   s   | j d }|jodt|ƒ jS rÅ  rÆ  rÈ  r3   r3   r4   r  ¶	  s    
zacos._eval_is_extended_realc                 C   s   |   ¡ S rÝ   )r  rù   r3   r3   r4   Ú_eval_is_nonnegativeº	  s    zacos._eval_is_nonnegativec                 C   sŒ  ddl m} | jd  |d¡}|tjkrütddd�}ttj|d  ƒ t	¡ 
|dd| ¡}tj| jd  }	|	 |¡}
|	|
 |
 }| |d¡s¨|dkrœ|dƒS |t|ƒƒS ttj| ƒj|||d�}| ¡ t|
ƒ  ¡ }| ¡  ||¡ ¡  ¡ ||| |ƒ S |tjk�rätddd�}ttj|d  ƒ t	¡ 
|dd| ¡}tj| jd  }	|	 |¡}
|	|
 |
 }| |d¡�s�|dk�r€|dƒS t|t|ƒƒ S ttj| ƒj|||d�}| ¡ t|
ƒ  ¡ }| ¡  ||¡ ¡  ¡ ||| |ƒ S tj| |||d�}|tjk�r|S d|d  j�rˆ| jd  ||�r,|nd¡}t|ƒj�rT|j�rˆdt | S n4t|ƒj�rp|j�rˆ| S n|  t	¡j||||d	�S |S r°  )r´  r²  r9   rÃ   r   r{   r   r¬   rÊ   r"   rµ  r  r¶  r%   rÄ   r·  rJ   r¸  r§   r   r   r]   r  r  r    r¢  r¹  r3   r3   r4   rÄ   ½	  sJ    
&
&&
"&zacos._eval_nseriesc                 K   s,   t d tjttj| td|d  ƒ ƒ  S rØ   ©r   r   r1   r"   r%   rb  r3   r3   r4   rÀ  é	  s    
ÿzacos._eval_rewrite_as_logc                 K   s   t d t|ƒ S rˆ   ©r   r©   rb  r3   r3   r4   Ú_eval_rewrite_as_asinï	  s    zacos._eval_rewrite_as_asinc                 K   s8   t td|d  ƒ| ƒtd d|td|d  ƒ    S rB  )rª   r%   r   rb  r3   r3   r4   r¾  ò	  s    zacos._eval_rewrite_as_atanc                 C   s   t S rC  r�  rŽ   r3   r3   r4   rE  õ	  s    zacos.inversec                 K   s(   t d dtdtd|d  ƒ | ƒ  S rØ   )r   r­   r%   rÖ   r3   r3   r4   rÁ  û	  s    zacos._eval_rewrite_as_acotc                 K   s   t d| ƒS rç   )r¯   rÖ   r3   r3   r4   rÃ  þ	  s    zacos._eval_rewrite_as_asecc                 K   s   t d td| ƒ S rØ   ©r   r®   rÖ   r3   r3   r4   rÄ  
  s    zacos._eval_rewrite_as_acscc                 C   sN   | j d }|  | j d  ¡ ¡}|jdkr,|S |jrJ|d jrJ|d jrJ|S d S ©Nr   Frx   )r9   r8   rø   rI   rÇ  Zis_nonpositive)r=   r6  Úrr3   r3   r4   rú   
  s    

zacos._eval_conjugate)rx   )Nr   )r   )rx   )rY   rZ   r[   r\   r�   r?   r#  r¶   r$  r   r¾   r  r  rÍ  rÄ   rÀ  rÉ  rÐ  r¾  rE  rÁ  rÃ  rÄ  rú   r3   r3   r3   r4   r¬   '	  s*   +

+

,
r¬   c                       sÜ   e Zd ZU dZee ed< ejej fZ	d*dd„Z
dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zedd„ ƒZeedd„ ƒƒZd+dd„Zd,dd„Zdd„ ZeZ‡ fdd„Zd-dd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Z‡  Z S ).rª   a  
    The inverse tangent function.

    Returns the arc tangent of x (measured in radians).

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

    ``atan(x)`` will evaluate automatically in the cases
    $x \in \{\infty, -\infty, 0, 1, -1\}$ and for some instances when the
    result is a rational multiple of $\pi$ (see the eval class method).

    Examples
    ========

    >>> from sympy import atan, oo
    >>> atan(0)
    0
    >>> atan(1)
    pi/4
    >>> atan(oo)
    pi/2

    See Also
    ========

    sin, csc, cos, sec, tan, cot
    asin, acsc, acos, asec, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.23
    .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcTan

    r9   rx   c                 C   s,   |dkrdd| j d d   S t| |ƒ‚d S rŸ  ©r9   r   rŽ   r3   r3   r4   r�   8
  s    z
atan.fdiffc                 C   s4   | j | jŽ }|j | j kr*|jd jr0dS n|jS d S r7   r¡  r<   r3   r3   r4   r?   >
  s
    zatan._eval_is_rationalc                 C   s   | j d jS rö   )r9   Zis_extended_positiverù   r3   r3   r4   r£  F
  s    zatan._eval_is_positivec                 C   s   | j d jS rö   )r9   Zis_extended_nonnegativerù   r3   r3   r4   rÍ  I
  s    zatan._eval_is_nonnegativec                 C   s   | j d jS rö   )r9   r;   rù   r3   r3   r4   r  L
  s    zatan._eval_is_zeroc                 C   s   | j d jS rö   r  rù   r3   r3   r4   rs  O
  s    zatan._eval_is_realc                 C   sŽ  |j rn|tjkrtjS |tjkr(td S |tjkr<t d S |jrHtjS |tjkrZtd S |tj	krnt d S |tj
kr˜ddlm} |t d td ƒS | ¡ r¬| | ƒ S |jrÊ|  ¡ }||krÊ|| S t|ƒ}|d k	rôddlm} tj||ƒ S |j�rtjS t|tƒ�rB|jd }|j�rB|t; }|td k�r>|t8 }|S t|tƒ�rŠ|jd }|j�rŠtd t|ƒ }|td k�r†|t8 }|S d S )Nrn   r`   r   r‘   )Úatanh)rœ   r   r�   rž   r   rŸ   r;   rK   r{   r§   r]   rš   r’   r¥   r¦  r›  r5   r¦   rÕ  r1   r0   rÚ   r9   r§  rá   r­   )r°   r   r’   Ú
atan_tabler²   rÕ  r©  r3   r3   r4   r¶   R
  sT    









z	atan.evalc                 G   sD   | dk s| d dkrt jS t|ƒ}t j| d d  ||   |  S d S rJ  )r   rK   r   r§   ©r¼   r�   r½   r3   r3   r4   r¾   ‡
  s    zatan.taylor_termNr   c                 C   s  | j d }| |d¡ ¡ }|tjkr4|  | |¡¡S |jrD| |¡S |tj tjtj	fkrt|  
t¡j|||d� ¡ S d|d  jrø| ||r�|nd¡}t|ƒjrºt|ƒjrø|  |¡t S n>t|ƒjrÞt|ƒjrø|  |¡t S n|  
t¡j|||d� ¡ S |  |¡S r¬  )r9   rÃ   r  r   r�   r8   r  r;   r1   r]   rÊ   r"   r  rJ   r  r  r!   r    r¢  r   r®  r3   r3   r4   r  �
  s$    






zatan._eval_as_leading_termc                 C   sô   | j d  |d¡}|tjtjtj fkr@|  t¡j||||d�S tj| |||d�}| j d  	||rf|nd¡}|tj
krŽt|ƒdkrŠ|t S |S d|d  jrðt|ƒjrºt|ƒjrð|t S n6t|ƒjrØt|ƒjrð|t S n|  t¡j||||d�S |S ©Nr   r­  rM  rx   rn   )r9   rÃ   r   r1   r§   rÊ   r"   rÄ   r   r  r]   r!   r   r  r    r¢  ©r=   r�   r¼   rÀ   rÁ   rº  r»  r¯  r3   r3   r4   rÄ   §
  s$    






zatan._eval_nseriesc                 K   s2   t jd tt jt j|  ƒtt jt j|  ƒ  S rˆ   )r   r1   r"   r{   rb  r3   r3   r4   rÀ  À
  s    ÿzatan._eval_rewrite_as_logc                    sN   |d t jt jfkr8td td| jd  ƒ  |||¡S tƒ  ||||¡S d S rJ  )	r   rž   rŸ   r   rª   r9   rÄ   ÚsuperÚ_eval_aseries©r=   r¼   Zargs0r�   rÀ   ©Ú	__class__r3   r4   rÛ  Æ
  s    $zatan._eval_aseriesc                 C   s   t S rC  ry  rŽ   r3   r3   r4   rE  Ì
  s    zatan.inversec                 K   s0   t |d ƒ| td tdt d|d  ƒ ƒ  S rØ   ©r%   r   r©   rÖ   r3   r3   r4   rÐ  Ò
  s    zatan._eval_rewrite_as_asinc                 K   s(   t |d ƒ| tdt d|d  ƒ ƒ S rØ   ©r%   r¬   rÖ   r3   r3   r4   r½  Õ
  s    zatan._eval_rewrite_as_acosc                 K   s   t d| ƒS rç   ru  rÖ   r3   r3   r4   rÁ  Ø
  s    zatan._eval_rewrite_as_acotc                 K   s$   t |d ƒ| tt d|d  ƒƒ S rØ   ©r%   r¯   rÖ   r3   r3   r4   rÃ  Û
  s    zatan._eval_rewrite_as_asecc                 K   s,   t |d ƒ| td tt d|d  ƒƒ  S rØ   ©r%   r   r®   rÖ   r3   r3   r4   rÄ  Þ
  s    zatan._eval_rewrite_as_acsc)rx   )Nr   )r   )rx   )!rY   rZ   r[   r\   ÚtTupler   rŽ  r   r1   r^   r�   r?   r£  rÍ  r  rs  r#  r¶   r$  r   r¾   r  rÄ   rÀ  rÉ  rÛ  rE  rÐ  r½  rÁ  rÃ  rÄ  Ú__classcell__r3   r3   rÝ  r4   rª   
  s2   
&

4


rª   c                       sÆ   e Zd ZdZejej fZd'dd„Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zedd„ ƒZeedd„ ƒƒZd(dd„Zd)dd„Z‡ fdd„Zdd„ ZeZd*dd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Z‡  ZS )+r­   aÊ  
    The inverse cotangent function.

    Returns the arc cotangent of x (measured in radians).

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

    ``acot(x)`` will evaluate automatically in the cases
    $x \in \{\infty, -\infty, \tilde{\infty}, 0, 1, -1\}$
    and for some instances when the result is a rational multiple of $\pi$
    (see the eval class method).

    A purely imaginary argument will lead to an ``acoth`` expression.

    ``acot(x)`` has a branch cut along $(-i, i)$, hence it is discontinuous
    at 0. Its range for real $x$ is $(-\frac{\pi}{2}, \frac{\pi}{2}]$.

    Examples
    ========

    >>> from sympy import acot, sqrt
    >>> acot(0)
    pi/2
    >>> acot(1)
    pi/4
    >>> acot(sqrt(3) - 2)
    -5*pi/12

    See Also
    ========

    sin, csc, cos, sec, tan, cot
    asin, acsc, acos, asec, atan, atan2

    References
    ==========

    .. [1] https://dlmf.nist.gov/4.23
    .. [2] https://functions.wolfram.com/ElementaryFunctions/ArcCot

    rx   c                 C   s,   |dkrdd| j d d   S t| |ƒ‚d S rÊ  rÔ  rŽ   r3   r3   r4   r�     s    z
acot.fdiffc                 C   s4   | j | jŽ }|j | j kr*|jd jr0dS n|jS d S r7   r¡  r<   r3   r3   r4   r?     s
    zacot._eval_is_rationalc                 C   s   | j d jS rö   )r9   rÇ  rù   r3   r3   r4   r£    s    zacot._eval_is_positivec                 C   s   | j d jS rö   )r9   r  rù   r3   r3   r4   r¤     s    zacot._eval_is_negativec                 C   s   | j d jS rö   r  rù   r3   r3   r4   r  #  s    zacot._eval_is_extended_realc                 C   s˜  |j rj|tjkrtjS |tjkr&tjS |tjkr6tjS |jrDtd S |tjkrVtd S |tj	krjt d S |tj
krztjS | ¡ rŽ| | ƒ S |jrÌ|  ¡ }||krÌtd ||  }|td krÈ|t8 }|S t|ƒ}|d k	� rúddlm} tj ||ƒ S |j�rttj S t|tƒ�rL|jd }|j�rL|t; }|td k�rH|t8 }|S t|tƒ�r”|jd }|j�r”td t|ƒ }|td k�r�|t8 }|S d S )Nrn   r`   r   )Úacoth)rœ   r   r�   rž   rK   rŸ   r;   r   r{   r§   r]   r¥   r¦  r›  r5   r¦   rå  r1   rq   r0   rá   r9   r§  rÚ   rª   )r°   r   rÖ  r©  r²   rå  r3   r3   r4   r¶   &  sX    










z	acot.evalc                 G   sT   | dkrt d S | dk s$| d dkr*tjS t|ƒ}tj| d d  ||   |  S d S rJ  )r   r   rK   r   r§   r×  r3   r3   r4   r¾   \  s    zacot.taylor_termNr   c                 C   s  | j d }| |d¡ ¡ }|tjkr4|  | |¡¡S |tjkrLd|  |¡S |tj tjtj	fkr||  
t¡j|||d� ¡ S |j�r
d|d  j�r
| ||r¢|nd¡}t|ƒjrÌt|ƒjrÊ|  |¡t S n>t|ƒjrðt|ƒjrî|  |¡t S n|  
t¡j|||d� ¡ S |  |¡S )Nr   rx   r­  rn   )r9   rÃ   r  r   r�   r8   r  r]   r1   rK   rÊ   r"   r  rJ   rt  r¢  r  r!   r    r   r  r®  r3   r3   r4   r  g  s$    






zacot._eval_as_leading_termc                 C   s  | j d  |d¡}|tjtjtj fkr@|  t¡j||||d�S tj| |||d�}|tj	kr`|S | j d  
||rt|nd¡}|jr˜t|ƒdk r”|t S |S |j�rd|d  j�rt|ƒjrÎt|ƒjrÌ|t S n6t|ƒjrìt|ƒjrê|t S n|  t¡j||||d�S |S rØ  )r9   rÃ   r   r1   r§   rÊ   r"   rÄ   r   r]   r  r;   r!   r   rt  r¢  r    r  rÙ  r3   r3   r4   rÄ   ~  s(    






zacot._eval_nseriesc                    sF   |d t jt jfkr0td| jd  ƒ |||¡S tƒ  ||||¡S d S rÅ  )r   rž   rŸ   rª   r9   rÄ   rÚ  rÛ  rÜ  rÝ  r3   r4   rÛ  ™  s    zacot._eval_aseriesc                 K   s.   t jd tdt j|  ƒtdt j|  ƒ  S rØ   )r   r1   r"   rb  r3   r3   r4   rÀ  Ÿ  s    ÿzacot._eval_rewrite_as_logc                 C   s   t S rC  rc  rŽ   r3   r3   r4   rE  ¥  s    zacot.inversec                 K   s@   |t d|d  ƒ td tt |d  ƒt |d  d ƒ ƒ  S rB  rß  rÖ   r3   r3   r4   rÐ  «  s    *ÿzacot._eval_rewrite_as_asinc                 K   s8   |t d|d  ƒ tt |d  ƒt |d  d ƒ ƒ S rB  rà  rÖ   r3   r3   r4   r½  ¯  s    zacot._eval_rewrite_as_acosc                 K   s   t d| ƒS rç   rD  rÖ   r3   r3   r4   r¾  ²  s    zacot._eval_rewrite_as_atanc                 K   s0   |t d|d  ƒ tt d|d  |d  ƒƒ S rB  rá  rÖ   r3   r3   r4   rÃ  µ  s    zacot._eval_rewrite_as_asecc                 K   s8   |t d|d  ƒ td tt d|d  |d  ƒƒ  S rB  râ  rÖ   r3   r3   r4   rÄ  ¸  s    zacot._eval_rewrite_as_acsc)rx   )Nr   )r   )rx   )rY   rZ   r[   r\   r   r1   r^   r�   r?   r£  r¤  r  r#  r¶   r$  r   r¾   r  rÄ   rÛ  rÀ  rÉ  rE  rÐ  r½  r¾  rÃ  rÄ  rä  r3   r3   rÝ  r4   r­   â
  s.   *

5	


r­   c                   @   s�   e Zd ZdZedd„ ƒZddd„Zd dd„Zee	d	d
„ ƒƒZ
d!dd„Zd"dd„Zdd„ Zdd„ ZeZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )#r¯   aÊ  
    The inverse secant function.

    Returns the arc secant of x (measured in radians).

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

    ``asec(x)`` will evaluate automatically in the cases
    $x \in \{\infty, -\infty, 0, 1, -1\}$ and for some instances when the
    result is a rational multiple of $\pi$ (see the eval class method).

    ``asec(x)`` has branch cut in the interval $[-1, 1]$. For complex arguments,
    it can be defined [4]_ as

    .. math::
        \operatorname{sec^{-1}}(z) = -i\frac{\log\left(\sqrt{1 - z^2} + 1\right)}{z}

    At ``x = 0``, for positive branch cut, the limit evaluates to ``zoo``. For
    negative branch cut, the limit

    .. math::
        \lim_{z \to 0}-i\frac{\log\left(-\sqrt{1 - z^2} + 1\right)}{z}

    simplifies to :math:`-i\log\left(z/2 + O\left(z^3\right)\right)` which
    ultimately evaluates to ``zoo``.

    As ``acos(x) = asec(1/x)``, a similar argument can be given for
    ``acos(x)``.

    Examples
    ========

    >>> from sympy import asec, oo
    >>> asec(1)
    0
    >>> asec(-1)
    pi
    >>> asec(0)
    zoo
    >>> asec(-oo)
    pi/2

    See Also
    ========

    sin, csc, cos, sec, tan, cot
    asin, acsc, acos, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.23
    .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcSec
    .. [4] https://reference.wolfram.com/language/ref/ArcSec.html

    c                 C   s  |j rtjS |jr@|tjkr"tjS |tjkr2tjS |tjkr@tS |tj	tj
tjfkr\td S |jrž|  ¡ }||kr‚td ||  S | |kržtd ||   S |jr¬td S t|tƒrê|jd }|jrê|dt ; }|tkrædt | }|S t|tƒ�r|jd }|j�rtd t|ƒ S d S rË  )r;   r   r]   rœ   r�   r{   rK   r§   r   rž   rŸ   r¦  rž  r—  r0   rì   r9   r§  ré   r®   ©r°   r   Z
acsc_tabler©  r3   r3   r4   r¶   ø  s<    






z	asec.evalrx   c                 C   sB   |dkr4d| j d d tdd| j d d   ƒ  S t| |ƒ‚d S rŸ  ©r9   r%   r   rŽ   r3   r3   r4   r�     s    ,z
asec.fdiffc                 C   s   t S rC  r=  rŽ   r3   r3   r4   rE  $  s    zasec.inversec                 G   sÔ   | dkrt jtd| ƒ S | dk s.| d dkr4t jS t|ƒ}t|ƒdkr„| dkr„|d }|| d | d   |d  d| d d   S | d }tt j|ƒ|  }t|ƒ|  d |  d }t j | | ||   d S d S ©Nr   rn   rx   r¸   r`   )	r   r1   r"   rK   r   rº   r   rq   r   rª  r3   r3   r4   r¾   *  s    ,zasec.taylor_termNr   c                 C   s  | j d }| |d¡ ¡ }|tjkr4|  | |¡¡S |dkrXtdƒt|tj  |¡ƒ S |tj tj	fkr€|  
t¡j|||d�S |j�rd|d  j�r| ||r¦|nd¡}t|ƒjrÊ|jrÈ|  |¡ S n>t|ƒjrî|jrìdt |  |¡ S n|  
t¡j|||d� ¡ S |  |¡S rÌ  )r9   rÃ   r  r   r�   r8   r  r%   r{   rK   rÊ   r"   r  rr  r¢  r  r    r  r   rJ   r®  r3   r3   r4   r  <  s$    



zasec._eval_as_leading_termc                 C   s<  ddl m} | jd  |d¡}|tjkrÔtddd�}ttj|d  ƒ t	¡ 
|dd| ¡}tj| jd  }	|	 |¡}
|	|
 |
 }ttj| ƒj|||d�}| ¡ t|
ƒ  ¡ }| ¡  ||¡ ¡  ¡ ||| |ƒ S |tjk�rŒtddd�}ttj|d  ƒ t	¡ 
|dd| ¡}tj| jd  }	|	 |¡}
|	|
 |
 }ttj| ƒj|||d�}| ¡ t|
ƒ  ¡ }| ¡  ||¡ ¡  ¡ ||| |ƒ S tj| |||d�}|tjk�r®|S |j�r8d|d  j�r8| jd  ||�rÜ|nd¡}t|ƒj�rþ|j�r8| S n:t|ƒj�r |j�r8dt | S n|  t	¡j||||d	�S |S ©
Nr   r±  r„  Tr³  rn   rM  rx   r­  )r´  r²  r9   rÃ   r   r{   r   r¯   rÊ   r"   rµ  r§   r  r%   rÄ   r·  rJ   r¸  r   r]   rr  r¢  r  r    r  r   r¹  r3   r3   r4   rÄ   S  sB    
&
&&
&zasec._eval_nseriesc                 C   s2   | j d }|jdkrdS t|d j| d jfƒS rÒ  )r9   rI   r   rÇ  rÈ  r3   r3   r4   r  {  s    

zasec._eval_is_extended_realc              	   K   s0   t d tjttj| tdd|d   ƒ ƒ  S rØ   rÎ  rÖ   r3   r3   r4   rÀ  �  s    zasec._eval_rewrite_as_logc                 K   s   t d td| ƒ S rØ   rÏ  rÖ   r3   r3   r4   rÐ  †  s    zasec._eval_rewrite_as_asinc                 K   s   t d| ƒS rç   )r¬   rÖ   r3   r3   r4   r½  ‰  s    zasec._eval_rewrite_as_acosc                 K   s8   t |d ƒ| }td d|  |tt |d d ƒƒ  S rØ   ©r%   r   rª   ©r=   r�   rË   Zsx2xr3   r3   r4   r¾  Œ  s    zasec._eval_rewrite_as_atanc                 K   s<   t |d ƒ| }td d|  |tdt |d d ƒ ƒ  S rØ   ©r%   r   r­   rë  r3   r3   r4   rÁ  �  s    zasec._eval_rewrite_as_acotc                 K   s   t d t|ƒ S rˆ   rÑ  rÖ   r3   r3   r4   rÄ  ”  s    zasec._eval_rewrite_as_acsc)rx   )rx   )Nr   )r   )rY   rZ   r[   r\   r#  r¶   r�   rE  r$  r   r¾   r  rÄ   r  rÀ  rÉ  rÐ  r½  r¾  rÁ  rÄ  r3   r3   r3   r4   r¯   ¼  s$   ;
%



(r¯   c                   @   sˆ   e Zd ZdZedd„ ƒZddd„Zddd„Zee	d	d
„ ƒƒZ
ddd„Zd dd„Zdd„ ZeZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )!r®   aV  
    The inverse cosecant function.

    Returns the arc cosecant of x (measured in radians).

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

    ``acsc(x)`` will evaluate automatically in the cases
    $x \in \{\infty, -\infty, 0, 1, -1\}$` and for some instances when the
    result is a rational multiple of $\pi$ (see the ``eval`` class method).

    Examples
    ========

    >>> from sympy import acsc, oo
    >>> acsc(1)
    pi/2
    >>> acsc(-1)
    -pi/2
    >>> acsc(oo)
    0
    >>> acsc(-oo) == acsc(oo)
    True
    >>> acsc(0)
    zoo

    See Also
    ========

    sin, csc, cos, sec, tan, cot
    asin, acos, asec, atan, acot, atan2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions
    .. [2] https://dlmf.nist.gov/4.23
    .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcCsc

    c                 C   s>  |j rtjS |jrH|tjkr"tjS |tjkr4td S |tjkrHt d S |tjtj	tjfkrbtj
S | ¡ rv| | ƒ S |jr‚tj
S |jr |  ¡ }||kr || S t|tƒ�r|jd }|j�r|dt ; }|tkrÚt| }|td krît| }|t d k �rt | }|S t|tƒ�r:|jd }|j�r:td t|ƒ S d S rË  )r;   r   r]   rœ   r�   r{   r   r§   rž   rŸ   rK   r¥   r—  r¦  rž  r0   ré   r9   r§  rì   r¯   ræ  r3   r3   r4   r¶   Ã  sD    






z	acsc.evalrx   c                 C   sB   |dkr4d| j d d tdd| j d d   ƒ  S t| |ƒ‚d S rÊ  rç  rŽ   r3   r3   r4   r�   ð  s    ,z
acsc.fdiffc                 C   s   t S rC  rè   rŽ   r3   r3   r4   rE  ö  s    zacsc.inversec                 G   sä   | dkr,t d tjtdƒ  tjt|ƒ  S | dk s@| d dkrFtjS t|ƒ}t|ƒdkr–| dkr–|d }|| d | d   |d  d| d d   S | d }ttj|ƒ|  }t	|ƒ|  d |  d }tj| | ||   d S d S rè  )
r   r   r1   r"   rK   r   rº   r   rq   r   rª  r3   r3   r4   r¾   ü  s    $,zacsc.taylor_termNr   c                 C   s  | j d }| |d¡ ¡ }|tjkr4|  | |¡¡S |tj tjtjfkrd|  	t
¡j|||d� ¡ S |tjkr|d|  |¡S |j�rd|d  j�r| ||r¢|nd¡}t|ƒjrÈ|jrÆt|  |¡ S n<t|ƒjrê|jrèt |  |¡ S n|  	t
¡j|||d� ¡ S |  |¡S r¬  )r9   rÃ   r  r   r�   r8   r  r{   rK   rÊ   r"   r  rJ   r]   rr  r¢  r  r    r  r   r®  r3   r3   r4   r    s$    




zacsc._eval_as_leading_termc                 C   s<  ddl m} | jd  |d¡}|tjkrÔtddd�}ttj|d  ƒ t	¡ 
|dd| ¡}tj| jd  }	|	 |¡}
|	|
 |
 }ttj| ƒj|||d�}| ¡ t|
ƒ  ¡ }| ¡  ||¡ ¡  ¡ ||| |ƒ S |tjk�rŒtddd�}ttj|d  ƒ t	¡ 
|dd| ¡}tj| jd  }	|	 |¡}
|	|
 |
 }ttj| ƒj|||d�}| ¡ t|
ƒ  ¡ }| ¡  ||¡ ¡  ¡ ||| |ƒ S tj| |||d�}|tjk�r®|S |j�r8d|d  j�r8| jd  ||�rÜ|nd¡}t|ƒj�r |j�r8t| S n8t|ƒj�r |j�r8t | S n|  t	¡j||||d	�S |S ré  )r´  r²  r9   rÃ   r   r{   r   r®   rÊ   r"   rµ  r§   r  r%   rÄ   r·  rJ   r¸  r   r]   rr  r¢  r  r    r  r   r¹  r3   r3   r4   rÄ   %  sB    
&
&&
&
zacsc._eval_nseriesc                 K   s*   t j tt j| tdd|d   ƒ ƒ S rB  r¿  rÖ   r3   r3   r4   rÀ  M  s    zacsc._eval_rewrite_as_logc                 K   s   t d| ƒS rç   )r©   rÖ   r3   r3   r4   rÐ  R  s    zacsc._eval_rewrite_as_asinc                 K   s   t d td| ƒ S rØ   r¼  rÖ   r3   r3   r4   r½  U  s    zacsc._eval_rewrite_as_acosc                 K   s,   t |d ƒ| td tt |d d ƒƒ  S rØ   rê  rb  r3   r3   r4   r¾  X  s    zacsc._eval_rewrite_as_atanc                 K   s0   t |d ƒ| td tdt |d d ƒ ƒ  S rØ   rì  rÖ   r3   r3   r4   rÁ  [  s    zacsc._eval_rewrite_as_acotc                 K   s   t d t|ƒ S rˆ   rÂ  rÖ   r3   r3   r4   rÃ  ^  s    zacsc._eval_rewrite_as_asec)rx   )rx   )Nr   )r   )rY   rZ   r[   r\   r#  r¶   r�   rE  r$  r   r¾   r  rÄ   rÀ  rÉ  rÐ  r½  r¾  rÁ  rÃ  r3   r3   r3   r4   r®   ˜  s"   *
,



(r®   c                       s\   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Z‡ fdd„Z‡  ZS )r«   aÕ
  
    The function ``atan2(y, x)`` computes `\operatorname{atan}(y/x)` taking
    two arguments `y` and `x`.  Signs of both `y` and `x` are considered to
    determine the appropriate quadrant of `\operatorname{atan}(y/x)`.
    The range is `(-\pi, \pi]`. The complete definition reads as follows:

    .. math::

        \operatorname{atan2}(y, x) =
        \begin{cases}
          \arctan\left(\frac y x\right) & \qquad x > 0 \\
          \arctan\left(\frac y x\right) + \pi& \qquad y \ge 0, x < 0 \\
          \arctan\left(\frac y x\right) - \pi& \qquad y < 0, x < 0 \\
          +\frac{\pi}{2} & \qquad y > 0, x = 0 \\
          -\frac{\pi}{2} & \qquad y < 0, x = 0 \\
          \text{undefined} & \qquad y = 0, x = 0
        \end{cases}

    Attention: Note the role reversal of both arguments. The `y`-coordinate
    is the first argument and the `x`-coordinate the second.

    If either `x` or `y` is complex:

    .. math::

        \operatorname{atan2}(y, x) =
            -i\log\left(\frac{x + iy}{\sqrt{x^2 + y^2}}\right)

    Examples
    ========

    Going counter-clock wise around the origin we find the
    following angles:

    >>> from sympy import atan2
    >>> atan2(0, 1)
    0
    >>> atan2(1, 1)
    pi/4
    >>> atan2(1, 0)
    pi/2
    >>> atan2(1, -1)
    3*pi/4
    >>> atan2(0, -1)
    pi
    >>> atan2(-1, -1)
    -3*pi/4
    >>> atan2(-1, 0)
    -pi/2
    >>> atan2(-1, 1)
    -pi/4

    which are all correct. Compare this to the results of the ordinary
    `\operatorname{atan}` function for the point `(x, y) = (-1, 1)`

    >>> from sympy import atan, S
    >>> atan(S(1)/-1)
    -pi/4
    >>> atan2(1, -1)
    3*pi/4

    where only the `\operatorname{atan2}` function reurns what we expect.
    We can differentiate the function with respect to both arguments:

    >>> from sympy import diff
    >>> from sympy.abc import x, y
    >>> diff(atan2(y, x), x)
    -y/(x**2 + y**2)

    >>> diff(atan2(y, x), y)
    x/(x**2 + y**2)

    We can express the `\operatorname{atan2}` function in terms of
    complex logarithms:

    >>> from sympy import log
    >>> atan2(y, x).rewrite(log)
    -I*log((x + I*y)/sqrt(x**2 + y**2))

    and in terms of `\operatorname(atan)`:

    >>> from sympy import atan
    >>> atan2(y, x).rewrite(atan)
    Piecewise((2*atan(y/(x + sqrt(x**2 + y**2))), Ne(y, 0)), (pi, re(x) < 0), (0, Ne(x, 0)), (nan, True))

    but note that this form is undefined on the negative real axis.

    See Also
    ========

    sin, csc, cos, sec, tan, cot
    asin, acsc, acos, asec, atan, acot

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions
    .. [2] https://en.wikipedia.org/wiki/Atan2
    .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcTan2

    c                 C   s†  ddl m} |tjkr8|jr tS dt |t|ƒƒ t S |tjkrHtjS |j	rp|j	rp|j
rp|j
rpt|ƒ}t|ƒ}|jrò|jrò|jrŽt|| ƒS |jrÂ|jrªt|| ƒt S |jròt|| ƒt S n0|jrò|jrÖtd S |jræt d S |jròtjS |j�rD|j�rttj||ƒ  S |j
�rDttt|ƒdk fdt|dƒftjdfƒS |j
�r‚|j
�r‚tj t|tj|  t|d |d  ƒ ƒ S d S )Nr   )Ú	Heavisidern   T)Z'sympy.functions.special.delta_functionsrí  r   rŸ   r;   r   r!   rž   rK   rt  r¦  r    rI   r¢  rª   r  rÇ  r�   Zis_extended_nonzeror{   r(   r   r1   r"   r%   )r°   rµ   r�   rí  r3   r3   r4   r¶   É  sJ    


þ ÿz
atan2.evalc                 K   s.   t j t|t j|  t|d |d  ƒ ƒ S rˆ   r¿  ©r=   rµ   r�   rË   r3   r3   r4   rÀ  ñ  s    zatan2._eval_rewrite_as_logc              	   K   sT   t dt||t|d |d  ƒ  ƒ t|dƒftt|ƒdk fdt|dƒftjdfƒS )Nrn   r   T)r(   rª   r%   r   r   r!   r   r�   rî  r3   r3   r4   r¾  ô  s
    .ýzatan2._eval_rewrite_as_atanc                 K   sj   |j r|j rt||tj  ƒS |tj|  }|d |d  }t|t|ƒ ƒtjtt|ƒtt|ƒƒ ƒ  S rˆ   )rI   Úarg_fr   r1   r%   r"   rP   )r=   rµ   r�   rË   r¼   r±   r3   r3   r4   Ú_eval_rewrite_as_argú  s
    zatan2._eval_rewrite_as_argc                 C   s   | j d jo| j d jS rÅ  r  rù   r3   r3   r4   r    s    zatan2._eval_is_extended_realc                 C   s    |   | jd  ¡ | jd  ¡ ¡S rÅ  r÷   rù   r3   r3   r4   rú     s    zatan2._eval_conjugatec                 C   sR   | j \}}|dkr&||d |d   S |dkrD| |d |d   S t| |ƒ‚d S rB  rÔ  )r=   r�   rµ   r�   r3   r3   r4   r�     s    
zatan2.fdiffc                    s&   | j \}}|jr"|jr"tƒ  |¡S d S rÝ   )r9   rI   rÚ  Ú_eval_evalf)r=   Úprecrµ   r�   rÝ  r3   r4   rñ    s    
zatan2._eval_evalf)rY   rZ   r[   r\   r#  r¶   rÀ  r¾  rð  r  rú   r�   rñ  rä  r3   r3   rÝ  r4   r«   b  s   f
'r«   )rx   )_Útypingr   rã  r   ZtUnionZsympy.core.addr   Zsympy.core.cacher   Zsympy.core.exprr   Zsympy.core.functionr   r   r	   r
   Zsympy.core.logicr   r   r   r   Zsympy.core.modr   Zsympy.core.numbersr   r   r   r   r   Zsympy.core.relationalr   r   Zsympy.core.singletonr   Zsympy.core.symbolr   r   Zsympy.core.sympifyr   Z(sympy.functions.combinatorial.factorialsr   r   Z%sympy.functions.combinatorial.numbersr   r   ro  r   rï  r    r!   Z&sympy.functions.elementary.exponentialr"   r#   Z#sympy.functions.elementary.integersr$   Z(sympy.functions.elementary.miscellaneousr%   r&   r'   Z$sympy.functions.elementary.piecewiser(   Z1sympy.functions.elementary._trigonometric_specialr)   r*   r+   Zsympy.logic.boolalgr,   Zsympy.ntheoryr-   Zsympy.polys.specialpolysr.   Zsympy.utilities.iterablesr/   r5   r6   rm   rw   r}   rA   r‡   r�   rÚ   rá   r~  rì   ré   rî   r˜  r©   r¬   rª   r­   r¯   r®   r«   r3   r3   r3   r4   Ú<module>   sv   D
%K  8  l  V  ?xli|Q j g V [ ] K