
    sg             	       .   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 ZI G d de      ZJed        ZKd ZLdCde
deMd ee
d!f   fd"ZN G d# d$eJ      ZO G d% d&eJ      ZP G d' d(eJ      ZQ G d) d*eJ      ZR G d+ d,eJ      ZS G d- d.eS      ZT G d/ d0eS      ZU G d1 d2e      ZV G d3 d4e      ZW G d5 d6eW      ZX G d7 d8eW      ZY G d9 d:eW      ZZ G d; d<eW      Z[ G d= d>eW      Z\ G d? d@eW      Z] G dA dBeW      Z^y!)D    )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                 b    t        | t              ry| j                  t        j                        S )z; Helper to extract symbolic coefficient for imaginary unit N)
isinstancer   as_coefficientr   ImaginaryUnit)r    s    [/var/www/html/venv/lib/python3.12/site-packages/sympy/functions/elementary/trigonometric.py_imaginary_unit_as_coefficientr6   !   s$    #u!!!//22    c                   R    e Zd ZdZdZej                  fZd Zd Z	d	dZ
d	dZd
dZy)TrigonometricFunctionz(Base class for trigonometric functions. Tc                      | j                   | j                   }|j                   | j                   k(  r>|j                  d   j                  r$t        |j                  d   j                        ryy y |j                  S Nr   F)funcargsis_rationalr   is_zeroselfss     r5   _eval_is_rationalz'TrigonometricFunction._eval_is_rational3   sd    DIItyy!66TYYvvay$$166!93D3D)E *F$ == r7   c                 H    | j                   | j                   }|j                   | j                   k(  ret        | j                  d   j                        r| j                  d   j                  ryt        | j                  d         }||j                  ryy y |j                  S Nr   FT)r<   r=   r   r?   is_algebraic	_pi_coeffr>   )rA   rB   pi_coeffs      r5   _eval_is_algebraicz(TrigonometricFunction._eval_is_algebraic;   s    DIItyy!66TYY1--.499Q<3L3L 1.H#(<(< )=# >>!r7   c                 \     | j                   dd|i|\  }}||t        j                  z  z   S )Ndeep )as_real_imagr   r4   )rA   rK   hintsre_partim_parts        r5   _eval_expand_complexz*TrigonometricFunction._eval_expand_complexF   s5    ,4,,@$@%@000r7   c                    | j                   d   j                  rV|r5d|d<    | j                   d   j                  |fi |t        j                  fS | j                   d   t        j                  fS |r5 | j                   d   j                  |fi |j                         \  }}||fS | j                   d   j                         \  }}||fS )Nr   Fcomplex)r=   is_extended_realexpandr   ZerorM   )rA   rK   rN   r"   r!   s        r5   _as_real_imagz#TrigonometricFunction._as_real_imagJ   s    99Q<((#(i +		!++D:E:AFFCC		!aff--(TYYq\((77DDFFB Bx YYq\..0FBBxr7   Nc                    t        | j                  d         }|t        |j                        d   }|j	                  |      st
        j                  S ||k(  r|S ||j                  v r||j                  r'|j                  |      \  }}||k(  r|t        |      z  S |j                  r=|j                  |      \  }}|j                  |d      \  }}||k(  r|t        |      z  S t        d      )Nr   F)as_Addz%Use the periodicity function instead.)r   r=   tuplefree_symbolshasr   rV   is_Mulas_independentabsis_AddNotImplementedError)rA   general_periodsymbolfghas          r5   _periodzTrigonometricFunction._periodW   s    tyy|$>1>>*1-FuuV}66M;!!Q^^#xx''/1;)#a&00xx''/1''u'=1;)#a&00!"IJJr7   TN)__name__
__module____qualname____doc__
unbranchedr   ComplexInfinity_singularitiesrC   rI   rQ   rW   rh   rL   r7   r5   r9   r9   -   s2    2J'')N!	"1Kr7   r9   c            	          ddddddddd	S )
N)      )rt      )ru      )rv   
   )rv      )rx   rw   )      )(   <   )   ry   rz         r{   r|   x   rL   rL   r7   r5   _table2r   q   s&     	 	r7   c                    t         j                  }g }t        j                  |       D ]<  }|j	                  t
              }|r|j                  r||z  },|j                  |       > |t         j                  u r| t         j                  fS |t         j                  z  }||z
  }|j                  sd|z  j                  r#|j                  du rt        ||t
        z  gz    |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   rV   r   	make_argscoeffr   r>   appendHalf
is_integeris_even)r    rH   
rest_termsrg   Km1m2s          r5   _peeloff_pir      s    $ vvHJ]]3 !GGBKMHa ! 166AFF{
QVV
B	BB	}}!B$**rzzU/BZ2b5')+R//;r7   r    cyclesreturnNc                    | t         u rt        j                  S | st        j                  S | j                  r| j                  t               }|r|j                         \  }}|j                  rt        |      dz  }|dk7  r`t        t        t        |d      j                                      }d|z  }||z  }t        |      }	t        |	|      r+t        |	|      }||z  }nt        t        |            }||z  }|j                  r:|dz  }
|
dk(  r|S |
s'|j                   t        j                  S t#        d      S |
|z  S |S y| j$                  rt        j                  S y)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

       r   r   N)r   r   OnerV   r]   r   as_coeff_Mulis_Floatr_   introundr#   evalfr   r   r   r   r   r?   )r    r   cxcxrd   pmcmic2s              r5   rG   rG      s6   J byuuvv	YYr]??$DAqzzFQJ6U3q!9??#4566A1A1BBA#Ar*$QNqS Q(A1B||U7Hyy, vv"1:%a4KI  
vvr7   c                       e Zd ZdZddZddZed        Zee	d               Z
ddZd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd dZd Zd Zd Zd Zy)!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                 4    | j                  dt        z  |      S Nr   rh   r   rA   rc   s     r5   periodz
sin.period#      ||AbD&))r7   c                 T    |dk(  rt        | j                  d         S t        | |      Nr   r   )cosr=   r	   rA   argindexs     r5   fdiffz	sin.fdiff&  s)    q=tyy|$$$T844r7   c           
      R   ddl m} ddlm} |j                  ri|t
        j                  u rt
        j                  S |j                  rt
        j                  S |t
        j                  t
        j                  fv r	 |dd      S |t
        j                  u rt
        j                  S t        ||      r9ddlm} |j                  |j                   }}t#        |dt$        z  z        }|t
        j                  ur||dz  t$        z  z
  }|t
        j                  ur||dz  t$        z  z
  } |||      j'                   |t$        dz  t$        t)        dd      z              t
        j*                  urZ |||      j'                   |t$        t)        d	d      z  t$        t)        d
d      z              t
        j*                  ur	 |dd      S  |||      j'                   |t$        dz  t$        t)        dd      z              t
        j*                  ur% |t-        t/        |      t/        |            d      S  |||      j'                   |t$        t)        d	d      z  t$        t)        dd      z              t
        j*                  ur% |dt1        t/        |      t/        |                  S  |t-        t/        |      t/        |            t1        t/        |      t/        |                  S t        ||      r|j3                  |       S |j5                         r
 | |        S t7        |      }|ddlm}	 t
        j<                   |	|      z  S t?        |      }
|
|
j@                  rt
        j                  S d|
z  j@                  r2|
jB                  du r$t
        jD                  |
t
        jF                  z
  z  S |
jH                  s|
t$        z  }||k7  r | |      S y |
jH                  r|
dz  }|dkD  r | |dz  t$        z         S d|z  dkD  r | d|z
  t$        z        S |
t)        d	d      z   dz  t$        z  }tK        |      }t        |tJ              s|S |
t$        z  |k7  r | |
t$        z        S y |jL                  rHtO        |      \  }}|r8|t$        z  }t/        |      tK        |      z  tK        |      t/        |      z  z   S |j                  rt
        j                  S t        |tP              r|jR                  d   S t        |tT              r#|jR                  d   }|tW        d|dz  z         z  S t        |tX              r&|jR                  \  }}|tW        |dz  |dz  z         z  S t        |tZ              r |jR                  d   }tW        d|dz  z
        S t        |t\              r)|jR                  d   }dtW        dd|dz  z  z         |z  z  S t        |t^              r|jR                  d   }d|z  S t        |t`              r#|jR                  d   }tW        dd|dz  z  z
        S y )Nr   AccumBoundsSetExprr   	FiniteSetr   ru   rs      rx   )sinhF)1!sympy.calculus.accumulationboundsr   sympy.sets.setexprr   	is_Numberr   NaNr?   rV   InfinityNegativeInfinityrp   r2   sympy.sets.setsr   minmaxr%   r   intersectionr   EmptySetr'   r   r(   
_eval_funccould_extract_minus_signr6   %sympy.functions.elementary.hyperbolicr   r4   rG   r   r   NegativeOner   is_Rationalr   r`   r   asinr=   atanr&   atan2acosacotacscasec)clsr    r   r   r   r   r   di_coeffr   rH   nargr   resultr   ys                   r5   evalzsin.eval,  s:   A.==aee|uuvvQ%7%788"2q))!###55Lc;'1wwCc1R4j!A!,,,AaCFl!**$AaCFl3$11)BqD"XaQR^BS2TU::&S)66yHQPQNAR8Aq>)8+ ,34::>"2q))S#&33IbdBxPQST~DU4VW::&"3s3xS#:A>>S#&33Ib!Q>OQST\]^`aTbQb4cd zz*"2s3s8SX'>??"3s3xS#: #CHc#h 79 9W%>>#&&'')I:05B??4=00S>""vv(
&& ##u,==8aff+<==''{3;t9$ ##qLq5Q
O++Q37Arz?*!HQN2a7;T!&#.!MB;#%x{++::s#DAqbD1vc!f}s1vc!f}44;;66Mc4 88A;c4 AT!ad(^##c5!88DAqT!Q$A+&&&c4 AAqD>!c4 Ad1qAv:&q())c4 AQ3Jc4 AAadF
## !r7   c                     | dk  s| dz  dk(  rt         j                  S t        |      }t        |      dkD  r|d   }| |dz  z  | | dz
  z  z  S t         j                  | dz  z  || z  z  t        |       z  S Nr   r   r   r   rV   r   lenr   r   nr   previous_termsr   s       r5   taylor_termzsin.taylor_term       q5AEQJ66M
A>"Q&"2&r!Q$w1q5	**}}q!t,QT1)A,>>r7   c                 &   | j                   d   }||j                  t        |      |      }|j                  |d      j                  t        j
                  t        j                        rt        d| z        t        j                  | ||||      S Nr   zCannot expand %s around 0)r   logxcdir
r=   subsr#   r\   r   r   rp   r
   r   _eval_nseriesrA   r   r   r   r   r    s         r5   r   zsin._eval_nseries  w    iil((3q64(C88Aq>aeeQ%6%6774@AA%%dADIIr7   c                     ddl m} t        j                  }t	        |t
        |f      r1|j                  |j                  d         j                  t              }t        ||z        t        | |z        z
  d|z  z  S Nr   HyperbolicFunctionr   
r   r   r   r4   r2   r9   r<   r=   rewriter$   )rA   r    kwargsr   Is        r5   _eval_rewrite_as_expzsin._eval_rewrite_as_exp  sf    LOOc13EFG((388A;'//4CCE
S#a[(1Q3//r7   c                     t        |t              r7t        j                  }|j                  d   }||| z  z  dz  |||z  z  dz  z
  S y Nr   r   r2   r#   r   r4   r=   rA   r    r   r   r   s        r5   _eval_rewrite_as_Powzsin._eval_rewrite_as_Pow  sL    c3AAQU719qAvqy((  r7   c                 0    t        |t        dz  z
  d      S Nr   Fevaluater   r   rA   r    r   s      r5   _eval_rewrite_as_coszsin._eval_rewrite_as_cos      3A:..r7   c                 V    t        t        j                  |z        }d|z  d|dz  z   z  S Nr   r   tanr   r   rA   r    r   tan_halfs       r5   _eval_rewrite_as_tanzsin._eval_rewrite_as_tan  s*    qvvcz?z1x{?++r7   c                 H    t        |      t        |      z  t        |      z  S rj   r   r   r   s      r5   _eval_rewrite_as_sincoszsin._eval_rewrite_as_sincos      3xC S))r7   c                     t        t        j                  |z        }t        dt	        t        t        |      d      t        t        |t              d            fd|z  d|dz  z   z  df      S )Nr   r   r   T	cotr   r   r)   r-   r   r!   r   r   rA   r    r   cot_halfs       r5   _eval_rewrite_as_cotzsin._eval_rewrite_as_cot  s^    qvvcz?!SBsGQCRL!1DEFH*a(A+o6=? 	?r7   c                 Z      | j                   t        fi |j                   t        fi |S rj   )r   r   powr   s      r5   _eval_rewrite_as_powzsin._eval_rewrite_as_pow  s*    2|t||C*6*223A&AAr7   c                 Z      | j                   t        fi |j                   t        fi |S rj   )r   r   r&   r   s      r5   _eval_rewrite_as_sqrtzsin._eval_rewrite_as_sqrt  s*    2|t||C*6*224B6BBr7   c                     dt        |      z  S Nr   cscr   s      r5   _eval_rewrite_as_csczsin._eval_rewrite_as_csc      Szr7   c                 6    dt        |t        dz  z
  d      z  S )Nr   r   Fr   secr   r   s      r5   _eval_rewrite_as_seczsin._eval_rewrite_as_sec  s    S2a4Z%000r7   c                     |t        |      z  S rj   )sincr   s      r5   _eval_rewrite_as_sinczsin._eval_rewrite_as_sinc  s    49}r7   c                 h    ddl m} t        t        |z  dz         |t        j
                  |      z  S )Nr   besseljr   sympy.functions.special.besselr%  r&   r   r   r   rA   r    r   r%  s       r5   _eval_rewrite_as_besseljzsin._eval_rewrite_as_besselj  s'    :BsF1H~gaffc222r7   c                 Z    | j                  | j                  d   j                               S Nr   r<   r=   	conjugaterA   s    r5   _eval_conjugatezsin._eval_conjugate  "    yy1//122r7   c                     ddl m}m}  | j                  dd|i|\  }}t	        |       ||      z  t        |       ||      z  fS Nr   coshr   rK   rL   )r   r4  r   rW   r   r   rA   rK   rN   r4  r   r"   r!   s          r5   rM   zsin.as_real_imag  sH    D###777BBR #b'$r("233r7   c           	         ddl m}m} | j                  d   }d }|j                  r|j                         \  }}t        |d      j                         }t        |d      j                         }t        |d      j                         }	t        |d      j                         }
||
z  ||	z  z   S |j                  r|j                  d      \  }}|j                  r~|j                  r,t        j                  |dz
  dz  z   ||t        |            z  S t        t        j                  |dz  dz
  z  t        |      z   ||dz
  t        |            z  d	      S t        |      S )
Nr   )
chebyshevt
chebyshevuFr   Trationalr   r   )rK   )#sympy.functions.special.polynomialsr7  r8  r=   r`   as_two_termsr   _eval_expand_trigr   r]   r   
is_Integeris_oddr   r   r   )rA   rN   r7  r8  r    r   r   sxsyr   cyr   s               r5   r=  zsin._eval_expand_trig  s:   Niil::##%DAqQ'99;BQ'99;BQ'99;BQ'99;Bb52b5= ZZ##T#2DAq|| 88==AE195jCF6KKK%ammacAg&>s1v&E&0QA&?'@FKM M3xr7   c                    ddl m} | j                  d   }|j                  |d      j	                         }|t
        z  }|j                  r1||t
        z  z
  j                  |      }t        j                  |z  |z  S |t        j                  u r+|j                  |dt        |      j                  rdnd      }|t        j                  t        j                  fv r	 |dd      S |j                   r| j#                  |      S | S )Nr   r   -+dirr   r   r   r   r=   r   cancelr   r   as_leading_termr   r   rp   limitr"   is_negativer   r   	is_finiter<   	rA   r   r   r   r   r    x0r   lts	            r5   _eval_as_leading_termzsin._eval_as_leading_term  s    AiilXXa^""$rE<<"*--a0BMM1$b(("""1aBtH,@,@ScJB!**a0011r1%% "tyy}6$6r7   c                 8    | j                   d   j                  ryy Nr   Tr=   rT   r.  s    r5   _eval_is_extended_realzsin._eval_is_extended_real      99Q<(( )r7   c                 <    | j                   d   }|j                  ryy rS  rT  rA   r    s     r5   _eval_is_finitezsin._eval_is_finite  s     iil  r7   c                 j    t        | j                  d         \  }}|j                  r|j                  S y r+  r   r=   r?   r   rA   restpi_mults      r5   _eval_is_zerozsin._eval_is_zero  0    #DIIaL1g<<%%% r7   c                 j    | j                   d   j                  s| j                   d   j                  ryy rS  r=   rT   
is_complexr.  s    r5   _eval_is_complexzsin._eval_is_complex#  s,    99Q<((99Q<** +r7   rj   r   r   ri   r+  ) rk   rl   rm   rn   r   r   classmethodr   staticmethodr   r   r   r   r   r   r  r	  r  r  r  r  r  r"  r)  r/  rM   r=  rQ  rU  rY  r_  rd  rL   r7   r5   r   r      s    -^*5 r$ r$h 
?  
?J0)/,*?
BC1334
27
&
r7   r   c                       e Zd ZdZddZddZed        Zee	d               Z
ddZd Zd	 Zd
 Zd Zd Zd Zd ZdefdZd Zd Zd Zd ZddZd Zd dZd Zd Zd Zd Zy)!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                 4    | j                  dt        z  |      S r   r   r   s     r5   r   z
cos.periodU  r   r7   c                 V    |dk(  rt        | j                  d          S t        | |      r   )r   r=   r	   r   s     r5   r   z	cos.fdiffX  s,    q=		!%%%$T844r7   c                 
   ddl m} ddlm} ddlm} |j                  ri|t        j                  u rt        j                  S |j                  rt        j                  S |t        j                  t        j                  fv r	 |dd      S |t        j                  u rt        j                  S t        ||      rt        |t         dz  z         S t        ||      r|j#                  |       S |j$                  r|j&                  du r	 |dd      S |j)                         r	 | |       S t+        |      }|dd	lm}  ||      S t1        |      }| |j2                  rt        j4                  |z  S d|z  j2                  r|j6                  du rt        j8                  S |j:                  s|t         z  }||k7  r | |      S y |j:                  r|j<                  }	|j>                  d|	z  z  }
|
|	kD  r|dz
  t         z  } | |       S d|
z  |	kD  rd|z
  t         z  } | |       S tA               }|	|v rb||	   \  }}|
t         z  |z  |
t         z  |z  }} | |       | |      }}d ||fv ry ||z   | t         dz  |z
         | t         dz  |z
        z  z   S |	d
kD  ry t        jB                  tE        d      dz   dz  d}|	|v r0||j<                     } ||j>                  |      jG                         S d|	dz  k(  rZ|dz  t         z  } | |      }d |k(  ry d|z  dz   dz  }d|dk  rdndtI        tK        |            z  z  }|tE        d|z   dz        z  S y |jL                  rHtO        |      \  }}|r8|t         z  }tQ        |      tQ        |      z  t        |      t        |      z  z
  S |j                  rt        j                  S t        |tR              r|jT                  d   S t        |tV              r#|jT                  d   }dtE        d|dz  z         z  S t        |tX              r&|jT                  \  }}|tE        |dz  |dz  z         z  S t        |tZ              r |jT                  d   }tE        d|dz  z
        S t        |t\              r&|jT                  d   }dtE        dd|dz  z  z         z  S t        |t^              r#|jT                  d   }tE        dd|dz  z  z
        S t        |t`              r|jT                  d   }d|z  S y )Nr   r7  r   r   r   r   r   F)r4  r}   ru   rt   )rs   ru   )1r;  r7  r   r   r   r   r   r   r   r?   r   r   r   rp   r2   r   r   r   rT   rM  r   r6   r   r4  rG   r   r   r   rV   r   qr   r   r   r&   rU   r   r_   r`   r   r   r   r=   r   r   r   r   r   r   )r   r    r7  r   r   r   r4  rH   r   rn  r   table2rg   bnvalanvalbcst_table_somectsnvalr   sign_cosr   r   s                          r5   r   zcos.eval^  s   BA.==aee|uuuuQ%7%788
 #2q))!###55Lc;'sRTz?"W%>>#&&CMMU$:r1%%'')t905B= S>""00(
&& ##u,66M''{3;t9$ ##JJJJ!A#&q5$qL",DI:%Q37L",DI:% !;!!9DAqR461R46qA#&q63q65Eu~-# ;RTAXs2a4!8})DDDr6 vvQ!q(" &(4C%hjj#6==??A:$QJ?Dt9Dt|#8a*A "QUr3s1v;&FGH#D1t8Q,$888::s#DAqbD1vc!f}s1vc!f}44;;55Lc4 88A;c4 AT!ad(^##c5!88DAqT!Q$A+&&&c4 AAF
##c4 AT!a1f*%%%c4 AAadF
##c4 AQ3J !r7   c                     | dk  s| dz  dk(  rt         j                  S t        |      }t        |      dkD  r|d   }| |dz  z  | | dz
  z  z  S t         j                  | dz  z  || z  z  t        |       z  S )Nr   r   r   r   r   r   s       r5   r   zcos.taylor_term  r   r7   c                 &   | j                   d   }||j                  t        |      |      }|j                  |d      j                  t        j
                  t        j                        rt        d| z        t        j                  | ||||      S r   r   r   s         r5   r   zcos._eval_nseries  r   r7   c                     t         j                  }ddlm} t	        |t
        |f      r3 |j                  |j                  d         j                  t        fi |}t        ||z        t        | |z        z   dz  S r   
r   r4   r   r   r2   r9   r<   r=   r   r$   )rA   r    r   r   r   s        r5   r   zcos._eval_rewrite_as_exp   si    OOLc13EFG/#((388A;'//>v>CCE
S#a[(!++r7   c                     t        |t              r1t        j                  }|j                  d   }||z  dz  || z  dz  z   S y r   r   r   s        r5   r   zcos._eval_rewrite_as_Pow  sD    c3AAa46ArE!G##  r7   c                 0    t        |t        dz  z   d      S r   )r   r   r   s      r5   _eval_rewrite_as_sinzcos._eval_rewrite_as_sin  r   r7   c                 V    t        t        j                  |z        dz  }d|z
  d|z   z  S r  r  r  s       r5   r  zcos._eval_rewrite_as_tan  s+    qvvcz?A%Hq8|,,r7   c                 H    t        |      t        |      z  t        |      z  S rj   r  r   s      r5   r	  zcos._eval_rewrite_as_sincos  r
  r7   c                     t        t        j                  |z        dz  }t        dt	        t        t        |      d      t        t        |dt        z        d            f|dz
  |dz   z  df      S )Nr   r   r   Tr  r  s       r5   r  zcos._eval_rewrite_as_cot  se    qvvcz?A%!SBsGQCQrTNA1FGH#a<(Q,7>@ 	@r7   c                 (     | j                   |fi |S rj   )r  r   s      r5   r  zcos._eval_rewrite_as_pow  s    )t))#888r7   r    c                    ddl m} t        |      y t        t              ry t        t
              sy t               }j                  |v rF |j                   |j                                  }j                  dk  r|j                         }|S j                  dz  sZdz  } t        |t        z        j                  t        fi |}|dz   dz  }t        |      dz  rdnd}	|	t        d|z   dz        z  S t        j                        }
|
r|
}n8t!        j                        j#                         D cg c]
  \  }}||z   }}}t%        | }fdt'        ||      D        }t'        |t)        d            D cg c]  }|d   |d   t        z  f }}t        t+        d	 |D                    j-                         j/                  |      }|
rt1        |
      dk(  r|S  |j                  t        fi |S c c}}w c c}w )
Nr   rm  i  r   r   r   c              3   V   K   | ]   \  }}j                   t        ||      z   " y wrj   )r   r   ).0r   r   rH   s      r5   	<genexpr>z,cos._eval_rewrite_as_sqrt.<locals>.<genexpr>B  s$     M$!Q(**x1~-Ms   &)zc              3   &   K   | ]	  }|d      yw)r   NrL   )r  r   s     r5   r  z,cos._eval_rewrite_as_sqrt.<locals>.<genexpr>D  s     'qt's   )r;  r7  rG   r2   r   r   r*   rn  r   rU   r   r   r   r&   r   r,   r.   itemsr+   zipr0   sumr=  r   r   )rA   r    r   r7  rs  rvpico2ru  r   rv  FCdenomsrp  eapartdecompXpclsrH   s                     @r5   r  zcos._eval_rewrite_as_sqrt  s   BS>h((H-"::'HJJ(Bxzz(B(DEBzzCYY[IzzA~qLE*3urz?**4:6:DaA VaZrQHdAH>2228::&F'0'<'B'B'DEtq!adEFE6"M#eV:LM&)&2B32G&HIadAaDG_II3'Q''(::<AA!DSW\Kt||D+F++ F Js   ?H Hc                     dt        |      z  S r  r  r   s      r5   r  zcos._eval_rewrite_as_secJ  r  r7   c                 H    d t        |      j                  t        fi |z  S r  )r  r   r  r   s      r5   r  zcos._eval_rewrite_as_cscM  $    !S!!#0000r7   c                     ddl m} t        t        t        |z  dz         |t
        j                   |      z  t        |d      fd      S )Nr   r$  r   r   Tr'  r%  r)   r&   r   r   r   r   r(  s       r5   r)  zcos._eval_rewrite_as_besseljP  sA    :bfQh 55r#qzB 	r7   c                 Z    | j                  | j                  d   j                               S r+  r,  r.  s    r5   r/  zcos._eval_conjugateW  r0  r7   c                     ddl m}m}  | j                  dd|i|\  }}t	        |       ||      z  t        |        ||      z  fS r2  )r   r4  r   rW   r   r   r5  s          r5   rM   zcos.as_real_imagZ  sJ    D###777BBR 3r7(48"344r7   c                    ddl m} | j                  d   }d }|j                  r|j	                         \  }}t        |d      j                         }t        |d      j                         }t        |d      j                         }t        |d      j                         }	||	z  ||z  z
  S |j                  r3|j                  d      \  }
}|
j                  r ||
t        |            S t        |      S )Nr   rm  Fr   Tr9  )r;  r7  r=   r`   r<  r   r=  r   r]   r   r>  )rA   rN   r7  r    r   r   r@  rA  r   rB  r   termss               r5   r=  zcos._eval_expand_trig_  s    Biil::##%DAqQ'99;BQ'99;BQ'99;BQ'99;Bb52b5= ZZ++T+:LE5!%U443xr7   c                 .   ddl m} | j                  d   }|j                  |d      j	                         }|t
        dz  z   t
        z  }|j                  r;||t
        z  z
  t
        dz  z   j                  |      }t        j                  |z  |z  S |t        j                  u r+|j                  |dt        |      j                  rdnd      }|t        j                  t        j                  fv r	 |dd      S |j                   r| j#                  |      S | S )	Nr   r   r   rD  rE  rF  r   r   rH  rN  s	            r5   rQ  zcos._eval_as_leading_termp  s    AiilXXa^""$"Q$YN<<"*r!t#44Q7BMM1$b(("""1aBtH,@,@ScJB!**a0011r1%% "tyy}6$6r7   c                 8    | j                   d   j                  ryy rS  rT  r.  s    r5   rU  zcos._eval_is_extended_real~  rV  r7   c                 <    | j                   d   }|j                  ryy rS  rT  rX  s     r5   rY  zcos._eval_is_finite  s     iil  r7   c                 j    | j                   d   j                  s| j                   d   j                  ryy rS  rb  r.  s    r5   rd  zcos._eval_is_complex  s,    99Q<((yy|&& 'r7   c                     t        | j                  d         \  }}|j                  r |r|t        j                  z
  j
                  S y y r+  r   r=   r?   r   r   r   r\  s      r5   r_  zcos._eval_is_zero  s=    #DIIaL1g<<Gaff$000 $<r7   rj   re  rf  ri   r+  ) rk   rl   rm   rn   r   r   rg  r   rh  r   r   r   r   r   r}  r  r	  r  r  r   r  r  r  r)  r/  rM   r=  rQ  rU  rY  rd  r_  rL   r7   r5   r   r   )  s    )V*5 I IV 
?  
?J,$/-*@
9), ),V135
"7
1r7   r   c                       e Zd ZdZddZddZddZed        Ze	e
d               ZddZd	 Zd
 Zd dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd!dZd Zd Zd Zd Zd Z y)"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                 .    | j                  t        |      S rj   r   r   s     r5   r   z
tan.period      ||B''r7   c                 P    |dk(  rt         j                  | dz  z   S t        | |      Nr   r   )r   r   r	   r   s     r5   r   z	tan.fdiff  s(    q=5547?"$T844r7   c                     t         S z7
        Returns the inverse of this function.
        r   r   s     r5   inverseztan.inverse  	     r7   c           
         ddl m} |j                  r|t        j                  u rt        j                  S |j
                  rt        j                  S |t        j                  t        j                  fv r% |t        j                  t        j                        S |t        j                  u rt        j                  S t        ||      r|j                  |j                  }}t        |t        z        }|t        j                  ur||t        z  z
  }|t        j                  ur||t        z  z
  }ddlm}  |||      j#                   |t        dz  t        t%        dd      z              r% |t        j                  t        j                        S  |t'        |      t'        |            S |j)                         r
 | |        S t+        |      }|ddlm} t        j0                   ||      z  S t3        |d      }	|	T|	j4                  rt        j                  S |	j6                  s|	t        z  }
|
|k7  r | |
      S y |	j6                  r|	j8                  }|	j:                  |z  }t=        ddt=        d      z  dz  z
        t=        ddt=        d      z  z
        t=        ddt=        d      z  dz  z         t=        ddt=        d      z  z         d	}|d
v rd|z  |z  }|dkD  rd|z
  }||    S ||   S |	j8                  dz  sl|	t        z  dz  }
t?        |
      t?        |
t        dz  z
        }}t        |t>              s0t        |t>              s |dk(  rt        j                  S d|z  ||z  z
  S tA               }||v rA||   \  }} | |t        z  |z         | |t        z  |z        }}d ||fv ry ||z
  d||z  z   z  S |	t        jB                  z   dz  t        jB                  z
  t        z  }
t?        |
      t?        |
t        dz  z
        }}t        |t>              s*t        |t>              s|dk(  rt        j                  S ||z  S |
|k7  r | |
      S |jD                  rKtG        |      \  }}|r;t'        |t        z        }|t        j                  u rtI        |       S t'        |      S |j
                  rt        j                  S t        |tJ              r|jL                  d   S t        |tN              r|jL                  \  }}||z  S t        |tP              r#|jL                  d   }|t=        d|dz  z
        z  S t        |tR              r#|jL                  d   }t=        d|dz  z
        |z  S t        |tT              r|jL                  d   }d|z  S t        |tV              r)|jL                  d   }dt=        dd|dz  z  z
        |z  z  S t        |tX              r&|jL                  d   }t=        dd|dz  z  z
        |z  S y )Nr   r   r   r   rs   )tanhr   ru   )r   r   rs   rt   ru   rw   rw   )-r   r   r   r   r   r?   rV   r   r   rp   r2   r   r   r%   r   r   r   r   r   r  r   r6   r   r  r4   rG   r   r   rn  r   r&   r   r   r   r`   r   r  r   r=   r   r   r   r   r   r   )r   r    r   r   r   r   r   r   r  rH   r   rn  r   table10r   cresultsresultro  rg   rp  rq  rr  r   r   tanmr   s                             r5   r   ztan.eval  s:   A==aee|uuvvQ%7%788"1#5#5qzzBB!###55Lc;'wwCc"fA!,,,AbDj!**$AbDj13$11)BqD"XaQR^BS2TU"1#5#5qzzBB"3s8SX66'')I:05B??4=00S!$""vv''{3;t9$##JJJJN A$q'	!O,A$q'	M*A$q'	!O,A$q'	M*	 <1QA1uF '
{*&qz)zzA~#B;q=D'*4y#dRTk2BWG%gs3$.w$<"a<#$#4#44 y77?:: ;!!9DAq#&qtAv;AbDF5Eu~-#!EMAeO<<!AFF*a/!&&8"< $'t9c$A+.>!'3/ *7C 8!| 000#GO,3;t9$::s#DAq1R4y1,,,F7Nq6M;;66Mc4 88A;c5!88DAqQ3Jc4 AT!ad(^##c4 AAqD>!##c4 AQ3Jc4 Ad1qAv:&q())c4 AAadF
#A%% !r7   c                     | dk  s| dz  dk(  rt         j                  S t        |      }| dz
  dz  d| dz   z  }}t        | dz         }t	        | dz         }t         j
                  |z  |z  |dz
  z  |z  |z  || z  z  S Nr   r   r   )r   rV   r   r   r   r   )r   r   r   rg   rp  BFs          r5   r   ztan.taylor_termJ  s     q5AEQJ66M
AUQJQUqA!a% A!a% A==!#A%q1u-a/1!Q$66r7   c                     | j                   d   j                  |d      dz  t        z  }|r3|j                  r'| j	                  t
              j                  |||      S t        j                  | |||      S )Nr   r   r   r   )r=   rK  r   r>  r   r   r   r   rA   r   r   r   r   r   s         r5   r   ztan._eval_nseriesY  sg    IIaLq!$Q&r)<<$2212EE%%dA>>r7   c                     t        |t              r;t        j                  }|j                  d   }||| z  ||z  z
  z  || z  ||z  z   z  S y r+  r   r   s        r5   r   ztan._eval_rewrite_as_Pow_  sS    c3AAa!eadl#QUQT\22  r7   c                 Z    | j                  | j                  d   j                               S r+  r,  r.  s    r5   r/  ztan._eval_conjugatee  r0  r7   c                      | j                   dd|i|\  }}|rAddlm}m} t	        d|z         |d|z        z   }t        d|z        |z   |d|z        |z  fS | j                  |      t        j                  fS NrK   r   r3  r   rL   	rW   r   r4  r   r   r   r<   r   rV   rA   rK   rN   r"   r!   r4  r   denoms           r5   rM   ztan.as_real_imagh  s{    ###777BH"IQrT
*E"IeOT!B$Z%566IIbM166**r7   c                 j   | j                   d   }d }|j                  rt        |j                         }g }|j                   D ].  }t        |d      j	                         }|j                  |       0 t        d      }t        |      D cg c]  }t        |       }	}ddg}
t        |dz         D ]+  }|
d|dz  z
  xx   t        ||	      d|dz  dz  z  z  z  cc<   - |
d   |
d   z  j                  t        t        |	|                  S |j                  r|j                  d	
      \  }}|j                  rm|dkD  rht         j"                  }t%        dd	      }d||z  z   |z  j'                         }t)        |      t+        |      z  j                  |t        |      fg      S t        |      S c c}w )Nr   Fr   Yr   r   r   rt   Tr9  dummyreal)r=   r`   r   r  r=  r   r0   rangenextr/   r   listr  r]   r   r>  r   r4   r   rU   r!   r"   )rA   rN   r    r   r   TXtxYgr   r  r   r   r  r   r  Ps                   r5   r=  ztan._eval_expand_trigq  s   iil::CHHABXX U+==?		" "#&B$)!H.q$r(.A.AA1q5\ H!a!e)q! 4bQUQJ5G GGHaD1I##DQ$455ZZ++T+:LE5EAIOO7.!A#g%--/1be))As5z?*;<<3x /s   
F0c                 
   t         j                  }ddlm} t	        |t
        |f      r1|j                  |j                  d         j                  t              }t        | |z        t        ||z        }}|||z
  z  ||z   z  S Nr   r   rz  )rA   r    r   r   r   neg_exppos_exps          r5   r   ztan._eval_rewrite_as_exp  su    OOLc13EFG((388A;'//4CtAv;CE
'G#$g&788r7   c                 B    dt        |      dz  z  t        d|z        z  S r   r   rA   r   r   s      r5   r}  ztan._eval_rewrite_as_sin  s!    Q{3qs8##r7   c                 H    t        |t        dz  z
  d      t        |      z  S r   r   r  s      r5   r   ztan._eval_rewrite_as_cos  s     1r!t8e,SV33r7   c                 0    t        |      t        |      z  S rj   r  r   s      r5   r	  ztan._eval_rewrite_as_sincos      3xC  r7   c                     dt        |      z  S r  r  r   s      r5   r  ztan._eval_rewrite_as_cot  r  r7   c                      t        |      j                  t        fi |} t        |      j                  t        fi |}||z  S rj   )r   r   r  r   )rA   r    r   sin_in_sec_formcos_in_sec_forms        r5   r  ztan._eval_rewrite_as_sec  C    *#c(**39&9*#c(**39&9..r7   c                      t        |      j                  t        fi |} t        |      j                  t        fi |}||z  S rj   )r   r   r  r   )rA   r    r   sin_in_csc_formcos_in_csc_forms        r5   r  ztan._eval_rewrite_as_csc  r  r7   c                       | j                   t        fi |j                   t        fi |}|j                  t              ry |S rj   r   r   r  r\   rA   r    r   r   s       r5   r  ztan._eval_rewrite_as_pow  <    /LDLL''//>v>55:r7   c                       | j                   t        fi |j                   t        fi |}|j                  t              ry |S rj   r   r   r&   r\   r  s       r5   r  ztan._eval_rewrite_as_sqrt  <    /LDLL''//??55:r7   c                 n    ddl m}  |t        j                  |       |t        j                   |      z  S Nr   r$  r'  r%  r   r   r(  s       r5   r)  ztan._eval_rewrite_as_besselj  s(    :qvvs#GQVVGS$999r7   c                 J   ddl m} ddlm} | j                  d   }|j                  |d      j                         }d|z  t        z  }|j                  r1||t        z  dz  z
  j                  |      }	|j                  r|	S d|	z  S |t        j                  u r(|j                  |d ||      j                  rdnd      }|t        j                  t        j                   fv r% |t        j                   t        j                        S |j"                  r| j%                  |      S | S )	Nr   r   r"   r   r   rD  rE  rF  r   r   $sympy.functions.elementary.complexesr"   r=   r   rI  r   r   rJ  r   r   rp   rK  rL  r   r   rM  r<   
rA   r   r   r   r   r"   r    rO  r   rP  s
             r5   rQ  ztan._eval_as_leading_term  s    A;iilXXa^""$bDG<<"Q,//2B2-2-"""1aBtH,@,@ScJB!**a0011q111::>> "tyy}6$6r7   c                 4    | j                   d   j                  S r+  rT  r.  s    r5   rU  ztan._eval_is_extended_real  s    yy|,,,r7   c                     | j                   d   }|j                  r(|t        z  t        j                  z
  j
                  du ryy y rE   r=   is_realr   r   r   r   rX  s     r5   _eval_is_realztan._eval_is_real  s:    iil;;CFQVVO775@ A;r7   c                     | j                   d   }|j                  r'|t        z  t        j                  z
  j
                  du ry|j                  ryy rE   )r=   r  r   r   r   r   is_imaginaryrX  s     r5   rY  ztan._eval_is_finite  sC    iil;;CFQVVO775@ r7   c                 j    t        | j                  d         \  }}|j                  r|j                  S y r+  r[  r\  s      r5   r_  ztan._eval_is_zero  r`  r7   c                     | j                   d   }|j                  r(|t        z  t        j                  z
  j
                  du ryy y rE   r  rX  s     r5   rd  ztan._eval_is_complex  s:    iil;;CFQVVO775@ A;r7   rj   re  rf  ri   r+  )!rk   rl   rm   rn   r   r   r  rg  r   rh  r   r   r   r   r/  rM   r=  r   r}  r   r	  r  r  r  r  r  r)  rQ  rU  r  rY  r_  rd  rL   r7   r5   r  r    s    #J(5 & &B 7  7?33+69$4!/
/
:7-
&
r7   r  c                       e Zd ZdZddZddZddZed        Ze	e
d               Zd dZd	 Zd!d
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd"dZd Zd Zd Zd Zd Zd Z d Z!y)#r  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                 .    | j                  t        |      S rj   r   r   s     r5   r   z
cot.period  r  r7   c                 P    |dk(  rt         j                  | dz  z
  S t        | |      r  )r   r   r	   r   s     r5   r   z	cot.fdiff  s)    q===47**$T844r7   c                     t         S r  r   r   s     r5   r  zcot.inverse  r  r7   c                 	   ddl m} |j                  r|t        j                  u rt        j                  S |j
                  rt        j                  S |t        j                  t        j                  fv r% |t        j                  t        j                        S |t        j                  u rt        j                  S t        ||      rt        |t        dz  z          S |j                         r
 | |        S t        |      }| ddlm} t        j                     ||      z  S t#        |d      }||j$                  rt        j                  S |j&                  s|t        z  }||k7  r | |      S y |j&                  r|j(                  dv rt        t        dz  |z
        S |j(                  dkD  rf|j(                  dz  sW|t        z  dz  }t+        |      t+        |t        dz  z
        }}t        |t*              st        |t*              sd|z  ||z  z   S |j(                  }	|j,                  |	z  }
t/               }|	|v rA||	   \  }} | |
t        z  |z         | |
t        z  |z        }}d ||fv ry d||z  z   ||z
  z  S |t        j0                  z   dz  t        j0                  z
  t        z  }t+        |      t+        |t        dz  z
        }}t        |t*              s*t        |t*              s|dk(  rt        j                  S ||z  S ||k7  r | |      S |j2                  rKt5        |      \  }}|r;t7        |t        z        }|t        j                  u rt7        |      S t        |       S |j
                  rt        j                  S t        |t8              r|j:                  d   S t        |t<              r|j:                  d   }d|z  S t        |t>              r|j:                  \  }}||z  S t        |t@              r#|j:                  d   }tC        d|dz  z
        |z  S t        |tD              r#|j:                  d   }|tC        d|dz  z
        z  S t        |tF              r&|j:                  d   }tC        dd|dz  z  z
        |z  S t        |tH              r)|j:                  d   }dtC        dd|dz  z  z
        |z  z  S y )Nr   r   r   )cothr  r   )%r   r   r   r   r   r?   rp   r   r   r2   r  r   r   r6   r   r  r4   rG   r   r   rn  r   r   r   r   r`   r   r  r   r=   r   r   r   r&   r   r   r   )r   r    r   r   r  rH   r   r  r  rn  r   ro  rg   rp  rq  rr  r   r   cotmr   s                       r5   r   zcot.eval  s&   A==aee|uu{{(((Q%7%788"1#5#5qzzBB!###55Lc;'bd
O##'')I:05BOO#DM11S!$""(((''{3;t9$##::(r!tcz?*::>(**q.#B;q=D'*4y#dRTk2BWG%gs3$.w$< y77?::JJJJN ;!!9DAq#&qtAv;AbDF5Eu~-#eOeem<<"QVV+q0AFF:B> $'t9c$A+.>!'3/ *7C 8!| 000"7?*3;t9$::s#DAq1R4y1,,,q6MF7N;;$$$c4 88A;c4 AQ3Jc5!88DAqQ3Jc4 AAqD>!##c4 AT!ad(^##c4 AAadF
#A%%c4 Ad1qAv:&q()) !r7   c                    | dk(  rdt        |      z  S | dk  s| dz  dk(  rt        j                  S t        |      }t        | dz         }t	        | dz         }t        j
                  | dz   dz  z  d| dz   z  z  |z  |z  || z  z  S Nr   r   r   )r   r   rV   r   r   r   )r   r   r   r  r  s        r5   r   zcot.taylor_term  s     6WQZ<Ua!eqj66M
A!a% A!a% A==AEA:.q1q5z9!;A=adBBr7   c                    | j                   d   j                  |d      t        z  }|r3|j                  r'| j	                  t
              j                  |||      S | j	                  t              j                  |||      S )Nr   r  )r=   rK  r   r>  r   r   r   r  r  s         r5   r   zcot._eval_nseries  sl    IIaLq!$R'<<$2212EE||C ..qAD.AAr7   c                 Z    | j                  | j                  d   j                               S r+  r,  r.  s    r5   r/  zcot._eval_conjugate  r0  r7   c                      | j                   dd|i|\  }}|rBddlm}m} t	        d|z         |d|z        z
  }t        d|z         |z   |d|z        |z  fS | j                  |      t        j                  fS r  r  r  s           r5   rM   zcot.as_real_imag  s~    ###777BH"IQrT
*E2YJu$d1R4j&677IIbM166**r7   c                    ddl m} t        j                  }t	        |t
        |f      r3 |j                  |j                  d         j                  t        fi |}t        | |z        t        ||z        }}|||z   z  ||z
  z  S r  r   )rA   r    r   r   r   r  r  s          r5   r   zcot._eval_rewrite_as_exp  s|    LOOc13EFG/#((388A;'//>v>CtAv;CE
'G#$g&788r7   c                     t        |t              r<t        j                  }|j                  d   }| || z  ||z  z   z  || z  ||z  z
  z  S y r+  r   r   s        r5   r   zcot._eval_rewrite_as_Pow  sU    c3AA2q1"uq!t|$a!eadl33  r7   c                 B    t        d|z        dt        |      dz  z  z  S r   r  r  s      r5   r}  zcot._eval_rewrite_as_sin  s!    1Q3xCFAI''r7   c                 H    t        |      t        |t        dz  z
  d      z  S r   r   r  s      r5   r   zcot._eval_rewrite_as_cos  s     1vc!bd(U333r7   c                 0    t        |      t        |      z  S rj   r   r   r   s      r5   r	  zcot._eval_rewrite_as_sincos  r  r7   c                     dt        |      z  S r  r  r   s      r5   r  zcot._eval_rewrite_as_tan  r  r7   c                      t        |      j                  t        fi |} t        |      j                  t        fi |}||z  S rj   )r   r   r  r   )rA   r    r   r  r  s        r5   r  zcot._eval_rewrite_as_sec  r  r7   c                      t        |      j                  t        fi |} t        |      j                  t        fi |}||z  S rj   )r   r   r  r   )rA   r    r   r  r  s        r5   r  zcot._eval_rewrite_as_csc  r  r7   c                       | j                   t        fi |j                   t        fi |}|j                  t              ry |S rj   r  r  s       r5   r  zcot._eval_rewrite_as_pow  r  r7   c                       | j                   t        fi |j                   t        fi |}|j                  t              ry |S rj   r  r  s       r5   r  zcot._eval_rewrite_as_sqrt  r  r7   c                 n    ddl m}  |t        j                   |       |t        j                  |      z  S r  r  r(  s       r5   r)  zcot._eval_rewrite_as_besselj  s(    :w$WQVVS%999r7   c                 L   ddl m} ddlm} | j                  d   }|j                  |d      j                         }d|z  t        z  }|j                  r2||t        z  dz  z
  j                  |      }	|j                  rd|	z  S |	 S |t        j                  u r(|j                  |d ||      j                  rdnd      }|t        j                  t        j                   fv r% |t        j                   t        j                        S |j"                  r| j%                  |      S | S )	Nr   r   r  r   r   rD  rE  rF  r  r  s
             r5   rQ  zcot._eval_as_leading_term  s    A;iilXXa^""$bDG<<"Q,//2B991R4-2#-"""1aBtH,@,@ScJB!**a0011q111::>> "tyy}6$6r7   c                 4    | j                   d   j                  S r+  rT  r.  s    r5   rU  zcot._eval_is_extended_real      yy|,,,r7   c                 h   | j                   d   }d }|j                  rt        |j                         }g }|j                   D ].  }t        |d      j	                         }|j                  |       0 t        d      }t        |      D cg c]  }t        |       }	}ddg}
t        |dd      D ].  }|
||z
  dz  xx   t        ||	      d||z
  dz  dz  z  z  z  cc<   0 |
d   |
d   z  j                  t        t        |	|                  S |j                  r|j                  d	
      \  }}|j                  rj|dkD  ret         j"                  }t%        dd	      }||z   |z  j'                         }t)        |      t+        |      z  j                  |t        |      fg      S t        |      S c c}w )Nr   Fr   r  r   r   rt   r   Tr9  r  r  )r=   r`   r   r  r=  r   r0   r  r  r/   r   r  r  r]   r   r>  r   r4   r   rU   r"   r!   )rA   rN   r    r   r   CXr   r  r   r  r   r   r  r   r  r  s                   r5   r=  zcot._eval_expand_trig  s   iil::CHHABXX U+==?		" "#&B$)!H.q$r(.A.AA1b"% P1q5A+.A"6A{Q>N7O"OOPaD1I##DQ$455ZZ++T+:LE5EAIOO7.!ee^++-1be))As5z?*;<<3x /s   
F/c                     | j                   d   }|j                  r|t        z  j                  du ry|j                  ryy rE   )r=   r  r   r   r  rX  s     r5   rY  zcot._eval_is_finite  s;    iil;;CF..%7 r7   c                 h    | j                   d   }|j                  r|t        z  j                  du ryy y rE   r=   r  r   r   rX  s     r5   r  zcot._eval_is_real  1    iil;;CF..%7 8;r7   c                 h    | j                   d   }|j                  r|t        z  j                  du ryy y rE   r  rX  s     r5   rd  zcot._eval_is_complex  r  r7   c                     t        | j                  d         \  }}|r*|j                  r|t        j                  z
  j
                  S y y r+  r  )rA   r]  pimults      r5   r_  zcot._eval_is_zero  s<    "499Q<0fdllQVVO/// #6r7   c                     | j                   d   }|j                  ||      }||k7  r#|t        z  j                  rt        j
                  S t        |      S r+  )r=   r   r   r   r   rp   r  )rA   oldnewr    argnews        r5   
_eval_subszcot._eval_subs  sH    iil#s#&=fRi33$$$6{r7   rj   re  rf  ri   r+  )"rk   rl   rm   rn   r   r   r  rg  r   rh  r   r   r   r/  rM   r   r   r}  r   r	  r  r  r  r  r  r)  rQ  rU  r=  rY  r  rd  r_  r%  rL   r7   r5   r  r    s    #J(5 f* f*P C  CB3+94(4!/
/
:7-4

0
r7   r  c                       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        Zd Zd Zd Zd	 Zdd
Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd ZddZd ZddZ y)ReciprocalTrigonometricFunctionz@Base class for reciprocal functions of trigonometric functions. N_is_even_is_oddc                 
   |j                         r+| j                  r	 | |       S | j                  r
 | |        S t        |      }|d|z  j                  s|j
                  ru|j                  }|j                  d|z  z  }||kD  r|dz
  t        z  } | |       S d|z  |kD  r5d|z
  t        z  }| j                  r | |      S | j                  r	 | |       S t        |d      r"|j                         | k(  r|j                  d   S | j                  j                  |      }||S t        d || fD              rd|z  j                  t               S t        d || fD              rd|z  j                  t"              S d|z  S )Nr   r   r  r   c              3   <   K   | ]  }t        |t                y wrj   )r2   r   r  r   s     r5   r  z7ReciprocalTrigonometricFunction.eval.<locals>.<genexpr>P       5As#5   c              3   <   K   | ]  }t        |t                y wrj   )r2   r   r,  s     r5   r  z7ReciprocalTrigonometricFunction.eval.<locals>.<genexpr>R  r-  r.  )r   r(  r)  rG   r   r   rn  r   r   hasattrr  r=   _reciprocal_ofr   anyr   r  r  )r   r    rH   rn  r   r   ts          r5   r   z$ReciprocalTrigonometricFunction.eval2  sp   '')||C4y {{SD	z!S> xZ++$$JJJJ!A#&q5$qL",DI:%Q37L",D{{"4y( #D	z)3	"s{{}';88A;##C(9H5a!W55aC==%%5a!W55aC==%%Q3Jr7   c                 b    | j                  | j                  d         } t        ||      |i |S r+  )r1  r=   getattr)rA   method_namer=   r   os        r5   _call_reciprocalz0ReciprocalTrigonometricFunction._call_reciprocalW  s3    		!-&wq+&777r7   c                 @     | j                   |g|i |}|d|z  S |S r  )r8  )rA   r6  r=   r   r3  s        r5   _calculate_reciprocalz5ReciprocalTrigonometricFunction._calculate_reciprocal\  s3     "D!!+???mqs**r7   c                 `    | j                  ||      }||| j                  |      k7  rd|z  S y y r  )r8  r1  )rA   r6  r    r3  s       r5   _rewrite_reciprocalz3ReciprocalTrigonometricFunction._rewrite_reciprocalb  s=     !!+s3=Q$"5"5c"::Q3J ;=r7   c                 r    t        | j                  d         }| j                  |      j                  |      S r+  )r   r=   r1  r   )rA   rc   rd   s      r5   rh   z'ReciprocalTrigonometricFunction._periodi  s0    tyy|$""1%,,V44r7   c                 4    | j                  d|       | dz  z  S )Nr   r   r:  r   s     r5   r   z%ReciprocalTrigonometricFunction.fdiffm  s!    **7H==dAgEEr7   c                 &    | j                  d|      S )Nr   r<  r   s      r5   r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_expp      ''(>DDr7   c                 &    | j                  d|      S )Nr   rA  r   s      r5   r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_Pows  rB  r7   c                 &    | j                  d|      S )Nr}  rA  r   s      r5   r}  z4ReciprocalTrigonometricFunction._eval_rewrite_as_sinv  rB  r7   c                 &    | j                  d|      S )Nr   rA  r   s      r5   r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_cosy  rB  r7   c                 &    | j                  d|      S )Nr  rA  r   s      r5   r  z4ReciprocalTrigonometricFunction._eval_rewrite_as_tan|  rB  r7   c                 &    | j                  d|      S )Nr  rA  r   s      r5   r  z4ReciprocalTrigonometricFunction._eval_rewrite_as_pow  rB  r7   c                 &    | j                  d|      S )Nr  rA  r   s      r5   r  z5ReciprocalTrigonometricFunction._eval_rewrite_as_sqrt  s    ''(?EEr7   c                 Z    | j                  | j                  d   j                               S r+  r,  r.  s    r5   r/  z/ReciprocalTrigonometricFunction._eval_conjugate  r0  r7   c                 f     d| j                  | j                  d         z  j                  |fi |S r   )r1  r=   rM   )rA   rK   rN   s      r5   rM   z,ReciprocalTrigonometricFunction.as_real_imag  s<    A$%%diil33AA$ KDIK 	Kr7   c                 &     | j                   di |S )N)r=  r?  )rA   rN   s     r5   r=  z1ReciprocalTrigonometricFunction._eval_expand_trig  s    )t))GGGr7   c                 Z    | j                  | j                  d         j                         S r+  )r1  r=   rU  r.  s    r5   rU  z6ReciprocalTrigonometricFunction._eval_is_extended_real  s$    ""499Q<0GGIIr7   c                 b    d| j                  | j                  d         z  j                  |      S r   )r1  r=   rQ  )rA   r   r   r   s       r5   rQ  z5ReciprocalTrigonometricFunction._eval_as_leading_term  s+    $%%diil33JJ1MMr7   c                 X    d| j                  | j                  d         z  j                  S r   )r1  r=   rM  r.  s    r5   rY  z/ReciprocalTrigonometricFunction._eval_is_finite  s&    $%%diil33>>>r7   c                 f    d| j                  | j                  d         z  j                  |||      S r   )r1  r=   r   rA   r   r   r   r   s        r5   r   z-ReciprocalTrigonometricFunction._eval_nseries  s/    $%%diil33BB1aNNr7   re  ri   r+  rf  )!rk   rl   rm   rn   r1  r   rp   rq   r(  r   __annotations__r)  rg  r   r8  r:  r<  rh   r   r   r   r}  r   r  r  r  r/  rM   r=  rU  rQ  rY  r   rL   r7   r5   r'  r'  $  s    JN'')N HiGY" "H8
+5FEEEEEEF3KHJN?Or7   r'  c                   z    e Zd ZdZeZdZddZd Zd Z	d Z
d Zd	 Zd
 ZddZd Zd Zeed               ZddZy)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                 $    | j                  |      S rj   rh   r   s     r5   r   z
sec.period      ||F##r7   c                 :    t        |dz        dz  }|dz   |dz
  z  S r  r  )rA   r    r   cot_half_sqs       r5   r  zsec._eval_rewrite_as_cot  s&    #a%j!ma+/22r7   c                     dt        |      z  S r  r   r   s      r5   r   zsec._eval_rewrite_as_cos      #c(
r7   c                 H    t        |      t        |      t        |      z  z  S rj   r  r   s      r5   r	  zsec._eval_rewrite_as_sincos      3xS#c(*++r7   c                 H    d t        |      j                  t        fi |z  S r  )r   r   r   r   s      r5   r}  zsec._eval_rewrite_as_sin  $    "#c(""31&112r7   c                 H    d t        |      j                  t        fi |z  S r  )r   r   r  r   s      r5   r  zsec._eval_rewrite_as_tan  r^  r7   c                 0    t        t        dz  |z
  d      S r   )r  r   r   s      r5   r  zsec._eval_rewrite_as_csc      2a4#:..r7   c                     |dk(  r1t        | j                  d         t        | j                  d         z  S t        | |      r   )r  r=   r  r	   r   s     r5   r   z	sec.fdiff  s;    q=tyy|$S1%666$T844r7   c                     ddl m} t        dt        t        |z        t        d      z   |t
        j                   |      z  z  t        |d      fd      S )Nr   r$  r   r   r  r  r(  s       r5   r)  zsec._eval_rewrite_as_besselj  sK    :DCL$q'*7AFF7C+@@A2c1:N 	r7   c                     | j                   d   }|j                  r(|t        z  t        j                  z
  j
                  du ryy y rE   )r=   rc  r   r   r   r   rX  s     r5   rd  zsec._eval_is_complex  s:    iil>>s2v::eC D>r7   c                     | dk  s| dz  dk(  rt         j                  S t        |      }| dz  }t         j                  |z  t	        d|z        z  t        d|z        z  |d|z  z  z  S r  )r   rV   r   r   r   r   r   r   r   ks       r5   r   zsec.taylor_term  sf    
 q5AEQJ66M
A1A==!#E!A#J.y1~=a!A#hFFr7   c                 l   ddl m} ddlm} | j                  d   }|j                  |d      j                         }|t        dz  z   t        z  }|j                  r;||t        z  z
  t        dz  z   j                  |      }	t        j                  |z  |	z  S |t        j                  u r(|j                  |d ||      j                  rdnd      }|t        j                  t        j                   fv r% |t        j                   t        j                        S |j"                  r| j%                  |      S | S )Nr   r   r  r   rD  rE  rF  r   r   r  r"   r=   r   rI  r   r   rJ  r   r   rp   rK  rL  r   r   rM  r<   r  s
             r5   rQ  zsec._eval_as_leading_term  s    A;iilXXa^""$"Q$YN<<"*r!t#44Q7BMM1$b(("""1aBtH,@,@ScJB!**a0011q111::>> "tyy}6$6r7   rj   re  r+  )rk   rl   rm   rn   r   r1  r(  r   r  r   r	  r}  r  r  r   r)  rd  rh  r   r   rQ  rL   r7   r5   r  r    si    !F NH$3,33/5 G  G7r7   r  c                   z    e Zd ZdZeZdZddZd Zd Z	d Z
d Zd	 Zd
 Zd ZddZd Zeed               ZddZy)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                 $    | j                  |      S rj   rT  r   s     r5   r   z
csc.period/  rU  r7   c                     dt        |      z  S r  r  r   s      r5   r}  zcsc._eval_rewrite_as_sin2  rZ  r7   c                 H    t        |      t        |      t        |      z  z  S rj   r  r   s      r5   r	  zcsc._eval_rewrite_as_sincos5  r\  r7   c                 :    t        |dz        }d|dz  z   d|z  z  S r  r  r  s       r5   r  zcsc._eval_rewrite_as_cot8  s&    s1u:HaK!H*--r7   c                 H    d t        |      j                  t        fi |z  S r  )r   r   r   r   s      r5   r   zcsc._eval_rewrite_as_cos<  r  r7   c                 0    t        t        dz  |z
  d      S r   r  r   s      r5   r  zcsc._eval_rewrite_as_sec?  ra  r7   c                 H    d t        |      j                  t        fi |z  S r  )r   r   r  r   s      r5   r  zcsc._eval_rewrite_as_tanB  r^  r7   c                     ddl m} t        dt        z        dt        |       |t        j
                  |      z  z  z  S )Nr   r$  r   r   r&  r(  s       r5   r)  zcsc._eval_rewrite_as_besseljE  s1    :AbDz1d3i(<<=>>r7   c                     |dk(  r2t        | j                  d          t        | j                  d         z  S t        | |      r   )r  r=   r  r	   r   s     r5   r   z	csc.fdiffI  s>    q=		!%%c$))A,&777$T844r7   c                 h    | j                   d   }|j                  r|t        z  j                  du ryy y rE   r  rX  s     r5   rd  zcsc._eval_is_complexO  r  r7   c                 ,   | dk(  rdt        |      z  S | dk  s| dz  dk(  rt        j                  S t        |      }| dz  dz   }t        j                  |dz
  z  dz  dd|z  dz
  z  dz
  z  t	        d|z        z  |d|z  dz
  z  z  t        d|z        z  S r  )r   r   rV   r   r   r   rf  s       r5   r   zcsc.taylor_termT  s     6WQZ<Ua!eqj66M
A1qAMMAE*1,a!A#'lQ.>?acN##$qsQw<009!A#? @r7   c                 D   ddl m} ddlm} | j                  d   }|j                  |d      j                         }|t        z  }|j                  r1||t        z  z
  j                  |      }	t        j                  |z  |	z  S |t        j                  u r(|j                  |d ||      j                  rdnd      }|t        j                  t        j                   fv r% |t        j                   t        j                        S |j"                  r| j%                  |      S | S )Nr   r   r  rD  rE  rF  ri  r  s
             r5   rQ  zcsc._eval_as_leading_terma  s    A;iilXXa^""$rE<<"*--a0BMM1$b(("""1aBtH,@,@ScJB!**a0011q111::>> "tyy}6$6r7   rj   re  r+  )rk   rl   rm   rn   r   r1  r)  r   r}  r	  r  r   r  r  r)  r   rd  rh  r   r   rQ  rL   r7   r5   r  r    si    !F NG$,.1/3?5
 	@  	@7r7   r  c                   f    e Zd ZdZej
                  fZd
dZed        Z	ddZ
d Zd Zd Zd ZeZy	)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

    c                     | j                   d   }|dk(  r t        |      |z  t        |      |dz  z  z
  S t        | |      r  )r=   r   r   r	   )rA   r   r   s      r5   r   z
sinc.fdiff  sD    IIaLq= q6!8c!fQTk))$T844r7   c                 ^   |j                   rt        j                  S |j                  rT|t        j                  t        j
                  fv rt        j                  S |t        j                  u rt        j                  S |t        j                  u rt        j                  S |j                         r	 | |       S t        |      }|i|j                  r&t        |j                         rt        j                  S y d|z  j                  r't        j                  |t        j                  z
  z  |z  S y y r   )r?   r   r   r   r   r   rV   r   rp   r   rG   r   r   r   r   )r   r    rH   s      r5   r   z	sinc.eval  s    ;;55L==qzz1#5#566vvuu!###55L'')t9S>""S[[)66M *H*((}}x!&&'89#== )	  r7   c                 ^    | j                   d   }t        |      |z  j                  |||      S r+  )r=   r   r   rP  s        r5   r   zsinc._eval_nseries  s,    IIaLAq''1d33r7   c                      ddl m}  |d|      S )Nr   )jn)r'  r|  )rA   r    r   r|  s       r5   _eval_rewrite_as_jnzsinc._eval_rewrite_as_jn  s    5!Szr7   c                     t        t        |      |z  t        |t        j                        ft        j
                  t        j                  f      S rj   )r)   r   r   r   rV   r   truer   s      r5   r}  zsinc._eval_rewrite_as_sin  s2    #c(3,38155!&&/JJr7   c                     | j                   d   j                  ryt        | j                   d         \  }}|j                  r!t	        |j
                  |j                  g      S |j                  r|j
                  ryy y )Nr   TF)r=   is_infiniter   r?   r   r   
is_nonzeror   r\  s      r5   r_  zsinc._eval_is_zero  sh    99Q<###DIIaL1g<<g00'2D2DEFF>>g00 1>r7   c                 j    | j                   d   j                  s| j                   d   j                  ryy rS  )r=   rT   r  r.  s    r5   r  zsinc._eval_is_real  s,    99Q<((DIIaL,E,E -Fr7   Nre  rf  )rk   rl   rm   rn   r   rp   rq   r   rg  r   r   r}  r}  r_  r  rY  rL   r7   r5   r!  r!  q  sR    3h '')N5 > >.4K $Or7   r!  c                       e Zd ZdZej
                  ej                  ej                  ej                  fZ	e
ed               Ze
ed               Ze
ed               Zy)InverseTrigonometricFunctionz/Base class for inverse trigonometric functions.c                     i t        d      dz  t        dz  t        d      dz  t        dz  dt        d      z  t        dz  t        dt        d      z
  dz        t        dz  t        d      t        dt        d      z
        z  dz  t        dz  t        dt        d      z   dz        t        t        dd      z  t        d      t        dt        d      z         z  dz  t        t        dd      z  t        j                  t        dz  t        dt        d      z
        dz  t        dz  t        t        j                  t        d      dz  z
        t        dz  t        dt        d      z         dz  t        t        dd      z  t        t        j                  t        d      dz  z         t        t        dd      z  t        d      dz
  dz  t        dz  dt        d      z
  dz  t         dz  t        d      dz   dz  t        t        dd      z  t        d      dz  t        d      dz  z
  t        d	z  t        d       dz  t        d      dz  z   t         d	z  t        d      dz
  t        d      z  t        d	z  dt        d      z
  t        d      z  t         d	z  t        d      dz  t        d      dz  z   t        t        dd	      z  dt        d      z   t        d      z  t        t        dd	      z  iS )
Nrs   r   rt   r   ru   rx   rv   rw   r}   )r&   r   r   r   r   rL   r7   r5   _asin_tablez(InverseTrigonometricFunction._asin_table  s   

GAIr!t
GAIr!t
 d1gIr!t
 !d1g+q!2a4	

 GDT!W%%a'A
 !d1g+q!2hq!n#4
 GDT!W%%a'HQN):
 FFBqD
 T!WaA
 $q'!)#$bd
 T!WaHQN!2
 $q'!)#$b!Q&7
 !Wq[!ORU
 a[!ObSV
 !Wq[!ORB/
  GAIQ	!2b5!
" !WHQJa"RCF#
$ !Wq[$q'!2b5a[$q'!B3r6GAIQ	!2hq"o#5a[$q'!2hq"o#5+
 	
r7   c                     t        d      dz  t        dz  dt        d      z  t        dz  t        d      t        dz  t        d      dz
  t        dz  dt        d      z
  t         dz  dt        d      z   t        t        dd      z  t        ddt        d      z  z
        t        dz  t        ddt        d      z  z         t        t        dd      z  t        ddt        d      z  dz  z
        t        dz  t        ddt        d      z  dz  z         t        t        dd      z  dt        d      z
  t        dz  d	t        d      z   t         dz  dt        d      z   t        t        dd      z  iS )
Nrs   rv   r   r   rx   ru   rw   r}   r   r&   r   r   rL   r7   r5   _atan_tablez(InverseTrigonometricFunction._atan_table  s3    GAIr!td1gIr!tGRTGaKAQK"QQKHQN*QtAwYAQtAwYHQN!2QtAwYq[!2b5QtAwYq[!2hq"o#5QKBaL2#b&QKHQO+
 	
r7   c                     i dt        d      z  dz  t        dz  t        d      t        dz  t        ddt        d      z  dz  z         t        dz  dt        t        dd      t        d      dz  z
        z  t        dz  t        ddt        d      z  dz  z
        t        t        dd      z  dt        t        dd      t        d      dz  z         z  t        t        dd      z  dt        dz  t        ddt        d      z  z         t        dz  dt        dt        d      z
        z  t        dz  t        ddt        d      z  z
        t        t        dd      z  dt        dt        d      z         z  t        t        dd      z  dt        d      z   t        dz  t        d      dz
  t        t        dd      z  t        d      dz
   t        t        d	d      z  t        d      t        d      z   t        d
z  t        d      t        d      z
  t        t        dd
      z  t        d      t        d      z
   t        t        dd
      z  S )Nr   rs   rt   ru   r   rx   rv   rw   r}   r  rL   r7   r5   _acsc_tablez(InverseTrigonometricFunction._acsc_table$  sP   

d1gIaKA
GRT
 QtAwYq[!2a4
 d8Aq>DGAI-..1	

 QtAwYq[!2hq!n#4
 d8Aq>DGAI-..8Aq>0A
 r!t
 QtAwYA
 d1tAw;A
 QtAwYHQN!2
 d1tAw;HQN!2
 QKB
 GaKHQO+
 1gkNBxB//
 Gd1gr"u
  Gd1gr(1b/1!
" 1gQ "Xb"%5"5#
 	
r7   N)rk   rl   rm   rn   r   r   r   rV   rp   rq   rh  r   r  r  r  rL   r7   r5   r  r    sw    9eeQ]]AFFA4E4EFN
  
8 
  
& 
  
r7   r  c                       e Zd ZdZddZd Zd Zd Zed        Z	e
ed               Zdd	Zdd
Zd Zd Zd ZeZd Zd Zd Zd ZddZy)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

    c                 f    |dk(  r!dt        d| j                  d   dz  z
        z  S t        | |      Nr   r   r   r&   r=   r	   r   s     r5   r   z
asin.fdiffi  s7    q=T!diilAo-...$T844r7   c                      | j                   | j                   }|j                   | j                   k(  r|j                  d   j                  ryy |j                  S r;   r<   r=   r>   r@   s     r5   rC   zasin._eval_is_rationalo  K    DIItyy!66TYYvvay$$ % == r7   c                 X    | j                         xr | j                  d   j                  S r+  )rU  r=   is_positiver.  s    r5   _eval_is_positivezasin._eval_is_positivew  $    **,I11I1IIr7   c                 X    | j                         xr | j                  d   j                  S r+  )rU  r=   rL  r.  s    r5   _eval_is_negativezasin._eval_is_negativez  r  r7   c                    |j                   r|t        j                  u rt        j                  S |t        j                  u r!t        j                  t        j
                  z  S |t        j                  u r!t        j                  t        j
                  z  S |j                  rt        j                  S |t        j                  u r	t        dz  S |t        j                  u r
t         dz  S |t        j                  u rt        j                  S |j                         r
 | |        S |j                  r| j                         }||v r||   S t        |      }|ddlm} t        j
                   ||      z  S |j                  rt        j                  S t%        |t&              rg|j(                  d   }|j*                  rL|dt        z  z  }|t        kD  r	t        |z
  }|t        dz  kD  r	t        |z
  }|t         dz  k  r
t         |z
  }|S t%        |t,              r1|j(                  d   }|j*                  rt        dz  t/        |      z
  S y y )Nr   r   )asinh)r   r   r   r   r   r4   r?   rV   r   r   r   rp   r   	is_numberr  r6   r   r  r2   r   r=   is_comparabler   r   )r   r    
asin_tabler   r  angs         r5   r   z	asin.eval}  s   ==aee|uu

"))!//99***zz!//11vv!t%s1u!###$$$'')I:==*Jj !#&05C??5>11;;66Mc3((1+C  qt8s(C A:s(C"Q;#)C
c3((1+C  !td3i'' !  r7   c                 ,   | dk  s| dz  dk(  rt         j                  S t        |      }t        |      dk\  r$| dkD  r|d   }|| dz
  dz  z  | | dz
  z  z  |dz  z  S | dz
  dz  }t	        t         j
                  |      }t        |      }||z  || z  z  | z  S r   )r   rV   r   r   r   r   r   r   r   r   r   rg  Rr  s          r5   r   zasin.taylor_term  s     q5AEQJ66M
A>"a'AE"2&!a%!|QAY/144UqL#AFFA.aLs1a4xz!r7   Nc                    | j                   d   }|j                  |d      j                         }|t        j                  u r | j                  |j                  |            S |j                  r|j                  |      S |t        j                   t        j                  t        j                  fv r5| j                  t              j                  |||      j                         S d|dz  z
  j                  r|j                  ||r|nd      }t!        |      j                  r%|j                  rt"         | j                  |      z
  S t!        |      j$                  r$|j$                  rMt"        | j                  |      z
  S | j                  t              j                  |||      j                         S | j                  |      S Nr   r   r   r   r   )r=   r   rI  r   r   r<   rJ  r?   r   rp   r   r#   rQ  rU   rL  rG  r!   r   r  rA   r   r   r   r    rO  ndirs          r5   rQ  zasin._eval_as_leading_term  s]   iilXXa^""$;99S00344::&&q)) 155&!%%!2!233<<$::14d:SZZ\\AI""771dd2D$x##>>32..D%%>>		"--||C(>>qtRV>W^^``yy}r7   c                     ddl m} | j                  d   j                  |d      }|t        j
                  u rgt        dd      }t        t        j
                  |dz  z
        j                  t              j                  |dd|z        }t        j
                  | j                  d   z
  }	|	j                  |      }
|	|
z
  |
z  }|j                  |d      s(|dk(  r |d      S t        dz   |t        |            z   S t        t        j
                  |z         j                  |||      }|j!                         t        |
      z  j#                         }|j!                         j                  ||      j#                         j%                          |||z  |      z   S |t        j&                  u rht        dd      }t        t        j&                  |dz  z         j                  t              j                  |dd|z        }t        j
                  | j                  d   z   }	|	j                  |      }
|	|
z
  |
z  }|j                  |d      s)|dk(  r |d      S t         dz   |t        |            z   S t        t        j
                  |z         j                  |||      }|j!                         t        |
      z  j#                         }|j!                         j                  ||      j#                         j%                          |||z  |      z   S t)        j                  | |||      }|t        j*                  u r|S d|dz  z
  j,                  r| j                  d   j/                  ||r|nd      }t1        |      j,                  r|j,                  r
t         |z
  S |S t1        |      j2                  r|j2                  r	t        |z
  S |S | j                  t              j                  ||||	      S |S 
Nr   Or3  Tpositiver   r   r  r  )sympy.series.orderr  r=   r   r   r   r   r   r   r#   nseriesrJ  is_meromorphicr   r&   r   removeOrU   powsimpr   r   rp   rL  rG  r!   r  rA   r   r   r   r   r  arg0r3  serarg1rd   re   res1resr  s                  r5   r   zasin._eval_nseries  sR   (yy|  A&155=cD)Aquuq!t|$,,S199!Q!DC55499Q<'D$$Q'AAA##Aq) Avqt<2a4!DG*+<<	?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:MM1== cD)Aq}}q!t+,44S9AA!Q!LC55499Q<'D$$Q'AAA##Aq) Avqt=B3q51T!W:+==	?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:MM$$T1=1$$$JaK$$99Q<##Att;D$x####39$ 
 D%%##8O 
 ||C(66q!$T6RR
r7   c                 ,    t         dz  t        |      z
  S r   r   r   r  s      r5   _eval_rewrite_as_acoszasin._eval_rewrite_as_acos	      !td1g~r7   c           
      H    dt        |dt        d|dz  z
        z   z        z  S r  )r   r&   r  s      r5   _eval_rewrite_as_atanzasin._eval_rewrite_as_atan	  s(    aT!ad(^+,---r7   c           	          t         j                   t        t         j                  |z  t        d|dz  z
        z         z  S r  r   r4   r#   r&   r  s      r5   _eval_rewrite_as_logzasin._eval_rewrite_as_log	  s3    AOOA$5QAX$F GGGr7   c           	      H    dt        dt        d|dz  z
        z   |z        z  S r  )r   r&   r   s      r5   _eval_rewrite_as_acotzasin._eval_rewrite_as_acot	  s)    q4CF
++S0111r7   c                 2    t         dz  t        d|z        z
  S r  r   r   r   s      r5   _eval_rewrite_as_aseczasin._eval_rewrite_as_asec	      !td1S5k!!r7   c                     t        d|z        S r  )r   r   s      r5   _eval_rewrite_as_acsczasin._eval_rewrite_as_acsc	      AcE{r7   c                 l    | j                   d   }|j                  xr dt        |      z
  j                  S Nr   r   r=   rT   r_   is_nonnegativerA   r   s     r5   rU  zasin._eval_is_extended_real	  .    IIaL!!Aq3q6z&A&AAr7   c                     t         S r  r  r   s     r5   r  zasin.inverse 	  	     
r7   re  r+  rf  )rk   rl   rm   rn   r   rC   r  r  rg  r   rh  r   r   rQ  r   r  r  r  _eval_rewrite_as_tractabler  r  r  rU  r  rL   r7   r5   r   r   >  s    (T5!JJ 4( 4(l "  "0*X.H "62"Br7   r   c                       e Zd ZdZddZd Zed        Zee	d               Z
ddZd Zd	 Zdd
Zd ZeZd Zd ZddZd Zd Zd Zd Zy)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

    c                 f    |dk(  r!dt        d| j                  d   dz  z
        z  S t        | |      Nr   r   r   r   r  r   s     r5   r   z
acos.fdiffS	  s7    q=d1tyy|Q.///$T844r7   c                      | j                   | j                   }|j                   | j                   k(  r|j                  d   j                  ryy |j                  S r;   r  r@   s     r5   rC   zacos._eval_is_rationalY	  r  r7   c                    |j                   r|t        j                  u rt        j                  S |t        j                  u r!t        j                  t        j                  z  S |t        j
                  u r!t        j
                  t        j                  z  S |j                  r	t        dz  S |t        j                  u rt        j                  S |t        j                  u rt        S |t        j                  u rt        j                  S |j                  r8| j                         }||v rt        dz  ||   z
  S | |v rt        dz  ||    z   S t        |      }|t        dz  t        |      z
  S t!        |t"              r>|j$                  d   }|j&                  r#|dt        z  z  }|t        kD  rdt        z  |z
  }|S t!        |t(              r1|j$                  d   }|j&                  rt        dz  t        |      z
  S y y Nr   r   )r   r   r   r   r4   r   r?   r   r   rV   r   rp   r  r  r6   r   r2   r   r=   r  r   )r   r    r  r   r  s        r5   r   z	acos.evala	  s   ==aee|uu

"zz!//11***))!//99!tvv%	!###$$$==*Jj !tjo--#!tj#...05a4$s)##c3((1+C  qt8B$*C
c3((1+C  !td3i'' !  r7   c                 J   | dk(  r	t         dz  S | dk  s| dz  dk(  rt        j                  S t        |      }t	        |      dk\  r$| dkD  r|d   }|| dz
  dz  z  | | dz
  z  z  |dz  z  S | dz
  dz  }t        t        j                  |      }t        |      }| |z  || z  z  | z  S r   )r   r   rV   r   r   r   r   r   r  s          r5   r   zacos.taylor_term	  s     6a4KUa!eqj66M
A>"a'AE"2&!a%!|QAY/144UqL#AFFA.aLr!tAqDy{"r7   Nc                    | j                   d   }|j                  |d      j                         }|t        j                  u r | j                  |j                  |            S |dk(  r7t        d      t        t        j                  |z
  j                  |            z  S |t        j                   t        j                  fv r'| j                  t              j                  |||      S d|dz  z
  j                  r|j                  ||r|nd      }t        |      j                  r'|j                  rdt         z  | j                  |      z
  S t        |      j"                  r|j"                  rG| j                  |       S | j                  t              j                  |||      j%                         S | j                  |      S Nr   r   r   r  )r=   r   rI  r   r   r<   rJ  r&   r   rp   r   r#   rQ  rL  rG  r!   r   r  rU   r  s          r5   rQ  zacos._eval_as_leading_term	  sa   iilXXa^""$;99S00344774 = =a @AAA155&!++,,<<$::14d:SSAI""771dd2D$x##>>R4$))B-//D%%>> IIbM>)||C(>>qtRV>W^^``yy}r7   c                 l    | j                   d   }|j                  xr dt        |      z
  j                  S r  r  r  s     r5   rU  zacos._eval_is_extended_real	  r  r7   c                 "    | j                         S rj   )rU  r.  s    r5   _eval_is_nonnegativezacos._eval_is_nonnegative	  s    **,,r7   c                    ddl m} | j                  d   j                  |d      }|t        j
                  u r]t        dd      }t        t        j
                  |dz  z
        j                  t              j                  |dd|z        }t        j
                  | j                  d   z
  }	|	j                  |      }
|	|
z
  |
z  }|j                  |d      s|dk(  r |d      S  |t        |            S t        t        j
                  |z         j                  |||      }|j                         t        |
      z  j!                         }|j                         j                  ||      j!                         j#                          |||z  |      z   S |t        j$                  u rdt        dd      }t        t        j$                  |dz  z         j                  t              j                  |dd|z        }t        j
                  | j                  d   z   }	|	j                  |      }
|	|
z
  |
z  }|j                  |d      s%|dk(  r |d      S t&         |t        |            z   S t        t        j
                  |z         j                  |||      }|j                         t        |
      z  j!                         }|j                         j                  ||      j!                         j#                          |||z  |      z   S t)        j                  | |||      }|t        j*                  u r|S d|dz  z
  j,                  r| j                  d   j/                  ||r|nd      }t1        |      j,                  r|j,                  rdt&        z  |z
  S |S t1        |      j2                  r|j2                  r| S |S | j                  t              j                  ||||	      S |S r  )r  r  r=   r   r   r   r   r   r   r#   r  rJ  r  r&   r   r  rU   r  r   r   r   rp   rL  rG  r!   r  r  s                  r5   r   zacos._eval_nseries	  sB   (yy|  A&155=cD)Aquuq!t|$,,S199!Q!DC55499Q<'D$$Q'AAA##Aq) Avqt51T!W:5	?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:MM1== cD)Aq}}q!t+,44S9AA!Q!LC55499Q<'D$$Q'AAA##Aq) Avqt:2$q'
?:	?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:MM$$T1=1$$$JaK$$99Q<##Att;D$x####R4#:% 
 D%%##4K 
 ||C(66q!$T6RR
r7   c           
          t         dz  t        j                  t        t        j                  |z  t	        d|dz  z
        z         z  z   S r  r   r   r4   r#   r&   r  s      r5   r  zacos._eval_rewrite_as_log	  s@    !taoo!DQTN234 4 	4r7   c                 ,    t         dz  t        |      z
  S r   r   r   r  s      r5   _eval_rewrite_as_asinzacos._eval_rewrite_as_asin	  r  r7   c           	          t        t        d|dz  z
        |z        t        dz  d|t        d|dz  z        z  z
  z  z   S r  )r   r&   r   r  s      r5   r  zacos._eval_rewrite_as_atan	  sA    DQTN1$%AAd1QT6lN0B(CCCr7   c                     t         S r  rY  r   s     r5   r  zacos.inverse	  r  r7   c           
      \    t         dz  dt        dt        d|dz  z
        z   |z        z  z
  S r  )r   r   r&   r   s      r5   r  zacos._eval_rewrite_as_acot	  s2    !taa$q36z"22C78888r7   c                     t        d|z        S r  )r   r   s      r5   r  zacos._eval_rewrite_as_asec	  r  r7   c                 2    t         dz  t        d|z        z
  S r  r   r   r   s      r5   r  zacos._eval_rewrite_as_acsc
  r  r7   c                     | j                   d   }| j                  | j                   d   j                               }|j                  du r|S |j                  r"|dz   j                  r|dz
  j
                  r|S y y y Nr   Fr   )r=   r<   r-  rT   r  is_nonpositive)rA   r  rs      r5   r/  zacos._eval_conjugate
  st    IIaLIIdiil,,./&HQU$:$:A?U?UH @V$:r7   re  r+  rf  )rk   rl   rm   rn   r   rC   rg  r   rh  r   r   rQ  rU  r  r   r  r  r  r  r  r  r  r  r/  rL   r7   r5   r   r   '	  s    )V5! )( )(V #  # .B-*X4 "6D9"r7   r   c                        e Zd ZU dZee   ed<   ej                  ej                   fZ	ddZ
d Zd Zd Zd Zd Zed	        Zeed
               ZddZddZd ZeZ fdZddZd Zd Zd Zd Zd Z x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

    r=   c                 T    |dk(  rdd| j                   d   dz  z   z  S t        | |      r  r=   r	   r   s     r5   r   z
atan.fdiff8
  s2    q=a$))A,/)**$T844r7   c                      | j                   | j                   }|j                   | j                   k(  r|j                  d   j                  ryy |j                  S r;   r  r@   s     r5   rC   zatan._eval_is_rational>
  r  r7   c                 4    | j                   d   j                  S r+  )r=   is_extended_positiver.  s    r5   r  zatan._eval_is_positiveF
  s    yy|000r7   c                 4    | j                   d   j                  S r+  )r=   is_extended_nonnegativer.  s    r5   r  zatan._eval_is_nonnegativeI
  s    yy|333r7   c                 4    | j                   d   j                  S r+  )r=   r?   r.  s    r5   r_  zatan._eval_is_zeroL
  s    yy|###r7   c                 4    | j                   d   j                  S r+  rT  r.  s    r5   r  zatan._eval_is_realO
  r  r7   c                 (   |j                   r|t        j                  u rt        j                  S |t        j                  u r	t        dz  S |t        j
                  u r
t         dz  S |j                  rt        j                  S |t        j                  u r	t        dz  S |t        j                  u r
t         dz  S |t        j                  u rddlm}  |t         dz  t        dz        S |j                         r
 | |        S |j                  r| j                         }||v r||   S t!        |      }|ddlm} t        j&                   ||      z  S |j                  rt        j                  S t)        |t*              r;|j,                  d   }|j.                  r |t        z  }|t        dz  kD  r	|t        z  }|S t)        |t0              rH|j,                  d   }|j.                  r,t        dz  t3        |      z
  }|t        dz  kD  r	|t        z  }|S y y )Nr   rt   r   r   )atanh)r   r   r   r   r   r   r?   rV   r   r   rp   r   r   r   r  r  r6   r   r  r4   r2   r  r=   r  r  r   )r   r    r   
atan_tabler   r  r  s          r5   r   z	atan.evalR
  s   ==aee|uu

"!t***s1uvv!t%s1u!###Es1ubd++'')I:==*Jj !#&05C??5>11;;66Mc3((1+C  r	A:2IC
c3((1+C  dT#Y&A:2IC
	 !  r7   c                     | dk  s| dz  dk(  rt         j                  S t        |      }t         j                  | dz
  dz  z  || z  z  | z  S r  )r   rV   r   r   r   r   r   s      r5   r   zatan.taylor_term
  sL     q5AEQJ66M
A==AEA:.q!t3A55r7   c                    | j                   d   }|j                  |d      j                         }|t        j                  u r | j                  |j                  |            S |j                  r|j                  |      S |t        j                   t        j                  t        j                  fv r5| j                  t              j                  |||      j                         S d|dz  z   j                  r|j                  ||r|nd      }t!        |      j                  r-t#        |      j$                  r| j                  |      t&        z
  S t!        |      j$                  r-t#        |      j                  rM| j                  |      t&        z   S | j                  t              j                  |||      j                         S | j                  |      S r  )r=   r   rI  r   r   r<   rJ  r?   r4   rp   r   r#   rQ  rU   rL  rG  r"   r!   r  r   r  s          r5   rQ  zatan._eval_as_leading_term
  sf   iilXXa^""$;99S00344::&&q))1??"AOOQ5F5FGG<<$::14d:SZZ\\AI""771dd2D$x##b6%%99R=2--D%%b6%%99R=2--||C(>>qtRV>W^^``yy}r7   c                    | j                   d   j                  |d      }|t        j                  t        j                  t        j                  z  fv r(| j                  t              j                  ||||      S t        j                  | |||      }| j                   d   j                  ||r|nd      }|t        j                  u rt        |      dkD  r	|t        z
  S |S d|dz  z   j                  rt        |      j                  r t        |      j                  r	|t        z
  S |S t        |      j                  r t        |      j                  r	|t        z   S |S | j                  t              j                  ||||      S |S Nr   r  r  r   r   )r=   r   r   r4   r   r   r#   r   r   rG  rp   r"   r   rL  r!   r  rA   r   r   r   r   r  r  r  s           r5   r   zatan._eval_nseries
  sK   yy|  A& AOOQ]]1??%BCC<<$221ad2NN$$T1=yy|44Q71$$$$x!|RxJaK$$$x##d8''8O 
 D%%d8''8O 
 ||C(66q!$T6RR
r7   c                     t         j                  dz  t        t         j                  t         j                  |z  z
        t        t         j                  t         j                  |z  z         z
  z  S r   )r   r4   r#   r   r  s      r5   r  zatan._eval_rewrite_as_log
  sP    q #aeeaooa.?&?"@!%%!//!++,#- . 	.r7   c                     |d   t         j                  t         j                  fv r6t        dz  t	        d| j
                  d   z        z
  j                  |||      S t        | !  ||||      S r  )	r   r   r   r   r   r=   r   super_eval_aseriesrA   r   args0r   r   	__class__s        r5   r  zatan._eval_aseries
  sc    8

A$6$677qD4$))A,//>>q!TJJ7(E1d;;r7   c                     t         S r  r  r   s     r5   r  zatan.inverse
  r  r7   c           
      t    t        |dz        |z  t        dz  t        dt        d|dz  z         z        z
  z  S r  r&   r   r   r   s      r5   r  zatan._eval_rewrite_as_asin
  s:    CF|CAQtAQJ/?-?(@!@AAr7   c           	      `    t        |dz        |z  t        dt        d|dz  z         z        z  S r  r&   r   r   s      r5   r  zatan._eval_rewrite_as_acos
  s1    CF|CQtAQJ'7%7 888r7   c                     t        d|z        S r  r  r   s      r5   r  zatan._eval_rewrite_as_acot
  r  r7   c                 Z    t        |dz        |z  t        t        d|dz  z               z  S r  r&   r   r   s      r5   r  zatan._eval_rewrite_as_asec
  s,    CF|CT!c1f*%5 666r7   c           	      n    t        |dz        |z  t        dz  t        t        d|dz  z               z
  z  S r  r&   r   r   r   s      r5   r  zatan._eval_rewrite_as_acsc
  s5    CF|CAT!c1f*-=(>!>??r7   re  r+  rf  )!rk   rl   rm   rn   tTupler   rQ  r   r4   rq   r   rC   r  r  r_  r  rg  r   rh  r   r   rQ  r   r  r  r  r  r  r  r  r  r  __classcell__r  s   @r5   r   r   
  s    $L ,oo'78N5!14$- 2 2h 6  6.2. "6<B97@r7   r   c                        e Zd ZdZej
                  ej
                   fZddZd Zd Z	d Z
d Zed        Zeed               Zdd	Zdd
Z fdZd ZeZddZd Zd Zd Zd Zd Z x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

    c                 T    |dk(  rdd| j                   d   dz  z   z  S t        | |      r  r  r   s     r5   r   z
acot.fdiff  s2    q=q499Q<?*++$T844r7   c                      | j                   | j                   }|j                   | j                   k(  r|j                  d   j                  ryy |j                  S r;   r  r@   s     r5   rC   zacot._eval_is_rational  r  r7   c                 4    | j                   d   j                  S r+  )r=   r  r.  s    r5   r  zacot._eval_is_positive  s    yy|***r7   c                 4    | j                   d   j                  S r+  )r=   rL  r.  s    r5   r  zacot._eval_is_negative   s    yy|'''r7   c                 4    | j                   d   j                  S r+  rT  r.  s    r5   rU  zacot._eval_is_extended_real#  r  r7   c                 j   |j                   r|t        j                  u rt        j                  S |t        j                  u rt        j                  S |t        j
                  u rt        j                  S |j                  r	t        dz  S |t        j                  u r	t        dz  S |t        j                  u r
t         dz  S |t        j                  u rt        j                  S |j                         r
 | |        S |j                  r:| j                         }||v r&t        dz  ||   z
  }|t        dz  kD  r	|t        z  }|S t        |      }| ddlm} t        j"                    ||      z  S |j                  rt        t        j$                  z  S t'        |t(              r;|j*                  d   }|j,                  r |t        z  }|t        dz  kD  r	|t        z  }|S t'        |t.              rH|j*                  d   }|j,                  r,t        dz  t1        |      z
  }|t        dz  kD  r	|t        z  }|S y y )Nr   rt   r   )acoth)r   r   r   r   rV   r   r?   r   r   r   rp   r   r  r  r6   r   r   r4   r   r2   r  r=   r  r  r   )r   r    r  r  r   r   s         r5   r   z	acot.eval&  s   ==aee|uu

"vv***vv1u!t%s1u!###66M'')I:==*Jj dZ_,A:2IC
05COO#E'N22;;aff9c3((1+C  r	A:2IC
c3((1+C  dT#Y&A:2IC
	 !  r7   c                     | dk(  r	t         dz  S | dk  s| dz  dk(  rt        j                  S t        |      }t        j                  | dz   dz  z  || z  z  | z  S r  )r   r   rV   r   r   r   s      r5   r   zacot.taylor_term\  s\     6a4KUa!eqj66M
A==AEA:.q!t3A55r7   c                    | j                   d   }|j                  |d      j                         }|t        j                  u r | j                  |j                  |            S |t        j                  u rd|z  j                  |      S |t        j                   t        j                  t        j                  fv r5| j                  t              j                  |||      j                         S |j                  rd|dz  z   j                  r|j!                  ||r|nd      }t#        |      j                  r-t%        |      j                  r| j                  |      t&        z   S t#        |      j(                  r-t%        |      j(                  rM| j                  |      t&        z
  S | j                  t              j                  |||      j                         S | j                  |      S )Nr   r   r  r   )r=   r   rI  r   r   r<   rJ  rp   r4   rV   r   r#   rQ  rU   r  r  rG  r"   r!   r   rL  r  s          r5   rQ  zacot._eval_as_leading_termg  su   iilXXa^""$;99S00344"""cE**1--1??"AOOQVV<<<<$::14d:SZZ\\??BE	66771dd2D$x##b6%%99R=2--D%%b6%%99R=2--||C(>>qtRV>W^^``yy}r7   c                 D   | j                   d   j                  |d      }|t        j                  t        j                  t        j                  z  fv r(| j                  t              j                  ||||      S t        j                  | |||      }|t        j                  u r|S | j                   d   j                  ||r|nd      }|j                  rt        |      dk  r	|t        z
  S |S |j                  rd|dz  z   j                  rt        |      j                  r t!        |      j                  r	|t        z   S |S t        |      j"                  r t!        |      j"                  r	|t        z
  S |S | j                  t              j                  ||||      S |S r  )r=   r   r   r4   r   r   r#   r   r   rp   rG  r?   r"   r   r  r  r!   rL  r  s           r5   r   zacot._eval_nseries~  s_   yy|  A& AOOQ]]1??%BCC<<$221ad2NN$$T1=1$$$Jyy|44Q7<<$x!|RxJ!dAg+!:!:$x##d8''8O 
 D%%d8''8O 
 ||C(66q!$T6RR
r7   c                     |d   t         j                  t         j                  fv r,t        d| j                  d   z        j                  |||      S t        |   ||||      S r  )r   r   r   r   r=   r   r  r  r	  s        r5   r  zacot._eval_aseries  sZ    8

A$6$677$))A,'55aDAA7(E1d;;r7   c                     t         j                  dz  t        dt         j                  |z  z
        t        dt         j                  |z  z         z
  z  S r  )r   r4   r#   r  s      r5   r  zacot._eval_rewrite_as_log  sH    q #a!//!*;&;"<!aooa''(#) * 	*r7   c                     t         S r  r  r   s     r5   r  zacot.inverse  r  r7   c           	          |t        d|dz  z        z  t        dz  t        t        |dz         t        |dz   dz
        z        z
  z  S r  r  r   s      r5   r  zacot._eval_rewrite_as_asin  sP    D36N"AT36']4a!+<<==? 	@r7   c                     |t        d|dz  z        z  t        t        |dz         t        |dz   dz
        z        z  S r  r  r   s      r5   r  zacot._eval_rewrite_as_acos  sA    4#q&>!$tS!VG}T36'A+5F'F"GGGr7   c                     t        d|z        S r  r  r   s      r5   r  zacot._eval_rewrite_as_atan  r  r7   c                 l    |t        d|dz  z        z  t        t        d|dz  z   |dz  z              z  S r  r  r   s      r5   r  zacot._eval_rewrite_as_asec  s9    4#q&>!$tQaZa,?'@"AAAr7   c           	          |t        d|dz  z        z  t        dz  t        t        d|dz  z   |dz  z              z
  z  S r  r  r   s      r5   r  zacot._eval_rewrite_as_acsc  sB    4#q&>!2a4$tQaZa4G/H*I#IJJr7   re  r+  rf  )rk   rl   rm   rn   r   r4   rq   r   rC   r  r  rU  rg  r   rh  r   r   rQ  r   r  r  r  r  r  r  r  r  r  r  r  s   @r5   r   r   
  s    )T oo'78N5!+(- 3 3j 6  6.6<* "6@HBKr7   r   c                       e Zd ZdZed        ZddZddZee	d               Z
ddZddZd	 Zd
 ZeZd Zd Zd Zd Zd Zy)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                 P   |j                   rt        j                  S |j                  r\|t        j                  u rt        j                  S |t        j
                  u rt        j                  S |t        j                  u rt        S |t        j                  t        j                  t        j                  fv r	t        dz  S |j                  r8| j                         }||v rt        dz  ||   z
  S | |v rt        dz  ||    z   S |j                  r	t        dz  S t        |t              r>|j                   d   }|j"                  r#|dt        z  z  }|t        kD  rdt        z  |z
  }|S t        |t$              r1|j                   d   }|j"                  rt        dz  t'        |      z
  S y y r  )r?   r   rp   r   r   r   rV   r   r   r   r   r  r  r  r2   r  r=   r  r  r   r   r    
acsc_tabler  s       r5   r   z	asec.eval  s^   ;;$$$==aee|uuvv%	1::q1113D3DEEa4K==*Jj !tjo--#!tj#...??a4Kc3((1+C  qt8B$*C
c3((1+C  !td3i'' !  r7   c                     |dk(  r7d| j                   d   dz  t        dd| j                   d   dz  z  z
        z  z  S t        | |      r  r=   r&   r	   r   s     r5   r   z
asec.fdiff  sM    q=diilAod1q1q/@+@&AABB$T844r7   c                     t         S r  r  r   s     r5   r  zasec.inverse$  r  r7   c                    | dk(  rt         j                  t        d|z        z  S | dk  s| dz  dk(  rt         j                  S t	        |      }t        |      dkD  r*| dkD  r%|d   }|| dz
  | dz
  z  z  |dz  z  d| dz  dz  z  z  S | dz  }t        t         j                  |      | z  }t        |      | z  dz  | z  dz  }t         j                   |z  |z  || z  z  dz  S Nr   r   r   r   rt   )	r   r4   r#   rV   r   r   r   r   r   r  s          r5   r   zasec.taylor_term*  s     6??3q1u:--Ua!eqj66M
A>"Q&1q5"2&QUQqSM*QT111qy=AAF#AFFA.!3aL1$)A-2'!+a/!Q$6::r7   Nc                    | j                   d   }|j                  |d      j                         }|t        j                  u r | j                  |j                  |            S |dk(  r7t        d      t        |t        j                  z
  j                  |            z  S |t        j                   t        j                  fv r'| j                  t              j                  |||      S |j                  rd|dz  z
  j                  r|j                  ||r|nd      }t!        |      j"                  r|j                  r| j                  |       S t!        |      j                  r'|j"                  rPdt$        z  | j                  |      z
  S | j                  t              j                  |||      j'                         S | j                  |      S r  )r=   r   rI  r   r   r<   rJ  r&   r   rV   r   r#   rQ  r  r  rG  r!   rL  r   rU   r  s          r5   rQ  zasec._eval_as_leading_term<  se   iilXXa^""$;99S00344774quu = =a @AAA155&!&&!!<<$::14d:SS::1r1u911771dd2D$x##>> IIbM>)D%%>>R4$))B-//||C(>>qtRV>W^^``yy}r7   c                 &   ddl m} | j                  d   j                  |d      }|t        j
                  u r-t        dd      }t        t        j
                  |dz  z         j                  t              j                  |dd|z        }t        j                  | j                  d   z   }	|	j                  |      }
|	|
z
  |
z  }t        t        j
                  |z         j                  |||      }|j                         t        |
      z  j!                         }|j                         j                  ||      j!                         j#                          |||z  |      z   S |t        j                  u r-t        dd      }t        t        j                  |dz  z
        j                  t              j                  |dd|z        }t        j                  | j                  d   z
  }	|	j                  |      }
|	|
z
  |
z  }t        t        j
                  |z         j                  |||      }|j                         t        |
      z  j!                         }|j                         j                  ||      j!                         j#                          |||z  |      z   S t%        j                  | |||      }|t        j&                  u r|S |j(                  rd|dz  z
  j*                  r| j                  d   j-                  ||r|nd      }t/        |      j0                  r|j*                  r| S |S t/        |      j*                  r|j0                  rdt2        z  |z
  S |S | j                  t              j                  ||||	      S |S 
Nr   r  r3  Tr  r   r  r   r  )r  r  r=   r   r   r   r   r   r   r#   r  r   rJ  r&   r   r  rU   r  r   rp   r  r  rG  r!   rL  r   r  s                  r5   r   zasec._eval_nseriesS  s   (yy|  A&155=cD)Aquuq!t|$,,S199!Q!DC==499Q</D$$Q'AAA	?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:MM1== cD)Aq}}q!t+,44S9AA!Q!LC==499Q</D$$Q'AAA	?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:MM$$T1=1$$$J<<Qq[5599Q<##Att;D$x####4K 
 D%%##R4#:% 
 ||C(66q!$T6RR
r7   c                     | j                   d   }|j                  du ryt        |dz
  j                  | dz
  j                  f      S r  )r=   rT   r   r  r  s     r5   rU  zasec._eval_is_extended_real{  sF    IIaL&!a%//1"q&1H1HIJJr7   c                     t         dz  t        j                  t        t        j                  |z  t	        dd|dz  z  z
        z         z  z   S r  r  r   s      r5   r  zasec._eval_rewrite_as_log  s?    !taooc!//#*=Q3PQ6\@R*R&SSSSr7   c                 2    t         dz  t        d|z        z
  S r  r  r   s      r5   r  zasec._eval_rewrite_as_asin  r  r7   c                     t        d|z        S r  )r   r   s      r5   r  zasec._eval_rewrite_as_acos  r  r7   c                 ~    t        |dz        |z  }t        dz  d|z
  z  |t        t        |dz  dz
              z  z   S r  r&   r   r   rA   r   r   sx2xs       r5   r  zasec._eval_rewrite_as_atan  s@    AqDz!|!tQXd41q>&:!:::r7   c           	          t        |dz        |z  }t        dz  d|z
  z  |t        dt        |dz  dz
        z        z  z   S r  r&   r   r   r>  s       r5   r  zasec._eval_rewrite_as_acot  sE    AqDz!|!tQXd1T!Q$(^+;&<!<<<r7   c                 ,    t         dz  t        |      z
  S r   r  r   s      r5   r  zasec._eval_rewrite_as_acsc      !td3ir7   re  r+  rf  )rk   rl   rm   rn   rg  r   r   r  rh  r   r   rQ  r   rU  r  r  r  r  r  r  r  rL   r7   r5   r   r     s{    9v #( #(J5 ;  ; .&PKT "6";= r7   r   c                       e Zd ZdZed        ZddZddZee	d               Z
ddZddZd	 ZeZd
 Zd Zd Zd Zd Zy)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                    |j                   rt        j                  S |j                  rY|t        j                  u rt        j                  S |t        j
                  u r	t        dz  S |t        j                  u r
t         dz  S |t        j                  t        j                  t        j                  fv rt        j                  S |j                         r
 | |        S |j                  rt        j                  S |j                  r| j                         }||v r||   S t        |t               rg|j"                  d   }|j$                  rL|dt        z  z  }|t        kD  r	t        |z
  }|t        dz  kD  r	t        |z
  }|t         dz  k  r
t         |z
  }|S t        |t&              r1|j"                  d   }|j$                  rt        dz  t)        |      z
  S y y r  )r?   r   rp   r   r   r   r   r   r   r   rV   r   r  r  r  r2   r  r=   r  r  r   r.  s       r5   r   z	acsc.eval  s   ;;$$$==aee|uu!t%s1u1::q1113D3DEE66M'')I:??66M==*Jj !#&c3((1+C  qt8s(C A:s(C"Q;#)C
c3((1+C  !td3i'' !  r7   c                     |dk(  r7d| j                   d   dz  t        dd| j                   d   dz  z  z
        z  z  S t        | |      r  r1  r   s     r5   r   z
acsc.fdiff  sM    q=tyy|QtA$))A,/0A,A'BBCC$T844r7   c                     t         S r  r  r   s     r5   r  zacsc.inverse  r  r7   c                    | dk(  rCt         dz  t        j                  t        d      z  z
  t        j                  t        |      z  z   S | dk  s| dz  dk(  rt        j                  S t        |      }t        |      dkD  r*| dkD  r%|d   }|| dz
  | dz
  z  z  |dz  z  d| dz  dz  z  z  S | dz  }t        t        j                  |      | z  }t        |      | z  dz  | z  dz  }t        j                  |z  |z  || z  z  dz  S r4  )
r   r   r4   r#   rV   r   r   r   r   r   r  s          r5   r   zacsc.taylor_term  s    6a4!//#a&001??3q63IIIUa!eqj66M
A>"Q&1q5"2&QUQqSM*QT111qy=AAF#AFFA.!3aL1$)A-2*Q.A599r7   Nc                    | j                   d   }|j                  |d      j                         }|t        j                  u r | j                  |j                  |            S |t        j                   t        j                  t        j                  fv r5| j                  t              j                  |||      j                         S |t        j                  u rd|z  j                  |      S |j                  rd|dz  z
  j                  r|j!                  ||r|nd      }t#        |      j$                  r$|j                  rt&        | j                  |      z
  S t#        |      j                  r%|j$                  rNt&         | j                  |      z
  S | j                  t              j                  |||      j                         S | j                  |      S r  )r=   r   rI  r   r   r<   rJ  r   rV   r   r#   rQ  rU   rp   r  r  rG  r!   rL  r   r  s          r5   rQ  zacsc._eval_as_leading_term  sj   iilXXa^""$;99S00344155&!%%((<<$::14d:SZZ\\"""cE**1--::1r1u911771dd2D$x##>>		"--D%%>>32..||C(>>qtRV>W^^``yy}r7   c                 .   ddl m} | j                  d   j                  |d      }|t        j
                  u r-t        dd      }t        t        j
                  |dz  z         j                  t              j                  |dd|z        }t        j                  | j                  d   z   }	|	j                  |      }
|	|
z
  |
z  }t        t        j
                  |z         j                  |||      }|j                         t        |
      z  j!                         }|j                         j                  ||      j!                         j#                          |||z  |      z   S |t        j                  u r-t        dd      }t        t        j                  |dz  z
        j                  t              j                  |dd|z        }t        j                  | j                  d   z
  }	|	j                  |      }
|	|
z
  |
z  }t        t        j
                  |z         j                  |||      }|j                         t        |
      z  j!                         }|j                         j                  ||      j!                         j#                          |||z  |      z   S t%        j                  | |||      }|t        j&                  u r|S |j(                  rd|dz  z
  j*                  r| j                  d   j-                  ||r|nd      }t/        |      j0                  r|j*                  r	t2        |z
  S |S t/        |      j*                  r|j0                  r
t2         |z
  S |S | j                  t              j                  ||||	      S |S r7  )r  r  r=   r   r   r   r   r   r   r#   r  r   rJ  r&   r   r  rU   r  r   rp   r  r  rG  r!   rL  r   r  s                  r5   r   zacsc._eval_nseries%  s   (yy|  A&155=cD)Aquuq!t|$,,S199!Q!DC==499Q</D$$Q'AAA	?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:MM1== cD)Aq}}q!t+,44S9AA!Q!LC==499Q</D$$Q'AAA	?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:MM$$T1=1$$$J<<Qq[5599Q<##Att;D$x####8O 
 D%%##39$ 
 ||C(66q!$T6RR
r7   c           
          t         j                   t        t         j                  |z  t        dd|dz  z  z
        z         z  S r  r  r   s      r5   r  zacsc._eval_rewrite_as_logM  s8    AOOC$7$q1S!V8|:L$L MMMr7   c                     t        d|z        S r  )r   r   s      r5   r  zacsc._eval_rewrite_as_asinR  r  r7   c                 2    t         dz  t        d|z        z
  S r  r  r   s      r5   r  zacsc._eval_rewrite_as_acosU  r  r7   c                 n    t        |dz        |z  t        dz  t        t        |dz  dz
              z
  z  S r  r=  r  s      r5   r  zacsc._eval_rewrite_as_atanX  s3    AqDz!|RTDadQh$8899r7   c           	      t    t        |dz        |z  t        dz  t        dt        |dz  dz
        z        z
  z  S r  rA  r   s      r5   r  zacsc._eval_rewrite_as_acot[  s:    CF|CAQtCFQJ/?-?(@!@AAr7   c                 ,    t         dz  t        |      z
  S r   r  r   s      r5   r  zacsc._eval_rewrite_as_asec^  rC  r7   re  r+  rf  )rk   rl   rm   rn   rg  r   r   r  rh  r   r   rQ  r   r  r  r  r  r  r  r  rL   r7   r5   r   r     sv    (T *( *(X5 :  : .&PN "6":B r7   r   c                   V     e Zd ZdZed        Zd Zd Zd Zd Z	d Z
d Z fd	Z x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           	         ddl m} |t        j                  u r4|j                  rt
        S dt
        z   |t        |            z  t
        z
  S |t        j                  u rt        j                  S |j                  r:|j                  r.|j                  r"|j                  rt        |      }t        |      }|j                  r|j                  r|j                  rt        ||z        S |j                  rB|j                  rt        ||z        t
        z
  S |j                   rht        ||z        t
        z   S |j                  rG|j                  r	t
        dz  S |j                  r
t
         dz  S |j                  rt        j"                  S |j                  rs|j$                  r t
        t        j&                   ||      z
  z  S |j                  r;t)        t
        t        |      dk  fdt+        |d      ft        j"                  df      S |j                  rS|j                  rFt        j,                   t/        |t        j,                  |z  z   t1        |dz  |dz  z         z        z  S y y )Nr   )	Heavisider   T)'sympy.functions.special.delta_functionsrS  r   r   r?   r   r"   r   rV   r  r  r!   rT   r  r   rL  r  r   is_extended_nonzeror   r)   r   r4   r#   r&   )r   r   r   rS  s       r5   r   z
atan2.eval  s   E"""yy	R42a5)*R//!**_66M^^1;;1;;1A1A!"4"4}}AaCy ==!9r>)%%!9r>)==a4K]]3q5LYY55L99$$1559Q</00{{ "beai"#R1X"#%%0 0 ;;1;;OO#CQ__Q&&QTAqD[(99%; ; ; ';r7   c           	          t         j                   t        |t         j                  |z  z   t        |dz  |dz  z         z        z  S r   r  rA   r   r   r   s       r5   r  zatan2._eval_rewrite_as_log  s=    Q):%:DA1<M$M NNNr7   c                     t        dt        ||t        |dz  |dz  z         z   z        z  t        |d      ft        t        |      dk  fdt        |d      ft        j                  df      S )Nr   r   T)r)   r   r&   r   r   r"   r   r   rW  s       r5   r  zatan2._eval_rewrite_as_atan  sh    !DAQTAqD[(9$9!:;;R1XFbeaiR1X%%( 	(r7   c           
      V   |j                   r+|j                   rt        ||t        j                  z  z         S |t        j                  |z  z   }|dz  |dz  z   }t        |t	        |      z        t        j                  t        t        |      t	        t        |            z        z  z
  S r   )rT   arg_fr   r4   r&   r#   r_   )rA   r   r   r   r   r   s         r5   _eval_rewrite_as_argzatan2._eval_rewrite_as_arg  s    !"4"4Qq..//!!qD1a4KQtAwY!//#c!fT#a&\6I2J"JJJr7   c                 j    | j                   d   j                  xr | j                   d   j                  S r  rT  r.  s    r5   rU  zatan2._eval_is_extended_real  s)    yy|,,N11N1NNr7   c                     | j                  | j                  d   j                         | j                  d   j                               S r  r,  r.  s    r5   r/  zatan2._eval_conjugate  s5    yy1//1499Q<3I3I3KLLr7   c                     | j                   \  }}|dk(  r||dz  |dz  z   z  S |dk(  r| |dz  |dz  z   z  S t        | |      r  r  )rA   r   r   r   s       r5   r   zatan2.fdiff  sY    yy1q=adQTk?"]2q!tad{##$T844r7   c                 t    | j                   \  }}|j                  r|j                  rt        |   |      S y y rj   )r=   rT   r  _eval_evalf)rA   precr   r   r  s       r5   r`  zatan2._eval_evalf  s9    yy1!"4"47&t,, #5r7   )rk   rl   rm   rn   rg  r   r  r  r[  rU  r/  r   r`  r  r  s   @r5   r   r   b  sK    dL %; %;NO(KOM	5- -r7   r   re  )_typingr   r  r   tUnionsympy.core.addr   sympy.core.cacher   sympy.core.exprr   sympy.core.functionr   r	   r
   r   sympy.core.logicr   r   r   r   sympy.core.modr   sympy.core.numbersr   r   r   r   r   sympy.core.relationalr   r   sympy.core.singletonr   sympy.core.symbolr   r   sympy.core.sympifyr   (sympy.functions.combinatorial.factorialsr   r   %sympy.functions.combinatorial.numbersr   r   r  r    rZ  r!   r"   &sympy.functions.elementary.exponentialr#   r$   #sympy.functions.elementary.integersr%   (sympy.functions.elementary.miscellaneousr&   r'   r(   $sympy.functions.elementary.piecewiser)   1sympy.functions.elementary._trigonometric_specialr*   r+   r,   sympy.logic.boolalgr-   sympy.ntheoryr.   sympy.polys.specialpolysr/   sympy.utilities.iterablesr0   r6   r9   r   r   r   rG   r   r   r  r  r'  r  r  r!  r  r   r   r   r   r   r   r   rL   r7   r5   <module>rz     s   3  $   S S F F  I I ( " + & O B E E ; 5 C C :) ) # # 3 63AKH AKH 	 	""JH4 H HVD$J-? HVs
 sl	g1
 g1TQ
 Qh
z
 zz	uO&; uOpi7
) i7Xf7
) f7Rt$8 t$xN
8 N
bf' fRc' cLR@' R@jWK' WKtY ' Y xG ' G Ts-( s-r7   