o
    8Va                    @   sJ  d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZmZmZ d dlmZ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 d dlm Z m!Z! d dl"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 G dd de
Z7dd Z8d;ddZ9G dd de7Z:G dd de7Z;G dd de7Z<G d d! d!e7Z=G d"d# d#e7Z>G d$d% d%e>Z?G d&d' d'e>Z@G d(d) d)e
ZAG d*d+ d+e
ZBG d,d- d-eBZCG d.d/ d/eBZDG d0d1 d1eBZEG d2d3 d3eBZFG d4d5 d5eBZGG d6d7 d7eBZHG d8d9 d9eBZId:S )<    )Tuple)Add)sympifycacheit)Expr)FunctionArgumentIndexError	PoleError
expand_mul)	fuzzy_notfuzzy_or	FuzzyBool)igcdexRationalpi)Ne)S)Symbol)	factorialRisingFactorial)logexp)floor)acothasinhatanhcoshcothHyperbolicFunctionsinhtanh)sqrtMinMax)	Piecewise)	FiniteSet)numbered_symbolsc                   @   sJ   e Zd ZdZdZejfZdd Zdd Z	dddZ
dd	d
ZdddZdS )TrigonometricFunctionz(Base class for trigonometric functions. Tc                 C   sF   | j | j }|j | j kr |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s r0   J/usr/lib/python3/dist-packages/sympy/functions/elementary/trigonometric.py_eval_is_rational!   s   z'TrigonometricFunction._eval_is_rationalc                 C   sf   | j | j }|j | j kr0t| jd jr| jd jrdS t| jd }|d ur,|jr.dS d S d S |jS Nr   FT)r)   r*   r   r,   Zis_algebraic	_pi_coeffr+   )r.   r/   pi_coeffr0   r0   r1   _eval_is_algebraic)   s   z(TrigonometricFunction._eval_is_algebraicc                 K   s&   | j dd|i|\}}||tj  S Ndeepr0   )as_real_imagr   ImaginaryUnit)r.   r8   hintsZre_partZim_partr0   r0   r1   _eval_expand_complex4   s   z*TrigonometricFunction._eval_expand_complexc                 K   s   | j d jr#|rd|d< | j d j|fi |tjfS | j d tjfS |r9| j d j|fi | \}}||fS | j d  \}}||fS )Nr   Fcomplex)r*   is_extended_realexpandr   Zeror9   r.   r8   r;   reimr0   r0   r1   _as_real_imag8   s    z#TrigonometricFunction._as_real_imagNc                 C   s   t | jd }|d u rt|jd }||stjS ||kr |S ||jv rV|jr9||\}}||kr9|t	| S |j
rV||\}}|j|dd\}}||krV|t	| S td)Nr   F)Zas_Addz%Use the periodicity function instead.)r
   r*   tupleZfree_symbolshasr   r@   is_MulZas_independentabsis_AddNotImplementedError)r.   Zgeneral_periodsymbolfghar0   r0   r1   _periodE   s$   

zTrigonometricFunction._periodTN)__name__
__module____qualname____doc__Z
unbranchedr   ComplexInfinity_singularitiesr2   r6   r<   rD   rP   r0   r0   r0   r1   r'      s    

r'   c                 C   s   t j}g }t| D ]}|t j}|r|jr||7 }q
|| q
|t ju r,| t jfS |t j t j }|t j | }|t j }|j	sMd| j	rV|j
du rVt||g  |fS | t jfS )a  
    Split ARG into two parts, a "rest" and a multiple of pi/2.
    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 as peel
    >>> from sympy import pi
    >>> from sympy.abc import x, y
    >>> peel(x + pi/2)
    (x, pi/2)
    >>> peel(x + 2*pi/3 + pi*y)
    (x + pi*y + pi/6, pi/2)

       F)r   r@   r   Z	make_argscoeffPir+   appendHalf
is_integeris_even)argr5   Z
rest_termsrO   KZm1Zm2Zfinal_coeffr0   r0   r1   _peeloff_pi_   s"   





rb      c                 C   s  t | } | tju rtjS | stjS | jr| tj}|r| \}}|jr_t	|d }|dkrUt
tt|d  }d| }|| }t
|}	|	|krTt|	|}|| }n
tt
|}|| }|jr~|d }
|
dkrl|S |
sz|jdurvtjS tdS |
| S |S dS | jrtjS dS )a  
    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 as coeff
    >>> from sympy import pi, Dummy
    >>> from sympy.abc import x
    >>> coeff(3*x*pi)
    3*x
    >>> coeff(11*pi/7)
    11/7
    >>> coeff(-11*pi/7)
    3/7
    >>> coeff(4*pi)
    0
    >>> coeff(5*pi)
    1
    >>> coeff(5.0*pi)
    1
    >>> coeff(5.5*pi)
    3/2
    >>> coeff(2 + pi)

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

    rc   r   rY   N)r   r   r[   Oner@   rG   rZ   as_coeff_MulZis_FloatrH   introundr   Zevalfr   r^   r_   r,   )r`   ZcyclescxcxrL   pmcmiZc2r0   r0   r1   r4      sH   %


r4   c                   @   s   e Zd ZdZd6ddZd7ddZedd	 Zee	d
d Z
d8ddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd9d(d)Zd*d+ Zd:d,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 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] http://dlmf.nist.gov/4.14
    .. [3] http://functions.wolfram.com/ElementaryFunctions/Sin
    .. [4] http://mathworld.wolfram.com/TrigonometryAngles.html

    Nc                 C      |  dt |S NrY   rP   r   r.   rK   r0   r0   r1   period     z
sin.periodrc   c                 C   s    |dkrt | jd S t| |Nrc   r   )cosr*   r   r.   argindexr0   r0   r1   fdiff     
z	sin.fdiffc                 C   s  ddl m} ddlm} |jr,|tju rtjS |jrtjS |tj	u s'|tj
u r,|ddS |tju r4tjS t||r|j|j}}t|dtj  }|tj
urW||d tj  }|tj	ure||d tj  }|||ttjd tjtdd tjur|||ttjtdd tjtd	d tjur|ddS |||ttjd tjtdd tjur|tt|t|dS |||ttjtdd tjtd
d tjur|dtt|t|S |tt|t|tt|t|S t||r|| S | r| |  S |tj}|d urtjt| S t|}|d ur|jr/tjS d| jrC|jdu rCtj |tj!  S |j"sW|tj }	|	|krU| |	S d S |j"r|d }
|
dkrn| |
d tj  S d|
 dkr~| d|
 tj S |tdd d tj }	t#|	}t|t#s|S |tj |kr| |tj S d S |j$rt%|\}
}|rt|t#|
 t#|t|
  S |jrtjS t|t&r|j'd S t|t(r|j'd }
|
t)d|
d   S t|t*r|j'\}}
|t)|
d |d   S t|t+r|j'd }
t)d|
d  S t|t,r.|j'd }
dt)dd|
d   |
  S t|t-r=|j'd }
d|
 S t|t.rR|j'd }
t)dd|
d   S d S )Nr   AccumBoundsSetExprrc   rY               F)/Zsympy.calculusr}   sympy.sets.setexprr   	is_Numberr   NaNr,   r@   InfinityNegativeInfinityrW   
isinstanceminmaxr   r[   intersectionr%   r   ZEmptySetr"   ro   r#   
_eval_funccould_extract_minus_signas_coefficientr:   r   r4   r^   r_   NegativeOner]   is_Rationalrw   rI   rb   asinr*   atanr!   atan2acosacotacscasec)clsr`   r}   r   r   r   di_coeffr5   nargrj   resultrl   yr0   r0   r1   eval
  s   





&
&,






 






zsin.evalc                 G   sl   | dk s
| d dkrt jS t|}t|dkr(|d }| |d  | | d   S d| d  ||   t|  S )Nr   rY   rc   r   r   r@   r   lenr   nrj   previous_termsrk   r0   r0   r1   taylor_term|     zsin.taylor_termr   c                 C   Z   | j d }|d ur|t||}||dtjtjr#td|  tj	| ||||dS Nr   zCannot expand %s around 0)r   logxcdir
r*   subsr   rF   r   r   rW   r	   r   _eval_nseriesr.   rj   r   r   r   r`   r0   r0   r1   r        
zsin._eval_nseriesc                 K   sR   t j}t|tst|tr||jd t}t|| t| |  d|  S Nr   rY   	r   r:   r   r'   r   r)   r*   rewriter   r.   r`   kwargsIr0   r0   r1   _eval_rewrite_as_exp  s   "zsin._eval_rewrite_as_expc                 K   s@   t |trtj}|jd }|||   d |||  d  S d S r   r   r   r   r:   r*   r.   r`   r   r   rj   r0   r0   r1   _eval_rewrite_as_Pow  s
   

"zsin._eval_rewrite_as_Powc                 K   s   t |tjd  ddS NrY   FZevaluaterw   r   r[   r.   r`   r   r0   r0   r1   _eval_rewrite_as_cos     zsin._eval_rewrite_as_cosc                 K   "   t tj| }d| d|d   S NrY   rc   tanr   r]   r.   r`   r   Ztan_halfr0   r0   r1   _eval_rewrite_as_tan     zsin._eval_rewrite_as_tanc                 K   s   t |t| t| S rR   ro   rw   r   r0   r0   r1   _eval_rewrite_as_sincos     zsin._eval_rewrite_as_sincosc                 K   r   r   cotr   r]   r.   r`   r   Zcot_halfr0   r0   r1   _eval_rewrite_as_cot  r   zsin._eval_rewrite_as_cotc                 K      |  t tS rR   )r   rw   powr   r0   r0   r1   _eval_rewrite_as_pow  ru   zsin._eval_rewrite_as_powc                 K   r   rR   )r   rw   r!   r   r0   r0   r1   _eval_rewrite_as_sqrt  ru   zsin._eval_rewrite_as_sqrtc                 K      dt | S Nrc   cscr   r0   r0   r1   _eval_rewrite_as_csc     zsin._eval_rewrite_as_cscc                 K   s   dt |tjd  dd S )Nrc   rY   Fr   )secr   r[   r   r0   r0   r1   _eval_rewrite_as_sec     zsin._eval_rewrite_as_secc                 K   s   |t | S rR   )sincr   r0   r0   r1   _eval_rewrite_as_sinc  r   zsin._eval_rewrite_as_sincc                 C      |  | jd  S Nr   r)   r*   	conjugater.   r0   r0   r1   _eval_conjugate     zsin._eval_conjugateTc                 K   s8   | j dd|i|\}}t|t| t|t| fS r7   )rD   ro   r   rw   r   rA   r0   r0   r1   r9     s    zsin.as_real_imagc                 K   s&  ddl m} ddlm}m} | jd }d }|jrF| \}}t|dd	 }t|dd	 }	t
|dd	 }
t
|dd	 }|| |	|
  S |jr|jdd\}}|jr|jrfd|d	 d
  ||t| S |d|d
 d	  t
| ||d	 t| ddS t|}|d ur|jr| tS t|S )Nr   )r
   )
chebyshevt
chebyshevuFr   TZrationalr   rc   rY   )r8   )sympyr
   #sympy.functions.special.polynomialsr   r   r*   rI   as_two_termsro   _eval_expand_trigrw   rG   re   
is_IntegerZis_oddr4   r   r   r!   )r.   r;   r
   r   r   r`   rj   r   sxsyrh   cyr   r5   r0   r0   r1   r     s8   

zsin._eval_expand_trigc           
      C   s   ddl m} ddlm} | jd }||d }|tj }|j	r1||tj  
|}	d| |	 S |tju rE|j|d||jrAdndd}|tjtjfv rR|ddS |jrZ| |S | S )	Nr   rB   r|   r   -+dirrc   r   rB   sympy.calculus.utilr}   r*   r   cancelr   r[   r^   as_leading_termrW   limitis_negativer   r   	is_finiter)   
r.   rj   r   r   rB   r}   r`   x0r   ltr0   r0   r1   _eval_as_leading_term  s   



zsin._eval_as_leading_termc                 C      | j d jrdS d S Nr   Tr*   r>   r   r0   r0   r1   _eval_is_extended_real     zsin._eval_is_extended_realc                 C      | j d }|jr
dS d S r  r  r.   r`   r0   r0   r1   _eval_is_finite     
zsin._eval_is_finitec                 C   r  r  r*   r,   r  r0   r0   r1   _eval_is_zero  r	  zsin._eval_is_zeroc                 C       | j d js| j d jrdS d S r  r*   r>   
is_complexr   r0   r0   r1   _eval_is_complex  
   
zsin._eval_is_complexrR   rc   r   rQ   r   )rS   rT   rU   rV   rt   rz   classmethodr   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r9   r   r   r  r  r  r  r0   r0   r0   r1   ro      s:    
/

q


ro   c                   @   s   e Zd ZdZd2ddZd3ddZedd	 Zee	d
d Z
d4ddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd5d&d'Zd(d) Zd6d*d+Zd,d- Zd.d/ Zd0d1 ZdS )7rw   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] http://dlmf.nist.gov/4.14
    .. [3] http://functions.wolfram.com/ElementaryFunctions/Cos

    Nc                 C   rp   rq   rr   rs   r0   r0   r1   rt   /  ru   z
cos.periodrc   c                 C   s"   |dkrt | jd  S t| |rv   )ro   r*   r   rx   r0   r0   r1   rz   2  s   
z	cos.fdiffc              	   C   sl  ddl m} ddlm} ddlm} |jr2|tju rtjS |j	r#tj
S |tju s-|tju r2|ddS |tju r:tjS t||rHt|tjd  S t||rR|| S |jr_|jdu r_|ddS | rh| | S |tj}|d urvt|S t|}|d ur|jrtj| S d| jr|jdu rtjS |js|tj }||kr| |S d S tjtd	d d
 d}|jr|j }	|j!d|	  }
|
|	kr|d tj }| | S d|
 |	krd| tj }| | S ddddddddd}|	|v r4|
tj ||	 d  |
tj ||	 d  }}| || |}}d |ksd |krd S || | tjd | | tjd |   S |	dkr;d S |	|v rM||j  }||j!|" S d|	d kr|d tj }| |}d |krfd S d| d d }d|dk rvdndt#t$|  }|td| d  S d S |j%rt&|\}}|rt'|t'| t|t|  S |j	rtj
S t|t(r|j)d S t|t*r|j)d }dtd|d   S t|t+r|j)\}}|t|d |d   S t|t,r|j)d }td|d  S t|t-r|j)d }dtdd|d    S t|t.r%|j)d }tdd|d   S t|t/r4|j)d }d| S d S )Nr   r   r|   r~   r   rc   rY   Fr      )r   r   r   r  r  r   r      r  
   r  r   r   r        (   <      r   r!        r#  r$  x   r&  )0r   r   r   r}   r   r   r   r   r   r,   rd   r   r   rW   r   ro   r[   r   r>   r   r   r   r:   r   r4   r^   r   r_   r@   r   r]   r!   qrk   r?   rf   rH   rI   rb   rw   r   r*   r   r   r   r   r   r   )r   r`   r   r}   r   r   r5   r   cst_table_somer*  rk   table2rO   bnvalanvalbZctsnvalrj   sign_cosrl   r   r0   r0   r1   r   8  s   

















.,



" 






zcos.evalc                 G   sl   | dk s
| d dkrt jS t|}t|dkr(|d }| |d  | | d   S d| d  ||   t|  S )Nr   rY   rc   r   r   r   r   r0   r0   r1   r     r   zcos.taylor_termr   c                 C   r   r   r   r   r0   r0   r1   r     r   zcos._eval_nseriesc                 K   sN   t j}t|tst|tr||jd t}t|| t| |  d S r   r   r   r0   r0   r1   r     s   zcos._eval_rewrite_as_expc                 K   s8   t |trtj}|jd }|| d ||  d  S d S r   r   r   r0   r0   r1   r     s
   

zcos._eval_rewrite_as_Powc                 K   s   t |tjd  ddS r   )ro   r   r[   r   r0   r0   r1   _eval_rewrite_as_sin  r   zcos._eval_rewrite_as_sinc                 K   s"   t tj| d }d| d|  S r   r   r   r0   r0   r1   r        zcos._eval_rewrite_as_tanc                 K   s   t |t| t | S rR   r   r   r0   r0   r1   r     r   zcos._eval_rewrite_as_sincosc                 K   s"   t tj| d }|d |d  S r   r   r   r0   r0   r1   r     r3  zcos._eval_rewrite_as_cotc                 K   
   |  |S rR   )r   r   r0   r0   r1   r        
zcos._eval_rewrite_as_powc                    s.  ddl m} fdddfdd	}t|}|d u rd S |jr(| |tj S |js-d S dd }tjt	d	d
 d t	dt	d d t	dt	dt	d t	t	ddt	dt	d  d
t	d t	dt	d    dt	d  d   d  | d  fdd}|j
 v r||j |j
 }|j
dk r| }|S |j
d s|d }	t|	tj t	}
|	d
 d }t|d rdnd
}|t	d
|
 d  S ||j
}|r|||}dd t|tdD }ttdd |D  |}|t	S ||}dd t|tdD }ttdd |D  |}|S )Nr   r  c                    s   t | dkrd| d fS t | dkrt| d | d S | dd  }t| d |d \} }t|g fdd|dd D  |g S )Nrc   r   rY   r   c                    s   g | ]} | qS r0   r0   .0rn   vr0   r1   
<listcomp>      z>cos._eval_rewrite_as_sqrt.<locals>.migcdex.<locals>.<listcomp>)r   r   rE   )rj   rM   urN   migcdexr8  r1   r>     s   *z*cos._eval_rewrite_as_sqrt.<locals>.migcdexc                    s   ddl m} ttrS ttstdj djj kr$jS d |kr7 fdd|j D }n	 fdd|D }t|dkrIgS |}fd	dt	|d d
 |D }t
|kseJ |S )Nr   )	factorintzr is not rationalrY   c                    s   g | ]
\}} ||  qS r0   r0   )r7  rj   r   r   r0   r1   r:    s    z@cos._eval_rewrite_as_sqrt.<locals>.ipartfrac.<locals>.<listcomp>c                    s   g | ]} | qS r0   r0   r7  rj   r@  r0   r1   r:    r;  rc   c                    s&   g | ]\}} j t||  j qS r0   )rk   r   r*  )r7  rn   j)rr0   r1   r:     s   & r   )Zsympy.ntheoryr?  r   rf   r   	TypeErrorr*  itemsr   zipsum)rC  Zfactorsr?  rO   rN   Zansr=  )r   rC  r1   	ipartfrac  s"   

 z,cos._eval_rewrite_as_sqrt.<locals>.ipartfracc            )      S   s  dd } dd }| dd\}}| |d\}}| |d\}}| |dd	| d
|   \}}	| |dd	| d
|   \}
}| |dd	| d
|   \}}| |dd	| d
|   \}}| |d|| | d
|
   \}}| |d|| | d
|   \}}| |d|| |	 d
|   \}}| |d|| |
 d
|   \}}| |	d||	 | d
|   \}}| |
d||
 | d
|   \}}| |d|| | d
|   \}}| |d|| | d
|	   \}}||d|| | |  } ||d|| | |  }!||d|| | |  }"||d|| | |  }#||d|| | |  }$||d|| | |  }%||  d|!|"   }&||# d|$|%   }'d||& d|'  }(t t d
t |(d  d tj S )a2   Express cos(pi/257) explicitly as a function of radicals
                Based upon the equations in
                http://math.stackexchange.com/questions/516142/how-does-cos2-pi-257-look-like-in-real-radicals
                See also http://www.susqu.edu/brakke/constructions/257-gon.m.txt
            c                 S   s0   | t | d |  d | t | d |  d fS rq   r!   rO   r-  r0   r0   r1   f14     0z8cos._eval_rewrite_as_sqrt.<locals>._cospi257.<locals>.f1c                 S   s   | t | d |  d S rq   rI  rJ  r0   r0   r1   f27  r   z8cos._eval_rewrite_as_sqrt.<locals>._cospi257.<locals>.f2r      @   r  r   rY   r   r   )r!   r   r]   ))rK  rM  t1t2Zz1Zz3Zz2Zz4Zy1Zy5Zy6Zy2Zy3Zy7Zy8Zy4Zx1Zx9Zx2Zx10Zx3Zx11Zx4Zx12Zx5Zx13Zx6Zx14Zx15Zx7Zx8Zx16Zv1Zv2Zv3Zv4Zv5Zv6Zu1Zu2Zw1r0   r0   r1   	_cospi257.  s6   """""""""z,cos._eval_rewrite_as_sqrt.<locals>._cospi257r   rc   r  r'         rY   ir  "   )r   r   rT    c                    sJ   g } D ]}t | |\}}|dkr"|} || | dkr"t|  S qdS )Nr   rc   F)divmodr\   rE   )r   ZprimesZp_iZquotientZ	remainder)r+  r0   r1   _fermatCoords`  s   
z0cos._eval_rewrite_as_sqrt.<locals>._fermatCoordsrW  r   c                 S   "   g | ]}|d  |d t j fqS rc   r   r   r[   rA  r0   r0   r1   r:  ~     " z-cos._eval_rewrite_as_sqrt.<locals>.<listcomp>zc                 S      g | ]}|d  qS r  r0   rA  r0   r0   r1   r:    r;  c                 S   rZ  r[  r\  rA  r0   r0   r1   r:    r]  c                 S   r_  r  r0   rA  r0   r0   r1   r:    r;  rR   )r   r   r4   r^   r)   r   r[   r   r]   r!   r*  rk   r?   rw   r   rf   rF  r&   rG  r   r   )r.   r`   r   r   rH  r5   rS  rY  ZrvZpico2r0  rj   r1  ZFCdecompXZpclsr0   )r+  r>  r1   r     s`   '$$





 
 zcos._eval_rewrite_as_sqrtc                 K   r   r   r   r   r0   r0   r1   r     r   zcos._eval_rewrite_as_secc                 K      dt |t S r   )r   r   r   r   r0   r0   r1   r        zcos._eval_rewrite_as_cscc                 C   r   r   r   r   r0   r0   r1   r     r   zcos._eval_conjugateTc                 K   s:   | j dd|i|\}}t|t| t| t| fS r7   )rD   rw   r   ro   r   rA   r0   r0   r1   r9     s   "zcos.as_real_imagc                 K   s   ddl m} | jd }d }|jr>| \}}t|dd }t|dd }t|dd }t|dd }	||	 ||  S |jrc|j	dd\}
}|
j
rS||
t|S t|}|d urc|jrc| tS t|S )Nr   r  Fr   Tr   )r   r   r*   rI   r   ro   r   rw   rG   re   r   r4   r   r   r!   )r.   r;   r   r`   rj   r   r   r   rh   r   rZ   termsr5   r0   r0   r1   r     s&   

zcos._eval_expand_trigc           
      C   s   ddl m} ddlm} | jd }||d }|tjd  tj }|j	r;||tj  tjd  
|}	d| |	 S |tju rO|j|d||jrKdndd}|tjtjfv r\|dd	S |jrd| |S | S )
Nr   r   r|   rY   r   r   r   r   rc   r   r   r0   r0   r1   r     s   


zcos._eval_as_leading_termc                 C   r  r  r  r   r0   r0   r1   r    r  zcos._eval_is_extended_realc                 C   r  r  r  r  r0   r0   r1   r    s   
zcos._eval_is_finitec                 C   r  r  r  r   r0   r0   r1   r    r  zcos._eval_is_complexrR   r  r  rQ   r   )rS   rT   rU   rV   rt   rz   r  r   r  r   r   r   r   r   r2  r   r   r   r   r   r   r   r   r9   r   r   r  r  r  r0   r0   r0   r1   rw     s:    
+

 
 

rw   c                   @   s   e Zd ZdZd8ddZd9ddZd9dd	Zed
d Ze	e
dd Zd:ddZdd Zdd Zd;ddZdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd<d,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 ZdS )=r   a  
    The tangent function.

    Returns the tangent of x (measured in radians).

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

    See :func:`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] http://dlmf.nist.gov/4.14
    .. [3] http://functions.wolfram.com/ElementaryFunctions/Tan

    Nc                 C      |  t|S rR   rr   rs   r0   r0   r1   rt     r   z
tan.periodrc   c                 C   s    |dkrt j| d  S t| |Nrc   rY   )r   rd   r   rx   r0   r0   r1   rz     r{   z	tan.fdiffc                 C      t S z7
        Returns the inverse of this function.
        r   rx   r0   r0   r1   inverse     ztan.inversec              	   C   s  ddl m} |jr(|tju rtjS |jrtjS |tju s!|tju r(|tjtjS |tj	u r0tjS t
||r|j|j}}t|tj }|tjurO||tj  }|tjur[||tj  }|||ttjd tjtdd rv|tjtjS |t|t|S | r| |  S |tj}|d urtjt| S t|d}|d ur|jrtjS |js|tj }||kr| |S d S |jr|j}	|j|	 }
tddtd d  tddtd  tddtd d  tddtd  d}|	dks|	dkrd|
 |	 }|dkrd| }||  S || S |jd sK|tj d }t|t|tjd  }}t
|tsKt
|tsK|dkrCtj	S d| ||  S d	d
ddddddd}|	|v r| |
tj ||	 d  | |
tj ||	 d  }}d |ksd |krd S || d||   S |tj d tj tj }t|t|tjd  }}t
|tst
|ts|dkrtj	S || S ||kr| |S |jrt |\}}|rt|}|tj	u rt!| S t|S |jrtjS t
|t"r|j#d S t
|t$r	|j#\}}|| S t
|t%r|j#d }|td|d   S t
|t&r3|j#d }td|d  | S t
|t'rB|j#d }d| S t
|t(r[|j#d }dtdd|d   |  S t
|t)rr|j#d }tdd|d   | S d S )Nr   r|   rY   r   rc   r   )rc   rY   r   r  r  r  r  r  r  r  r  r  r"  r%  )*r   r}   r   r   r   r,   r@   r   r   rW   r   r   r   r   r[   r   r%   r   r   r   r   r:   r    r4   r^   r   r*  rk   r!   rw   r]   rI   rb   r   r   r*   r   r   r   r   r   r   )r   r`   r}   r   r   r   r   r5   r   r*  rk   Ztable10r   cresultsresultr,  r.  r/  rj   rl   Ztanmr   r0   r0   r1   r     s   




(








6









ztan.evalc                 G   s   ddl m} | dk s| d dkrtjS t|}| d d d| d  }}|| d }t| d }d| | |d  | | ||   S )Nr   	bernoullirY   rc   r   )r   rp  r   r@   r   r   )r   rj   r   rp  rO   r-  BFr0   r0   r1   r     s   $ztan.taylor_termr   c                 C   sN   | j d |dd tj }|r|jr| tj|||dS tj| |||dS )Nr   rY   r   r   )	r*   r   r   r[   r   r   rw   r   r   r.   rj   r   r   r   rn   r0   r0   r1   r     s   
ztan._eval_nseriesc                 K   sF   t |tr!tj}|jd }|||  ||   ||  ||   S d S r   r   r   r0   r0   r1   r     s
   

(ztan._eval_rewrite_as_Powc                 C   r   r   r   r   r0   r0   r1   r     r   ztan._eval_conjugateTc                 K   sd   | j dd|i|\}}|r*td| td|  }td| | td| | fS | |tjfS Nr8   rY   r0   rD   rw   r   ro   r   r)   r   r@   r.   r8   r;   rB   rC   Zdenomr0   r0   r1   r9     s
    ztan.as_real_imagc                    s\  ddl m}m} | jd }d }|jruddl m} t|j}g }|jD ]}t|dd }	|	|	 q"t
d  fddt|D }
ddg}t|d	 D ]}|d	|d
    |||
d|d d
   7  < qK|d |d	  tt|
|S |jr|jdd\}}|jr|d	krtj}tddd}d	||  |  }|||| |t|fgS t|S )Nr   rC   rB   symmetric_polyFr   Yc                       g | ]}t  qS r0   nextr6  ZYgr0   r1   r:    r;  z)tan._eval_expand_trig.<locals>.<listcomp>rc   rY   r   r  Tr   dummyreal)r   rC   rB   r*   rI   rz  r   r   r   r\   r&   ranger   listrF  rG   re   r   r   r:   r   r?   )r.   r;   rC   rB   r`   rj   rz  r   ZTXZtxr{  rk   rn   rZ   re  r   r^  Pr0   r  r1   r     s0   


0  ztan._eval_expand_trigc                 K   s`   t j}t|tst|tr||jd t}t| | t|| }}|||  ||  S r   r   r.   r`   r   r   Zneg_expZpos_expr0   r0   r1   r     
   ztan._eval_rewrite_as_expc                 K   s   dt |d  t d|  S rq   ro   r.   rj   r   r0   r0   r1   r2       ztan._eval_rewrite_as_sinc                 K   s   t |tjd  ddt | S r   r   r  r0   r0   r1   r        ztan._eval_rewrite_as_cosc                 K      t |t| S rR   r   r   r0   r0   r1   r     ru   ztan._eval_rewrite_as_sincosc                 K   r   r   r   r   r0   r0   r1   r     r   ztan._eval_rewrite_as_cotc                 K   $   t |t}t|t}|| S rR   )ro   r   r   rw   )r.   r`   r   sin_in_sec_formcos_in_sec_formr0   r0   r1   r        ztan._eval_rewrite_as_secc                 K   r  rR   )ro   r   r   rw   )r.   r`   r   sin_in_csc_formcos_in_csc_formr0   r0   r1   r     r  ztan._eval_rewrite_as_cscc                 K   "   |  t t}|trd S |S rR   r   rw   r   rF   r.   r`   r   r   r0   r0   r1   r        
ztan._eval_rewrite_as_powc                 K   r  rR   r   rw   r!   rF   r  r0   r0   r1   r     r  ztan._eval_rewrite_as_sqrtc                 C   sl   | j d }||d }d| tj }|jr,||tj d  |}|jr(|S d| S |jr4| 	|S | S Nr   rY   r   
r*   r   r   r   r[   r^   r   r_   r   r)   r.   rj   r   r   r`   r   r   r   r0   r0   r1   r     s   
ztan._eval_as_leading_termc                 C      | j d jS r   r  r   r0   r0   r1   r    s   ztan._eval_is_extended_realc                 C   0   | j d }|jr|t tj jdu rdS d S d S r3   r*   is_realr   r   r]   r^   r  r0   r0   r1   _eval_is_real  s   
ztan._eval_is_realc                 C   s6   | j d }|jr|t tj jdu rdS |jrdS d S r3   )r*   r  r   r   r]   r^   is_imaginaryr  r0   r0   r1   r    s   
ztan._eval_is_finitec                 C   r  r  r
  r  r0   r0   r1   r    r	  ztan._eval_is_zeroc                 C   r  r3   r  r  r0   r0   r1   r       
ztan._eval_is_complexrR   r  r  rQ   r   ) rS   rT   rU   rV   rt   rz   rk  r  r   r  r   r   r   r   r   r9   r   r   r2  r   r   r   r   r   r   r   r   r  r  r  r  r  r0   r0   r0   r1   r     s>    
%


 


		r   c                   @   s   e Zd ZdZd8ddZd9ddZd9dd	Zed
d Ze	e
dd Zd:ddZdd Zd;ddZdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd<d*d+Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 ZdS )=r   a  
    The cotangent function.

    Returns the cotangent of x (measured in radians).

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

    See :func:`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] http://dlmf.nist.gov/4.14
    .. [3] http://functions.wolfram.com/ElementaryFunctions/Cot

    Nc                 C   rf  rR   rr   rs   r0   r0   r1   rt   >  r   z
cot.periodrc   c                 C   s    |dkrt j| d  S t| |rg  )r   r   r   rx   r0   r0   r1   rz   A  r{   z	cot.fdiffc                 C   rh  ri  r   rx   r0   r0   r1   rk  G  rl  zcot.inversec              	   C   s  ddl m} |jr|tju rtjS |jrtjS |tju rtjS t||r.t|tj	d   S |
 r8| |  S |tj}|d urJtj t| S t|d}|d ur6|jrZtjS |jsl|tj	 }||krj| |S d S |jr6|jdksz|jdkrttj	d | S |jdkr|jd s|tj	 d }t|t|tj	d  }}t|tst|tsd| ||  S ddd	d
ddddd}|j}	|j|	 }
|	|v r| |
tj	 ||	 d  | |
tj	 ||	 d  }}d |ksd |krd S d||  ||  S |tj d tj tj	 }t|t|tj	d  }}t|ts-t|ts-|dkr)tjS || S ||kr6| |S |jrVt|\}}|rVt|}|tju rQt|S t| S |jr]tjS t|trh|jd S t|trw|jd }d| S t|tr|j\}}|| S t|tr|jd }td|d  | S t|tr|jd }|td|d   S t|tr|jd }tdd|d   | S t|t r|jd }dtdd|d   |  S d S )Nr   r|   rY   r   r  rc   r  r  r  r  r  r  r  r"  r%  )!r   r}   r   r   r   r,   rW   r   r   r[   r   r   r:   r   r4   r^   r   r*  rw   rk   r]   rI   rb   r   r   r*   r   r   r   r!   r   r   r   )r   r`   r}   r   r5   r   rm  rn  r,  r*  rk   r.  r/  rj   rl   Zcotmr   r0   r0   r1   r   M  s   








6









zcot.evalc                 G   s   ddl m} | dkrdt| S | dk s| d dkrtjS t|}|| d }t| d }d| d d  d| d   | | ||   S Nr   ro  rc   rY   r   r   rp  r   r   r@   r   )r   rj   r   rp  rq  rr  r0   r0   r1   r     s   ,zcot.taylor_termr   c                 C   sN   | j d |dtj }|r|jr| tj|||dS | tj|||dS )Nr   rs  )	r*   r   r   r[   r   r   rw   r   r   rt  r0   r0   r1   r     s   
zcot._eval_nseriesc                 C   r   r   r   r   r0   r0   r1   r     r   zcot._eval_conjugateTc                 K   sf   | j dd|i|\}}|r+td| td|  }td|  | td| | fS | |tjfS ru  rv  rw  r0   r0   r1   r9     s
   "zcot.as_real_imagc                 K   s`   t j}t|tst|tr||jd t}t| | t|| }}|||  ||  S r   r   r  r0   r0   r1   r     r  zcot._eval_rewrite_as_expc                 K   sH   t |tr"tj}|jd }| ||  ||   ||  ||   S d S r   r   r   r0   r0   r1   r     s
   

*zcot._eval_rewrite_as_Powc                 K   s   t d| dt |d   S rq   r  r  r0   r0   r1   r2    r  zcot._eval_rewrite_as_sinc                 K   s   t |t |tjd  dd S r   r   r  r0   r0   r1   r     r  zcot._eval_rewrite_as_cosc                 K   r  rR   rw   ro   r   r0   r0   r1   r     ru   zcot._eval_rewrite_as_sincosc                 K   r   r   r   r   r0   r0   r1   r     r   zcot._eval_rewrite_as_tanc                 K   r  rR   )rw   r   r   ro   )r.   r`   r   r  r  r0   r0   r1   r     r  zcot._eval_rewrite_as_secc                 K   r  rR   )rw   r   r   ro   )r.   r`   r   r  r  r0   r0   r1   r     r  zcot._eval_rewrite_as_cscc                 K   r  rR   r  r  r0   r0   r1   r     r  zcot._eval_rewrite_as_powc                 K   r  rR   r  r  r0   r0   r1   r     r  zcot._eval_rewrite_as_sqrtc                 C   sn   | j d }||d }d| tj }|jr-||tj d  |}|jr*d| S | S |jr5| 	|S | S Nr   rY   rc   r  r  r0   r0   r1   r     s   
zcot._eval_as_leading_termc                 C   r  r   r  r   r0   r0   r1   r    r   zcot._eval_is_extended_realc                    s\  ddl m}m} | jd }d }|jrwddl m} t|j}g }|jD ]}t|dd }	|	|	 q"t
d  fddt|D }
ddg}t|d	d	D ]}||| d
   |||
d	|| d d
   7  < qK|d |d  tt|
|S |jr|jdd\}}|jr|dkrtj}tddd}|| |  }|||| |t|fgS t|S )Nr   rx  ry  Fr   r{  c                    r|  r0   r}  r6  r  r0   r1   r:  $  r;  z)cot._eval_expand_trig.<locals>.<listcomp>r   rY   r  rc   Tr   r  r  )r   rC   rB   r*   rI   rz  r   r   r   r\   r&   r  r   r  rF  rG   re   r   r   r:   r   r?   )r.   r;   rC   rB   r`   rj   rz  r   ZCXrh   r{  rk   rn   rZ   re  r   r^  r  r0   r  r1   r     s0   


4  zcot._eval_expand_trigc                 C   s0   | j d }|jr|t jdu rdS |jrdS d S r3   )r*   r  r   r^   r  r  r0   r0   r1   r  3  s   
zcot._eval_is_finitec                 C   *   | j d }|jr|t jdu rdS d S d S r3   r*   r  r   r^   r  r0   r0   r1   r  :     
zcot._eval_is_realc                 C   r  r3   r  r  r0   r0   r1   r  ?  r  zcot._eval_is_complexc                 C   s8   | j d }|||}||kr|tj jrtjS t|S r   )r*   r   r   r[   r^   rW   r   )r.   oldnewr`   Zargnewr0   r0   r1   
_eval_subsD  s
   
zcot._eval_subsrR   r  r  rQ   r   ) rS   rT   rU   rV   rt   rz   rk  r  r   r  r   r   r   r   r9   r   r   r2  r   r   r   r   r   r   r   r   r  r   r  r  r  r  r0   r0   r0   r1   r     s<    
%


m


	r   c                   @   s   e Zd ZdZdZejfZdZdZ	e
dd Zdd Zdd Zd	d
 Zdd Zd.ddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd/d!d"Zd#d$ Zd%d& Zd0d(d)Zd*d+ Zd1d,d-ZdS )2ReciprocalTrigonometricFunctionz@Base class for reciprocal functions of trigonometric functions. Nc                 C   sB  |  r| jr| | S | jr| |  S t|}|d ur[d| js[|jr[|j}|jd|  }||kr?|d tj	 }| | S d| |kr[d| tj	 }| jrS| |S | jr[| | S t
|drk| | krk|jd S | j|}|d u rw|S tdd || fD rd| tS tdd || fD rd| tS d| S )NrY   rc   rk  r   c                 s       | ]}t |tV  qd S rR   )r   rw   r6  r0   r0   r1   	<genexpr>x      z7ReciprocalTrigonometricFunction.eval.<locals>.<genexpr>c                 s   r  rR   )r   ro   r6  r0   r0   r1   r  z  r  )r   _is_even_is_oddr4   r^   r   r*  rk   r   r[   hasattrrk  r*   _reciprocal_ofr   anyr   r   r   )r   r`   r5   r*  rk   r   tr0   r0   r1   r   Z  s@   



z$ReciprocalTrigonometricFunction.evalc                 O   s$   |  | jd }t|||i |S r   )r  r*   getattr)r.   method_namer*   r   or0   r0   r1   _call_reciprocal  s   z0ReciprocalTrigonometricFunction._call_reciprocalc                 O   s,   | j |g|R i |}|d urd| S |S r   )r  )r.   r  r*   r   r  r0   r0   r1   _calculate_reciprocal  s   z5ReciprocalTrigonometricFunction._calculate_reciprocalc                 C   s2   |  ||}|d ur|| |krd| S d S d S r   )r  r  )r.   r  r`   r  r0   r0   r1   _rewrite_reciprocal  s   z3ReciprocalTrigonometricFunction._rewrite_reciprocalc                 C   s   t | jd }| ||S r   )r
   r*   r  rt   )r.   rK   rL   r0   r0   r1   rP     s   z'ReciprocalTrigonometricFunction._periodrc   c                 C   s   |  d| | d  S )Nrz   rY   r  rx   r0   r0   r1   rz     r   z%ReciprocalTrigonometricFunction.fdiffc                 K      |  d|S )Nr   r  r   r0   r0   r1   r     r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_expc                 K   r  )Nr   r  r   r0   r0   r1   r     r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_Powc                 K   r  )Nr2  r  r   r0   r0   r1   r2    r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_sinc                 K   r  )Nr   r  r   r0   r0   r1   r     r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_cosc                 K   r  )Nr   r  r   r0   r0   r1   r     r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_tanc                 K   r  )Nr   r  r   r0   r0   r1   r     r   z4ReciprocalTrigonometricFunction._eval_rewrite_as_powc                 K   r  )Nr   r  r   r0   r0   r1   r     r   z5ReciprocalTrigonometricFunction._eval_rewrite_as_sqrtc                 C   r   r   r   r   r0   r0   r1   r     r   z/ReciprocalTrigonometricFunction._eval_conjugateTc                 K   s"   d|  | jd  j|fi |S rv   )r  r*   r9   )r.   r8   r;   r0   r0   r1   r9     s   z,ReciprocalTrigonometricFunction.as_real_imagc                 K   s   | j di |S )Nr   )r   r  )r.   r;   r0   r0   r1   r     ru   z1ReciprocalTrigonometricFunction._eval_expand_trigc                 C   s   |  | jd  S r   )r  r*   r  r   r0   r0   r1   r    r   z6ReciprocalTrigonometricFunction._eval_is_extended_realr   c                 C   s   d|  | jd  |S rv   )r  r*   r   )r.   rj   r   r   r0   r0   r1   r     r   z5ReciprocalTrigonometricFunction._eval_as_leading_termc                 C   s   d|  | jd  jS rv   )r  r*   r   r   r0   r0   r1   r    r   z/ReciprocalTrigonometricFunction._eval_is_finitec                 C   s   d|  | jd  |||S rv   )r  r*   r   r.   rj   r   r   r   r0   r0   r1   r     r  z-ReciprocalTrigonometricFunction._eval_nseriesr  rQ   r   r  )rS   rT   rU   rV   r  r   rW   rX   r  r  r  r   r  r  r  rP   rz   r   r   r2  r   r   r   r   r   r9   r   r  r   r  r   r0   r0   r0   r1   r  L  s6    
$


r  c                   @   s~   e Zd ZdZeZdZdddZdd Zdd	 Z	d
d Z
dd Zdd Zdd ZdddZdd Zeedd ZdddZdS )r   a  
    The secant function.

    Returns the secant of x (measured in radians).

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

    See :func:`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] http://dlmf.nist.gov/4.14
    .. [3] http://functions.wolfram.com/ElementaryFunctions/Sec

    TNc                 C   r4  rR   rP   rs   r0   r0   r1   rt     r5  z
sec.periodc                 K   s    t |d d }|d |d  S r   r  )r.   r`   r   Zcot_half_sqr0   r0   r1   r     s   zsec._eval_rewrite_as_cotc                 K   r   r   rw   r   r0   r0   r1   r     r   zsec._eval_rewrite_as_cosc                 K      t |t|t |  S rR   r   r   r0   r0   r1   r     r   zsec._eval_rewrite_as_sincosc                 K   rc  r   )rw   r   ro   r   r0   r0   r1   r2    rd  zsec._eval_rewrite_as_sinc                 K   rc  r   )rw   r   r   r   r0   r0   r1   r     rd  zsec._eval_rewrite_as_tanc                 K      t td | ddS r   )r   r   r   r0   r0   r1   r     r   zsec._eval_rewrite_as_cscrc   c                 C   s.   |dkrt | jd t| jd  S t| |rv   )r   r*   r   r   rx   r0   r0   r1   rz     s   
z	sec.fdiffc                 C   r  r3   )r*   r  r   r   r]   r^   r  r0   r0   r1   r    r  zsec._eval_is_complexc                 G   sb   ddl m} | dk s| d dkrtjS t|}| d }d| |d|  td|  |d|   S )Nr   )eulerrY   rc   r   )Z%sympy.functions.combinatorial.numbersr  r   r@   r   r   )r   rj   r   r  kr0   r0   r1   r     s   ,zsec.taylor_termr   c                 C   sh   | j d }||d }|tjd  tj }|jr/||tj  tjd  |}d| | S | |S r  )r*   r   r   r   r[   r^   r   r)   r  r0   r0   r1   r     s   

zsec._eval_as_leading_termrR   r  r   )rS   rT   rU   rV   rw   r  r  rt   r   r   r   r2  r   r   rz   r  r  r   r   r   r0   r0   r0   r1   r     s"    #

r   c                   @   st   e Zd ZdZeZdZdddZdd Zdd	 Z	d
d Z
dd Zdd Zdd ZdddZdd Zee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] http://dlmf.nist.gov/4.14
    .. [3] http://functions.wolfram.com/ElementaryFunctions/Csc

    TNc                 C   r4  rR   r  rs   r0   r0   r1   rt   J  r5  z
csc.periodc                 K   r   r   r  r   r0   r0   r1   r2  M  r   zcsc._eval_rewrite_as_sinc                 K   r  rR   r  r   r0   r0   r1   r   P  r   zcsc._eval_rewrite_as_sincosc                 K   s    t |d }d|d  d|  S r   r  r   r0   r0   r1   r   S  s   zcsc._eval_rewrite_as_cotc                 K   rc  r   )ro   r   rw   r   r0   r0   r1   r   W  rd  zcsc._eval_rewrite_as_cosc                 K   r  r   )r   r   r   r0   r0   r1   r   Z  r   zcsc._eval_rewrite_as_secc                 K   rc  r   )ro   r   r   r   r0   r0   r1   r   ]  rd  zcsc._eval_rewrite_as_tanrc   c                 C   s0   |dkrt | jd  t| jd  S t| |rv   )r   r*   r   r   rx   r0   r0   r1   rz   `  s   
z	csc.fdiffc                 C   r  r3   r  r  r0   r0   r1   r  f  r  zcsc._eval_is_complexc                 G   s   ddl m} | dkrdt| S | dk s| d dkrtjS t|}| d d }d|d  d dd| d  d  |d|  |d| d   td|  S r  r  )r   rj   r   rp  r  r0   r0   r1   r   k  s   "

zcsc.taylor_termrR   r  )rS   rT   rU   rV   ro   r  r  rt   r2  r   r   r   r   r   rz   r  r  r   r   r0   r0   r0   r1   r   #  s     #

r   c                   @   sH   e Zd ZdZejfZdddZedd Z	ddd	Z
d
d Zdd Zd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

    rc   c                 C   s8   | j d }|dkrt|| t||d   S t| |)Nr   rc   rY   )r*   rw   ro   r   )r.   ry   rj   r0   r0   r1   rz     s   

z
sinc.fdiffc                 C   s   |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
|}|d urQ|jrBt|j r@tjS d S d| jrStj|tj  | S d S d S rq   )r,   r   rd   r   r   r   r@   r   rW   r   r4   r^   r   r   r]   )r   r`   r5   r0   r0   r1   r     s*   




z	sinc.evalr   c                 C   s    | j d }t|| |||S r   )r*   ro   r   r  r0   r0   r1   r     s   
zsinc._eval_nseriesc                 K   s   ddl m} |d|S )Nr   )jn)Zsympy.functions.special.besselr  )r.   r`   r   r  r0   r0   r1   _eval_rewrite_as_jn  s   
zsinc._eval_rewrite_as_jnc                 K   s&   t t|| t|tjftjtjfS rR   )r$   ro   r   r   r@   rd   truer   r0   r0   r1   r2       &zsinc._eval_rewrite_as_sinNr  r  )rS   rT   rU   rV   r   rW   rX   rz   r  r   r   r  r2  r0   r0   r0   r1   r   z  s    4


r   c                   @   sH   e Zd ZdZejejejejfZ	e
dd Ze
dd Ze
dd ZdS )	InverseTrigonometricFunctionz/Base class for inverse trigonometric functions.c                   C   sl  i t dd tjd t dd tjd dt d tjd t dt d d tjd t dt dt d  d tjd t dt d d tjtdd t dt dt d  d tjtdd tjtjd t dt d d tjd t tjt dd  tjd t dt d d tjtdd t tjt dd  tjtdd t dd d tjd dt d d tj d t dd d tjtdd t dd t dd  tjd	 t d d t dd  tj d	 t dd t d tjd	 dt d t d tj d	 t dd t dd  tjtdd	 dt d t d tjtdd	 iS )
Nr   rY   r  rc   r   r   r  r  r&  )r!   r   r[   r   r]   r0   r0   r0   r1   _asin_table  sP   " (	
 ""$ z(InverseTrigonometricFunction._asin_tablec                   C   s.  t dd tjd dt d tjd t dtjd t dd tjd dt d tj d dt d tjtdd t ddt d  tjd t ddt d  tjtdd t ddt d d  tjd t ddt d d  tjtdd dt d tjd d	t d tj d dt d tjtdd iS )
Nr   r  rc   rY   r   r   r  r&  r   r!   r   r[   r   r0   r0   r0   r1   _atan_table  s    $z(InverseTrigonometricFunction._atan_tablec                   C   s  i dt d d tjd t dtjd t ddt d d  tjd dt tddt dd   tjd t ddt d d  tjtdd dt tddt dd   tjtdd dtjd t ddt d  tjd dt dt d  tjd t ddt d  tjtdd dt dt d  tjtdd dt d tjd t dd tjtdd t dd  tjtd	d t dt d tjd
 t dt d tjtdd
 t dt d  tjtdd
 S )NrY   r   r  r   rc   r   r  r  r&  r  r0   r0   r0   r1   _acsc_table  sF   $$*
	 
 z(InverseTrigonometricFunction._acsc_tableN)rS   rT   rU   rV   r   rd   r   r@   rW   rX   r  r  r  r  r0   r0   r0   r1   r    s    

r  c                   @   s   e Zd ZdZd%ddZdd Zdd Zd	d
 Zedd Z	e
edd Zd&ddZd'ddZdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd%d#d$ZdS )(r   a[  
    The inverse sine function.

    Returns the arcsine of x in radians.

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

    ``asin(x)`` will evaluate automatically in the cases ``oo``, ``-oo``,
    ``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] http://dlmf.nist.gov/4.23
    .. [3] http://functions.wolfram.com/ElementaryFunctions/ArcSin

    rc   c                 C   s,   |dkrdt d| jd d   S t| |Nrc   r   rY   r!   r*   r   rx   r0   r0   r1   rz   _     
z
asin.fdiffc                 C   2   | j | j }|j | j kr|jd jrdS d S |jS r(   r)   r*   r+   r-   r0   r0   r1   r2   e     zasin._eval_is_rationalc                 C      |   o	| jd jS r   )r  r*   is_positiver   r0   r0   r1   _eval_is_positivem  r   zasin._eval_is_positivec                 C   r  r   )r  r*   r   r   r0   r0   r1   _eval_is_negativep  r   zasin._eval_is_negativec                 C   s  |j r<|tju rtjS |tju rtjtj S |tju r!tjtj S |jr'tjS |tju r1tj	d S |tj
u r<tj	 d S |tju rDtjS | rN| |  S |jr]|  }||v r]|| S |tj}|d urntjt| S |jrttjS t|tr|jd }|jr|dt ; }|tkrt| }|td krt| }|t d k rt | }|S t|tr|jd }|jrtd t| S d S d S NrY   r   )r   r   r   r   r   r:   r,   r@   rd   r[   r   rW   r   	is_numberr  r   r   r   ro   r*   is_comparabler   rw   r   r   r`   Z
asin_tabler   angr0   r0   r1   r   s  sV   











z	asin.evalc                 G   s   | dk s
| d dkrt jS t|}t|dkr1| dkr1|d }|| d d  | | d   |d  S | d d }tt j|}t|}|| ||   |  S Nr   rY   r   rc   )r   r@   r   r   r   r]   r   r   rj   r   rk   r  Rrr  r0   r0   r1   r     s   $zasin.taylor_termNr   c           	      C   s   ddl m}m}m} | jd }||d }|jr||S |t	j
u r-|||| S |dkr7|||}||dk rN|jrN|t	jk rNt	j | | S ||dkrd|jrd|t	jkrdt	j| | S | |S Nr   r   rC   r   )r   r   rC   r   r*   r   r   r,   r   r   rW   r   r  r   r[   r)   rd   	r.   rj   r   r   r   rC   r   r`   r   r0   r0   r1   r     s   



zasin._eval_as_leading_termc                 C   s  ddl m}m}m} | jd |d}|tju r|ddd}	ttj|	d  	t
|	dd| }
tj| jd  }||}|| | }||ds]|dkrR|dS tjd |t| S ttj| j|||d}| t|  }|
 |	|  ||| | S |tju r|ddd}	ttj|	d  	t
|	dd| }
tj| jd  }||}|| | }||ds|dkr|dS tj d |t| S ttj| j|||d}| t|  }|
 |	|  ||| | S tj| |||d}|tju r|S |dkr| jd ||}||dk r2|jr2|tjk r2tj | S ||dkrH|jrH|tjkrHtj| S |S 	Nr   DummyrC   Or  TZpositiverY   rc   rs  )r   r  rC   r  r*   r   r   rd   r   r   r   nseriesr   is_meromorphicr[   r!   r   removeOr?   powsimpr   r   rW   r   r  r.   rj   r   r   r   r  rC   r  arg0r  ZserZarg1rL   rM   Zres1resr0   r0   r1   r     sD   
&
&&
&
(&
""
zasin._eval_nseriesc                 K      t jd t| S rq   r   r[   r   r  r0   r0   r1   _eval_rewrite_as_acos  rd  zasin._eval_rewrite_as_acosc                 K   s    dt |dtd|d     S r   )r   r!   r  r0   r0   r1   _eval_rewrite_as_atan      zasin._eval_rewrite_as_atanc                 K   s&   t j tt j| td|d    S rg  r   r:   r   r!   r  r0   r0   r1   _eval_rewrite_as_log  r  zasin._eval_rewrite_as_logc                 K   s    dt dtd|d   |  S r   )r   r!   r   r0   r0   r1   _eval_rewrite_as_acot  r  zasin._eval_rewrite_as_acotc                 K      t jd td|  S r   r   r[   r   r   r0   r0   r1   _eval_rewrite_as_asec  r   zasin._eval_rewrite_as_asecc                 K      t d| S r   )r   r   r0   r0   r1   _eval_rewrite_as_acsc  r   zasin._eval_rewrite_as_acscc                 C      | j d }|jodt| jS Nr   rc   r*   r>   rH   is_nonnegativer.   rj   r0   r0   r1   r  	     
zasin._eval_is_extended_realc                 C   rh  ri  r  rx   r0   r0   r1   rk  	  rl  zasin.inverser  r   r  )rS   rT   rU   rV   rz   r2   r  r  r  r   r  r   r   r   r   r  r  r  r  r  r  r  rk  r0   r0   r0   r1   r   4  s*    
*
5

&r   c                   @   s   e Zd ZdZd%ddZdd Zedd Zee	d	d
 Z
d&ddZdd Zdd Zd'ddZdd Zdd Zdd Zd%ddZdd Zdd  Zd!d" Zd#d$ ZdS )(r   a  
    The inverse cosine function.

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

    Examples
    ========

    ``acos(x)`` will evaluate automatically in the cases
    ``oo``, ``-oo``, ``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] http://dlmf.nist.gov/4.23
    .. [3] http://functions.wolfram.com/ElementaryFunctions/ArcCos

    rc   c                 C   s,   |dkrdt d| jd d   S t| |Nrc   r   r   rY   r  rx   r0   r0   r1   rz   8	  r  z
acos.fdiffc                 C   r  r(   r  r-   r0   r0   r1   r2   >	  r  zacos._eval_is_rationalc                 C   sX  |j r9|tju rtjS |tju rtjtj S |tju r!tjtj S |jr)tjd S |tju r1tj	S |tj
u r9tjS |tju rAtjS |jrb|  }||v rTtd ||  S | |v rbtd ||   S |tj}|d urttd t| S t|tr|jd }|jr|dt ; }|tkrdt | }|S t|tr|jd }|jrtd t| S d S d S r  )r   r   r   r   r:   r   r,   r[   rd   r@   r   rW   r  r  r   r   r   r   rw   r*   r  ro   r  r0   r0   r1   r   F	  sJ   











z	acos.evalc                 G   s   | dkr	t jd S | dk s| d dkrt jS t|}t|dkr:| dkr:|d }|| d d  | | d   |d  S | d d }tt j|}t|}| | ||   |  S r  )r   r[   r@   r   r   r   r]   r   r  r0   r0   r1   r   r	  s   
$zacos.taylor_termNr   c           	      C   s   ddl m}m}m} | jd }||d }|dkr)tdttj	| 
| S |tju r7|||
| S |dkrA|||}||dk rY|jrY|tjk rYdtj | | S ||dkrm|jrm|tj	krm| | S | |S Nr   r  rc   rY   )r   r   rC   r   r*   r   r   r!   r   rd   r   rW   r   r  r   r[   r)   r  r0   r0   r1   r   	  s   


zacos._eval_as_leading_termc                 C   r  r  r  r  r0   r0   r1   r  	  r  zacos._eval_is_extended_realc                 C   s   |   S rR   )r  r   r0   r0   r1   _eval_is_nonnegative	  s   zacos._eval_is_nonnegativec                 C   s  ddl m}m}m} | jd |d}|tju r|ddd}	ttj|	d  	t
|	dd| }
tj| jd  }||}|| | }||dsX|dkrR|dS |t|S ttj| j|||d}| t|  }|
 |	|  ||| | S |tju r|ddd}	ttj|	d  	t
|	dd| }
tj| jd  }||}|| | }||ds|dkr|dS tj|t| S ttj| j|||d}| t|  }|
 |	|  ||| | S tj| |||d}|tju r|S |dkr| jd ||}||dk r+|jr+|tjk r+dtj | S ||dkr?|jr?|tjkr?| S |S r  )r   r  rC   r  r*   r   r   rd   r   r   r   r  r   r  r!   r   r  r?   r  r   r[   r   rW   r   r  r  r0   r0   r1   r   	  sD   
&
&
&
"&
""zacos._eval_nseriesc                 K   s.   t jd t jtt j| td|d     S r   r   r[   r:   r   r!   r  r0   r0   r1   r  	  s   zacos._eval_rewrite_as_logc                 K   r  rq   r   r[   r   r  r0   r0   r1   _eval_rewrite_as_asin	  rd  zacos._eval_rewrite_as_asinc                 K   s:   t td|d  | tjd d|td|d      S rg  )r   r!   r   r[   r  r0   r0   r1   r  	     :zacos._eval_rewrite_as_atanc                 C   rh  ri  r  rx   r0   r0   r1   rk  	  rl  zacos.inversec                 K   s*   t jd dtdtd|d   |   S r   )r   r[   r   r!   r   r0   r0   r1   r  	     *zacos._eval_rewrite_as_acotc                 K   r   r   )r   r   r0   r0   r1   r  	  r   zacos._eval_rewrite_as_asecc                 K   r  r   r   r[   r   r   r0   r0   r1   r  	  r   zacos._eval_rewrite_as_acscc                 C   sV   | j d }| | j d  }|jdu r|S |jr%|d jr'|d jr)|S d S d S d S Nr   Frc   )r*   r)   r   r>   r  Zis_nonpositive)r.   r^  rC  r0   r0   r1   r   	  s   

zacos._eval_conjugater  r   r  )rS   rT   rU   rV   rz   r2   r  r   r  r   r   r   r  r
  r   r  r  r  rk  r  r  r  r   r0   r0   r0   r1   r   	  s*    
+
+

&
r   c                       s   e Zd ZdZejej fZd)ddZdd Zdd Z	d	d
 Z
dd Zdd Zedd Zeedd Zd*ddZd+ddZdd Z fddZd)ddZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Z  ZS ),r   a	  
    The inverse tangent function.

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

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

    ``atan(x)`` will evaluate automatically in the cases
    ``oo``, ``-oo``, ``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] http://dlmf.nist.gov/4.23
    .. [3] http://functions.wolfram.com/ElementaryFunctions/ArcTan

    rc   c                 C   s(   |dkrdd| j d d   S t| |r  r*   r   rx   r0   r0   r1   rz   
     
z
atan.fdiffc                 C   r  r(   r  r-   r0   r0   r1   r2   
  r  zatan._eval_is_rationalc                 C   r  r   )r*   Zis_extended_positiver   r0   r0   r1   r  
  r   zatan._eval_is_positivec                 C   r  r   )r*   Zis_extended_nonnegativer   r0   r0   r1   r
  
  r   zatan._eval_is_nonnegativec                 C   r  r   r
  r   r0   r0   r1   r  
  r   zatan._eval_is_zeroc                 C   r  r   r  r   r0   r0   r1   r  "
  r   zatan._eval_is_realc                 C   s  |j r;|tju rtjS |tju rtjd S |tju r tj d S |jr&tjS |tju r0tjd S |tj	u r;tj d S |tj
u rRddlm} |tj d tjd S | r\| |  S |jrk|  }||v rk|| S |tj}|d ur|tjt| S |jrtjS t|tr|jd }|jr|t; }|td kr|t8 }|S t|tr|jd }|jrtd t| }|td kr|t8 }|S d S d S )NrY   r  r   r|   )r   r   r   r   r[   r   r,   r@   rd   r   rW   r   r}   r   r  r  r   r:   r   r   r   r*   r  r   r   r   )r   r`   r}   
atan_tabler   r  r0   r0   r1   r   %
  sV   











z	atan.evalc                 G   s>   | dk s
| d dkrt jS t|}d| d d  ||   |  S Nr   rY   r   rc   )r   r@   r   r   rj   r   r0   r0   r1   r   Y
  s   zatan.taylor_termNr   c                 C   s   ddl m}m} | jd }||d }|jr||S |tj	u r-t
d| j||dS |dkr7|||}||dk rQ||jrQ||tjkrQ| |tj S ||dkrk||jrk||tjk rk| |tj S | |S )Nr   rx  rc   )r   )r   rC   rB   r*   r   r   r,   r   r   rW   r   r   r   rd   r)   r[   r   r.   rj   r   r   rC   rB   r`   r   r0   r0   r1   r   b
  s   


$$
zatan._eval_as_leading_termc           	      C   s   ddl m}m} | jd |d}tj| |||d}|dkr'| jd ||}|tj	u r9||dkr7|tj
 S |S ||dk rP||jrP||tjkrP|tj
 S ||dkrg||jrg||tjk rg|tj
 S |S Nr   rx  rs  )r   rC   rB   r*   r   r   r   r   r   rW   r[   r,   rd   r   	r.   rj   r   r   r   rC   rB   r  r  r0   r0   r1   r   r
  s   

$
$
zatan._eval_nseriesc                 K   s2   t jd tt jt j|  tt jt j|    S rq   )r   r:   r   rd   r  r0   r0   r1   r  
  s   zatan._eval_rewrite_as_logc                    s|   |d t ju rt jd td| jd   |||S |d t ju r5t j d td| jd   |||S t ||||S r  )	r   r   r[   r   r*   r   r   super_eval_aseriesr.   r   Zargs0rj   r   	__class__r0   r1   r  
  s
   &(zatan._eval_aseriesc                 C   rh  ri  r  rx   r0   r0   r1   rk  
  rl  zatan.inversec                 K   s2   t |d | tjd tdt d|d     S r   r!   r   r[   r   r   r0   r0   r1   r  
     2zatan._eval_rewrite_as_asinc                 K   s(   t |d | tdt d|d    S r   r!   r   r   r0   r0   r1   r  
  s   (zatan._eval_rewrite_as_acosc                 K   r   r   r  r   r0   r0   r1   r  
  r   zatan._eval_rewrite_as_acotc                 K   s$   t |d | tt d|d   S r   r!   r   r   r0   r0   r1   r  
  s   $zatan._eval_rewrite_as_asecc                 K   s.   t |d | tjd tt d|d    S r   r!   r   r[   r   r   r0   r0   r1   r  
     .zatan._eval_rewrite_as_acscr  r   r  )rS   rT   rU   rV   r   r:   rX   rz   r2   r  r
  r  r  r  r   r  r   r   r   r   r  r  rk  r  r  r  r  r  __classcell__r0   r0   r  r1   r   	  s0    %

3


r   c                       s   e Zd ZdZejej fZd'ddZdd Zdd Z	d	d
 Z
dd Zedd Zeedd Zd(ddZd)ddZ fddZdd Zd'ddZdd Zdd  Zd!d" Zd#d$ Zd%d& Z  ZS )*r   a  
    The inverse cotangent function.

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

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

    ``acot(x)`` will evaluate automatically in the cases ``oo``, ``-oo``,
    ``zoo``, ``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] http://dlmf.nist.gov/4.23
    .. [2] http://functions.wolfram.com/ElementaryFunctions/ArcCot

    rc   c                 C   s(   |dkrdd| j d d   S t| |r  r  rx   r0   r0   r1   rz   
  r  z
acot.fdiffc                 C   r  r(   r  r-   r0   r0   r1   r2   
  r  zacot._eval_is_rationalc                 C   r  r   )r*   r  r   r0   r0   r1   r  
  r   zacot._eval_is_positivec                 C   r  r   )r*   r   r   r0   r0   r1   r  
  r   zacot._eval_is_negativec                 C   r  r   r  r   r0   r0   r1   r  
  r   zacot._eval_is_extended_realc                 C   s  |j r8|tju rtjS |tju rtjS |tju rtjS |jr#tjd S |tju r-tjd S |tj	u r8tj d S |tj
u r@tjS | rJ| |  S |jri|  }||v ritd ||  }|td krg|t8 }|S |tj}|d ur{tj t| S |jrtjtj S t|tr|jd }|jr|t; }|td kr|t8 }|S t|tr|jd }|jrtd t| }|td kr|t8 }|S d S d S )NrY   r  r   )r   r   r   r   r@   r   r,   r[   rd   r   rW   r   r  r  r   r   r:   r   r]   r   r   r*   r  r   r   )r   r`   r  r  r   r0   r0   r1   r   
  sZ   











z	acot.evalc                 G   sP   | dkr	t jd S | dk s| d dkrt jS t|}d| d d  ||   |  S r  )r   r[   r@   r   r  r0   r0   r1   r     s   
zacot.taylor_termNr   c                 C   s  ddl m}m} | jd }||d }|tju r!d| |S |dkr+|	||}|j
rA||dk r<| |tj S | |S ||dkrb||j
rb||tjkrb||tjk rb| |tj S ||dk r||j
r||tjk r||tjkr| |tj S | |S )Nr   rx  rc   )r   rC   rB   r*   r   r   r   rW   r   r   r,   r)   r[   r@   rd   r   r  r0   r0   r1   r   '  s    


22
zacot._eval_as_leading_termc           	      C   s   ddl m}m} | jd |d}tj| |||d}|tju r!|S |dkr.| jd 	||}|j
r>||dk r<|tj S |S ||dkr\||j
r\||tjkr\||tjk r\|tj S ||dk rz||j
rz||tjk rz||tjkrz|tj S |S r  )r   rC   rB   r*   r   r   r   r   rW   r   r,   r[   r@   rd   r   r  r0   r0   r1   r   9  s    

2
2
zacot._eval_nseriesc                    s   |d t ju rt jd td| jd   |||S |d t ju r7t jtdd td| jd   |||S tt	| 
||||S )Nr   rY   rc   r   )r   r   r[   r   r*   r   r   r   r  r   r  r  r  r0   r1   r  K  s
   &,zacot._eval_aseriesc                 K   s.   t jd tdt j|  tdt j|    S r   )r   r:   r   r  r0   r0   r1   r  S  s   zacot._eval_rewrite_as_logc                 C   rh  ri  r  rx   r0   r0   r1   rk  W  rl  zacot.inversec                 K   sB   |t d|d   tjd tt |d  t |d  d    S rg  r  r   r0   r0   r1   r  ]  s   ,zacot._eval_rewrite_as_asinc                 K   s8   |t d|d   tt |d  t |d  d   S rg  r!  r   r0   r0   r1   r  a     8zacot._eval_rewrite_as_acosc                 K   r   r   rj  r   r0   r0   r1   r  d  r   zacot._eval_rewrite_as_atanc                 K   s0   |t d|d   tt d|d  |d   S rg  r"  r   r0   r0   r1   r  g  rL  zacot._eval_rewrite_as_asecc                 K   s:   |t d|d   tjd tt d|d  |d    S rg  r#  r   r0   r0   r1   r  j  r  zacot._eval_rewrite_as_acscr  r   r  )rS   rT   rU   rV   r   r:   rX   rz   r2   r  r  r  r  r   r  r   r   r   r   r  r  rk  r  r  r  r  r  r%  r0   r0   r  r1   r   
  s.    )

4
	

r   c                   @   s|   e Zd ZdZedd ZdddZdddZdddZdddZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd	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 ``oo``, ``-oo``,
    ``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] http://dlmf.nist.gov/4.23
    .. [3] http://functions.wolfram.com/ElementaryFunctions/ArcSec
    .. [4] http://reference.wolfram.com/language/ref/ArcSec.html

    c                 C   s  |j rtjS |jr!|tju rtjS |tju rtjS |tju r!tjS |tj	tj
tjfv r0tjd S |jrQ|  }||v rCtd ||  S | |v rQtd ||   S t|trp|jd }|jrp|dt ; }|tkrndt | }|S t|tr|jd }|jrtd t| S d S d S r  )r,   r   rW   r   r   rd   r@   r   r[   r   r   r  r  r   r   r   r*   r  r   r   r   r`   Z
acsc_tabler  r0   r0   r1   r     s<   








z	asec.evalrc   c                 C   s>   |dkrd| j d d tdd| j d d     S t| |r  r*   r!   r   rx   r0   r0   r1   rz        ,
z
asec.fdiffc                 C   rh  ri  rb  rx   r0   r0   r1   rk    rl  zasec.inverseNr   c           	      C   s   ddl m}m}m} | jd }||d }|dkr)tdt|tj	 
| S |jr5|||
| S |dkr?|||}||dk rX|jrX|tjkrX|tj	k rX| | S ||dkru|jru|tjk ru|tjkrudtj | | S | |S r	  )r   r   rC   r   r*   r   r   r!   r   rd   r   r,   r   r  r@   r)   r   r[   r  r0   r0   r1   r     s   
&&
zasec._eval_as_leading_termc                 C   s8  ddl m}m}m} | jd |d}|tju rn|ddd}	ttj|	d  	t
|	dd| }
tj| jd  }||}|| | }ttj| j|||d}| t|  }|
 |	|  ||| | S |tju r|ddd}	ttj|	d  	t
|	dd| }
tj| jd  }||}|| | }ttj| j|||d}| t|  }|
 |	|  ||| | S tj| |||d}|tju r|S |dkr| jd ||}||dk r|jr|tjkr|tjk r| S ||dkr|jr|tjk r|tjkrdtj | S |S Nr   r  r  Tr  rY   rs  )r   r  rC   r  r*   r   r   rd   r   r   r   r  r   r   r!   r   r  r?   r  r   rW   r   r  r@   r[   r  r0   r0   r1   r     s<   
&
&
&
&
&.zasec._eval_nseriesc                 C   s2   | j d }|jdu rdS t|d j| d jfS r  )r*   r>   r   r  r  r0   r0   r1   r    s   

zasec._eval_is_extended_realc              	   K   s2   t jd t jtt j| tdd|d      S r   r  r   r0   r0   r1   r    r   zasec._eval_rewrite_as_logc                 K   r  r   r  r   r0   r0   r1   r    r   zasec._eval_rewrite_as_asinc                 K   r   r   )r   r   r0   r0   r1   r    r   zasec._eval_rewrite_as_acosc                 K   s8   t |d | tj d dt|t |d d     S r   r!   r   r[   r   r   r0   r0   r1   r    r&  zasec._eval_rewrite_as_atanc                 K   s8   t |d | tj d dt|t |d d     S r   r!   r   r[   r   r   r0   r0   r1   r    r&  zasec._eval_rewrite_as_acotc                 K   r  rq   r  r   r0   r0   r1   r     rd  zasec._eval_rewrite_as_acscr  r   r  )rS   rT   rU   rV   r  r   rz   rk  r   r   r  r  r  r  r  r  r  r0   r0   r0   r1   r   n  s    ;

"


"r   c                   @   st   e Zd ZdZedd ZdddZdddZdddZdddZ	dd Z
dd Zdd Zdd Zdd Zdd Zd	S )r   aL  
    The inverse cosecant function.

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

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

    ``acsc(x)`` will evaluate automatically in the cases ``oo``, ``-oo``,
    ``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] http://dlmf.nist.gov/4.23
    .. [3] http://functions.wolfram.com/ElementaryFunctions/ArcCsc

    c                 C   s0  |j rtjS |jr&|tju rtjS |tju rtjd S |tju r&tj d S |tjtj	tjfv r3tj
S | r=| |  S |jrL|  }||v rL|| S t|tr|jd }|jr|dt ; }|tkrgt| }|td krqt| }|t d k r}t | }|S t|tr|jd }|jrtd t| S d S d S r  )r,   r   rW   r   r   rd   r[   r   r   r   r@   r   r  r  r   r   r*   r  r   r   r   r'  r0   r0   r1   r   O  sD   








z	acsc.evalrc   c                 C   s>   |dkrd| j d d tdd| j d d     S t| |r  r(  rx   r0   r0   r1   rz   y  r)  z
acsc.fdiffc                 C   rh  ri  r   rx   r0   r0   r1   rk    rl  zacsc.inverseNr   c           	      C   s   ddl m}m}m} | jd }||d }|jr#|||| S |t	j
u r-||S |dkr7|||}||dk rR|jrR|t	jkrR|t	jk rRt	j| | S ||dkrn|jrn|t	jk rn|t	jkrnt	j | | S | |S r  )r   r   rC   r   r*   r   r   r,   r   r   rW   r   r  r@   rd   r[   r)   r   r  r0   r0   r1   r     s   


&&
zacsc._eval_as_leading_termc                 C   s:  ddl m}m}m} | jd |d}|tju rn|ddd}	ttj|	d  	t
|	dd| }
tj| jd  }||}|| | }ttj| j|||d}| t|  }|
 |	|  ||| | S |tju r|ddd}	ttj|	d  	t
|	dd| }
tj| jd  }||}|| | }ttj| j|||d}| t|  }|
 |	|  ||| | S tj| |||d}|tju r|S |dkr| jd ||}||dk r|jr|tjkr|tjk rtj| S ||dkr|jr|tjk r|tjkrtj | S |S r*  )r   r  rC   r  r*   r   r   rd   r   r   r   r  r   r   r!   r   r  r?   r  r   rW   r   r  r@   r[   r  r0   r0   r1   r     s<   
&
&
&
&
&
.zacsc._eval_nseriesc                 K   s*   t j tt j| tdd|d     S rg  r  r   r0   r0   r1   r    r  zacsc._eval_rewrite_as_logc                 K   r   r   )r   r   r0   r0   r1   r    r   zacsc._eval_rewrite_as_asinc                 K   r  r   r  r   r0   r0   r1   r    r   zacsc._eval_rewrite_as_acosc                 K   s.   t |d | tjd tt |d d   S r   r+  r   r0   r0   r1   r    r$  zacsc._eval_rewrite_as_atanc                 K   s2   t |d | tjd tdt |d d    S r   r,  r   r0   r0   r1   r    r   zacsc._eval_rewrite_as_acotc                 K   r  rq   r  r   r0   r0   r1   r    rd  zacsc._eval_rewrite_as_asecr  r   r  )rS   rT   rU   rV   r  r   rz   rk  r   r   r  r  r  r  r  r  r0   r0   r0   r1   r   $  s    *

)


"r   c                       s\   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Z fddZ  ZS )r   a
  
    The function ``atan2(y, x)`` computes `\operatorname{atan}(y/x)` taking
    two arguments `y` and `x`.  Signs of both `y` and `x` are considered to
    determine the appropriate quadrant of `\operatorname{atan}(y/x)`.
    The range is `(-\pi, \pi]`. The complete definition reads as follows:

    .. math::

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

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

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

    .. math::

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

    Examples
    ========

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

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

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

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

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

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

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

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

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

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

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

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

    See Also
    ========

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

    References
    ==========

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

    c                 C   s  ddl m}m}m} |tju r#|jrtjS dtj ||| tj S |tju r+tj	S |j
r?|j
r?|jr?|jr?||}||}|jr|jr|jrNt|| S |jrj|jr]t|| tj S |jrit|| tj S n|jr|jrutjd S |jr~tj d S |jrtjS |jr|jrtjtj||  S |jrttj||dk fdt|dftjdfS |jr|jrtj t|tj|  t|d |d    S d S d S )Nr   )	HeavisiderC   rB   rY   T)r   r-  rC   rB   r   r   r,   r[   r   r@   r  r  r>   r  r   r   r  r   Zis_extended_nonzerord   r$   r   r:   r   r!   )r   r   rj   r-  rC   rB   r0   r0   r1   r   1  sN   


 z
atan2.evalc                 K   s.   t j t|t j|  t|d |d    S rq   r  )r.   r   rj   r   r0   r0   r1   r  Y  r$  zatan2._eval_rewrite_as_logc              	   K   s`   ddl m} tdt||t|d |d     t|dft||dk fdt|dftjdfS )Nr   r   rY   T)	r   rB   r$   r   r!   r   r   r   r   )r.   r   rj   r   rB   r0   r0   r1   r  \  s   .zatan2._eval_rewrite_as_atanc                 K   sv   ddl m} |jr|jr|||tj  S |tj|  }|d |d  }||t| tjtt|tt|   S )Nr   )r`   rY   )r   r`   r>   r   r:   r!   r   rH   )r.   r   rj   r   r`   r   r   r0   r0   r1   _eval_rewrite_as_argc  s   .zatan2._eval_rewrite_as_argc                 C   s   | j d jo| j d jS r  r  r   r0   r0   r1   r  k  r   zatan2._eval_is_extended_realc                 C   s    |  | jd  | jd  S r  r   r   r0   r0   r1   r   n  r  zatan2._eval_conjugatec                 C   sN   | j \}}|dkr||d |d   S |dkr"| |d |d   S t| |rg  r  )r.   ry   r   rj   r0   r0   r1   rz   q  s   

zatan2.fdiffc                    s*   | j \}}|jr|jrt |S d S d S rR   )r*   r>   r  _eval_evalf)r.   Zprecr   rj   r  r0   r1   r/  |  s   
zatan2._eval_evalf)rS   rT   rU   rV   r  r   r  r  r.  r  r   rz   r/  r%  r0   r0   r  r1   r     s    f
'r   Nr  )Jtypingr   Zsympy.core.addr   Zsympy.core.basicr   r   Zsympy.core.exprr   Zsympy.core.functionr   r   r	   r
   Zsympy.core.logicr   r   r   Zsympy.core.numbersr   r   r   Zsympy.core.relationalr   Zsympy.core.singletonr   Zsympy.core.symbolr   Z(sympy.functions.combinatorial.factorialsr   r   Z&sympy.functions.elementary.exponentialr   r   Z#sympy.functions.elementary.integersr   Z%sympy.functions.elementary.hyperbolicr   r   r   r   r   r   r   r    Z(sympy.functions.elementary.miscellaneousr!   r"   r#   Z$sympy.functions.elementary.piecewiser$   Zsympy.sets.setsr%   Zsympy.utilities.iterablesr&   r'   rb   r4   ro   rw   r   r   r  r   r   r   r  r   r   r   r   r   r   r   r0   r0   r0   r1   <module>   sh    (D
'K  4   H  R  6x_WmM Y X B K 7 '