ó
\K]c           @` sî  d  Z  d d l m Z m Z m Z d d l Z d d l Z d d l j j	 Z
 d d l 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 m Z e ƒ  Z e j Z d
 „  Z d „  Z d „  Z e e j e j ƒ d „  ƒ Z e e j  e j ƒ d „  ƒ Z! e j" d) k rMe e j# e j ƒ d „  ƒ Z$ n  e e j% e j& e j& ƒ d „  ƒ Z' d „  Z( e) d ƒ Z* e) d ƒ Z+ e e j, e j ƒ e( d „  ƒ ƒ Z- e e j. e j ƒ e( d „  ƒ ƒ Z/ e e j. e j e j ƒ d „  ƒ Z0 e e j1 e j ƒ d „  ƒ Z2 e e j3 e j ƒ e( d „  ƒ ƒ Z4 e e j5 e j ƒ e( d „  ƒ ƒ Z6 e e j7 e j ƒ d „  ƒ Z8 e e j9 e j ƒ d „  ƒ Z: e e j; e j ƒ d „  ƒ Z< e e j= e j ƒ d „  ƒ Z> e e j? e j ƒ d  „  ƒ Z@ e e jA e j ƒ d! „  ƒ ZB e e jC e j ƒ d" „  ƒ ZD e e jE e j ƒ d# „  ƒ ZF e e jG e j ƒ d$ „  ƒ ZH e e jI e j ƒ d% „  ƒ ZJ e e jK e j ƒ d& „  ƒ ZL e e jM e j ƒ d' „  ƒ ZN e e jO e j ƒ d( „  ƒ ZP d S(*   s'   
Implement the cmath module functions.
i    (   t   print_functiont   absolute_importt   divisionN(   t   Type(   t   Registryt   impl_ret_untracked(   t   typest   cgutilst   utils(   t	   signaturei   (   t   builtinst   mathimplc         C` s   |  j  d | j | j ƒ S(   Nt   uno(   t   fcmp_unorderedt   realt   imag(   t   buildert   z(    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   is_nan   s    c         C` s.   |  j  t j |  | j ƒ t j |  | j ƒ ƒ S(   N(   t   or_R   t   is_infR   R   (   R   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyR      s    c         C` s.   |  j  t j |  | j ƒ t j |  | j ƒ ƒ S(   N(   t   and_R   t	   is_finiteR   R   (   R   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyR      s    c         C` sR   | j  \ } | \ } |  j | | d | ƒ} t | | ƒ } t |  | | j | ƒ S(   Nt   value(   t   argst   make_complexR   R   t   return_type(   t   contextR   t   sigR   t   typR   R   t   res(    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   isnan_float_impl"   s
    	c         C` sR   | j  \ } | \ } |  j | | d | ƒ} t | | ƒ } t |  | | j | ƒ S(   NR   (   R   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   isinf_float_impl*   s
    	i   i   c         C` sR   | j  \ } | \ } |  j | | d | ƒ} t | | ƒ } t |  | | j | ƒ S(   NR   (   R   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   isfinite_float_impl4   s
    	c   
      C` sx   | \ } } t  j | | ƒ } d „  } t | j | j t j f Œ } |  j | | | | | g ƒ }	 t |  | | |	 ƒ S(   Nc         S` sÄ   | s5 |  s t  |  ƒ St j |  ƒ r5 t |  | ƒ Sn  t j | ƒ } t j | ƒ } | d k r{ t j |  ƒ r{ | |  } n
 | |  9} | d k r­ t j |  ƒ r­ | |  } n
 | |  9} t | | ƒ S(   Ng        (   t   abst   matht   isinft   complext   cost   sin(   t   rt   phit   phi_is_finiteR   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   rectD   s    


(	   R   R   R	   R   R   R   t   booleant   compile_internalR   (
   R   R   R   R   R(   R)   R*   R+   t	   inner_sigR   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt	   rect_impl=   s    	c         ` s   ‡  f d †  } | S(   Nc         ` sÄ   | j  \ } | \ } |  j | | d | ƒ} | j } | j } t j | | ƒ }	 t j | | ƒ }
 t | j | j f d t	 j
 f d Œ } |  j | ˆ  | | | |	 |
 f ƒ } t |  | | | ƒ S(   NR   i   (   R   R   R   R   R   R   R	   R   t   underlying_floatR   R,   R-   R   (   R   R   R   R   R   R   R   t   xt   yt   x_is_finitet   y_is_finiteR.   R   (   t
   inner_func(    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   wrapper`   s    				!(    (   R5   R6   (    (   R5   s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   intrinsic_complex_unary_   s    t   nant   infc   	      C` sh  | r^ | rN t  j | ƒ } t  j | ƒ } t  j |  ƒ } t | | | | ƒ St t t ƒ Snt  j |  ƒ r | r€ t |  |  ƒ St |  | ƒ SnÔ |  d k r| rÿ t  j | ƒ } t  j | ƒ } | d k rÙ | |  9} n  | d k rò | |  9} n  t | | ƒ St |  t ƒ SnU | rWt  j |  ƒ } t  j | ƒ } t  j | ƒ } t | | | | ƒ St | | ƒ Sd S(   s   cmath.exp(x + y j)g        i    N(   R#   R&   R'   t   expR%   t   NANt   isnan(	   R1   R2   R3   R4   t   ct   sR(   R   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   exp_implu   s6    c         C` s:   t  j t  j |  | ƒ ƒ } t  j | |  ƒ } t | | ƒ S(   s   cmath.log(x + y j)(   R#   t   logt   hypott   atan2R%   (   R1   R2   R3   R4   t   at   b(    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   log_implž   s    c         C` s@   | \ } } d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   s   cmath.log(z, base)c         S` s   t  j |  ƒ t  j | ƒ S(   N(   t   cmathR@   (   R   t   base(    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   log_base¬   s    (   R-   R   (   R   R   R   R   R   RG   RH   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   log_base_impl§   s    	c         ` s@   d ‰  ‡  f d †  } |  j  | | | | ƒ } t |  | | | ƒ S(   NgUµ»±k@c         ` s*   t  j |  ƒ }  t |  j ˆ  |  j ˆ  ƒ S(   s   cmath.log10(z)(   RF   R@   R%   R   R   (   R   (   t   LN_10(    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt
   log10_impl·   s    (   R-   R   (   R   R   R   R   RK   R   (    (   RJ   s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRK   ³   s    c         C` s   t  j | |  ƒ S(   s   cmath.phase(x + y j)(   R#   RB   (   R1   R2   R3   R4   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt
   phase_implÂ   s    c         C` s"   t  j |  | ƒ t  j | |  ƒ f S(   s   cmath.polar(x + y j)(   R#   RA   RB   (   R1   R2   R3   R4   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt
   polar_implÈ   s    c   
      ` s…   d } d | } | j  d j } | j d k r8 t j n t j } | | ‰  ‡  f d †  } |  j | | | | ƒ }	 t |  | | |	 ƒ S(   NgÍ;fž ö?g      ð?i    i@   c         ` sØ  |  j  } |  j } | d k r= | d k r= t t | ƒ | ƒ St j | ƒ r_ t t | ƒ | ƒ St j | ƒ r{ t | | ƒ St j | ƒ rÙ | d k  r¹ t t | | ƒ t j | | ƒ ƒ St | t j | | | ƒ ƒ Sn  t | ƒ ˆ  k sý t | ƒ ˆ  k r| d 9} | d 9} t } n t	 } | d k rft j
 | t j | | ƒ d ƒ } | } | d | } nJ t j
 | t j | | ƒ d ƒ } t | ƒ d | } t j | | ƒ } | rÇt | d | ƒ St | | ƒ Sd S(   s   cmath.sqrt(z)g        g      Ð?i    g      à?i   N(   R   R   R%   R"   R#   R$   R<   t   copysignt   Truet   Falset   sqrtRA   (   R   RC   RD   t   scalet   tR   R   (   t   THRES(    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt	   sqrt_implÞ   s6    		# $

	#$(   R   R0   t   bitwidthR   t   DBL_MAXt   FLT_MAXR-   R   (
   R   R   R   R   t   SQRT2t   ONE_PLUS_SQRT2t	   theargfltt   MAXRU   R   (    (   RT   s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRU   Ï   s    
!
*c         C` s4   d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   Nc         S` s   t  j t |  j |  j ƒ ƒ S(   s   cmath.cos(z) = cmath.cosh(z j)(   RF   t   coshR%   R   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   cos_impl  s    (   R-   R   (   R   R   R   R   R^   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyR^     s    	c         C` s4   d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   Nc         S` sø   |  j  } |  j } t j | ƒ r¿ t j | ƒ rE t | ƒ } | } nW | d k rf t | ƒ } | } n6 t j | t j | ƒ ƒ } t j | t j | ƒ ƒ } | d k  r² | } n  t	 | | ƒ St	 t j | ƒ t j
 | ƒ t j | ƒ t j | ƒ ƒ S(   s   cmath.cosh(z)g        (   R   R   R#   R$   R<   R"   RN   R&   R'   R%   R]   t   sinh(   R   R1   R2   R   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt	   cosh_impl  s     				
(   R-   R   (   R   R   R   R   R`   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyR`     s    	c         C` s4   d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   Nc         S` s3   t  j t |  j |  j ƒ ƒ } t | j | j ƒ S(   s#   cmath.sin(z) = -j * cmath.sinh(z j)(   RF   R_   R%   R   R   (   R   R(   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   sin_impl4  s    (   R-   R   (   R   R   R   R   Ra   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRa   2  s    	c         C` s4   d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   Nc         S` sÛ   |  j  } |  j } t j | ƒ r¢ t j | ƒ r? | } | } nV t j | ƒ } t j | ƒ } | d k rv | | 9} n  | d k r• | t | ƒ 9} n  t | | ƒ St t j | ƒ t j	 | ƒ t j | ƒ t j
 | ƒ ƒ S(   s   cmath.sinh(z)g        (   R   R   R#   R$   R<   R&   R'   R"   R%   R_   R]   (   R   R1   R2   R   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt	   sinh_impl>  s    			(   R-   R   (   R   R   R   R   Rb   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRb   <  s    	c         C` s4   d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   Nc         S` s3   t  j t |  j |  j ƒ ƒ } t | j | j ƒ S(   s#   cmath.tan(z) = -j * cmath.tanh(z j)(   RF   t   tanhR%   R   R   (   R   R(   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   tan_implX  s    (   R-   R   (   R   R   R   R   Rd   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRd   V  s    	c         C` s4   d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   Nc   
      S` sé   |  j  } |  j } t j | ƒ rw t j d | ƒ } t j | ƒ rK d } n t j d t j d | ƒ ƒ } t | | ƒ St j | ƒ } t j | ƒ } d t j	 | ƒ } | | } d | | }	 t | d | | |	 | |	 | | ƒ S(   s   cmath.tanh(z)g      ð?g        g       @(
   R   R   R#   R$   RN   R'   R%   Rc   t   tanR]   (
   R   R1   R2   R   R   t   txt   tyt   cxt   txtyt   denom(    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt	   tanh_implb  s     			
(   R-   R   (   R   R   R   R   Rk   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRk   `  s    	c         ` sY   t  j d ƒ ‰  t j d ‰ ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | | ƒ S(   Ni   c         ` s+  t  |  j ƒ ˆ k s* t  |  j ƒ ˆ k r’ t j t  |  j ƒ |  j ƒ } t j t j t j |  j d |  j d ƒ ƒ ˆ  |  j ƒ } t | | ƒ St	 j
 t d |  j |  j ƒ ƒ } t	 j
 t d |  j |  j ƒ ƒ } d t j | j | j ƒ } t j | j | j | j | j ƒ } t | | ƒ Sd S(   s   cmath.acos(z)g      à?g      ð?g       @N(   R"   R   R   R#   RB   RN   R@   RA   R%   RF   RQ   t   asinh(   R   R   R   t   s1t   s2(   t   LN_4RT   (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt	   acos_impl  s    **#"'(   R#   R@   R   RX   R-   R   (   R   R   R   R   Rp   R   (    (   Ro   RT   s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRp   |  s
    c         ` sY   t  j d ƒ ‰  t j d ‰ ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | | ƒ S(   Ni   c         ` s  t  |  j ƒ ˆ k s* t  |  j ƒ ˆ k r| t j t j |  j d |  j d ƒ ƒ ˆ  } t j |  j |  j ƒ } t | | ƒ St j	 t |  j d |  j ƒ ƒ } t j	 t |  j d |  j ƒ ƒ } t j
 | j | j | j | j ƒ } d t j | j | j ƒ } t | | ƒ Sd S(   s   cmath.acosh(z)g      à?g      ð?g       @N(   R"   R   R   R#   R@   RA   RB   R%   RF   RQ   Rl   (   R   R   R   Rm   Rn   (   Ro   RT   (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt
   acosh_impl›  s    *-""'(   R#   R@   R   RX   R-   R   (   R   R   R   R   Rq   R   (    (   Ro   RT   s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRq   –  s
    c         ` sY   t  j d ƒ ‰  t j d ‰ ‡  ‡ f d †  } |  j | | | | ƒ } t |  | | | ƒ S(   Ni   c         ` s;  t  |  j ƒ ˆ k s* t  |  j ƒ ˆ k r‘ t j t j t j |  j d |  j d ƒ ƒ ˆ  |  j ƒ } t j |  j t  |  j ƒ ƒ } t | | ƒ St	 j
 t d |  j |  j ƒ ƒ } t	 j
 t d |  j |  j ƒ ƒ } t j | j | j | j | j ƒ } t j |  j | j | j | j | j ƒ } t | | ƒ Sd S(   s   cmath.asinh(z)g      à?g      ð?N(   R"   R   R   R#   RN   R@   RA   RB   R%   RF   RQ   Rl   (   R   R   R   Rm   Rn   (   Ro   RT   (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt
   asinh_implµ  s    **#"'-(   R#   R@   R   RX   R-   R   (   R   R   R   R   Rr   R   (    (   Ro   RT   s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRr   °  s
    c         C` s4   d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   Nc         S` s3   t  j t |  j |  j ƒ ƒ } t | j | j ƒ S(   s%   cmath.asin(z) = -j * cmath.asinh(z j)(   RF   Rl   R%   R   R   (   R   R(   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt	   asin_implÊ  s    (   R-   R   (   R   R   R   R   Rs   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRs   È  s    	c         C` s4   d „  } |  j  | | | | ƒ } t |  | | | ƒ S(   Nc         S` sn   t  j t |  j |  j ƒ ƒ } t j |  j ƒ rV t j |  j ƒ rV t | j | j ƒ St | j | j ƒ Sd S(   s%   cmath.atan(z) = -j * cmath.atanh(z j)N(   RF   t   atanhR%   R   R   R#   R$   R<   (   R   R(   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt	   atan_implÔ  s    $(   R-   R   (   R   R   R   R   Ru   R   (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyRu   Ò  s    		c         ` s„   t  j d ƒ } t  j t j d ƒ ‰ t  j t j ƒ ‰ t  j d ‰  ‡  ‡ ‡ f d †  } |  j | | | | ƒ } t |  | | | ƒ S(   Ni   i   c         ` s4  |  j  d k  r t } |  }  n t } t |  j ƒ } t j |  j  ƒ sa |  j  ˆ k sa | ˆ k rõ t j |  j ƒ r‹ t j d |  j  ƒ } nP t j |  j  ƒ r¦ d } n5 t j	 |  j  d |  j d ƒ } |  j  d | | } t j ˆ  |  j ƒ } nþ |  j  d k r‰| ˆ k  r‰| d k r.t
 } |  j } qót j t j | ƒ t j t j	 | d ƒ ƒ ƒ } t j t j d | ƒ d |  j ƒ } nj | | } d |  j  } t j d |  j  | | | ƒ d } t j d	 |  j | d |  j  | ƒ d } t j |  j ƒ rt } n  | r#t | | ƒ St | | ƒ Sd
 S(   s   cmath.atanh(z)g        g      à?g      @g      ð?g       @i   i   g      Ð?g       ÀN(   R   RO   RP   R"   R   R#   R<   R$   RN   RA   t   INFR@   RQ   RB   t   log1pR;   R%   (   R   t   negatet   ayR   t   hR   t   sqayt   zr1(   t   PI_12t   THRES_LARGEt   THRES_SMALL(    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt
   atanh_implç  s<    
-	  )
&	(	   R#   R@   RQ   R   RX   t   FLT_MINt   piR-   R   (   R   R   R   R   Ro   R€   R   (    (   R}   R~   R   s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyR€   à  s    ,(   i   i   (Q   t   __doc__t
   __future__R    R   R   RF   R#   t   llvmlite.llvmpy.coret   llvmpyt   coret   lcR   t   numba.targets.imputilsR   R   t   numbaR   R   R   t   numba.typingR	   t    R
   R   t   registryt   lowerR   R   R   R<   t   ComplexR   R$   R    t	   PYVERSIONt   isfiniteR!   R+   t   FloatR/   R7   t   floatR;   Rv   R:   R?   R@   RE   RI   t   log10RK   t   phaseRL   t   polarRM   RQ   RU   R&   R^   R]   R`   R'   Ra   R_   Rb   Re   Rd   Rc   Rk   t   acosRp   t   acoshRq   Rl   Rr   t   asinRs   t   atanRu   Rt   R€   (    (    (    s6   lib/python2.7/site-packages/numba/targets/cmathimpl.pyt   <module>   sZ   						!	$"	($=	


