
~9\c           @  s  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 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- m. Z. d  d l/ m0 Z0 d  d l1 m2 Z2 d  d l3 m4 Z4 d e f d     YZ5 d   Z6 d d  Z7 d e5 f d     YZ8 d e5 f d     YZ9 d e5 f d     YZ: d e5 f d     YZ; d  e5 f d!     YZ< d" e< f d#     YZ= d$ e< f d%     YZ> d& e f d'     YZ? d( e f d)     YZ@ d* e@ f d+     YZA d, e@ f d-     YZB d. e@ f d/     YZC d0 e@ f d1     YZD d2 e@ f d3     YZE d4 e@ f d5     YZF d6 e@ f d7     YZG d8 S(9   i(   t   print_functiont   division(   t   Add(   t   sympifyt   cacheit(   t   range(   t   Functiont   ArgumentIndexError(   t	   fuzzy_nott   fuzzy_or(   t   igcdext   Rationalt   pi(   t   Ne(   t   S(   t   Symbol(   t	   factorialt   RisingFactorial(   t   logt   exp(   t   floor(   t   acotht   asinht   atanht   cosht   cotht   HyperbolicFunctiont   sinht   tanh(   t   sqrtt   Mint   Max(   t	   Piecewise(   t	   FiniteSet(   t   numbered_symbolst   TrigonometricFunctionc           B  sJ   e  Z d  Z e Z d   Z d   Z e d  Z e d  Z d d  Z
 RS(   s(   Base class for trigonometric functions. c         C  s\   |  j  |  j   } | j  |  j  k rQ | j d j rX t | j d j  rX t Sn | j Sd  S(   Ni    (   t   funct   argst   is_rationalR   t   is_zerot   False(   t   selft   s(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_is_rational    s
    &c         C  s   |  j  |  j   } | j  |  j  k r} t |  j d j  rN |  j d j rN t St |  j d  } | d  k	 r | j r t	 Sn | j Sd  S(   Ni    (
   R$   R%   R   R'   t   is_algebraicR(   t	   _pi_coefft   NoneR&   t   True(   R)   R*   t   pi_coeff(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_is_algebraic(   s    &c         K  s*   |  j  d | |  \ } } | | t j S(   Nt   deep(   t   as_real_imagR   t   ImaginaryUnit(   R)   R2   t   hintst   re_partt   im_part(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_expand_complex3   s    c         K  s   |  j  d j rW | r@ t | d <|  j  d j | |  t j f S|  j  d t j f Sn  | r |  j  d j | |  j   \ } } n |  j  d j   \ } } | | f S(   Ni    t   complex(   R%   t   is_realR(   t   expandR   t   ZeroR3   (   R)   R2   R5   t   ret   im(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _as_real_imag7   s    
 (c         C  s  |  j  d } | d  k r/ t | j  d } n  | j |  sE t j S| | k rU | S| | j k r | j r | j |  \ } } | | k r | t	 |  Sn  | j
 r | j |  \ } } | j | d t \ } } | | k r | t	 |  Sq n  t d   d  S(   Ni    t   as_Adds%   Use the periodicity function instead.(   R%   R.   t   tuplet   free_symbolst   hasR   R<   t   is_Mult   as_independentt   abst   is_AddR(   t   NotImplementedError(   R)   t   general_periodt   symbolt   ft   gt   ht   a(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _periodD   s$    		N(   t   __name__t
   __module__t   __doc__R/   t
   unbranchedR+   R1   R8   R?   R.   RO   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR#      s   		c         C  s   xz t  j |   D]\ } | t j k r2 t j } Pq | j r | j   \ } } | t j k rl | j rl Pql q q W|  t j f S| t j	 t j } | t j | } |  | | f S(   s  
    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)
    (
   R   t	   make_argsR   t   Pit   OneRD   t   as_two_termst   is_RationalR<   t   Half(   t   argRN   t   Kt   pt   m1t   m2(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _peeloff_pi^   s    		i   c         C  sr  t  |   }  |  t j k r" t j S|  s/ t j S|  j rn|  j t j  } | rn| j   \ } } | j rt	 |  d } | d k r t
 t t | d  j     } d | } | | } t
 |  }	 |	 | k rt |	 |  } | | } qqt t
 |   } | | } n  | j rg| d }
 |
 d k r6| S|
 s\| j d k	 rRt j St d  S|
 | Sn  | Sn  d S(   s  
    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, y
    >>> 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
    i   i    i   N(   R   R   RU   RV   R<   RD   t   coefft   as_coeff_Mult   is_FloatRF   t   intt   roundR   t   evalfR   t
   is_integert   is_evenR.   (   RZ   t   cyclest   cxt   ct   xRK   R\   t   mt   cmt   it   c2(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR-      s>    $		"

	

t   sinc           B  s   e  Z d  Z d d  Z d d  Z e d    Z e e	 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 e d  Z d   Z d   Z d   Z d   Z RS(   s  
    The sine function.

    Returns the sine of x (measured in radians).

    Notes
    =====

    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
    c         C  s   |  j  d t |  S(   Ni   (   RO   R   (   R)   RJ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   period   s    i   c         C  s0   | d k r t  |  j d  St |  |   d  S(   Ni   i    (   t   cosR%   R   (   R)   t   argindex(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   fdiff   s    c         C  s  d d l  m } d d l m } | j r | t j k r? t j S| t j k rU t j S| t j k ss | t j	 k r | d d  Sn  | t j
 k r t j St | |  r| j | j } } t | d t j  } | t j	 k	 r | | d t j } n  | t j k	 r | | d t j } n  | | |  j t t j d d t j d   t j k	 r| | |  j t d t j d d t j d   t j k	 r| d d  S| | |  j t t j d d t j d   t j k	 r| t t |  t |   d  S| | |  j t d t j d d	 t j d   t j k	 ri| d t t |  t |    S| t t |  t |   t t |  t |    Sn t | |  r| j |   S| j   r|  |  S| j t j  } | d  k	 rt j t |  St |  } | d  k	 ra| j r.t j Sd | j ro| j rKt j S| j t k rot j  | t j! Sn  | j" s| t j }	 |	 | k r|  |	  Sd  S| j" ra| d }
 |
 d k r|  |
 d t j  Sd |
 d k r|  d |
 t j  S| t# d d  d t j }	 t$ |	  } t | t$  s6| S| t j | k rZ|  | t j  Sd  Sn  | j% rt& |  \ }
 } | rt |  t$ |
  t$ |  t |
  Sn  t | t'  r| j( d
 St | t)  r| j( d
 }
 |
 t* d |
 d  St | t+  r1| j( \ } }
 | t* |
 d | d  St | t,  r_| j( d
 }
 t* d |
 d  St | t-  r| j( d
 }
 d t* d d |
 d  |
 St | t.  r| j( d
 }
 d |
 St | t/  r| j( d
 }
 t* d d |
 d  Sd  S(   Ni(   t   AccumBounds(   t   SetExpri   i   i   i   i   i   i    (0   t   sympy.calculusRu   t   sympy.sets.setexprRv   t	   is_NumberR   t   NaNR<   t   Infinityt   NegativeInfinityt   ComplexInfinityt
   isinstancet   mint   maxR   RU   t   intersectionR!   t   EmptySetR   Rp   R   t
   _eval_funct   could_extract_minus_signt   as_coefficientR4   R.   R   R-   Rf   Rg   R(   t   NegativeOneRY   RX   R   Rr   RG   R_   t   asinR%   t   atanR   t   atan2t   acost   acott   acsct   asec(   t   clsRZ   Ru   Rv   R   R   t   dt   i_coeffR0   t   nargRk   t   resultRl   t   y(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   eval   s    	0  0"4"			
	
	+c         G  s   |  d k  s |  d d k r# t  j St |  } t |  d k rd | d } | | d |  |  d Sd |  d | |  t |   Sd  S(   Ni    i   ii   i(   R   R<   R   t   lenR   (   t   nRk   t   previous_termsR\   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   taylor_termn  s    
c         K  sn   t  j } t | t  s' t | t  rI | j | j d  j t  } n  t | |  t | |  d | S(   Ni    i   (	   R   R4   R~   R#   R   R$   R%   t   rewriteR   (   R)   RZ   t   kwargst   I(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_exp|  s    	"c         K  sJ   t  | t  rF t j } | j d } | | | d | | | d Sd  S(   Ni    i   (   R~   R   R   R4   R%   (   R)   RZ   R   R   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_Pow  s    	c         K  s   t  | t j d d t S(   Ni   t   evaluate(   Rr   R   RU   R(   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_cos  s    c         K  s'   t  t j |  } d | d | d S(   Ni   i   (   t   tanR   RY   (   R)   RZ   R   t   tan_half(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_tan  s    c         K  s   t  |  t |  t |  S(   N(   Rp   Rr   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_sincos  s    c         K  s'   t  t j |  } d | d | d S(   Ni   i   (   t   cotR   RY   (   R)   RZ   R   t   cot_half(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_cot  s    c         K  s   |  j  t  j  t  S(   N(   R   Rr   t   pow(   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_pow  s    c         K  s   |  j  t  j  t  S(   N(   R   Rr   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_sqrt  s    c         K  s   d t  |  S(   Ni   (   t   csc(   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_csc  s    c         K  s   d t  | t j d d t S(   Ni   i   R   (   t   secR   RU   R(   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_sec  s    c         K  s   | t  |  S(   N(   t   sinc(   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_sinc  s    c         C  s   |  j  |  j d j    S(   Ni    (   R$   R%   t	   conjugate(   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_conjugate  s    c         K  sE   |  j  d | |  \ } } t |  t |  t |  t |  f S(   NR2   (   R?   Rp   R   Rr   R   (   R)   R2   R5   R=   R>   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR3     s    c         K  s  d d l  m } d d l m } m } |  j d } d  } | j r | j   \ } } t	 | d t
 j   } t	 | d t
 j   }	 t | d t
 j   }
 t | d t
 j   } | | |	 |
 S| j d t  \ } } | j rQ| j rd | d d | | t	 |   S| d | d d t |  | | d t	 |   d	 t
 Sn  t |  } | d  k	 r| j r|  j t  Sn  t	 |  S(
   Ni(   t
   expand_mul(   t
   chebyshevtt
   chebyshevui    R   t   rationali   i   R2   (   t   sympyR   t#   sympy.functions.special.polynomialsR   R   R%   R.   RG   RW   Rp   R(   t   _eval_expand_trigRr   Ra   R/   t
   is_Integert   is_oddR-   RX   R   R   (   R)   R5   R   R   R   RZ   Rk   R   t   sxt   syRi   t   cyR   R0   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s,    			#"	c         C  sb   d d l  m } |  j d j |  } | | j k rQ | d |  j |  rQ | S|  j |  Sd  S(   Ni(   t   Orderi    i   (   R   R   R%   t   as_leading_termRB   t   containsR$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_as_leading_term  s
    'c         C  s   |  j  d j r t Sd  S(   Ni    (   R%   R:   R/   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_is_real  s    c         C  s   |  j  d } | j r t Sd  S(   Ni    (   R%   R:   R/   (   R)   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_is_finite  s    	N(   RP   RQ   RR   R.   Rq   Rt   t   classmethodR   t   staticmethodR   R   R   R   R   R   R   R   R   R   R   R   R   R   R/   R3   R   R   R   R   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRp      s.   -o																Rr   c           B  s   e  Z d  Z d d  Z d d  Z e d    Z e e	 d     Z
 d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z d   Z RS(   s  
    The cosine function.

    Returns the cosine of x (measured in radians).

    Notes
    =====

    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
    c         C  s   |  j  d t |  S(   Ni   (   RO   R   (   R)   RJ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRq     s    i   c         C  s1   | d k r t  |  j d  St |  |   d  S(   Ni   i    (   Rp   R%   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s    c         C  s  d d l  m } d d l m } d d l m } | j r | t j k rO t j S| t j	 k re t j
 S| t j k s | t j k r | d d  Sn  | t j k r t j St | |  r t | t j d  St | |  r | j |   S| j   r |  |  S| j t j  } | d  k	 r(t |  St |  } | d  k	 r| j rTt j | Sd | j r| j ryt j | d S| j t k rt j	 Sn  | j s| t j } | | k r|  |  Sd  Si t j d 6t d  d d	 d 6} | j r| j }	 | j  d |	 }
 |
 |	 k r2| d t j } |  |  Sd |
 |	 k r^d | t j } |  |  Si d d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6} |	 | k rB|
 t j | |	 d |
 t j | |	 d } } |  |  |  |  } } d  | k sd  | k rd  S| | |  t j d |  |  t j d |  S|	 d
 k rRd  S|	 | k r| | j } | | j  |  j!   Sd |	 d k r| d t j } |  |  } d  | k rd  Sd | d d } d | d k  rd n d t" t# |   } | t d | d  Sn  d  S| j$ ret% |  \ } } | ret& |  t& |  t |  t |  Sn  t | t'  r| j( d St | t)  r| j( d } d t d | d  St | t*  r| j( \ } } | t | d | d  St | t+  r| j( d } t d | d  St | t,  rM| j( d } d t d d | d  St | t-  r| j( d } t d d | d  St | t.  r| j( d } d | Sd  S(   Ni(   R   (   Ru   (   Rv   i   i   i   i   i   i   i   i   i   i
   i   i   i   i(   i<   ix   i    (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i
   (   i   i   (   i(   i<   (/   R   R   t   sympy.calculus.utilRu   Rx   Rv   Ry   R   Rz   R<   RV   R{   R|   R}   R~   Rp   RU   R   R   R   R4   R.   R   R-   Rf   R   Rg   R(   RX   RY   R   t   qR\   R;   Rc   RF   RG   R_   Rr   R   R%   R   R   R   R   R   R   (   R   RZ   R   Ru   Rv   R   R0   R   t   cst_table_someR   R\   t   table2RN   t   bt   nvalat   nvalbt   ctst   nvalRk   t   sign_cosRl   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    	
		
	
	
		
32,	+c         G  s   |  d k  s |  d d k r# t  j St |  } t |  d k rd | d } | | d |  |  d Sd |  d | |  t |   Sd  S(   Ni    i   i   ii(   R   R<   R   R   R   (   R   Rk   R   R\   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    
c         K  sj   t  j } t | t  s' t | t  rI | j | j d  j t  } n  t | |  t | |  d S(   Ni    i   (	   R   R4   R~   R#   R   R$   R%   R   R   (   R)   RZ   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    	"c         K  sB   t  | t  r> t j } | j d } | | d | | d Sd  S(   Ni    i   (   R~   R   R   R4   R%   (   R)   RZ   R   R   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    	c         K  s   t  | t j d d t S(   Ni   R   (   Rp   R   RU   R(   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_sin  s    c         K  s'   t  t j |  d } d | d | S(   Ni   i   (   R   R   RY   (   R)   RZ   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   t  |  t |  t  |  S(   N(   Rp   Rr   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s'   t  t j |  d } | d | d S(   Ni   i   (   R   R   RY   (   R)   RZ   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   |  j  |  S(   N(   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c           sC  d d l  m }  f d    d   f d  } t |  } | d  k rM d  S| j rj |  j | t j  S| j sw d  Sd   } i t j	 d 6t
 d  d d	 d 6t
 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 6|   d 6    f d   } | j   k r| | j   | j  } | j d k  r| j   } n  | S| j d s| d }	 t |	 t j  j t
  }
 |	 d d } t |  d rd n d } | t
 d |
 d  S| | j  } | r| | |  } g  t | t d   D]! } | d | d t j f ^ qN} t t g  | D] } | d ^ q  j   j |  } | j t
  S| |  } g  t | t d   D]! } | d | d t j f ^ q} t t g  | D] } | d ^ q  j   j |  } | Sd  S(   Ni(   R   c           s   t  |   d k r  d |  d f St  |   d k rG t |  d |  d  S  |  d  } t |  d | d  \ } } } t | g g  | d d !D] } | | ^ q | g  S(   Ni   i    i   i(   R   R
   RA   (   Rk   RL   t   ut   vRM   Rn   (   t   migcdex(    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s     c           sM  d d l  m } t |  t  r# |  St |  t  sA t d   n  |  j } d |  j |  j k rg |  j Sd  | k r g  | |  j  j   D] \ } } | | | ^ q } n g  | D] } | | ^ q } t	 |  d k r |  g S  |  } g  t
 | d  |  D]) \ } }	 |  j t | |	 |  j  ^ q}
 |  t |
  k sIt  |
 S(   Ni(   t	   factorints   r is not rationali   i   (   t   sympy.ntheoryR   R~   Rc   R   t	   TypeErrorR   R.   t   itemsR   t   zipR\   t   sumt   AssertionError(   t   rt   factorsR   R   Rk   R   RN   RM   Rn   t   jt   ans(   R   (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt	   ipartfrac  s"    	9Cc    )      S  sZ  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(   s2   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  s6   |  t  |  d |  d |  t  |  d |  d f S(   Ni   (   R   (   RN   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   f1  s    c         S  s   |  t  |  d |  d S(   Ni   (   R   (   RN   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   f2  s    ii   i@   i   i   i   iii   (   R   R   RY   ()   R   R   t   t1t   t2t   z1t   z3t   z2t   z4t   y1t   y5t   y6t   y2t   y3t   y7t   y8t   y4t   x1t   x9t   x2t   x10t   x3t   x11t   x4t   x12t   x5t   x13t   x6t   x14t   x15t   x7t   x8t   x16t   v1t   v2t   v3t   v4t   v5t   v6t   u1t   u2t   w1(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt	   _cospi257  s6    		%%%%))))))))i   i   i   i   i   i   i    i   ii   i"   i  c           sh   g  } x[   D]S } t  |  |  \ } } | d k r | }  | j |  |  d k r` t |  Sq q Wt S(   Ni    i   (   t   divmodt   appendRA   R(   (   R   t   primest   p_it   quotientt	   remainder(   R   (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _fermatCoords+  s    t   zi    (   R   R   R.   R-   Rf   R$   R   RU   RX   RY   R   R   R\   R;   Rr   R   Rc   R   R"   R   R   t   subs(   R)   RZ   R   R   R   R0   R	  R  t   rvt   pico2R   Rk   R   t   FCt   decompt   Xt   pcls(    (   R   R   sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     sN    			&

=8=8c         K  s   d t  |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   R  s    c         K  s   d t  |  j |  S(   Ni   (   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   U  s    c         C  s   |  j  |  j d j    S(   Ni    (   R$   R%   R   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   X  s    c         K  sF   |  j  d | |  \ } } t |  t |  t |  t |  f S(   NR2   (   R?   Rr   R   Rp   R   (   R)   R2   R5   R=   R>   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR3   [  s    c         K  s  d d l  m } |  j d } d  } | j r | j   \ } } t | d t j   } t | d t j   } t	 | d t j   } t	 | d t j   }	 | |	 | | S| j
 d t  \ }
 } |
 j r | |
 t	 |   St |  } | d  k	 r| j r|  j t  Sn  t	 |  S(   Ni(   R   i    R   R   (   R   R   R%   R.   RG   RW   Rp   R(   R   Rr   Ra   R/   R   R-   RX   R   R   (   R)   R5   R   RZ   Rk   R   R   R   Ri   R   R`   t   termsR0   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   _  s$    			c         C  se   d d l  m } |  j d j |  } | | j k rT | d |  j |  rT t j S|  j |  Sd  S(   Ni(   R   i    i   (	   R   R   R%   R   RB   R   R   RV   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   t  s
    'c         C  s   |  j  d j r t Sd  S(   Ni    (   R%   R:   R/   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   }  s    c         C  s   |  j  d } | j r t Sd  S(   Ni    (   R%   R:   R/   (   R)   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    	N(   RP   RQ   RR   R.   Rq   Rt   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R/   R3   R   R   R   R   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRr     s,   )															R   c           B  s   e  Z d  Z d d  Z d d  Z d d  Z e d    Z e	 e
 d     Z d   Z d   Z d	   Z e 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 RS(   s  
    The tangent function.

    Returns the tangent of x (measured in radians).

    Notes
    =====

    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
    c         C  s   |  j  t |  S(   N(   RO   R   (   R)   RJ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRq     s    i   c         C  s.   | d k r t  j |  d St |  |   d  S(   Ni   i   (   R   RV   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s    c         C  s   t  S(   s7   
        Returns the inverse of this function.
        (   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   inverse  s    c         C  s  d d l  m } | j ry | t j k r/ t j S| t j k rE t j S| t j k sc | t j k ry | t j t j  Sn  | t j k r t j St	 | |  rl| j
 | j } } t | t j  } | t j k	 r | | t j } n  | t j k	 r
| | t j } n  | | |  j t t j d d t j d   rP| t j t j  S| t |  t |   Sn  | j   r|  |  S| j t j  } | d  k	 rt j t |  St | d  } | d  k	 r| j rt j S| j s| t j } | | k r
|  |  Sd  S| j r| j d s| t j d } t |  t | t j d  }	 }
 t	 |	 t  rt	 |
 t  r|
 d k rt j Sd |
 |	 |
 Sn  i d d 6d d
 6d d 6d d 6d d 6d d 6d d 6d d 6} | j } | j | } | | k rn|  | t j | | d  |  | t j | | d  } } d  | k sVd  | k rZd  S| | d | | S| t j d t j t j } t |  t | t j d  }	 }
 t	 |	 t  rt	 |
 t  r|	 d k rt j S|
 |	 S| | k r|  |  Sqn  | j r_t |  \ } } | r_t |  } | t j k rOt |  St |  Sq_n  t	 | t   ry| j! d St	 | t"  r| j! \ } } | | St	 | t#  r| j! d } | t$ d | d  St	 | t%  r| j! d } t$ d | d  | St	 | t&  r'| j! d } d | St	 | t'  ra| j! d } d t$ d d | d  | St	 | t(  r| j! d } t$ d d | d  | Sd  S(   Ni(   Ru   i   i   i    i   i   i   i   i   i   i   i
   i   i   i   i(   i<   ix   (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i
   (   i   i   (   i(   i<   ()   R   Ru   Ry   R   Rz   R<   R{   R|   R}   R~   R   R   R   RU   R   R!   R   R   R   R4   R.   R   R-   Rf   RX   R   Rr   R\   RY   RG   R_   R   R   R%   R   R   R   R   R   R   R   (   R   RZ   Ru   R   R   R   R   R0   R   t   cresultt   sresultR   R   R\   R   R   Rk   Rl   t   tanmR   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    	3		
	$
	?$	c         G  s   d d l  m } |  d k  s, |  d d k r3 t j St |  } |  d d d |  d } } | |  d  } t |  d  } d | | | d | | | |  Sd  S(   Ni(   t	   bernoullii    i   i   (   R   R  R   R<   R   R   (   R   Rk   R   R  RN   R   t   Bt   F(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   2  s    c         C  sq   |  j  d j | d  d t j } | rU | j rU |  j t  j | d | d | St j |  | d | d | S(   Ni    i   R   t   logx(	   R%   t   limitR   RU   R   R   Rr   t   _eval_nseriesR   (   R)   Rk   R   R!  Rn   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR#  B  s    $"c         K  sO   t  | t  rK t j } | j d } | | | | | | | | | Sd  S(   Ni    (   R~   R   R   R4   R%   (   R)   RZ   R   R   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   H  s    	c         C  s   |  j  |  j d j    S(   Ni    (   R$   R%   R   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   N  s    c         K  s   |  j  d | |  \ } } | re t d |  t d |  } t d |  | t d |  | f S|  j |  t j f Sd  S(   NR2   i   (   R?   Rr   R   Rp   R   R$   R   R<   (   R)   R2   R5   R=   R>   t   denom(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR3   Q  s
    &c         K  s  d d l  m } m } |  j d } d  } | j rAd d l  m } t | j  } g  } x6 | j D]+ } t | d t	 j
   }	 | j |	  qa Wt d  }
 g  t |  D] } t |
  ^ q } d d g } xI t | d  D]7 } | d | d c | | |  d | d	 d 7<q W| d | d j t t | |    S| j d
 t  \ } } | j r| d k rt j } t d d t } d | | | j   } | |  | |  j | t |  f g  St |  S(   Ni(   R>   R=   i    (   t   symmetric_polyR   t   Yi   i   i   R   t   dummyt   real(   R   R>   R=   R%   R.   RG   R%  R   R   R(   R   R  R"   R   t   nextR  t   listR   Ra   R/   R   R   R4   R   R;   (   R)   R5   R>   R=   RZ   Rk   R%  R   t   TXt   txt   YgRn   R&  R\   R`   R  R   R  t   P(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   Y  s.    	%5(	,c         K  s   t  j } t | t  s' t | t  rI | j | j d  j t  } n  t | |  t | |  } } | | | | | S(   Ni    (	   R   R4   R~   R#   R   R$   R%   R   R   (   R)   RZ   R   R   t   neg_expt   pos_exp(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   v  s
    	""c         K  s    d t  |  d t  d |  S(   Ni   (   Rp   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   }  s    c         K  s%   t  | t j d d t t  |  S(   Ni   R   (   Rr   R   RU   R(   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   t  |  t |  S(   N(   Rp   Rr   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   d t  |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s2   t  |  j |  } t |  j |  } | | S(   N(   Rp   R   Rr   (   R)   RZ   R   t   sin_in_sec_formt   cos_in_sec_form(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s2   t  |  j |  } t |  j |  } | | S(   N(   Rp   R   Rr   (   R)   RZ   R   t   sin_in_csc_formt   cos_in_csc_form(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s/   |  j  t  j  t  } | j t  r+ d  S| S(   N(   R   Rr   R   RC   R.   (   R)   RZ   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s/   |  j  t  j  t  } | j t  r+ d  S| S(   N(   R   Rr   R   RC   R.   (   R)   RZ   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         C  sb   d d l  m } |  j d j |  } | | j k rQ | d |  j |  rQ | S|  j |  Sd  S(   Ni(   R   i    i   (   R   R   R%   R   RB   R   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s
    'c         C  s   |  j  d j S(   Ni    (   R%   R:   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         C  s   |  j  d } | j r t Sd  S(   Ni    (   R%   t   is_imaginaryR/   (   R)   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    	N(   RP   RQ   RR   R.   Rq   Rt   R  R   R   R   R   R   R#  R   R   R/   R3   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s0   #v																R   c           B  s   e  Z d  Z d d  Z d d  Z d d  Z e d    Z e	 e
 d     Z d   Z d   Z e 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   Z d   Z RS(   s  
    The cotangent function.

    Returns the cotangent of x (measured in radians).

    Notes
    =====

    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
    c         C  s   |  j  t |  S(   N(   RO   R   (   R)   RJ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRq     s    i   c         C  s.   | d k r t  j |  d St |  |   d  S(   Ni   i   (   R   R   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s    c         C  s   t  S(   s7   
        Returns the inverse of this function.
        (   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR    s    c         C  s  d d l  m } | j rH | t j k r/ t j S| t j k rH t j Sn  | t j k r^ t j St | |  r t | t j	 d  S| j
   r |  |  S| j t j  } | d  k	 r t j t |  St | d  } | d  k	 r| j r t j S| j s&| t j	 } | | k r"|  |  Sd  S| j r| j d k r| j d r| t j	 d } t |  t | t j	 d  } } t | t  rt | t  rd | | Sn  i d d 6d d	 6d d 6d d 6d d 6d d 6d d 6d d 6} | j }	 | j |	 }
 |	 | k r|  |
 t j	 | |	 d  |  |
 t j	 | |	 d  } } d  | k sgd  | k rkd  Sd | | | | S| t j d t j t j	 } t |  t | t j	 d  } } t | t  rt | t  r| d k rt j S| | S| | k r|  |  Sqn  | j rpt |  \ } } | rpt |  } | t j k r_t |  St |  Sqpn  t | t  r| j d St | t  r| j d } d | St | t  r| j \ } } | | St | t  r| j d } t d | d  | St | t  r8| j d } | t d | d  St | t   rn| j d } t d d | d  | St | t!  r| j d } d t d d | d  | Sd  S(   Ni(   Ru   i   i   i   i   i   i   i   i   i   i
   i   i   i   i(   i<   ix   i    (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i
   (   i   i   (   i(   i<   ("   R   Ru   Ry   R   Rz   R<   R}   R~   R   RU   R   R   R4   R.   R   R-   Rf   RX   R   Rr   R\   RY   RG   R_   R   R   R%   R   R   R   R   R   R   R   (   R   RZ   Ru   R   R0   R   R  R  R   R   R\   R   R   Rk   Rl   t   cotmR   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    	
		
	$
	?$	
c         G  s   d d l  m } |  d k r* d t |  S|  d k  sF |  d d k rM t j St |  } | |  d  } t |  d  } d |  d d d |  d | | | |  Sd  S(   Ni(   R  i    i   i   (   R   R  R   R   R<   R   (   R   Rk   R   R  R  R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   O  s    c         C  ss   |  j  d j | d  t j } | rQ | j rQ |  j t  j | d | d | S|  j t  j | d | d | S(   Ni    R   R!  (	   R%   R"  R   RU   R   R   Rr   R#  R   (   R)   Rk   R   R!  Rn   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR#  _  s     "c         C  s   |  j  |  j d j    S(   Ni    (   R$   R%   R   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   e  s    c         K  s   |  j  d | |  \ } } | rg t d |  t d |  } t d |  | t d |  | f S|  j |  t j f Sd  S(   NR2   i   (   R?   Rr   R   Rp   R   R$   R   R<   (   R)   R2   R5   R=   R>   R$  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR3   h  s
    (c         K  s   t  j } t | t  s' t | t  rI | j | j d  j t  } n  t | |  t | |  } } | | | | | S(   Ni    (	   R   R4   R~   R#   R   R$   R%   R   R   (   R)   RZ   R   R   R/  R0  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   p  s
    	""c         K  sP   t  | t  rL t j } | j d } | | | | | | | | | Sd  S(   Ni    (   R~   R   R   R4   R%   (   R)   RZ   R   R   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   w  s    	c         K  s    t  d |  d t  |  d S(   Ni   (   Rp   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   }  s    c         K  s%   t  |  t  | t j d d t S(   Ni   R   (   Rr   R   RU   R(   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   t  |  t |  S(   N(   Rr   Rp   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   d t  |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s2   t  |  j |  } t |  j |  } | | S(   N(   Rr   R   Rp   (   R)   RZ   R   R2  R1  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s2   t  |  j |  } t |  j |  } | | S(   N(   Rr   R   Rp   (   R)   RZ   R   R4  R3  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s/   |  j  t  j  t  } | j t  r+ d  S| S(   N(   R   Rr   R   RC   R.   (   R)   RZ   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s/   |  j  t  j  t  } | j t  r+ d  S| S(   N(   R   Rr   R   RC   R.   (   R)   RZ   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         C  sf   d d l  m } |  j d j |  } | | j k rU | d |  j |  rU d | S|  j |  Sd  S(   Ni(   R   i    i   (   R   R   R%   R   RB   R   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s
    'c         C  s   |  j  d j S(   Ni    (   R%   R:   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s  d d l  m } m } |  j d } d  } | j rGd d l  m } t | j  } g  } x6 | j D]+ } t | d t	 j
   }	 | j |	  qa Wt d  }
 g  t |  D] } t |
  ^ q } d d g } xO t | d d  D]; } | | | d c | | |  d | | d d 7<q W| d | d	 j t t | |    S| j d
 t  \ } } | j r| d	 k rt j } t d d t } | | | j   } | |  | |  j | t |  f g  St |  S(   Ni(   R>   R=   i    (   R%  R   R&  i   i   i   R   R'  R(  (   R   R>   R=   R%   R.   RG   R%  R   R   R(   R   R  R"   R   R)  R  R*  R   Ra   R/   R   R   R4   R   R;   (   R)   R5   R>   R=   RZ   Rk   R%  R   t   CXRi   R-  Rn   R&  R\   R`   R  R   R  R.  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s.    	%9(	,c         C  s   |  j  d } | j r t Sd  S(   Ni    (   R%   R5  R/   (   R)   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    	c         C  s\   |  | k r | S|  j  d } | j | |  } | | k rR | t j j rR t j St |  S(   Ni    (   R%   R  R   RU   Rf   R}   R   (   R)   t   oldt   newRZ   t   argnew(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt
   _eval_subs  s    N(   RP   RQ   RR   R.   Rq   Rt   R  R   R   R   R   R   R#  R   R/   R3   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R;  (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s2   #i																	t   ReciprocalTrigonometricFunctionc           B  s   e  Z d  Z d Z d Z d Z 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 e d  Z d   Z d   Z d   Z d   Z d   Z RS(   s@   Base class for reciprocal functions of trigonometric functions. c         C  s  | j    r8 |  j r  |  |  S|  j r8 |  |  Sn  t |  } | d  k	 r d | j r | j r | j } | j d | } | | k r | d t	 j
 } |  |  Sd | | k r d | t	 j
 } |  j r |  |  S|  j r |  |  Sq n  t | d  r#| j   |  k r#| j d S|  j j |  } | d  k rE| St d   | | f D  rsd | j t  St d   | | f D  rd | j t  Sd | Sd  S(   Ni   i   R  i    c         s  s   |  ] } t  | t  Vq d  S(   N(   R~   Rr   (   t   .0Rn   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pys	   <genexpr>  s    c         s  s   |  ] } t  | t  Vq d  S(   N(   R~   Rp   (   R=  Rn   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pys	   <genexpr>  s    (   R   t   _is_event   _is_oddR-   R.   Rf   RX   R   R\   R   RU   t   hasattrR  R%   t   _reciprocal_ofR   t   anyR   R   R   (   R   RZ   R0   R   R\   R   t   t(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s<    					
	!c         O  s,   |  j  |  j d  } t | |  | |   S(   Ni    (   RA  R%   t   getattr(   R)   t   method_nameR%   R   t   o(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _call_reciprocal  s    c         O  s-   |  j  | | |  } | d  k	 r) d | S| S(   Ni   (   RG  R.   (   R)   RE  R%   R   RC  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _calculate_reciprocal  s    c         C  s?   |  j  | |  } | d  k	 r; | |  j |  k r; d | Sd  S(   Ni   (   RG  R.   RA  (   R)   RE  RZ   RC  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _rewrite_reciprocal  s    !c         C  s#   |  j  d } |  j |  j |  S(   Ni    (   R%   RA  Rq   (   R)   RJ   RK   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRO     s    i   c         C  s   |  j  d |  |  d S(   NRt   i   (   RH  (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s    c         K  s   |  j  d |  S(   NR   (   RI  (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   |  j  d |  S(   NR   (   RI  (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   "  s    c         K  s   |  j  d |  S(   NR   (   RI  (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   %  s    c         K  s   |  j  d |  S(   NR   (   RI  (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   (  s    c         K  s   |  j  d |  S(   NR   (   RI  (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   +  s    c         K  s   |  j  d |  S(   NR   (   RI  (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   .  s    c         K  s   |  j  d |  S(   NR   (   RI  (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   1  s    c         C  s   |  j  |  j d j    S(   Ni    (   R$   R%   R   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   4  s    c         K  s$   d |  j  |  j d  j | |  S(   Ni   i    (   RA  R%   R3   (   R)   R2   R5   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR3   7  s    c         K  s   |  j  d |  S(   NR   (   RH  (   R)   R5   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   ;  s    c         C  s   |  j  |  j d  j   S(   Ni    (   RA  R%   R   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   >  s    c         C  s!   d |  j  |  j d  j |  S(   Ni   i    (   RA  R%   R   (   R)   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   A  s    c         C  s   d |  j  |  j d  j S(   Ni   i    (   RA  R%   t	   is_finite(   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   D  s    c         C  s'   d |  j  |  j d  j | | |  S(   Ni   i    (   RA  R%   R#  (   R)   Rk   R   R!  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR#  G  s    N(   RP   RQ   RR   R.   RA  R>  R?  R   R   RG  RH  RI  RO   Rt   R   R   R   R   R   R   R   R   R/   R3   R   R   R   R   R#  (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR<    s0   %																R   c           B  s}   e  Z d  Z e Z e Z d d  Z d   Z	 d   Z
 d   Z d   Z d   Z d   Z d d	  Z e e d
     Z RS(   s{  
    The secant function.

    Returns the secant of x (measured in radians).

    Notes
    =====

    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
    c         C  s   |  j  |  S(   N(   RO   (   R)   RJ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRq   q  s    c         K  s$   t  | d  d } | d | d S(   Ni   i   (   R   (   R)   RZ   R   t   cot_half_sq(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   t  s    c         K  s   d t  |  S(   Ni   (   Rr   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   x  s    c         K  s   t  |  t |  t  |  S(   N(   Rp   Rr   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   {  s    c         K  s   d t  |  j |  S(   Ni   (   Rr   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   ~  s    c         K  s   d t  |  j |  S(   Ni   (   Rr   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   t  t d | d t S(   Ni   R   (   R   R   R(   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    i   c         C  sA   | d k r. t  |  j d  t |  j d  St |  |   d  S(   Ni   i    (   R   R%   R   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s    "c         G  s}   d d l  m } |  d k  s, |  d d k r3 t j St |  } |  d } d | | d |  t d |  | d | Sd  S(   Ni(   t   euleri    i   i   (   t%   sympy.functions.combinatorial.numbersRL  R   R<   R   R   (   R   Rk   R   RL  t   k(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    
N(   RP   RQ   RR   Rr   RA  R/   R>  R.   Rq   R   R   R   R   R   R   Rt   R   R   R   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   K  s   !						R   c           B  s}   e  Z d  Z e Z e Z d d  Z d   Z	 d   Z
 d   Z d   Z d   Z d   Z d d	  Z e e d
     Z RS(   s  
    The cosecant function.

    Returns the cosecant of x (measured in radians).

    Notes
    =====

    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
    c         C  s   |  j  |  S(   N(   RO   (   R)   RJ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRq     s    c         K  s   d t  |  S(   Ni   (   Rp   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   t  |  t |  t  |  S(   N(   Rr   Rp   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s$   t  | d  } d | d d | S(   Ni   i   (   R   (   R)   RZ   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   d t  |  j |  S(   Ni   (   Rp   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   t  t d | d t S(   Ni   R   (   R   R   R(   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         K  s   d t  |  j |  S(   Ni   (   Rp   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    i   c         C  sB   | d k r/ t  |  j d  t |  j d  St |  |   d  S(   Ni   i    (   R   R%   R   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s    #c         G  s   d d l  m } |  d k r* d t |  S|  d k  sF |  d d k rM t j St |  } |  d d } d | d d d d | d d | d |  | d | d t d |  Sd  S(   Ni(   R  i    i   i   (   R   R  R   R   R<   R   (   R   Rk   R   R  RN  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    N(   RP   RQ   RR   Rp   RA  R/   R?  R.   Rq   R   R   R   R   R   R   Rt   R   R   R   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s   !						R   c           B  sD   e  Z d  Z d d  Z e d    Z d   Z d   Z d   Z RS(   sZ  Represents unnormalized sinc function

    Examples
    ========

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

    * Automated Evaluation

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

    * Differentiation

    >>> sinc(x).diff()
    (x*cos(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)

    References
    ==========

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

    i   c         C  sL   |  j  d } | d k r9 | t |  t |  | d St |  |   d  S(   Ni    i   i   (   R%   Rr   Rp   R   (   R)   Rs   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s     c         C  s   | j  r t j S| j rR | t j t j g k r9 t j S| t j k rR t j Sn  | t j k rh t j S| j   r |  |  St	 |  } | d  k	 r | j r t | j   r t j Sq d | j r t j | t j | Sn  d  S(   Ni   (   R'   R   RV   Ry   R{   R<   Rz   R}   R   R-   R.   Rf   R   R   RY   (   R   RZ   R0   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s$    		
	
c         C  s*   |  j  d } t |  | j | | |  S(   Ni    (   R%   Rp   R#  (   R)   Rk   R   R!  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR#  3  s    c         K  s   d d l  m } | d |  S(   Ni(   t   jni    (   t   sympy.functions.special.besselRO  (   R)   RZ   R   RO  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_jn7  s    c         K  s,   t  t |  | t | d  f d t f  S(   Ni    i   (   R    Rp   R   R/   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   ;  s    (	   RP   RQ   RR   Rt   R   R   R#  RQ  R   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s   &		t   InverseTrigonometricFunctionc           B  s   e  Z d  Z RS(   s/   Base class for inverse trigonometric functions.(   RP   RQ   RR   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRR  D  s   R   c           B  s   e  Z d  Z d d  Z d   Z d   Z d   Z e d    Z e	 e
 d     Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d d  Z RS(   s  
    The inverse sine function.

    Returns the arcsine of x in radians.

    Notes
    =====

    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).

    Examples
    ========

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

    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
    i   c         C  s<   | d k r) d t  d |  j d d  St |  |   d  S(   Ni   i    i   (   R   R%   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt   n  s    c         C  sF   |  j  |  j   } | j  |  j  k r; | j d j rB t Sn | j Sd  S(   Ni    (   R$   R%   R&   R(   (   R)   R*   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR+   t  s
    c         C  s   |  j    o |  j d j S(   Ni    (   R   R%   t   is_positive(   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_is_positive|  s    c         C  s   |  j    o |  j d j S(   Ni    (   R   R%   t   is_negative(   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_is_negative  s    c         C  s  | j  r | t j k r t j S| t j k r< t j t j S| t j k rY t j t j S| t j k ro t j S| t j k r t j d S| t j	 k r t j d Sn  | t j
 k r t j
 S| j   r |  |  S| j ri d t d  d 6d t d  d 6d t d  d 6d t d  d 6d d t d  6d d t d  6d t d t d  d	  6d
 t d t d  d	  6d t j 6d t j 6d	 t d t d   d 6d t d t d   d 6d t d  d d 6d d t d  d 6d t d  d t d  6d d t d  t d  6t d  d t d  d d 6t d  d t d  d d 6} | | k rt j | | Sn  | j t j  } | d  k	 rt j t |  St | t  rK| j d } | j rK| d t ;} | t k rt | } n  | t d k r%t | } n  | t d k  rDt | } n  | Sn  t | t  r| j d } | j rt d t |  Sn  d  S(   Ni   i   ii   ii   ii   i   ii   iii
   ii   ii    i   i   (   Ry   R   Rz   R{   R|   R4   R<   RV   RU   R   R}   R   t	   is_numberR   RY   R   R.   R   R~   Rp   R%   t   is_comparableR   Rr   R   (   R   RZ   t	   cst_tableR   t   ang(    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     sr    		
$		c         G  s   |  d k  s |  d d k r# t  j St |  } t |  d k r{ |  d k r{ | d } | |  d d |  |  d | d S|  d d } t t  j |  } t |  } | | | |  |  Sd  S(   Ni    i   ii   (   R   R<   R   R   R   RY   R   (   R   Rk   R   R\   RN  t   RR   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    
$c         C  sb   d d l  m } |  j d j |  } | | j k rQ | d |  j |  rQ | S|  j |  Sd  S(   Ni(   R   i    i   (   R   R   R%   R   RB   R   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s
    'c         K  s   t  j d t |  S(   Ni   (   R   RU   R   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_acos  s    c         K  s$   d t  | d t d | d   S(   Ni   i   (   R   R   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_atan  s    c         K  s+   t  j t t  j | t d | d   S(   Ni   i   (   R   R4   R   R   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_log  s    c         K  s$   d t  d t d | d  |  S(   Ni   i   (   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_acot  s    c         K  s   t  j d t d |  S(   Ni   i   (   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_asec  s    c         K  s   t  d |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_acsc  s    c         C  s'   |  j  d } | j o& d t |  j S(   Ni    i   (   R%   R:   RF   t   is_nonnegative(   R)   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         C  s   t  S(   s7   
        Returns the inverse of this function.
        (   Rp   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR    s    (   RP   RQ   RR   Rt   R+   RT  RV  R   R   R   R   R   R   R\  R]  R^  R_  R`  Ra  R   R  (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   J  s"   "			G									R   c           B  s   e  Z d  Z d d  Z d   Z e d    Z e e 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 RS(   s  
    The inverse cosine function.

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

    Notes
    =====

    ``acos(x)`` will evaluate automatically in the cases
    ``oo``, ``-oo``, ``0``, ``1``, ``-1``.

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

    Examples
    ========

    >>> from sympy import acos, oo, pi
    >>> 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
    i   c         C  s<   | d k r) d t  d |  j d d  St |  |   d  S(   Ni   ii    i   (   R   R%   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt   '  s    c         C  sF   |  j  |  j   } | j  |  j  k r; | j d j rB t Sn | j Sd  S(   Ni    (   R$   R%   R&   R(   (   R)   R*   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR+   -  s
    c         C  s8  | j  r | t j k r t j S| t j k r< t j t j S| t j k rY t j t j S| t j k rs t j d S| t j k r t j S| t j	 k r t j Sn  | t j
 k r t j
 S| j ri t j d t j 6d t j d t j 6t j d t d  d 6d t j d t d  d 6t j d d t d  6d t j d d t d  6t j d t d  d 6d t j d t d  d 6} | | k r| | Sn  t | t  r| j d } | j r| d t ;} | t k rd t | } n  | Sn  t | t  r4| j d } | j r4t d t |  Sn  d  S(	   Ni   i   i   i   ii   i   i    (   Ry   R   Rz   R{   R4   R|   R<   RU   RV   R   R}   RW  RY   R   R~   Rr   R%   RX  R   Rp   R   (   R   RZ   RY  RZ  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   5  sL    	
	 		c         G  s   |  d k r t  j d S|  d k  s3 |  d d k r: t  j St |  } t |  d k r |  d k r | d } | |  d d |  |  d | d S|  d d } t t  j |  } t |  } | | | |  |  Sd  S(   Ni    i   ii   (   R   RU   R<   R   R   R   RY   R   (   R   Rk   R   R\   RN  R[  R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   e  s    
$c         C  sb   d d l  m } |  j d j |  } | | j k rQ | d |  j |  rQ | S|  j |  Sd  S(   Ni(   R   i    i   (   R   R   R%   R   RB   R   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   w  s
    'c         C  s'   |  j  d } | j o& d t |  j S(   Ni    i   (   R%   R:   RF   Rb  (   R)   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    c         C  s
   |  j    S(   N(   R   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_is_nonnegative  s    c         C  s#   |  j  |  j d  j | | |  S(   Ni    (   R^  R%   R#  (   R)   Rk   R   R!  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR#    s    c         K  s5   t  j d t  j t t  j | t d | d   S(   Ni   i   (   R   RU   R4   R   R   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR^    s    c         K  s   t  j d t |  S(   Ni   (   R   RU   R   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_asin  s    c         K  sA   t  t d | d  |  t j d d | t d | d  S(   Ni   i   (   R   R   R   RU   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR]    s    c         C  s   t  S(   s7   
        Returns the inverse of this function.
        (   Rr   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR    s    c         K  s/   t  j d d t d t d | d  |  S(   Ni   i   (   R   RU   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR_    s    c         K  s   t  d |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR`    s    c         K  s   t  j d t d |  S(   Ni   i   (   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRa    s    c         C  sg   |  j  d } |  j |  j  d j    } | j t k r< | S| j rc | d j rc | d j rc | Sd  S(   Ni    i   (   R%   R$   R   R:   R(   Rb  t   is_nonpositive(   R)   R  R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s    #(   RP   RQ   RR   Rt   R+   R   R   R   R   R   R   R   Rc  R#  R^  Rd  R]  R  R_  R`  Ra  R   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s$   &	0											R   c           B  s   e  Z d  Z d d  Z d   Z d   Z d   Z e d    Z e	 e
 d     Z d   Z d	   Z d
   Z d   Z d d  Z d   Z d   Z d   Z d   Z d   Z RS(   s  
    The inverse tangent function.

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

    Notes
    =====

    atan(x) will evaluate automatically in the cases
    oo, -oo, 0, 1, -1.

    Examples
    ========

    >>> from sympy import atan, oo, pi
    >>> 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
    i   c         C  s6   | d k r# d d |  j  d d St |  |   d  S(   Ni   i    i   (   R%   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s    c         C  sF   |  j  |  j   } | j  |  j  k r; | j d j rB t Sn | j Sd  S(   Ni    (   R$   R%   R&   R(   (   R)   R*   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR+     s
    c         C  s   |  j  d j S(   Ni    (   R%   RS  (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRT    s    c         C  s   |  j  d j S(   Ni    (   R%   Rb  (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRc    s    c         C  s-  | j  r | t j k r t j S| t j k r9 t j d S| t j k rT t j d S| t j k rj t j S| t j k r t j d S| t j k r t j d Sn  | t j	 k r d d l
 m } | t j d t j d  S| j   r |  |  S| j rJi d t d  d 6d t d  d 6d d t d  6d d t d  6d t d  6d	 t d  6t d
  d d t d  6t d
  d d t d  6d
 t d  d 6d d t d  6t d  d t d d t d   6t d  d t d d t d   6d d t d  6d d t d  6} | | k rJt j | | Sn  | j t j  } | d  k	 ryt j t |  St | t  r| j d } | j r| t ;} | t d k r| t 8} n  | Sn  t | t  r)| j d } | j r)t d t |  } | t d k r"| t 8} n  | Sn  d  S(   Ni   i   i(   Ru   i   i   ii   ii   ii   i   ii    (   Ry   R   Rz   R{   RU   R|   R<   RV   R   R}   R   Ru   R   RW  R   R   R4   R.   R   R~   R   R%   RX  R   R   R   (   R   RZ   Ru   RY  R   RZ  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     sj    		%'	
	c         G  sO   |  d k  s |  d d k r# t  j St |  } d |  d d | |  |  Sd  S(   Ni    i   ii   (   R   R<   R   (   R   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   &	  s    c         C  sb   d d l  m } |  j d j |  } | | j k rQ | d |  j |  rQ | S|  j |  Sd  S(   Ni(   R   i    i   (   R   R   R%   R   RB   R   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   /	  s
    'c         C  s   |  j  d j S(   Ni    (   R%   R:   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   8	  s    c         K  sA   t  j d t t  d  t  j |  t t  d  t  j |  S(   Ni   i   (   R   R4   R   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR^  ;	  s    $c         C  s   | d t  j k rB t  j d t d |  j d  j | | |  S| d t  j k r t  j d t d |  j d  j | | |  St t |   j | | | |  Sd  S(   Ni    i   i   (	   R   R{   RU   R   R%   R#  R|   t   supert   _eval_aseries(   R)   R   t   args0Rk   R!  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRg  ?	  s
    /0c         C  s   t  S(   s7   
        Returns the inverse of this function.
        (   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR  G	  s    c         K  s9   t  | d  | t j d t d t  d | d   S(   Ni   i   (   R   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRd  M	  s    c         K  s.   t  | d  | t d t  d | d   S(   Ni   i   (   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR\  P	  s    c         K  s   t  d |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR_  S	  s    c         K  s*   t  | d  | t t  d | d   S(   Ni   i   (   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR`  V	  s    c         K  s5   t  | d  | t j d t t  d | d   S(   Ni   i   (   R   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRa  Y	  s    (   RP   RQ   RR   Rt   R+   RT  Rc  R   R   R   R   R   R   R   R^  Rg  R  Rd  R\  R_  R`  Ra  (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR     s$   #			A									R   c           B  s   e  Z d  Z d d  Z d   Z d   Z d   Z d   Z e d    Z	 e
 e d     Z d	   Z d
   Z d   Z d d  Z d   Z d   Z d   Z d   Z d   Z RS(   s  
    The inverse cotangent function.

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

    See Also
    ========

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

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions
    .. [2] http://dlmf.nist.gov/4.23
    .. [3] http://functions.wolfram.com/ElementaryFunctions/ArcCot
    i   c         C  s6   | d k r# d d |  j  d d St |  |   d  S(   Ni   ii    i   (   R%   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt   q	  s    c         C  sF   |  j  |  j   } | j  |  j  k r; | j d j rB t Sn | j Sd  S(   Ni    (   R$   R%   R&   R(   (   R)   R*   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR+   w	  s
    c         C  s   |  j  d j S(   Ni    (   R%   Rb  (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRT  	  s    c         C  s   |  j  d j S(   Ni    (   R%   RU  (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRV  	  s    c         C  s   |  j  d j S(   Ni    (   R%   R:   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   	  s    c         C  s(  | j  r | t j k r t j S| t j k r5 t j S| t j k rK t j S| t j k re t j d S| t j k r t j d S| t j k r t j d Sn  | t j	 k r t j S| j
   r |  |  S| j rDi d t d  d 6d t d  d 6d d t d  6d d t d  6d t d  6d t d  6d	 d t d  6d
 d t d  6t d	  d d t d  6t d	  d t d  d 6d t d d t d   6d t d d t d   6d d t d  6d d t d  6t d  d d t d  6t d  d d t d  6} | | k rDt j | | Sn  | j t j  } | d  k	 rtt j t |  St | t  r| j d } | j r| t ;} | t d k r| t 8} n  | Sn  t | t  r$| j d } | j r$t d t |  } | t d k r| t 8} n  | Sn  d  S(   Ni   i   i   ii   ii   ii   ii
   i   ii   ii    (   Ry   R   Rz   R{   R<   R|   RU   RV   R   R}   R   RW  R   R   R4   R.   R   R~   R   R%   RX  R   R   R   (   R   RZ   RY  R   RZ  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   	  sl    		 	
	c         G  sf   |  d k r t  j d S|  d k  s3 |  d d k r: t  j St |  } d |  d d | |  |  Sd  S(   Ni    i   ii   (   R   RU   R<   R   (   R   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   	  s    c         C  sb   d d l  m } |  j d j |  } | | j k rQ | d |  j |  rQ | S|  j |  Sd  S(   Ni(   R   i    i   (   R   R   R%   R   RB   R   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   	  s
    'c         C  s   | d t  j k rB t  j d t d |  j d  j | | |  S| d t  j k r d t  j d t d |  j d  j | | |  St t |   j	 | | | |  Sd  S(   Ni    i   i   i   (
   R   R{   RU   R   R%   R#  R|   Rf  R   Rg  (   R)   R   Rh  Rk   R!  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRg  	  s
    /3c         K  s5   t  j d t d t  j |  t d t  j |  S(   Ni   i   (   R   R4   R   (   R)   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR^  	  s    c         C  s   t  S(   s7   
        Returns the inverse of this function.
        (   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR  	  s    c         K  sI   | t  d | d  t j d t t  | d  t  | d d   S(   Ni   i   (   R   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRd  	  s    c         K  s>   | t  d | d  t t  | d  t  | d d   S(   Ni   i   (   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR\  	  s    c         K  s   t  d |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR]  	  s    c         K  s6   | t  d | d  t t  d | d | d   S(   Ni   i   (   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR`  	  s    c         K  sA   | t  d | d  t j d t t  d | d | d   S(   Ni   i   (   R   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRa  	  s    (   RP   RQ   RR   Rt   R+   RT  RV  R   R   R   R   R   R   R   Rg  R^  R  Rd  R\  R]  R`  Ra  (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   ]	  s$   				A
								R   c           B  s}   e  Z d  Z e d    Z d d  Z d d  Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z RS(   s  
    The inverse secant function.

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

    Notes
    =====

    ``asec(x)`` will evaluate automatically in the cases
    ``oo``, ``-oo``, ``0``, ``1``, ``-1``.

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

    .. math::
        sec^{-1}(z) = -i*(log(\sqrt{1 - z^2} + 1) / 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*(log(-\sqrt{1 - z^2} + 1) / z)

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

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

    Examples
    ========

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

    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 k r/ t j S| t j k rE t j S| t j k r^ t j Sn  | t j	 t j
 t j g k r t j d St | t  r | j d } | j r | d t ;} | t k r d t | } n  | Sn  t | t  r| j d } | j rt d t |  Sn  d  S(   Ni   i    (   R'   R   R}   Ry   Rz   RV   R<   R   RU   R{   R|   R~   R   R%   RX  R   R   R   (   R   RZ   RZ  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   6
  s,    		
		i   c         C  sO   | d k r< d |  j  d d t d d |  j  d d  St |  |   d  S(   Ni   i    i   (   R%   R   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt   R
  s    0c         C  s   t  S(   s7   
        Returns the inverse of this function.
        (   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR  X
  s    c         C  sY   d d l  m } |  j d j |  } | d |  j |  rH t |  S|  j |  Sd  S(   Ni(   R   i    i   (   R   R   R%   R   R   R   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   ^
  s
    
c         C  s?   |  j  d } | j t k r  t St | d j | d j f  S(   Ni    i   (   R%   R:   R(   R	   Rb  (   R)   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   f
  s    c      	   K  s9   t  j d t  j t t  j | t d d | d   S(   Ni   i   (   R   RU   R4   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR^  l
  s    c         K  s   t  j d t d |  S(   Ni   i   (   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRd  o
  s    c         K  s   t  d |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR\  r
  s    c         K  s>   t  | d  | t j d d t | t  | d d   S(   Ni   i   (   R   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR]  u
  s    c         K  s>   t  | d  | t j d d t | t  | d d   S(   Ni   i   (   R   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR_  x
  s    c         K  s   t  j d t |  S(   Ni   (   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRa  {
  s    (   RP   RQ   RR   R   R   Rt   R  R   R   R^  Rd  R\  R]  R_  Ra  (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR    
  s   4							R   c           B  st   e  Z d  Z e d    Z d d  Z d d  Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z RS(   sq  
    The inverse cosecant function.

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

    Notes
    =====

    acsc(x) will evaluate automatically in the cases
    oo, -oo, 0, 1, -1.

    Examples
    ========

    >>> from sympy import acsc, oo, pi
    >>> acsc(1)
    pi/2
    >>> acsc(-1)
    -pi/2

    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  sI  | j  rW | t j k r t j S| t j k r9 t j d S| t j k rW t j d Sn  | t j t j t j g k r| t j	 St
 | t  r| j d } | j r| d t ;} | t k r t | } n  | t d k r t | } n  | t d k  rt | } n  | Sn  t
 | t  rE| j d } | j rEt d t |  Sn  d  S(   Ni   i    (   Ry   R   Rz   RV   RU   R   R{   R|   R}   R<   R~   R   R%   RX  R   R   R   (   R   RZ   RZ  (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   
  s0    			i   c         C  sO   | d k r< d |  j  d d t d d |  j  d d  St |  |   d  S(   Ni   ii    i   (   R%   R   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt   
  s    0c         C  s   t  S(   s7   
        Returns the inverse of this function.
        (   R   (   R)   Rs   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR  
  s    c         C  sY   d d l  m } |  j d j |  } | d |  j |  rH t |  S|  j |  Sd  S(   Ni(   R   i    i   (   R   R   R%   R   R   R   R$   (   R)   Rk   R   RZ   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   
  s
    
c         K  s/   t  j t t  j | t d d | d   S(   Ni   i   (   R   R4   R   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR^  
  s    c         K  s   t  d |  S(   Ni   (   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRd  
  s    c         K  s   t  j d t d |  S(   Ni   i   (   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR\  
  s    c         K  s5   t  | d  | t j d t t  | d d   S(   Ni   i   (   R   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR]  
  s    c         K  s9   t  | d  | t j d t d t  | d d   S(   Ni   i   (   R   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR_  
  s    c         K  s   t  j d t |  S(   Ni   (   R   RU   R   (   R)   RZ   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR`  
  s    (   RP   RQ   RR   R   R   Rt   R  R   R^  Rd  R\  R]  R_  R`  (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   
  s   ! 						R   c           B  s\   e  Z d  Z e d    Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z RS(	   s	  
    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.

    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)
    2*atan(y/(x + sqrt(x**2 + y**2)))

    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 k r] | j r; t j Sd t j | | |   t j S| t j k rs t j	 S| j
 r | j
 r | j r | j r | |  } | |  } n  | j rk| j rk| j r t | |  S| j r#| j rt | |  t j S| j rht | |  t j Sqk| j rk| j r@t j d S| j rUt j d S| j rht j Sqkn  | j r| j rt | j  rt j t j | |  S| j r| j rt j t | t j | t | d | d   Sd  S(   Ni(   t	   HeavisideR>   R=   i   (   R   Ri  R>   R=   R   R|   R'   RU   R{   R<   R5  RW  R:   RS  R   RU  Rb  Rz   R   RV   R4   R   R   (   R   R   Rk   Ri  R>   R=   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   H  s<    	"$								!
c         K  s3   t  j t | t  j | t | d | d   S(   Ni   (   R   R4   R   R   (   R)   R   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR^  k  s    c         K  s(   d t  | t | d | d  |  S(   Ni   (   R   R   (   R)   R   Rk   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR]  n  s    c         K  s   d d l  m } | j r7 | j r7 | | | t j  St j } | | | } | d | d } | | t |   | t t |  t t |    S(   Ni(   RZ   i   (   R   RZ   R:   R   R4   R   R   RF   (   R)   R   Rk   R   RZ   R   R   R   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   _eval_rewrite_as_argq  s    	c         C  s   |  j  d j o |  j  d j S(   Ni    i   (   R%   R:   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   z  s    c         C  s*   |  j  |  j d j   |  j d j    S(   Ni    i   (   R$   R%   R   (   R)   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   }  s    c         C  sc   |  j  \ } } | d k r/ | | d | d S| d k rP | | d | d St |  |   d  S(   Ni   i   (   R%   R   (   R)   Rs   R   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRt     s    c         C  s>   |  j  \ } } | j r: | j r: t t |   j |  n  d  S(   N(   R%   R:   Rf  R   t   _eval_evalf(   R)   t   precR   Rk   (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyRk    s    (   RP   RQ   RR   R   R   R^  R]  Rj  R   R   Rt   Rk  (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyR   
  s   ]#							N(H   t
   __future__R    R   t   sympy.core.addR   t   sympy.core.basicR   R   t   sympy.core.compatibilityR   t   sympy.core.functionR   R   t   sympy.core.logicR   R	   t   sympy.core.numbersR
   R   R   t   sympy.core.relationalR   t   sympy.core.singletonR   t   sympy.core.symbolR   t(   sympy.functions.combinatorial.factorialsR   R   t&   sympy.functions.elementary.exponentialR   R   t#   sympy.functions.elementary.integersR   t%   sympy.functions.elementary.hyperbolicR   R   R   R   R   R   R   R   t(   sympy.functions.elementary.miscellaneousR   R   R   t$   sympy.functions.elementary.piecewiseR    t   sympy.sets.setsR!   t   sympy.utilities.iterablesR"   R#   R_   R-   Rp   Rr   R   R   R<  R   R   R   RR  R   R   R   R   R   R   R   (    (    (    sG   lib/python2.7/site-packages/sympy/functions/elementary/trigonometric.pyt   <module>   sP   :C	!H   + %uPQXj