
    g             	          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 ZLdDd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 d0 d1eS          ZU G d2 d3e          ZV G d4 d5e          ZW G d6 d7eW          ZX G d8 d9eW          ZY G d: d;eW          ZZ G d< d=eW          Z[ G d> d?eW          Z\ G d@ dAeW          Z] G dB dCeW          Z^d"S )E    )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                 n    t          | t                    rdS |                     t          j                  S )z; Helper to extract symbolic coefficient for imaginary unit N)
isinstancer   as_coefficientr   ImaginaryUnit)r    s    d/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/functions/elementary/trigonometric.py_imaginary_unit_as_coefficientr6   !   s/    #u 3t!!!/222    c                   J    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dS )TrigonometricFunctionz(Base class for trigonometric functions. Tc                      | j         | j         }|j         | j         k    r7|j        d         j        r!t          |j        d         j                  rdS d S d S |j        S Nr   F)funcargsis_rationalr   is_zeroselfss     r5   _eval_is_rationalz'TrigonometricFunction._eval_is_rational3   sm    DIty!6TYvay$ 16!93D)E)E u    = r7   c                     | j         | j         }|j         | j         k    r\t          | j        d         j                  r| j        d         j        rdS t          | j        d                   }|	|j        rdS d S d S |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    DIty!6TY1-.. 49Q<3L u 1..H#(<#t $### >!r7   c                 J     | 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   s6    ,4,@@$@%@@000r7   c                 ^   | j         d         j        rE|r*d|d<    | j         d         j        |fi |t          j        fS | j         d         t          j        fS |r/ | j         d         j        |fi |                                \  }}n"| j         d                                         \  }}||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    9Q<( 	. .#(i +	!+D::E::AFCC	!af-- 	1(TYq\(7777DDFFFBYq\..00FBBxr7   Nc                     t          | j        d                   }|t          |j                  d         }|                    |          st
          j        S ||k    r|S ||j        v r|j        r0|                    |          \  }}||k    r|t          |          z  S |j
        rJ|                    |          \  }}|                    |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   ty|$$>1>**1-FuuV}} 	6M;;!!Q^##x 1''//1;;)#a&&00x 1''//1''u'==1;;)#a&&00!"IJJJr7   TN)__name__
__module____qualname____doc__
unbranchedr   ComplexInfinity_singularitiesrC   rI   rQ   rW   rh   rL   r7   r5   r9   r9   -   s        22J')N! ! !	" 	" 	"1 1 1 1   K K K K K 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 ]@}|                    t
                    }|r|j        r||z  }+|                    |           A|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    $ vHJ]3 ! !GGBKK 	! 	!MHHa    16AF{
QV
B	BB	} 0!B$* 0rzU/B/BZ2b5')+R//;r7      r    cyclesreturnNc                    | t           u rt          j        S | st          j        S | j        r0|                     t                     }|r|                                \  }}|j        rt          |          dz  }|dk    r|t          t          t          |d                                                               }d|z  }||z  }t          |          }	t          |	|          rt          |	|          }||z  }n!t          t          |                    }||z  }|j        r6|dz  }
|
dk    r|S |
s"|j        t          j        S t#          d          S |
|z  S |S n| j        rt          j        S dS )a6  
    When arg is a Number times $\pi$ (e.g. $3\pi/2$) then return the Number
    normalized to be in the range $[0, 2]$, else `None`.

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

    Examples
    ========

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

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

    r   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      su   J byyu  v	 YYr]] 	??$$DAqz FFQJ66U3q!99??#4#455666A1A1BBA#Ar** !$QNNqS Q((A1B| 	 U77H  y, v"1::%a4KI5	6 
 v4r7   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dS )$sina  
    The sine function.

    Returns the sine of x (measured in radians).

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

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

    Examples
    ========

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


    See Also
    ========

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

    References
    ==========

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

    Nc                 >    |                      dt          z  |          S Nr   rh   r   rA   rc   s     r5   periodz
sin.period#      ||AbD&)))r7   r   c                 b    |dk    rt          | j        d                   S t          | |          Nr   r   )cosr=   r	   rA   argindexs     r5   fdiffz	sin.fdiff&  s/    q==ty|$$$$T8444r7   c           
      n   ddl m} ddlm} |j        rS|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          ||          rd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
  } |||                               |t$          dz  t$          t)          dd          z                      t
          j        urm |||                               |t$          t)          d	d          z  t$          t)          d
d          z                      t
          j        ur |dd          S  |||                               |t$          dz  t$          t)          dd          z                      t
          j        ur4 |t-          t/          |          t/          |                    d          S  |||                               |t$          t)          d	d          z  t$          t)          dd          z                      t
          j        ur4 |dt1          t/          |          t/          |                              S  |t-          t/          |          t/          |                    t1          t/          |          t/          |                              S t          ||          r|                    |           S |                                r | |            S t7          |          }|ddlm}	 t
          j         |	|          z  S t?          |          }
|
|
j         rt
          j        S d|
z  j         r%|
j!        du rt
          j"        |
t
          j#        z
  z  S |
j$        s|
t$          z  }||k    r | |          S d S |
j$        r|
dz  }|dk    r | |dz  t$          z             S d|z  dk    r | d|z
  t$          z            S |
t)          d	d          z   dz  t$          z  }tK          |          }t          |tJ                    s|S |
t$          z  |k    r | |
t$          z            S d S |j&        r]tO          |          \  }}|rI|t$          z  }t/          |          tK          |          z  tK          |          t/          |          z  z   S |j        rt
          j        S t          |tP                    r|j)        d         S t          |tT                    r%|j)        d         }|tW          d|dz  z             z  S t          |tX                    r%|j)        \  }}|tW          |dz  |dz  z             z  S t          |tZ                    r"|j)        d         }tW          d|dz  z
            S t          |t\                    r+|j)        d         }dtW          dd|dz  z  z             |z  z  S t          |t^                    r|j)        d         }d|z  S t          |t`                    r%|j)        d         }tW          dd|dz  z  z
            S d S )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AAAAA......= 	*ae||u *vQ%7888"{2q)))!###5Lc;'' 	'111111wCc1R4j!!A!,,,AaCFl!*$$AaCFl{3$$11))BqD"XaQR^^BS2T2TUU:& &KS))66yyHQPQNNAR8Aq>>)8+ 8+ , ,34:> >"{2q)))S#&&33IIbdBxPQST~~DU4V4VWW:& &"{3s3xxS#:#:A>>>S#&&33IIb!Q>OQST\]^`aTbTbQb4c4cdd z* *"{2s3s88SXX'>'>???"{3s3xxS#:#: #CHHc#hh 7 79 9 9W%% 	'>>#&&&'')) 	CII:055BBBBBB?44==00S>>" v(
& > #u,,=8af+<==' {3;;3t99$t # qLq55CQ
OO++Q3773Arz??*!HQNN2a7;T!&#.. "!MB;#%%3x{+++t: 	5s##DAq 5bD1vvc!ff}s1vvc!ff}44; 	6Mc4   	8A;c4   	$AT!ad(^^##c5!! 	'8DAq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k    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       q55AEQJJ6M

A>""Q&&"2&r!Q$w1q5	**}q!t,QT1)A,,>>r7   r   c                 8   | j         d         }|#|                    t          |          |          }|                    |d                              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      il((3q664((C88Aq>>aeQ%677 	B74@AAA%dADIIIIr7   c                    ddl m} t          j        }t	          |t
          |f          r8|                    |j        d                                       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  s    LLLLLLOc13EFGG 	5((38A;''//44CCE

S#a[[(1Q3//r7   c                     t          |t                    r1t          j        }|j        d         }||| z  z  dz  |||z  z  dz  z
  S d S Nr   r   r2   r#   r   r4   r=   rA   r    r   r   r   s        r5   _eval_rewrite_as_Powzsin._eval_rewrite_as_Pow  sU    c3 	)AAQU719qAvqy((	) 	)r7   c                 :    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*    qvcz??z1x{?++r7   c                 `    t          |          t          |          z  t          |          z  S rj   r   r   r   s      r5   _eval_rewrite_as_sincoszsin._eval_rewrite_as_sincos  $    3xx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  so    qvcz??!SBsGGQCRLL!1D1DEEFH*a(A+o6=? ? 	?r7   c                 J      | j         t          fi |j         t          fi |S rj   )r   r   powr   s      r5   _eval_rewrite_as_powzsin._eval_rewrite_as_pow  s1    2|t|C**6**23AA&AAAr7   c                 J      | 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  s1    2|t|C**6**24BB6BBBr7   c                 &    dt          |          z  S Nr   cscr   s      r5   _eval_rewrite_as_csczsin._eval_rewrite_as_csc      Szr7   c                 @    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000r7   c                 &    |t          |          z  S rj   )sincr   s      r5   _eval_rewrite_as_sinczsin._eval_rewrite_as_sinc  s    499}r7   c                 p    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~~ggafc2222r7   c                 f    |                      | j        d                                                   S Nr   r<   r=   	conjugaterA   s    r5   _eval_conjugatezsin._eval_conjugate  &    yy1//11222r7   Tc                     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  sl    DDDDDDDD##77777BBR #b''$$r(("233r7   c           	         ddl m}m} | j        d         }d }|j        r|                                \  }}t          |d                                          }t          |d                                          }t          |d                                          }	t          |d                                          }
||
z  ||	z  z   S |j	        r|
                    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NNNNNNNil: 	M##%%DAqQ'''99;;BQ'''99;;BQ'''99;;BQ'''99;;Bb52b5= Z 
	M##T#22DAq| M 8 M=AE195jjCFF6K6KKK%amacAg&>s1vv&E&0jQA&?&?'@FKM M M M3xxr7   c                    ddl m} | j        d         }|                    |d                                          }|t
          z  }|j        r2||t
          z  z
                      |          }t          j	        |z  |z  S |t          j
        u r.|                    |dt          |          j        rdnd          }|t          j        t          j        fv r |dd          S |j        r|                     |          n| 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AAAAAilXXa^^""$$rE< 	)"*--a00BM1$b(("""1aBtHH,@%ISScJJB!*a0111;r1%%% "6tyy}}}$6r7   c                 .    | j         d         j        rdS d S Nr   Tr=   rT   r.  s    r5   _eval_is_extended_realzsin._eval_is_extended_real  "    9Q<( 	4	 	r7   c                 2    | j         d         }|j        rdS d S rS  rT  rA   r    s     r5   _eval_is_finitezsin._eval_is_finite  s'    il 	4	 	r7   c                 \    t          | j        d                   \  }}|j        r|j        S d S r+  r   r=   r?   r   rA   restpi_mults      r5   _eval_is_zerozsin._eval_is_zero  6    #DIaL11g< 	&%%	& 	&r7   c                 R    | j         d         j        s| j         d         j        rdS d S rS  r=   rT   
is_complexr.  s    r5   _eval_is_complexzsin._eval_is_complex#  s3    9Q<( 	9Q<*	4	 	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 5 5 5 r$ r$ [r$h 
? 
? W \
?J J J J0 0 0) ) )/ / /, , ,* * *? ? ?
B B BC C C  1 1 1  3 3 33 3 34 4 4 4
  27 7 7 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dS )$r   a  
    The cosine function.

    Returns the cosine of x (measured in radians).

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

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

    Examples
    ========

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

    See Also
    ========

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

    References
    ==========

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

    Nc                 >    |                      dt          z  |          S r   r   r   s     r5   r   z
cos.periodU  r   r7   r   c                 d    |dk    rt          | j        d                    S t          | |          r   )r   r=   r	   r   s     r5   r   z	cos.fdiffX  s2    q==	!%%%%$T8444r7   c                 |
   ddl m} ddlm} ddlm} |j        rS|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|                    |           S |j        r|j        du r |dd          S |                                r | |           S t+          |          }|dd	lm}  ||          S t1          |          }||j        rt          j        |z  S d|z  j        r|j        du rt          j        S |j        s|t           z  }||k    r | |          S d S |j        r|j        }	|j        d|	z  z  }
|
|	k    r|dz
  t           z  } | |           S d|
z  |	k    rd|z
  t           z  } | |           S tA                      }|	|v rv||	         \  }}|
t           z  |z  |
t           z  |z  }} | |           | |          }}d ||fv rd S ||z   | t           dz  |z
             | t           dz  |z
            z  z   S |	d
k    rd S t          j!        tE          d          dz   dz  d}|	|v r0||j                 } ||j        |          #                                S d|	dz  k    rm|dz  t           z  } | |          }d |k    rd S d|z  dz   dz  }d|dk     rdndtI          tK          |                    z  z  }|tE          d|z   dz            z  S d S |j&        r]tO          |          \  }}|rI|t           z  }tQ          |          tQ          |          z  t          |          t          |          z  z
  S |j	        rt          j
        S t          |tR                    r|j*        d         S t          |tV                    r%|j*        d         }dtE          d|dz  z             z  S t          |tX                    r%|j*        \  }}|tE          |dz  |dz  z             z  S t          |tZ                    r"|j*        d         }tE          d|dz  z
            S t          |t\                    r(|j*        d         }dtE          dd|dz  z  z             z  S t          |t^                    r%|j*        d         }tE          dd|dz  z  z
            S t          |t`                    r|j*        d         }d|z  S d S )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BBBBBAAAAAA......= 
	*ae||u *uQ%7888
 #{2q)))!###5Lc;'' 	'sRTz??"W%% 	'>>#&&& 	&CMU$:$:;r1%%%'')) 	3t99055BBBBBB4== S>>" 100(
& " #u,,6M' {3;;3t99$t # )9JJ!A#&q55$qL",DCII:%Q377L",DCII:% !;;!!9DAqR461R46qA#&3q6633q665Eu~--#t ;RTAXss2a4!8}})DDDr664 vQ!q(" " &&(4C%:hj#66==???A::$QJ?D3t99Dt||#t8a*A "QUUrr3s1vv;;&FGH#D1t8Q,$8$8884: 	5s##DAq 5bD1vvc!ff}s1vvc!ff}44; 	5Lc4   	8A;c4   	$AT!ad(^^##c5!! 	'8DAq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k    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   r   c                 8   | j         d         }|#|                    t          |          |          }|                    |d                              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          r1 |                    |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   s    OLLLLLLc13EFGG 	?/#((38A;''/>>v>>CCE

S#a[[(!++r7   c                     t          |t                    r+t          j        }|j        d         }||z  dz  || z  dz  z   S d S r   r   r   s        r5   r   zcos._eval_rewrite_as_Pow  sM    c3 	$AAa46ArE!G##	$ 	$r7   c                 :    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+    qvcz??A%Hq8|,,r7   c                 `    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  sw    qvcz??A%!SBsGGQCQrTNNA1F1FG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888r7   r    c                 8   ddl m} t          |          d S t          t                    rd S t          t
                    sd S t                      }j        |v rE |j         |j                                       }j        dk     r|	                                }|S j        dz  sc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|
}n0d t!          j                                                  D             }t%          | }fdt'          ||          D             }d	 t'          |t)          d
                    D             }t          t+          d |D                                                                                     |          }|
rt1          |
          dk    r|S  |j        t          fi |S )Nr   rm  i  r   r   r   c                     g | ]
\  }}||z  S rL   rL   ).0rp  es      r5   
<listcomp>z-cos._eval_rewrite_as_sqrt.<locals>.<listcomp>?  s     EEEtq!adEEEr7   c              3   N   K   | ]\  }}j         t          ||          z  V   d S rj   )r   r   )r  r   r   rH   s      r5   	<genexpr>z,cos._eval_rewrite_as_sqrt.<locals>.<genexpr>B  s6      MM$!Q(*x1~~-MMMMMMr7   c                 >    g | ]}|d          |d         t           z  fS )r   r   )r   r  r   s     r5   r  z-cos._eval_rewrite_as_sqrt.<locals>.<listcomp>C  s(    IIIadAaDG_IIIr7   zc              3   &   K   | ]}|d          V  dS )r   NrL   r  s     r5   r  z,cos._eval_rewrite_as_sqrt.<locals>.<genexpr>D  s&      ''qt''''''r7   )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denomsapartdecompXpclsrH   s                   @r5   r  zcos._eval_rewrite_as_sqrt  s:   BBBBBBS>>4h(( 	4(H-- 	4":''HJ(Bxz(B(D(DEEBzCYY[[IzA~ 	3qLE*3urz??*4::6::DaA VVaZ.rrQHdAH>22228:&& 	FFFEEy'<'<'B'B'D'DEEEF6"MMMM#eV:L:LMMMIIc&2B32G2G&H&HIII3''Q'''''((::<<AA!DD 	SWW\\Kt|D++F+++r7   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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  s\    ::::::bfQh 5 55r#qzzB  	r7   c                 f    |                      | j        d                                                   S r+  r,  r.  s    r5   r/  zcos._eval_conjugateW  r0  r7   Tc                     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  sn    DDDDDDDD##77777BBR 3r77(4488"344r7   c                 4   ddl m} | j        d         }d }|j        r|                                \  }}t          |d                                          }t          |d                                          }t          |d                                          }t          |d                                          }	||	z  ||z  z
  S |j        r9|	                    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BBBBBil: 
	5##%%DAqQ'''99;;BQ'''99;;BQ'''99;;BQ'''99;;Bb52b5= Z 	5++T+::LE5 5!z%U4443xxr7   c                 *   ddl m} | j        d         }|                    |d                                          }|t
          dz  z   t
          z  }|j        r=||t
          z  z
  t
          dz  z                       |          }t          j	        |z  |z  S |t          j
        u r.|                    |dt          |          j        rdnd          }|t          j        t          j        fv r |dd          S |j        r|                     |          n| S )	Nr   r   r   rD  rE  rF  r   r   rH  rN  s	            r5   rQ  zcos._eval_as_leading_termp  s   AAAAAAilXXa^^""$$"Q$YN< 	)"*r!t#44Q77BM1$b(("""1aBtHH,@%ISScJJB!*a0111;r1%%% "6tyy}}}$6r7   c                 .    | j         d         j        rdS d S rS  rT  r.  s    r5   rU  zcos._eval_is_extended_real~  rV  r7   c                 2    | j         d         }|j        rdS d S rS  rT  rX  s     r5   rY  zcos._eval_is_finite  s'    il 	4	 	r7   c                 R    | j         d         j        s| j         d         j        rdS d S rS  rb  r.  s    r5   rd  zcos._eval_is_complex  s3    9Q<( 	y|&	4	 	r7   c                 ~    t          | j        d                   \  }}|j        r|r|t          j        z
  j        S d S d S r+  r   r=   r?   r   r   r   r\  s      r5   r_  zcos._eval_is_zero  sN    #DIaL11g< 	1G 	1af$00	1 	1 	1 	1r7   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 5 5 5 I I [IV 
? 
? W \
?J J J J, , ,$ $ $/ / /- - -* * *@ @ @
9 9 9), ), ), ), ),V  1 1 1  3 3 35 5 5 5
  "7 7 7 7      
1 1 1 1 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 dS )%r  a  
    The tangent function.

    Returns the tangent of x (measured in radians).

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

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

    Examples
    ========

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

    See Also
    ========

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

    References
    ==========

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

    Nc                 8    |                      t          |          S rj   r   r   s     r5   r   z
tan.period      ||B'''r7   r   c                 R    |dk    rt           j        | dz  z   S t          | |          Nr   r   )r   r   r	   r   s     r5   r   z	tan.fdiff  s+    q==547?"$T84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        rg|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}  |||                               |t          dz  t          t%          dd          z                      r  |t          j        t          j                  S  |t'          |          t'          |                    S |                                r | |            S t+          |          }|ddlm} t          j         ||          z  S t3          |d          }	|	|	j        rt          j        S |	j        s|	t          z  }
|
|k    r | |
          S d S |	j        rN|	j        }|	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k    rd|z
  }||          S ||         S |	j        dz  s}|	t          z  dz  }
t?          |
          t?          |
t          dz  z
            }}t          |t>                    s2t          |t>                    s|dk    rt          j	        S d|z  ||z  z
  S tA                      }||v rM||         \  }} | |t          z  |z             | |t          z  |z            }}d ||fv rd S ||z
  d||z  z   z  S |	t          j!        z   dz  t          j!        z
  t          z  }
t?          |
          t?          |
t          dz  z
            }}t          |t>                    s,t          |t>                    s|dk    rt          j	        S ||z  S |
|k    r | |
          S |j"        rXtG          |          \  }}|rDt'          |t          z            }|t          j	        u rtI          |           S t'          |          S |j        rt          j        S t          |tJ                    r|j&        d         S t          |tN                    r|j&        \  }}||z  S t          |tP                    r%|j&        d         }|t=          d|dz  z
            z  S t          |tR                    r%|j&        d         }t=          d|dz  z
            |z  S t          |tT                    r|j&        d         }d|z  S t          |tV                    r+|j&        d         }dt=          dd|dz  z  z
            |z  z  S t          |tX                    r(|j&        d         }t=          dd|dz  z  z
            |z  S d S )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  sM   AAAAAA= 	Cae||u CvQ%7888"{1#5qzBBB!###5Lc;'' 	7wCc"fA!,,,AbDj!*$$AbDj111111{3$$11))BqD"XaQR^^BS2T2TUU 7"{1#5qzBBB"{3s88SXX666'')) 	CII:055BBBBBB?44==00S!$$" v' {3;;3t99$t# +%JJN A$q''	!O,,A$q''	M**A$q''	!O,,A$q''	M**	  <<1QA1uuF '
{*&qz)zA~ ;#B;q=D'*4yy#dRTk2B2BWG%gs33 ;$.w$<$<;"a<<#$#44 y77?:: ;;!!9DAq#&3qtAv;;AbDF5Eu~--#t!EMAeO<<!AF*a/!&8"< $'t99c$A+.>.>!'3// - *7C 8 8-!|| 00#GO,3;;3t99$: 	"s##DAq "1R4yy1,,,FF7Nq66M; 	6Mc4   	8A;c5!! 	8DAq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     q55AEQJJ6M

AUQJQUqA!a%  A!a%  A=!#A%q1u-a/1!Q$66r7   r   c                     | j         d                             |d          dz  t          z  }|r7|j        r0|                     t
                                        |||          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  s{    IaLq!$$Q&r) 	F 	F<<$$2212EEE%dA>>>>r7   c                     t          |t                    r5t          j        }|j        d         }||| z  ||z  z
  z  || z  ||z  z   z  S d S r+  r   r   s        r5   r   ztan._eval_rewrite_as_Pow_  s\    c3 	3AAa!eadl#QUQT\22	3 	3r7   c                 f    |                      | j        d                                                   S r+  r,  r.  s    r5   r/  ztan._eval_conjugatee  r0  r7   Tc                 
    | j         dd|i|\  }}|rOddlm}m} t	          d|z             |d|z            z   }t          d|z            |z   |d|z            |z  fS |                     |          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77B 	+HHHHHHHH"IIQrT

*E"IIeOTT!B$ZZ%566IIbMM16**r7   c                    | j         d         }d }|j        r
t          |j                   }g }|j         D ]:}t          |d                                          }|                    |           ;t          d          fdt          |          D             }ddg}t          |dz             D ]2}	|d|	dz  z
  xx         t          |	|          d|	d	z  dz  z  z  z  cc<   3|d         |d         z  	                    t          t          ||                              S |j        r|                    d
          \  }
}|
j        r|
dk    r|t          j        }t#          dd
          }d||z  z   |
z                                  }t'          |          t)          |          z  	                    |t          |          fg          S t          |          S )Nr   Fr   Yc                 .    g | ]}t                    S rL   nextr  r   Ygs     r5   r  z)tan._eval_expand_trig.<locals>.<listcomp>|      ...q$r((...r7   r   r   r   rt   Tr9  dummyreal)r=   r`   r   r  r=  r   r0   ranger/   r   listr  r]   r   r>  r   r4   r   rU   r!   r"   )rA   rN   r    r   r   TXtxr  r   r   r   r  r   r  Pr  s                  @r5   r=  ztan._eval_expand_trigq  s   il: 	=CHABX  U+++==??		"!#&&B....E!HH...AAA1q5\\ H H!a!e)q! 4 4bQUQJ5G GGaD1I##DQ$4$4555Z 	=++T+::LE5 =EAIIO7...!A#g%--//1bee))As5zz?*;<<<3xxr7   c                 *   t           j        }ddlm} t	          |t
          |f          r8|                    |j        d                                       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  s    OLLLLLLc13EFGG 	5((38A;''//44CtAv;;CE

'G#$g&788r7   c                 R    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s88##r7   c                 Z    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VV33r7   c                 @    t          |          t          |          z  S rj   r  r   s      r5   r	  ztan._eval_rewrite_as_sincos      3xx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  M    *#c((*399&99*#c((*399&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 |}|                    t                    rd S |S rj   r   r   r  r\   rA   r    r   r   s       r5   r  ztan._eval_rewrite_as_pow  L    /LDL''''/>>v>>55:: 	4r7   c                       | j         t          fi |j         t          fi |}|                    t                    rd S |S rj   r   r   r&   r\   r  s       r5   r  ztan._eval_rewrite_as_sqrt  L    /LDL''''/????55:: 	4r7   c                 j    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=    ::::::wqvs##GGQVGS$9$999r7   c                 .   ddl m} ddlm} | j        d         }|                    |d                                          }d|z  t          z  }|j        r1||t          z  dz  z
  	                    |          }	|j
        r|	nd|	z  S |t          j        u r*|                    |d ||          j        rdnd          }|t          j        t          j        fv r  |t          j        t          j                  S |j        r|                     |          n| 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AAAAA;;;;;;ilXXa^^""$$bDG< 	."Q,//22B-222-"""1aBBtHH,@%ISScJJB!*a0111;q11:>>> "6tyy}}}$6r7   c                 &    | j         d         j        S r+  rT  r.  s    r5   rU  ztan._eval_is_extended_real  s    y|,,r7   c                 r    | j         d         }|j        r |t          z  t          j        z
  j        du rdS d S d S rE   r=   is_realr   r   r   r   rX  s     r5   _eval_is_realztan._eval_is_real  sC    il; 	CFQVO75@@4	 	@@r7   c                     | j         d         }|j        r |t          z  t          j        z
  j        du rdS |j        rdS d S rE   )r=   r  r   r   r   r   is_imaginaryrX  s     r5   rY  ztan._eval_is_finite  sM    il; 	CFQVO75@@4 	4	 	r7   c                 \    t          | j        d                   \  }}|j        r|j        S d S r+  r[  r\  s      r5   r_  ztan._eval_is_zero  r`  r7   c                 r    | j         d         }|j        r |t          z  t          j        z
  j        du rdS d S d S rE   r  rX  s     r5   rd  ztan._eval_is_complex  sC    il; 	CFQVO75@@4	 	@@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 5 5 5    & & [&B 7 7 W \7? ? ? ?3 3 33 3 3+ + + +  69 9 9$ $ $4 4 4! ! !  / / /
/ / /
    : : :7 7 7 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!dS )&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                 8    |                      t          |          S rj   r   r   s     r5   r   z
cot.period  r  r7   r   c                 R    |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44r7   c                     t           S r  r   r   s     r5   r  zcot.inverse  r  r7   c                 	   ddl m} |j        rg|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 |                                r | |            S t          |          }|ddlm} t          j          ||          z  S t#          |d          }||j        rt          j        S |j        s|t          z  }||k    r | |          S d S |j        r|j        dv rt          t          dz  |z
            S |j        dk    ru|j        dz  sk|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 rM||	         \  }} | |
t          z  |z             | |
t          z  |z            }}d ||fv rd S d||z  z   ||z
  z  S |t          j        z   dz  t          j        z
  t          z  }t+          |          t+          |t          dz  z
            }}t          |t*                    s,t          |t*                    s|dk    rt          j        S ||z  S ||k    r | |          S |j        rXt5          |          \  }}|rDt7          |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 d S )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AAAAA= 	Cae||u{ C((Q%7888"{1#5qzBBB!###5Lc;'' 	$bd
OO##'')) 	CII:055BBBBBBO#DDMM11S!$$" )((' {3;;3t99$t# %:((r!tcz??*:>>(*q.>#B;q=D'*4yy#dRTk2B2BWG%gs33 ;$.w$<$<; y77?::JJN ;;!!9DAq#&3qtAv;;AbDF5Eu~--#teOeem<<"QV+q0AF:B> $'t99c$A+.>.>!'3// + *7C 8 8+!|| 00"7?*3;;3t99$: 	#s##DAq #1R4yy1,,,q66MFF7N; 	%$$c4   	8A;c4   	AQ3Jc5!! 	8DAq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     66WQZZ<UUa!eqjj6M

A!a%  A!a%  A=AEA:.q1q5z9!;A=adBBr7   r   c                 &   | j         d                             |d          t          z  }|r7|j        r0|                     t
                                        |||          S |                     t                                        |||          S )Nr   r  )r=   rK  r   r>  r   r   r   r  r  s         r5   r   zcot._eval_nseries  s    IaLq!$$R' 	F 	F<<$$2212EEE||C  ..qAD.AAAr7   c                 f    |                      | j        d                                                   S r+  r,  r.  s    r5   r/  zcot._eval_conjugate  r0  r7   Tc                     | j         dd|i|\  }}|rPddlm}m} t	          d|z             |d|z            z
  }t          d|z             |z   |d|z            |z  fS |                     |          t          j        fS r  r  r  s           r5   rM   zcot.as_real_imag  s    ##77777B 	+HHHHHHHH"IIQrT

*E2YYJu$dd1R4jj&677IIbMM16**r7   c                    ddl m} t          j        }t	          |t
          |f          r1 |                    |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LLLLLOc13EFGG 	?/#((38A;''/>>v>>CtAv;;CE

'G#$g&788r7   c                     t          |t                    r6t          j        }|j        d         }| || z  ||z  z   z  || z  ||z  z
  z  S d S r+  r   r   s        r5   r   zcot._eval_rewrite_as_Pow  s^    c3 	4AA2q1"uq!t|$a!eadl33	4 	4r7   c                 R    t          d|z            dt          |          dz  z  z  S r   r  r  s      r5   r}  zcot._eval_rewrite_as_sin  s%    1Q3xxCFFAI''r7   c                 Z    t          |          t          |t          dz  z
  d          z  S r   r   r  s      r5   r   zcot._eval_rewrite_as_cos  s(    1vvc!bd(U33333r7   c                 @    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 |}|                    t                    rd S |S rj   r  r  s       r5   r  zcot._eval_rewrite_as_pow  r  r7   c                       | j         t          fi |j         t          fi |}|                    t                    rd S |S rj   r  r  s       r5   r  zcot._eval_rewrite_as_sqrt  r  r7   c                 j    ddl m}  |t          j         |           |t          j        |          z  S r  r  r(  s       r5   r)  zcot._eval_rewrite_as_besselj  s=    ::::::ww$$WWQVS%9%999r7   c                 0   ddl m} ddlm} | j        d         }|                    |d                                          }d|z  t          z  }|j        r2||t          z  dz  z
  	                    |          }	|j
        rd|	z  n|	 S |t          j        u r*|                    |d ||          j        rdnd          }|t          j        t          j        fv r  |t          j        t          j                  S |j        r|                     |          n| S )	Nr   r   r  r   r   rD  rE  rF  r  r  s
             r5   rQ  zcot._eval_as_leading_term  s   AAAAAA;;;;;;ilXXa^^""$$bDG< 	."Q,//22B9-1R442#-"""1aBBtHH,@%ISScJJB!*a0111;q11:>>> "6tyy}}}$6r7   c                 &    | j         d         j        S r+  rT  r.  s    r5   rU  zcot._eval_is_extended_real      y|,,r7   c                    | j         d         }d }|j        rt          |j                   }g }|j         D ]:}t          |d                                          }|                    |           ;t          d          fdt          |          D             }ddg}t          |dd          D ]5}	|||	z
  dz  xx         t          |	|          d||	z
  dz  dz  z  z  z  cc<   6|d         |d	         z  	                    t          t          ||                              S |j        r|                    d
          \  }
}|
j        r|
d	k    ryt          j        }t#          dd
          }||z   |
z                                  }t'          |          t)          |          z  	                    |t          |          fg          S t          |          S )Nr   Fr   r  c                 .    g | ]}t                    S rL   r  r  s     r5   r  z)cot._eval_expand_trig.<locals>.<listcomp>  r  r7   r   r   rt   r   Tr9  r  r  )r=   r`   r   r  r=  r   r0   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   il: 	=CHABX  U+++==??		"!#&&B....E!HH...AAA1b"%% P P1q5A+.A"6"6A{Q>N7O"OOaD1I##DQ$4$4555Z 	=++T+::LE5 =EAIIO7...!ee^++--1bee))As5zz?*;<<<3xxr7   c                 f    | j         d         }|j        r|t          z  j        du rdS |j        rdS d S rE   )r=   r  r   r   r   rX  s     r5   rY  zcot._eval_is_finite  sG    il; 	CF.%774 	4	 	r7   c                 X    | j         d         }|j        r|t          z  j        du rdS d S d S rE   r=   r  r   r   rX  s     r5   r  zcot._eval_is_real  =    il; 	CF.%774	 	77r7   c                 X    | j         d         }|j        r|t          z  j        du rdS d S d S 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 d S d S r+  r  )rA   r]  pimults      r5   r_  zcot._eval_is_zero  sM    "49Q<00f 	0dl 	0QVO//	0 	0 	0 	0r7   c                     | j         d         }|                    ||          }||k    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  sI    il#s##&==fRi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 5 5 5    f* f* [f*P C C W \CB B B B3 3 3+ + + +9 9 94 4 4( ( (4 4 4! ! !  / / /
/ / /
    : : :7 7 7 7- - -  4    
  
0 0 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 dS ) ReciprocalTrigonometricFunctionz@Base class for reciprocal functions of trigonometric functions. N_is_even_is_oddc                 ,   |                                 r'| j        r | |           S | j        r | |            S t          |          }|d|z  j        su|j        rn|j        }|j        d|z  z  }||k    r|dz
  t          z  } | |           S d|z  |k    r2d|z
  t          z  }| j        r | |          S | j        r | |           S t          |d          r%|
                                | k    r|j        d         S | j                            |          }||S t          d || fD                       rd|z                      t                     S t          d || fD                       rd|z                      t"                    S d|z  S )Nr   r   r  r   c              3   @   K   | ]}t          |t                    V  d S rj   )r2   r   r  r   s     r5   r  z7ReciprocalTrigonometricFunction.eval.<locals>.<genexpr>P  ,      55As##555555r7   c              3   @   K   | ]}t          |t                    V  d S rj   )r2   r   r5  s     r5   r  z7ReciprocalTrigonometricFunction.eval.<locals>.<genexpr>R  r6  r7   )r   r1  r2  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  s   '')) 	"| !sC4yy { "SD		z!S>> xZ+ !$ ! JJ!A#&q55$qL",DCII:%Q377L",D{ *"s4yy( * #D		z)3	"" 	s{{}}';';8A;##C((9H55a!W55555 	aC==%%%55a!W55555 	aC==%%%Q3Jr7   c                 n    |                      | j        d                   } t          ||          |i |S r+  )r9  r=   getattr)rA   method_namer=   r   os        r5   _call_reciprocalz0ReciprocalTrigonometricFunction._call_reciprocalW  s:    	!--&wq+&&7777r7   c                 6     | j         |g|R i |}|d|z  n|S r  )r@  )rA   r>  r=   r   r;  s        r5   _calculate_reciprocalz5ReciprocalTrigonometricFunction._calculate_reciprocal\  s8     "D!+??????mqss*r7   c                 v    |                      ||          }|||                     |          k    rd|z  S d S d S r  )r@  r9  )rA   r>  r    r;  s       r5   _rewrite_reciprocalz3ReciprocalTrigonometricFunction._rewrite_reciprocalb  sL     !!+s33=Q$"5"5c":":::Q3J =::r7   c                     t          | j        d                   }|                     |                              |          S r+  )r   r=   r9  r   )rA   rc   rd   s      r5   rh   z'ReciprocalTrigonometricFunction._periodi  s7    ty|$$""1%%,,V444r7   r   c                 <    |                      d|           | dz  z  S )Nr   r   rB  r   s     r5   r   z%ReciprocalTrigonometricFunction.fdiffm  s$    **7H===dAgEEr7   c                 .    |                      d|          S )Nr   rD  r   s      r5   r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_expp      ''(>DDDr7   c                 .    |                      d|          S )Nr   rI  r   s      r5   r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_Pows  rJ  r7   c                 .    |                      d|          S )Nr}  rI  r   s      r5   r}  z4ReciprocalTrigonometricFunction._eval_rewrite_as_sinv  rJ  r7   c                 .    |                      d|          S )Nr   rI  r   s      r5   r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_cosy  rJ  r7   c                 .    |                      d|          S )Nr  rI  r   s      r5   r  z4ReciprocalTrigonometricFunction._eval_rewrite_as_tan|  rJ  r7   c                 .    |                      d|          S )Nr  rI  r   s      r5   r  z4ReciprocalTrigonometricFunction._eval_rewrite_as_pow  rJ  r7   c                 .    |                      d|          S )Nr  rI  r   s      r5   r  z5ReciprocalTrigonometricFunction._eval_rewrite_as_sqrt  s    ''(?EEEr7   c                 f    |                      | j        d                                                   S r+  r,  r.  s    r5   r/  z/ReciprocalTrigonometricFunction._eval_conjugate  r0  r7   Tc                 `     d|                      | j        d                   z  j        |fi |S r   )r9  r=   rM   )rA   rK   rN   s      r5   rM   z,ReciprocalTrigonometricFunction.as_real_imag  sF    A$%%dil333A$ K KDIK K 	Kr7   c                      | j         di |S )Nr=  )r=  rG  )rA   rN   s     r5   r=  z1ReciprocalTrigonometricFunction._eval_expand_trig  s    )t)GGGGGr7   c                 f    |                      | j        d                                                   S r+  )r9  r=   rU  r.  s    r5   rU  z6ReciprocalTrigonometricFunction._eval_is_extended_real  s(    ""49Q<00GGIIIr7   r   c                 n    d|                      | j        d                   z                      |          S r   )r9  r=   rQ  )rA   r   r   r   s       r5   rQ  z5ReciprocalTrigonometricFunction._eval_as_leading_term  s/    $%%dil333JJ1MMMr7   c                 R    d|                      | j        d                   z  j        S r   )r9  r=   rM  r.  s    r5   rY  z/ReciprocalTrigonometricFunction._eval_is_finite  s$    $%%dil333>>r7   c                 r    d|                      | j        d                   z                      |||          S r   )r9  r=   r   rA   r   r   r   r   s        r5   r   z-ReciprocalTrigonometricFunction._eval_nseries  s3    $%%dil333BB1aNNNr7   re  ri   r+  rf  )!rk   rl   rm   rn   r9  r   rp   rq   r1  r   __annotations__r2  rg  r   r@  rB  rD  rh   r   r   r   r}  r   r  r  r  r/  rM   r=  rU  rQ  rY  r   rL   r7   r5   r0  r0  $  s        JJN')N HiGY" " ["H8 8 8
+ + +  5 5 5F F F FE E EE E EE E EE E EE E EE E EF F F3 3 3K K K KH H HJ J JN N N N? ? ?O O O O O Or7   r0  c                       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dS )r  a  
    The secant function.

    Returns the secant of x (measured in radians).

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

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

    Examples
    ========

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

    See Also
    ========

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

    References
    ==========

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

    TNc                 ,    |                      |          S rj   rh   r   s     r5   r   z
sec.period      ||F###r7   c                 B    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%jj!ma+/22r7   c                 &    dt          |          z  S r  r   r   s      r5   r   zsec._eval_rewrite_as_cos      #c((
r7   c                 `    t          |          t          |          t          |          z  z  S rj   r  r   s      r5   r	  zsec._eval_rewrite_as_sincos  $    3xx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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  rf  r7   c                 :    t          t          dz  |z
  d          S r   )r  r   r   s      r5   r  zsec._eval_rewrite_as_csc      2a4#:....r7   r   c                     |dk    r5t          | j        d                   t          | j        d                   z  S t          | |          r   )r  r=   r  r	   r   s     r5   r   z	sec.fdiff  sB    q==ty|$$S1%6%666$T84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  sh    ::::::DCLL$q''*77AF7C+@+@@A2c1::N  	r7   c                 r    | j         d         }|j        r |t          z  t          j        z
  j        du rdS d S d S rE   )r=   rc  r   r   r   r   rX  s     r5   rd  zsec._eval_is_complex  sC    il> 	s2v:eCC4	 	CCr7   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  sl    
 q55AEQJJ6M

A1A=!#E!A#JJ.y1~~=a!A#hFFr7   r   c                 V   ddl m} ddlm} | j        d         }|                    |d                                          }|t          dz  z   t          z  }|j        r=||t          z  z
  t          dz  z   	                    |          }	t          j        |z  |	z  S |t          j        u r*|                    |d ||          j        rdnd          }|t          j        t          j        fv r  |t          j        t          j                  S |j        r|                     |          n| 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AAAAA;;;;;;ilXXa^^""$$"Q$YN< 	)"*r!t#44Q77BM1$b(("""1aBBtHH,@%ISScJJB!*a0111;q11:>>> "6tyy}}}$6r7   rj   re  r+  )rk   rl   rm   rn   r   r9  r1  r   r  r   r	  r}  r  r  r   r)  rd  rh  r   r   rQ  rL   r7   r5   r  r    s       ! !F NH$ $ $ $3 3 3  , , ,3 3 33 3 3/ / /5 5 5 5     G G W \G7 7 7 7 7 7r7   r  c                       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dS )r  a  
    The cosecant function.

    Returns the cosecant of x (measured in radians).

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

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

    Examples
    ========

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

    See Also
    ========

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

    References
    ==========

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

    TNc                 ,    |                      |          S rj   r\  r   s     r5   r   z
csc.period/  r]  r7   c                 &    dt          |          z  S r  r  r   s      r5   r}  zcsc._eval_rewrite_as_sin2  rb  r7   c                 `    t          |          t          |          t          |          z  z  S rj   r  r   s      r5   r	  zcsc._eval_rewrite_as_sincos5  rd  r7   c                 B    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                 :    t          t          dz  |z
  d          S r   r  r   s      r5   r  zcsc._eval_rewrite_as_sec?  ri  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  rf  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  sG    ::::::AbDzz1d3ii(<(<<=>>r7   r   c                     |dk    r6t          | j        d                    t          | j        d                   z  S t          | |          r   )r  r=   r  r	   r   s     r5   r   z	csc.fdiffI  sE    q==	!%%%c$)A,&7&777$T8444r7   c                 X    | j         d         }|j        r|t          z  j        du rdS d S d S rE   r%  rX  s     r5   rd  zcsc._eval_is_complexO  r&  r7   c                 B   | 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   rn  s       r5   r   zcsc.taylor_termT  s     66WQZZ<UUa!eqjj6M

A1qAMAE*1,a!A#'lQ.>?acNN##$qsQw<009!A#? @r7   r   c                 *   ddl m} ddlm} | j        d         }|                    |d                                          }|t          z  }|j        r2||t          z  z
  	                    |          }	t          j        |z  |	z  S |t          j        u r*|                    |d ||          j        rdnd          }|t          j        t          j        fv r  |t          j        t          j                  S |j        r|                     |          n| S )Nr   r   r  rD  rE  rF  rq  r  s
             r5   rQ  zcsc._eval_as_leading_terma  s   AAAAAA;;;;;;ilXXa^^""$$rE< 	)"*--a00BM1$b(("""1aBBtHH,@%ISScJJB!*a0111;q11:>>> "6tyy}}}$6r7   rj   re  r+  )rk   rl   rm   rn   r   r9  r2  r   r}  r	  r  r   r  r  r)  r   rd  rh  r   r   rQ  rL   r7   r5   r  r    s       ! !F NG$ $ $ $  , , ,. . .1 1 1/ / /3 3 3? ? ?5 5 5 5  
 	@ 	@ W \	@7 7 7 7 7 7r7   r  c                   d    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dS )r!  a  
    Represents an unnormalized sinc function:

    .. math::

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

    Examples
    ========

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

    * Automated Evaluation

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

    * Differentiation

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

    * Series Expansion

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

    * As zero'th order spherical Bessel Function

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

    See also
    ========

    sin

    References
    ==========

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

    r   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  sK    IaLq== q66!8c!ffQTk))$T8444r7   c                    |j         rt          j        S |j        r@|t          j        t          j        fv rt          j        S |t          j        u rt          j        S |t          j        u rt          j        S |	                                r | |           S t          |          }|R|j        r"t          |j                   rt          j        S d S d|z  j        r!t          j        |t          j        z
  z  |z  S d S d S 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    ; 	5L= 	qz1#5666vu!###5L'')) 	3t99S>>" >S[)) "6M" "H*( >}x!&'89#==  > >r7   r   c                 j    | j         d         }t          |          |z                      |||          S r+  )r=   r   r   rX  s        r5   r   zsinc._eval_nseries  s/    IaLAq''1d3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55555r!Szz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  s3    #c((3,3815!&/JJJr7   c                     | j         d         j        rdS t          | j         d                   \  }}|j        rt	          |j        |j        g          S |j        r	|j        rdS d S d S )Nr   TF)r=   is_infiniter   r?   r   r   
is_nonzeror   r\  s      r5   r_  zsinc._eval_is_zero  s    9Q<# 	4#DIaL11g< 	Gg0'2DEFFF> 	g0 	5	 	 	 	r7   c                 R    | j         d         j        s| j         d         j        rdS d S rS  )r=   rT   r   r.  s    r5   r  zsinc._eval_is_real  s2    9Q<( 	DIaL,E 	4	 	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  s        3 3h ')N5 5 5 5 > > [>.4 4 4 4  K K K     $OOOr7   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dS )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  s3   

GGAIr!t
GGAIr!t
 d1ggIr!t
 !d1gg+q!!2a4	

 GGDT!WW%%%a'A
 !d1gg+q!!2hq!nn#4
 GGDT!WW%%%a'HQNN):
 FBqD
 T!WWaA
 $q''!)#$$bd
 T!WWaHQNN!2
 $q''!)#$$b!Q&7
 !WWq[!ORU
 a[!ObSV
 !WWq[!ORB/
  GGAIQ	!2b5!
" !WWHQJa"RCF#
$ !WWq[$q''!2b5a[$q''!B3r6GGAIQ	!2hq"oo#5a[$q''!2hq"oo#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  sa    GGAIr!td1ggIr!tGGRTGGaKAQK"QQKHQNN*QtAwwYAQtAwwYHQNN!2QtAwwYq[!!2b5QtAwwYq[!!2hq"oo#5QKBaL2#b&QKHQOO+
 	
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$  s   

d1ggIaKA
GGRT
 QtAwwYq[!!2a4
 d8Aq>>DGGAI-...1	

 QtAwwYq[!!2hq!nn#4
 d8Aq>>DGGAI-...8Aq>>0A
 r!t
 QtAwwYA
 d1tAww;A
 QtAwwYHQNN!2
 d1tAww;HQNN!2
 QKB
 GGaKHQOO+
 1ggkNBxB///
 GGd1ggr"u
  GGd1ggr(1b//1!
" 1ggQ "Xb"%5%5"5#
 	
r7   N)rk   rl   rm   rn   r   r   r   rV   rp   rq   rh  r   r  r  r  rL   r7   r5   r  r    s        99eQ]AFA4EFN
 
 W \
8 
 
 W \
& 
 
 W \
 
 
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d	S )r   ad  
    The inverse sine function.

    Returns the arcsine of x in radians.

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

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

    A purely imaginary argument will lead to an asinh expression.

    Examples
    ========

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

    See Also
    ========

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

    References
    ==========

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

    r   c                 t    |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  s=    q==T!dilAo-....$T8444r7   c                 z     | j         | j         }|j         | j         k    r|j        d         j        rdS d S |j        S r;   r<   r=   r>   r@   s     r5   rC   zasin._eval_is_rationalo  K    DIty!6TYvay$ u  = r7   c                 N    |                                  o| j        d         j        S r+  )rU  r=   is_positiver.  s    r5   _eval_is_positivezasin._eval_is_positivew  "    **,,I11IIr7   c                 N    |                                  o| 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 |                                r | |            S |j        r |                                 }||v r||         S t          |          }|ddlm} t          j         ||          z  S |j        rt          j        S t%          |t&                    rj|j        d         }|j        rV|dt          z  z  }|t          k    r
t          |z
  }|t          dz  k    r
t          |z
  }|t           dz  k     rt           |z
  }|S t%          |t,                    r.|j        d         }|j        rt          dz  t/          |          z
  S d S d S )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   = 	ae||u
"")!/99***z!/11 v!t%%s1u!###$$'')) 	CII:= 	'**Jj  !#&055CCCCCC?55>>11; 	6Mc3 	(1+C  qt88s(C A::s(C"Q;;#)C
c3 	((1+C  (!td3ii''	( 	(( (r7   c                 J   | dk     s	| dz  dk    rt           j        S t          |          }t          |          dk    r(| dk    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   ro  Rr  s          r5   r   zasin.taylor_term  s     q55AEQJJ6M

A>""a''AEE"2&!a%!|QAY/144UqL#AFA..aLLs1a4xz!r7   Nr   c                    | j         d         }|                    |d                                          }|t          j        u r(|                     |                    |                    S |j        r|                    |          S |t          j         t          j        t          j	        fv rB| 
                    t                                        |||                                          S d|dz  z
  j        r|                    ||r|nd          }t!          |          j        r&|j        rt"           |                     |          z
  S n{t!          |          j        r%|j        rt"          |                     |          z
  S nB| 
                    t                                        |||                                          S |                     |          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   ilXXa^^""$$;;99S0033444: 	*&&q))) 15&!%!2333<<$$::14d:SSZZ\\\AI" 		a771d1dd22D$xx# a> /32../D% a> .		"--. ||C((>>qtRV>WW^^```yy}}r7   c                    ddl m} | j        d                             |d          }|t          j        u rt          dd          }t          t          j        |dz  z
                                t                    
                    |dd|z            }t          j        | j        d         z
  }	|	                    |          }
|	|
z
  |
z  }|                    |d          s4|dk    r |d          n"t          dz   |t          |                    z   S t          t          j        |z                                 |||          }|                                t          |
          z                                  }|                                                    ||                                                                           |||z  |          z   S |t          j        u rt          dd          }t          t          j        |dz  z                                 t                    
                    |dd|z            }t          j        | j        d         z   }	|	                    |          }
|	|
z
  |
z  }|                    |d          s5|dk    r |d          n#t           dz   |t          |                    z   S t          t          j        |z                                 |||          }|                                t          |
          z                                  }|                                                    ||                                                                           |||z  |          z   S t)          j        | |||          }|t          j        u r|S d|dz  z
  j        r| j        d                             ||r|nd          }t1          |          j        r|j        rt           |z
  S nWt1          |          j        r|j        r
t          |z
  S n1|                     t                                        ||||	          S |S 
Nr   Or;  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  arg0r;  serarg1rd   re   res1resr  s                  r5   r   zasin._eval_nseries  s   ((((((y|  A&&15==cD)))Aquq!t|$$,,S1199!Q!DDC549Q<'D$$Q''AAA##Aq)) = Avvqqttt2a4!!DGG**+<<	??00ad0CCD<<>>$q'')1133C;;==%%a--4466>>@@11QT1::MM1=  cD)))Aq}q!t+,,44S99AA!Q!LLC549Q<'D$$Q''AAA##Aq)) > AvvqqtttB3q511T!WW::+==	??00ad0CCD<<>>$q'')1133C;;==%%a--4466>>@@11QT1::MM$T1===1$$$JaK$ 		S9Q<##At':tt;;D$xx# S# %39$%D% S# $8O$ ||C((66q!$T6RRR
r7   c                 6    t           dz  t          |          z
  S r   r   r   r  s      r5   _eval_rewrite_as_acoszasin._eval_rewrite_as_acos	      !td1gg~r7   c           
      X    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	  s4    AOA$5QAX$F G GGGr7   c           	      X    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11r7   c                 <    t           dz  t          d|z            z
  S r  r   r   r   s      r5   _eval_rewrite_as_aseczasin._eval_rewrite_as_asec	      !td1S5kk!!r7   c                 &    t          d|z            S r  )r   r   s      r5   _eval_rewrite_as_acsczasin._eval_rewrite_as_acsc	      AcE{{r7   c                 X    | j         d         }|j        odt          |          z
  j        S Nr   r   r=   rT   r_   is_nonnegativerA   r   s     r5   rU  zasin._eval_is_extended_real	  (    IaL!Aq3q66z&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 5 5 5! ! !J J JJ J J 4( 4( [4(l " " W \"   0* * * *X  . . .H H H "62 2 2" " "  B B 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dS )r   a  
    The inverse cosine function.

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

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

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

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

    A purely imaginary argument will be rewritten to asinh.

    Examples
    ========

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

    See Also
    ========

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

    References
    ==========

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

    r   c                 t    |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	  s=    q==d1ty|Q.////$T8444r7   c                 z     | j         | j         }|j         | j         k    r|j        d         j        rdS d S |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        rD|                                 }||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          k    rdt          z  |z
  }|S t!          |t(                    r.|j        d         }|j        rt          dz  t          |          z
  S d S d S 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   = 	ae||u
""z!/11***)!/99 !tv%%	!###$$= 	/**Jj  !tjo--##!tj#...055a4$s))##c3 	(1+C  qt88B$*C
c3 	((1+C  (!td3ii''	( 	(( (r7   c                 l   | dk    r
t           dz  S | dk     s	| dz  dk    rt          j        S t          |          }t	          |          dk    r(| dk    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     66a4KUUa!eqjj6M

A>""a''AEE"2&!a%!|QAY/144UqL#AFA..aLLr!tAqDy{"r7   Nr   c                    | j         d         }|                    |d                                          }|t          j        u r(|                     |                    |                    S |dk    r?t          d          t          t          j        |z
                      |                    z  S |t          j         t          j	        fv r0| 
                    t                                        |||          S d|dz  z
  j        r|                    ||r|nd          }t          |          j        r(|j        r dt           z  |                     |          z
  S ntt          |          j        r|j        r|                     |           S nB| 
                    t                                        |||                                          S |                     |          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	  s   ilXXa^^""$$;;99S003344477774 = =a @ @AAAA15&!+,,,<<$$::14d:SSSAI" 		a771d1dd22D$xx# a> 0R4$))B--//0D% a> * IIbMM>)* ||C((>>qtRV>WW^^```yy}}r7   c                 X    | j         d         }|j        odt          |          z
  j        S r  r  r  s     r5   rU  zacos._eval_is_extended_real	  r  r7   c                 *    |                                  S rj   )rU  r.  s    r5   _eval_is_nonnegativezacos._eval_is_nonnegative	  s    **,,,r7   c                    ddl m} | j        d                             |d          }|t          j        u rt          dd          }t          t          j        |dz  z
                                t                    
                    |dd|z            }t          j        | j        d         z
  }	|	                    |          }
|	|
z
  |
z  }|                    |d          s)|dk    r |d          n |t          |                    S t          t          j        |z                                 |||          }|                                t          |
          z                                  }|                                                    ||                                                                           |||z  |          z   S |t          j        u rt          dd          }t          t          j        |dz  z                                 t                    
                    |dd|z            }t          j        | j        d         z   }	|	                    |          }
|	|
z
  |
z  }|                    |d          s1|dk    r |d          nt&           |t          |                    z   S t          t          j        |z                                 |||          }|                                t          |
          z                                  }|                                                    ||                                                                           |||z  |          z   S t)          j        | |||          }|t          j        u r|S d|dz  z
  j        r| j        d                             ||r|nd          }t1          |          j        r|j        rdt&          z  |z
  S nPt1          |          j        r|j        r| S n1|                     t                                        ||||	          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	  s   ((((((y|  A&&15==cD)))Aquq!t|$$,,S1199!Q!DDC549Q<'D$$Q''AAA##Aq)) 6 Avvqqttt11T!WW::5	??00ad0CCD<<>>$q'')1133C;;==%%a--4466>>@@11QT1::MM1=  cD)))Aq}q!t+,,44S99AA!Q!LLC549Q<'D$$Q''AAA##Aq)) ; Avvqqttt2$q''

?:	??00ad0CCD<<>>$q'')1133C;;==%%a--4466>>@@11QT1::MM$T1===1$$$JaK$ 		S9Q<##At':tt;;D$xx# S# &R4#:%&D% S#  4K  ||C((66q!$T6R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	  sA    !tao!DQTNN2334 4 	4r7   c                 6    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	  sH    DQTNN1$%%AAd1QT6llN0B(CCCr7   c                     t           S r  ra  r   s     r5   r  zacos.inverse	  r  r7   c           
      n    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	  s8    !taa$q36z"2"22C788888r7   c                 &    t          d|z            S r  )r   r   s      r5   r  zacos._eval_rewrite_as_asec	  r  r7   c                 <    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         d                                                   }|j        du r|S |j        r|dz   j        r|dz
  j        r|S d S d S d S Nr   Fr   )r=   r<   r-  rT   r  is_nonpositive)rA   r  rs      r5   r/  zacos._eval_conjugate
  s    IaLIIdil,,..//&&H 	QU$: 	A?U 	H	 	 	 	 	 	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   '	  sU       ) )V5 5 5 5! ! ! )( )( [)(V # # W \#    .B B B- - -* * * *X4 4 4 "6  D D D   9 9 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=   r   c                 Z    |dk    rdd| j         d         dz  z   z  S t          | |          r  r=   r	   r   s     r5   r   z
atan.fdiff8
  s5    q==a$)A,/)**$T8444r7   c                 z     | j         | j         }|j         | j         k    r|j        d         j        rdS d S |j        S r;   r  r@   s     r5   rC   zatan._eval_is_rational>
  r  r7   c                 &    | j         d         j        S r+  )r=   is_extended_positiver.  s    r5   r  zatan._eval_is_positiveF
  s    y|00r7   c                 &    | j         d         j        S r+  )r=   is_extended_nonnegativer.  s    r5   r  zatan._eval_is_nonnegativeI
  s    y|33r7   c                 &    | j         d         j        S r+  )r=   r?   r.  s    r5   r_  zatan._eval_is_zeroL
  s    y|##r7   c                 &    | 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 |                                r | |            S |j        r |                                 }||v r||         S t!          |          }|ddlm} t          j         ||          z  S |j        rt          j        S t)          |t*                    r8|j        d         }|j        r$|t          z  }|t          dz  k    r
|t          z  }|S t)          |t0                    rH|j        d         }|j        r6t          dz  t3          |          z
  }|t          dz  k    r
|t          z  }|S d S d S )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   = 	ae||u
""!t***s1u v!t%%s1u!###EEEEEE;s1ubd+++'')) 	CII:= 	'**Jj  !#&055CCCCCC?55>>11; 	6Mc3 	(1+C  r	A::2IC
c3 	(1+C  dT#YY&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
  sN     q55AEQJJ6M

A=AEA:.q!t3A55r7   Nr   c                    | j         d         }|                    |d                                          }|t          j        u r(|                     |                    |                    S |j        r|                    |          S |t          j         t          j        t          j	        fv rB| 
                    t                                        |||                                          S d|dz  z   j        r|                    ||r|nd          }t!          |          j        r2t#          |          j        r|                     |          t&          z
  S nt!          |          j        r2t#          |          j        r|                     |          t&          z   S nB| 
                    t                                        |||                                          S |                     |          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
  s   ilXXa^^""$$;;99S0033444: 	*&&q)))1?"AOQ5FGGG<<$$::14d:SSZZ\\\AI" 		a771d1dd22D$xx# ab66% .99R==2--.D% ab66% .99R==2--. ||C((>>qtRV>WW^^```yy}}r7   c                    | j         d                             |d          }|t          j        t          j        t          j        z  fv r1|                     t                                        ||||          S t          j        | |||          }| j         d         	                    ||r|nd          }|t          j
        u rt          |          dk    r
|t          z
  S |S d|dz  z   j        rt          |          j        rt          |          j        r
|t          z
  S ndt          |          j        rt          |          j        r
|t          z   S n1|                     t                                        ||||          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
  sq   y|  A&& AOQ]1?%BCCC<<$$221ad2NNN$T1===y|4#644Q771$$$$xx!||RxJaK$ 	S$xx# Sd88' $8O$D% Sd88' $8O$ ||C((66q!$T6R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
  sL    q #aeaoa.?&?"@"@!%!/!++,,#- . 	.r7   c                    |d         t           j        t           j        fv r=t          dz  t	          d| j        d         z            z
                      |||          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
  sm    8
A$6777qD4$)A,///>>q!TJJJ77((E1d;;;r7   c                     t           S r  r  r   s     r5   r  zatan.inverse
  r  r7   c           
          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
  sB    CF||CAQtAQJ/?/?-?(@(@!@AAr7   c           	      x    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
  s9    CF||CQtAQJ'7'7%7 8 888r7   c                 &    t          d|z            S r  r  r   s      r5   r  zatan._eval_rewrite_as_acot
  r  r7   c                 r    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
  s4    CF||CT!c1f*%5%5 6 666r7   c           	          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
  s=    CF||CAT!c1f*-=-=(>(>!>??r7   re  r+  rf  )!rk   rl   rm   rn   tTupler   rY  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 ,o'78N5 5 5 5! ! !1 1 14 4 4$ $ $- - - 2 2 [2h 6 6 W \6   .   2. . . "6< < < < <   B B B9 9 9  7 7 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

    r   c                 Z    |dk    rdd| j         d         dz  z   z  S t          | |          r  r  r   s     r5   r   z
acot.fdiff  s5    q==q49Q<?*++$T8444r7   c                 z     | j         | j         }|j         | j         k    r|j        d         j        rdS d S |j        S r;   r  r@   s     r5   rC   zacot._eval_is_rational  r  r7   c                 &    | j         d         j        S r+  )r=   r  r.  s    r5   r  zacot._eval_is_positive  s    y|**r7   c                 &    | j         d         j        S r+  )r=   rL  r.  s    r5   r  zacot._eval_is_negative   s    y|''r7   c                 &    | j         d         j        S r+  rT  r.  s    r5   rU  zacot._eval_is_extended_real#  r  r7   c                 0   |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 |                                r | |            S |j        rE|                                 }||v r-t          dz  ||         z
  }|t          dz  k    r
|t          z  }|S t          |          }|ddlm} t          j          ||          z  S |j        rt          t          j        z  S t'          |t(                    r8|j        d         }|j        r$|t          z  }|t          dz  k    r
|t          z  }|S t'          |t.                    rH|j        d         }|j        r6t          dz  t1          |          z
  }|t          dz  k    r
|t          z  }|S d S d S )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   = 	ae||u
""v***v 1u!t%%s1u!###6M'')) 	CII:= 	**Jj  dZ_,A::2IC
055CCCCCCO#EE'NN22; 	af9c3 	(1+C  r	A::2IC
c3 	(1+C  dT#YY&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`     66a4KUUa!eqjj6M

A=AEA:.q!t3A55r7   Nr   c                    | j         d         }|                    |d                                          }|t          j        u r(|                     |                    |                    S |t          j        u rd|z                      |          S |t          j         t          j        t          j	        fv rB| 
                    t                                        |||                                          S |j        rd|dz  z   j        r|                    ||r|nd          }t#          |          j        r2t%          |          j        r|                     |          t&          z   S nt#          |          j        r2t%          |          j        r|                     |          t&          z
  S nB| 
                    t                                        |||                                          S |                     |          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  s   ilXXa^^""$$;;99S0033444"""cE**1---1?"AOQV<<<<<$$::14d:SSZZ\\\? 		aBE	6 		a771d1dd22D$xx# ab66% .99R==2--.D% ab66% .99R==2--. ||C((>>qtRV>WW^^```yy}}r7   c                 4   | j         d                             |d          }|t          j        t          j        t          j        z  fv r1|                     t                                        ||||          S t          j        | |||          }|t          j	        u r|S | j         d         
                    ||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 ndt          |          j        rt!          |          j        r
|t          z
  S n1|                     t                                        ||||          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   y|  A&& AOQ]1?%BCCC<<$$221ad2NNN$T1===1$$$Jy|4#644Q77< 	$xx!||RxJ 	S!dAg+!: 	S$xx# Sd88' $8O$D% Sd88' $8O$ ||C((66q!$T6RRR
r7   c                     |d         t           j        t           j        fv r2t          d| j        d         z                                |||          S t                                          ||||          S r  )r   r   r   r   r=   r   r  r  r  s        r5   r  zacot._eval_aseries  sd    8
A$6777$)A,''55aDAAA77((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!/!*;&;"<"<!aoa''((#) * 	*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  sZ    D36NN"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  sK    4#q&>>!$tS!VG}}T36'A+5F5F'F"G"GGGr7   c                 &    t          d|z            S r  r  r   s      r5   r  zacot._eval_rewrite_as_atan  r  r7   c                     |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  sA    4#q&>>!$tQaZa,?'@'@"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  sJ    4#q&>>!2a4$tQaZa4G/H/H*I*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 o'78N5 5 5 5! ! !+ + +( ( (- - - 3 3 [3j 6 6 W \6   .   6< < < < <* * * "6   @ @ @H H H  B B BK K K K K K 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dS )r   a  
    The inverse secant function.

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

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

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

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

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

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

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

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

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

    Examples
    ========

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

    See Also
    ========

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

    References
    ==========

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

    c                    |j         rt          j        S |j        rI|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        rD|                                 }||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          k    rdt          z  |z
  }|S t          |t$                    r.|j        d         }|j        rt          dz  t'          |          z
  S d S d S 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   ; 	%$$= 	ae||uv%%	1:q113DEEEa4K= 	/**Jj  !tjo--##!tj#...? 	a4Kc3 	(1+C  qt88B$*C
c3 	((1+C  (!td3ii''	( 	(( (r7   r   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  sQ    q==dilAod1q1q/@+@&A&AABB$T84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k    r.| dk    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    66?3q1u::--UUa!eqjj6M

A>""Q&&1q55"2&QUQqSM*QT111qy=AAF#AFA..!3aLL1$)A-2'!+a/!Q$6::r7   Nr   c                    | j         d         }|                    |d                                          }|t          j        u r(|                     |                    |                    S |dk    r?t          d          t          |t          j        z
                      |                    z  S |t          j         t          j	        fv r0| 
                    t                                        |||          S |j        rd|dz  z
  j        r|                    ||r|nd          }t!          |          j        r|j        r|                     |           S n~t!          |          j        r(|j        r dt$          z  |                     |          z
  S nB| 
                    t                                        |||                                          S |                     |          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<  s   ilXXa^^""$$;;99S003344477774qu = =a @ @AAAA15&!&!!!<<$$::14d:SSS: 		a1r1u91 		a771d1dd22D$xx# a> * IIbMM>)*D% a> 0R4$))B--//0 ||C((>>qtRV>WW^^```yy}}r7   c                    ddl m} | j        d                             |d          }|t          j        u r[t          dd          }t          t          j        |dz  z                                 t                    
                    |dd|z            }t          j        | j        d         z   }	|	                    |          }
|	|
z
  |
z  }t          t          j        |z                                 |||          }|                                t          |
          z                                  }|                                                    ||                                                                           |||z  |          z   S |t          j        u r[t          dd          }t          t          j        |dz  z
                                t                    
                    |dd|z            }t          j        | j        d         z
  }	|	                    |          }
|	|
z
  |
z  }t          t          j        |z                                 |||          }|                                t          |
          z                                  }|                                                    ||                                                                           |||z  |          z   S t%          j        | |||          }|t          j        u r|S |j        rd|dz  z
  j        r| j        d                             ||r|nd          }t/          |          j        r|j        r| S nZt/          |          j        r|j        rdt2          z  |z
  S n1|                     t                                        ||||	          S |S 
Nr   r  r;  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  sc   ((((((y|  A&&15==cD)))Aquq!t|$$,,S1199!Q!DDC=49Q</D$$Q''AAA	??00ad0CCD<<>>$q'')1133C;;==%%a--4466>>@@11QT1::MM1=  cD)))Aq}q!t+,,44S99AA!Q!LLC=49Q</D$$Q''AAA	??00ad0CCD<<>>$q'')1133C;;==%%a--4466>>@@11QT1::MM$T1===1$$$J< 		SQq[5 		S9Q<##At':tt;;D$xx# S#  4K D% S# &R4#:%& ||C((66q!$T6RRR
r7   c                 v    | j         d         }|j        du rdS t          |dz
  j        | dz
  j        f          S r  )r=   rT   r   r  r  s     r5   rU  zasec._eval_is_extended_real{  sC    IaL&&5!a%/1"q&1HIJ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  sA    !taoc!/#*=Q3PQ6\@R@R*R&S&SSSSr7   c                 <    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  sG    AqDzz!|!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   rF  s       r5   r  zasec._eval_rewrite_as_acot  sL    AqDzz!|!tQXd1T!Q$(^^+;&<&<!<<<r7   c                 6    t           dz  t          |          z
  S r   r  r   s      r5   r  zasec._eval_rewrite_as_acsc      !td3ii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 9v #( #( [#(J5 5 5 5    ; ; W \;    .& & & &PK K KT T 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dS )r   aV  
    The inverse cosecant function.

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

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

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

    Examples
    ========

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

    See Also
    ========

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

    References
    ==========

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

    c                 p   |j         rt          j        S |j        rK|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 |                                r | |            S |j        rt          j
        S |j        r |                                 }||v r||         S t          |t                     rj|j        d         }|j        rV|dt          z  z  }|t          k    r
t          |z
  }|t          dz  k    r
t          |z
  }|t           dz  k     rt           |z
  }|S t          |t&                    r.|j        d         }|j        rt          dz  t)          |          z
  S d S d S r  )r?   r   rp   r   r   r   r   r   r   r   rV   r   r  r  r  r2   r  r=   r  r  r   r6  s       r5   r   z	acsc.eval  s   ; 	%$$= 	ae||u!t%%s1u1:q113DEEE6M'')) 	CII:? 	6M= 	'**Jj  !#&c3 	(1+C  qt88s(C A::s(C"Q;;#)C
c3 	((1+C  (!td3ii''	( 	(( (r7   r   c                     |dk    r7d| j         d         dz  t          dd| j         d         dz  z  z
            z  z  S t          | |          r  r9  r   s     r5   r   z
acsc.fdiff  sQ    q==ty|QtA$)A,/0A,A'B'BBCC$T8444r7   c                     t           S r  r  r   s     r5   r  zacsc.inverse  r  r7   c                    | dk    rDt           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k    r.| dk    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 r<  )
r   r   r4   r#   rV   r   r   r   r   r   r  s          r5   r   zacsc.taylor_term  s    66a4!/#a&&001?3q663IIIUUa!eqjj6M

A>""Q&&1q55"2&QUQqSM*QT111qy=AAF#AFA..!3aLL1$)A-2*Q.A599r7   Nr   c                    | j         d         }|                    |d                                          }|t          j        u r(|                     |                    |                    S |t          j         t          j        t          j        fv rB| 	                    t                                        |||                                          S |t          j        u rd|z                      |          S |j        rd|dz  z
  j        r|                    ||r|nd          }t#          |          j        r%|j        rt&          |                     |          z
  S n|t#          |          j        r&|j        rt&           |                     |          z
  S nB| 	                    t                                        |||                                          S |                     |          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  s   ilXXa^^""$$;;99S003344415&!%(((<<$$::14d:SSZZ\\\"""cE**1---: 		a1r1u91 		a771d1dd22D$xx# a> .		"--.D% a> /32../ ||C((>>qtRV>WW^^```yy}}r7   c                    ddl m} | j        d                             |d          }|t          j        u r[t          dd          }t          t          j        |dz  z                                 t                    
                    |dd|z            }t          j        | j        d         z   }	|	                    |          }
|	|
z
  |
z  }t          t          j        |z                                 |||          }|                                t          |
          z                                  }|                                                    ||                                                                           |||z  |          z   S |t          j        u r[t          dd          }t          t          j        |dz  z
                                t                    
                    |dd|z            }t          j        | j        d         z
  }	|	                    |          }
|	|
z
  |
z  }t          t          j        |z                                 |||          }|                                t          |
          z                                  }|                                                    ||                                                                           |||z  |          z   S t%          j        | |||          }|t          j        u r|S |j        rd|dz  z
  j        r| j        d                             ||r|nd          }t/          |          j        r|j        r
t2          |z
  S nXt/          |          j        r|j        rt2           |z
  S n1|                     t                                        ||||	          S |S 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acsc._eval_nseries%  sc   ((((((y|  A&&15==cD)))Aquq!t|$$,,S1199!Q!DDC=49Q</D$$Q''AAA	??00ad0CCD<<>>$q'')1133C;;==%%a--4466>>@@11QT1::MM1=  cD)))Aq}q!t+,,44S99AA!Q!LLC=49Q</D$$Q''AAA	??00ad0CCD<<>>$q'')1133C;;==%%a--4466>>@@11QT1::MM$T1===1$$$J< 		SQq[5 		S9Q<##At':tt;;D$xx# S# $8O$D% S# %39$% ||C((66q!$T6R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  s:    AOC$7$q1S!V8|:L:L$L M MMMr7   c                 &    t          d|z            S r  )r   r   s      r5   r  zacsc._eval_rewrite_as_asinR  r  r7   c                 <    t           dz  t          d|z            z
  S r  r  r   s      r5   r  zacsc._eval_rewrite_as_acosU  r  r7   c                     t          |dz            |z  t          dz  t          t          |dz  dz
                      z
  z  S r  rE  r  s      r5   r  zacsc._eval_rewrite_as_atanX  s:    AqDzz!|RTDadQh$8$8899r7   c           	          t          |dz            |z  t          dz  t          dt          |dz  dz
            z            z
  z  S r  rI  r   s      r5   r  zacsc._eval_rewrite_as_acot[  sB    CF||CAQtCFQJ/?/?-?(@(@!@AAr7   c                 6    t           dz  t          |          z
  S r   r  r   s      r5   r  zacsc._eval_rewrite_as_asec^  rK  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     s       ( (T *( *( [*(X5 5 5 5    : : W \:    .& & & &PN N N "6  " " ": : :B B B         r7   r   c                   \     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dl m} |t          j        u r9|j        rt
          S dt
          z   |t          |                    z  t
          z
  S |t          j        u rt          j        S |j	        r3|j	        r,|j
        r%|j
        rt          |          }t          |          }|j        r|j        r|j        rt          ||z            S |j        rC|j        rt          ||z            t
          z
  S |j        rt          ||z            t
          z   S n=|j        r6|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
        rEt)          t
          t          |          dk     fdt+          |d          ft          j        df          S |j
        rM|j
        rHt          j         t/          |t          j        |z  z   t1          |dz  |dz  z             z            z  S d S d S )Nr   )	Heavisider   T)'sympy.functions.special.delta_functionsr[  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   r[  s       r5   r   z
atan2.eval  sB   EEEEEE"""y 	R42a55))*R//!*__6M^ 	 	1; 	1; 	1A1A 	!!"4 	!} !AaCyy  != *!99r>)% *!99r>)* != !a4K] !3q5LY !5L9 	0$ 11599Q<</00{ 0 "beeai"#R1XX"#%0 0 0 ; 	;1; 	;O#CQ_Q&&QTAqD[(9(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$M N 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   r_  s       r5   r  zatan2._eval_rewrite_as_atan  sw    !DAQTAqD[(9(9$9!:;;;R1XXFbeeaiR1XX%( ( 	(r7   c           
      b   |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     	0!"4 	0Qq..///!!qD1a4KQtAwwY!/#c!ffT#a&&\\6I2J2J"JJJr7   c                 J    | j         d         j        o| j         d         j        S r  rT  r.  s    r5   rU  zatan2._eval_is_extended_real  s    y|,N11NNr7   c                     |                      | j        d                                         | j        d                                                   S r  r,  r.  s    r5   r/  zatan2._eval_conjugate  s:    yy1//1149Q<3I3I3K3KL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  s^    y1q==adQTk?"]]2q!tad{##$T8444r7   c                 ~    | j         \  }}|j        r(|j        r#t                                          |          S d S d S rj   )r=   rT   r  _eval_evalf)rA   precr   r   r  s       r5   rh  zatan2._eval_evalf  sO    y1 	-!"4 	-77&&t,,,	- 	- 	- 	-r7   )rk   rl   rm   rn   rg  r   r  r  rc  rU  r/  r   rh  r  r   s   @r5   r   r   b  s        d dL %; %; [%;NO O O( ( (K K KO O OM M M	5 	5 	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    rb  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  r0  r  r  r!  r  r   r   r   r   r   r   r   rL   r7   r5   <module>r     sc   3 3 3 3 3 3 3 3       $ $ $ $ $ $             S S S S S S S S S S S S F F F F F F F F F F F F       I I I I I I I I I I I I I I ( ( ( ( ( ( ( ( " " " " " " + + + + + + + + & & & & & & O O O O O O O O B B B B B B B B E E E E E E E E E E ; ; ; ; ; ; ; ; 5 5 5 5 5 5 C C C C C C C C C C : : : : : :) ) ) ) ) ) ) ) ) ) # # # # # # # # # # # # 3 3 3 3 3 3 6 6 6 6 6 63 3 3AK AK AK AK AKH AK AK AKH 	  	"" " "JH H4 H HVD$J-? H H H HVs s s s s
 s s sl	g1 g1 g1 g1 g1
 g1 g1 g1TQ Q Q Q Q
 Q Q Qh
z z z z z
 z z zz	uO uO uO uO uO&; uO uO uOpi7 i7 i7 i7 i7
) i7 i7 i7Xf7 f7 f7 f7 f7
) f7 f7 f7Rt$ t$ t$ t$ t$8 t$ t$ t$xN
 N
 N
 N
 N
8 N
 N
 N
bf f f f f' f f fRc c c c c' c c cLR@ R@ R@ R@ R@' R@ R@ R@jWK WK WK WK WK' WK WK WKtY  Y  Y  Y  Y ' Y  Y  Y xG  G  G  G  G ' G  G  G Ts- s- s- s- s-( s- s- s- s- s-r7   