ó
kt[c           @   s´  d  g Z  d d l Z d d l Z d d l Z d d l Z d d l m Z e e j ƒ e d ƒ k Z e j	 Z	 d Z
 e j d d k  r• e Z e Z n e j Z e j Z i d e 6d	 e 6d
 e 6d e 6d e	 6d e 6d e 6Z i e d 6e d	 6e d
 6e d 6e	 d 6e d 6e d 6Z dY Z e e e e e	 e e g Z e j d d k rmd e e <e e d <e j e ƒ n  e e ƒ Z d d l m Z d e f d „  ƒ  YZ  e  ƒ  Z! d e j" f d „  ƒ  YZ# e# ƒ  Z$ d „  Z% d „  Z& d „  Z' d „  Z( d „  Z) d Z* e* d Z+ d „  Z, d „  Z- e. d d „ Z0 d d d  „ Z1 e& d! „  ƒ Z2 d" „  Z3 d# „  Z4 e& d$ „  ƒ Z5 e& d% „  ƒ Z6 e& d& „  ƒ Z7 e& d' „  ƒ Z8 e& d( „  ƒ Z9 i# e1 e j: ƒ d) 6e1 e j; ƒ d* 6e1 e j< d ƒ d+ 6e1 e j= d ƒ d, 6e1 e j> d ƒ d- 6e1 e j? d ƒ d. 6e1 e j@ d ƒ d/ 6e1 e jA d ƒ d0 6e1 e jB d ƒ d1 6e1 e jC d ƒ d2 6e1 e jD d ƒ d3 6e1 e jE d ƒ d4 6e1 e jF d ƒ d5 6e1 e jG d ƒ d6 6e1 e jH d ƒ d7 6e1 e jI d ƒ d8 6e1 e jJ d ƒ d9 6e1 e jK d ƒ d: 6e1 e jL d ƒ d; 6e1 e jM d ƒ d< 6e1 e jN d ƒ d= 6e1 e jO d ƒ d> 6e1 e jP d ƒ d? 6e1 e jQ d d ƒ d@ 6e1 e jR d d ƒ dA 6e2 dB 6e1 e jS d d ƒ dC 6e1 e jT d d ƒ dD 6e1 e d ƒ d 6e1 e jU d ƒ dE 6e4 dF ƒ dF 6e4 dG ƒ dG 6e4 dH ƒ dH 6e4 dI ƒ dI 6e5 dJ 6ZV dK e f dL „  ƒ  YZW dM eW f dN „  ƒ  YZX dO eX f dP „  ƒ  YZY dQ e f dR „  ƒ  YZZ dS eX f dT „  ƒ  YZ[ dU eW f dV „  ƒ  YZ\ dW e\ f dX „  ƒ  YZ] d S(Z   t   EiÿÿÿÿN(   t   LooseVersions   1.12.0b1t   doublei    i   t   boolt   intt   longt   floatt   complext   bytest   nonei   t   str(   t   interpretert
   Expressionc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  j |  ƒ d  S(   N(   t   objectt   __init__(   t   self(    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR   5   s    c         C   sL   | j  d ƒ r; y |  j | SWqH t k
 r7 t ‚ qH Xn t | t ƒ Sd  S(   Nt   _(   t
   startswitht   __dict__t   KeyErrort   AttributeErrort   VariableNodet   default_kind(   R   t   name(    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   __getattr__8   s    (   t   __name__t
   __module__R   R   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR   4   s   	t   Contextc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   |  j  j | | ƒ S(   N(   R   t   get(   R   t   valuet   default(    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR   G   s    c         C   s   |  j  S(   N(   R   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   get_current_contextJ   s    c         C   s   |  j  j | ƒ d  S(   N(   R   t   update(   R   t   dict_(    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   set_new_contextM   s    (   R   R   R   R   R"   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR   E   s   		c           C   s   t  j d d ƒ S(   Nt   optimizationR	   (   t   _contextR   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   get_optimizationT   s    c            s>   ‡  f d †  } ˆ  j  | _  ˆ  j | _ | j j ˆ  j ƒ | S(   Nc             s~   t  |  ƒ }  xe t |  ƒ D]W \ } } t | ƒ rH t | ƒ |  | <} n  t | t ƒ s t d t | ƒ ƒ ‚ q q Wˆ  |  Œ  S(   Ns   unsupported object type: %s(   t   listt	   enumeratet
   isConstantt   ConstantNodet
   isinstancet   ExpressionNodet	   TypeErrort   type(   t   argst   it   x(   t   f(    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   funcZ   s    (   R   t   __doc__R   R    (   R1   R2   (    (   R1   s2   lib/python2.7/site-packages/numexpr/expressions.pyt   ophelperY   s
    	c         C   s(   x! |  D] } t  | t ƒ s t Sq Wt S(   s+   returns True if args are all ConstantNodes.(   R*   R)   t   Falset   True(   R.   R0   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   allConstantNodesi   s    c         C   s   t  |  t ƒ S(   s;   Returns True if ex is a constant scalar of an allowed type.(   R*   t   scalar_constant_types(   t   ex(    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR(   q   s    c         C   s³   g  |  D] } | j  ^ q } | j d ƒ | j d ƒ } d | k  oU t | ƒ k  n ri t d ƒ ‚ n  | d k ry d Sd } x) |  D]! } t | t j | j  ƒ ƒ } q† Wt | S(   NR   R
   i    s)   strings can only be operated with stringsiÿÿÿÿ(   t   astKindt   countt   lenR,   t   maxt	   kind_rankt   index(   t   nodest   nodet
   node_kindst	   str_countt   nR0   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt
   commonKindv   s    "iÿÿÿi   c         C   sô   t  |  t t f ƒ r t St  |  t t j f ƒ r5 t St  |  t t j f ƒ rQ t St  |  t ƒ rd t St  |  t	 t j
 f ƒ r  t |  k o“ t k n sœ t St SxM t t f D]? } y | |  ƒ } Wn t k
 rÛ } q­ n X| |  k r­ | Sq­ Wd  S(   N(   R*   R   R
   R   t   numpyt   bool_t   long_t   int64R   R   t   integert	   min_int32t	   max_int32t   int_R   R   t   StandardError(   R0   t	   convertert   yt   err(    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   bestConstantType‡   s&    c         C   s   t  |  ƒ } t | S(   N(   RR   t   type_to_kind(   R0   RO   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   getKind­   s    c            s5   t  t d ˆ ƒ ‰ t ‡  ‡ ‡ ‡ f d †  ƒ } | S(   Ns   __%s__c            s^   ˆ r | |  }  } n  t  |  | g ƒ rA t ˆ |  j | j ƒ ƒ St ˆ |  | f d ˆ  ƒSd  S(   Nt   kind(   R7   R)   R   t   OpNode(   R   t   other(   RU   t   opfunct   opnamet   reversed(    s2   lib/python2.7/site-packages/numexpr/expressions.pyt	   operation·   s
    (   t   getattrt   operatorR4   (   RY   RZ   RU   R[   (    (   RU   RX   RY   RZ   s2   lib/python2.7/site-packages/numexpr/expressions.pyt   binop²   s    	c            s   t  ‡  ‡ ‡ f d †  ƒ } | S(   Nc             sÀ   t  |  ƒ r2 t ˆ  g  |  D] } | j ^ q Œ  ƒ St |  ƒ } | d k rS d } nZ ˆ r€ t j ˆ ƒ t j | ƒ k r€ ˆ } n  ˆ r­ t j ˆ ƒ t j | ƒ k  r­ ˆ } n  t ˆ  j |  | ƒ S(   NR   R   R   (   R   R   (   R7   R)   R   RE   R>   R?   t   FuncNodeR   (   R.   R0   RU   (   R2   t   maxkindt   minkind(    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   functionÄ   s    &	$	$	(   R4   (   R2   Ra   R`   Rb   (    (   R2   R`   Ra   s2   lib/python2.7/site-packages/numexpr/expressions.pyR2   Ã   s    c         C   sd   t  |  t ƒ r  |  j r | S| St |  | | g ƒ rN t t j |  | | ƒ ƒ St d |  | | g ƒ S(   Nt   where(   R*   R)   R   R7   RF   Rc   R_   (   t   at   bt   c(    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt
   where_funcÚ   s
    c         C   ss   t  |  t ƒ r |  j }  n  |  d  k r3 t j }  n6 |  d k  rN t d ƒ ‚ n  |  d k ri t d ƒ ‚ n  t |  ƒ S(   Ni    s   negative axis are not supportediþ   s   cannot encode axis(   R*   R)   R   t   NoneR   t   allaxest
   ValueErrort   RawNode(   t   axis(    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   encode_axisã   s    c            s   d  ‡  f d † } | S(   Nc            sk   t  | ƒ } t |  t ƒ r |  St |  t t t t t t f ƒ rO t |  ƒ }  n  t	 ˆ  |  | g d |  j
 ƒS(   NRU   (   Rm   R*   R)   R   RM   RH   R   R   R   R_   R:   (   Rd   Rl   (   R   (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   _funcñ   s    !(   Rh   (   R   Rn   (    (   R   s2   lib/python2.7/site-packages/numexpr/expressions.pyt   gen_reduce_axis_funcð   s    c         C   s   t  d |  | g d d ƒS(   Nt   containsRU   R   (   R_   (   Rd   Re   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   contains_funcû   s    c         C   su   t  ƒ  d	 k rb t | t ƒ rb |  j | j k rb |  j d
 k rb t d |  t d | j ƒ g ƒ Sn  t d |  | g ƒ S(   Nt   moderatet
   aggressiveR   R   R   t   mulg      ð?t   div(   Rr   Rs   (   R   R   R   (   R%   R*   R)   R:   RV   R   (   Rd   Re   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   div_op   s    #c         C   s¢   t  ƒ  d k rb t | t ƒ rb |  j | j k rb |  j d k rb t d |  t d | j ƒ g ƒ Sn  t |  | g ƒ } | d k r‰ d } n  t d |  | g d | ƒS(   NRr   Rs   R   R   R   Rt   g      ð?R   R   R   Ru   RU   (   Rr   Rs   (   R   R   R   (   R   R   R   (   R%   R*   R)   R:   RV   R   RE   (   Rd   Re   RU   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt
   truediv_op
  s    #	c         C   s   t  | |  ƒ S(   N(   Rw   (   Rd   Re   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   rtruediv_op  s    c         C   sï  t  rK | j d k rK |  j d k rK t j | j d k  ƒ rK t d ƒ ‚ n  t |  | g ƒ rq t |  j | j ƒ St | t ƒ rÜ| j } t	 ƒ  d k rd } t
 d | ƒ d | k r| t | ƒ k oÖ | k n rt t | ƒ ƒ } t t d | ƒ ƒ d } d „  } d  } |  } d	 }	 xU t ry| |	 @rG| | | ƒ } n  |	 d	 K}	 |	 | k raPn  t d
 | | g ƒ } q%W| rÅt |  g ƒ }
 |
 d k r¤d }
 n  | | t d |  g |
 ƒ ƒ } n  | d  k ræt d |  g ƒ } n  | d k  rt d t d	 ƒ | g ƒ } n  | Sn  t	 ƒ  d k rÜ| d k rKt d t d	 ƒ |  g ƒ S| d k rgt d |  g ƒ S| d k r§|  j }
 |
 d k r‘d }
 n  t d |  g d |
 ƒS| d	 k r·|  S| d k rÙt d
 |  |  g ƒ SqÜn  t d |  | g ƒ S(   NR   R   i    s4   Integers to negative integer powers are not allowed.Rs   i2   i   c         S   s#   |  d  k r | St d |  | g ƒ S(   NRt   (   Rh   RV   (   R0   RP   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   multiply2  s     i   Rt   R   t   sqrtt	   ones_likeRu   Rr   iÿÿÿÿg      à?RU   t   pow(   R   R   (   R   R   (   R   R   (   Rr   Rs   (   R   R   (   t   _np_version_forbids_neg_powintR:   RF   t   anyR   Rj   R7   R)   R*   R%   R   t   absRM   Rh   R6   RV   RE   R_   (   Rd   Re   R0   t   RANGERD   t   ishalfpowerRy   t   rt   pt   maskRU   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   pow_op  sf    	=		

	!	 	t   copyR{   Rz   t   sint   cost   tant   arcsint   arccost   arctant   sinht   cosht   tanht   arcsinht   arccosht   arctanht   fmodt   arctan2t   logt   log1pt   log10t   expt   expm1R   t   ceilt   floorRc   t   realt   imagt   conjt   sumt   prodt   minR=   Rp   R+   c           B   s  e  Z d  Z d Z d d d d „ Z d „  Z e e ƒ Z d „  Z	 e e	 ƒ Z
 d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z e d ƒ Z Z e d ƒ Z e d d e ƒZ e d ƒ Z Z e j d d k  rð e Z e d d e ƒZ n  e Z e  Z! e" Z# e d d e ƒZ$ e d ƒ Z% e d d e ƒZ& e d ƒ Z' e d d e ƒZ( e d ƒ Z) e d d e ƒZ* e d d d ƒZ+ e d d d ƒZ, e d d d ƒZ- e d d d ƒZ. e d d d ƒZ/ e d d d ƒZ0 e d d e d d ƒZ1 e d d e d d ƒZ2 RS(   s§   An object that represents a generic number object.

    This implements the number special methods so that we can keep
    track of how this object has been used.
    t   genericc         C   s_   t  j |  ƒ | |  _ | d  k r+ d } n  | |  _ | d  k rL d |  _ n t | ƒ |  _ d  S(   NR	   (    (   R   R   R   Rh   R:   t   childrent   tuple(   R   R   RU   R£   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR   ‘  s    			c         C   s8   |  j  d k r% t t |  j ƒ j ƒ St d |  f d ƒ S(   Nt   constantRœ   R   (   t   astTypeR)   R   R   Rœ   RV   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   get_realœ  s    c         C   s8   |  j  d k r% t t |  j ƒ j ƒ St d |  f d ƒ S(   NR¥   R   R   (   R¦   R)   R   R   R   RV   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   get_imag£  s    c         C   s#   d |  j  j |  j |  j |  j f S(   Ns   %s(%s, %s, %s)(   t	   __class__R   R   R:   R£   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   __str__ª  s    c         C   s
   |  j  ƒ  S(   N(   Rª   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   __repr__®  s    c         C   s   t  d |  f ƒ S(   Nt   neg(   RV   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   __neg__±  s    c         C   s   t  d |  f ƒ S(   Nt   invert(   RV   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt
   __invert__´  s    c         C   s   |  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   __pos__·  s    c         C   s   t  d ƒ ‚ d  S(   NsÁ   You can't use Python's standard boolean operators in NumExpr expressions. You should use their bitwise counterparts instead: '&' instead of 'and', '|' instead of 'or', and '~' instead of 'not'.(   R,   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   __nonzero__¼  s    t   addt   subRZ   Rt   i    i   Ru   R|   t   modt   lshiftt   rshiftt   andRU   R   t   ort   gtt   get   eqt   neN(3   R   R   R3   R¦   Rh   R   R§   t   propertyRœ   R¨   R   Rª   R«   R­   R¯   R°   R±   R^   t   __add__t   __radd__t   __sub__R6   t   __rsub__t   __mul__t   __rmul__t   syst   version_infoRv   t   __div__t   __rdiv__Rw   t   __truediv__Rx   t   __rtruediv__R…   t   __pow__t   __rpow__t   __mod__t   __rmod__t
   __lshift__t   __rlshift__t
   __rshift__t   __rrshift__t   __and__t   __or__t   __gt__t   __ge__t   __eq__t   __ne__t   __lt__t   __le__(    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR+   ‰  sL   								t   LeafNodec           B   s   e  Z e Z RS(    (   R   R   R6   t   leafNode(    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyRÚ   â  s   R   c           B   s    e  Z d  Z d d d d „ Z RS(   t   variablec         C   s   t  j |  d | d | ƒd  S(   NR   RU   (   RÚ   R   (   R   R   RU   R£   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR   é  s    N(   R   R   R¦   Rh   R   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR   æ  s   Rk   c           B   s2   e  Z d  Z d Z d Z d „  Z d „  Z e Z RS(   sæ   Used to pass raw integers to interpreter.
    For instance, for selecting what function to use in func1.
    Purposely don't inherit from ExpressionNode, since we don't wan't
    this to be used for anything but being walked.
    t   rawR	   c         C   s   | |  _  d |  _ d  S(   N(    (   R   R£   (   R   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR   ö  s    	c         C   s   d |  j  f S(   Ns   RawNode(%s)(   R   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyRª   ú  s    (   R   R   R3   R¦   R:   R   Rª   R«   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyRk   í  s   		R)   c           B   s/   e  Z d  Z d d d „ Z d „  Z d „  Z RS(   R¥   c         C   s>   t  | ƒ } | d k r! d } n  t j |  d | d | ƒd  S(   NR   R   R   RU   (   RT   RÚ   R   (   R   R   R£   RU   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR     s    	c         C   s   t  |  j ƒ S(   N(   R)   R   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR­   
  s    c         C   s   t  |  j ƒ S(   N(   R)   R   (   R   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR¯     s    N(   R   R   R¦   Rh   R   R­   R¯   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR)      s   	RV   c           B   s    e  Z d  Z d d d d „ Z RS(   t   opc         C   sJ   | d  k r' | d  k	 r' t | ƒ } n  t j |  d | d | d | ƒd  S(   NR   RU   R£   (   Rh   RE   R+   R   (   R   t   opcodeR.   RU   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR     s    N(   R   R   R¦   Rh   R   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyRV     s   R_   c           B   s   e  Z d d d d  „ Z RS(   c         C   sA   | d  k r' | d  k	 r' t | ƒ } n  t j |  | | | ƒ d  S(   N(   Rh   RE   RV   R   (   R   Rß   R.   RU   (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR     s    N(   R   R   Rh   R   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyR_     s   (   R   R   R   R   R   R   R	   (^   t   __all__R]   RÄ   t	   threadingRF   t   distutils.versionR   t   __version__R}   R   R   RÅ   R   RM   R   RH   t   int32RI   R   R   R   R   RS   t   kind_to_typeR>   R8   R
   t   appendR¤   t   numexprR   R   R   R    t   localR   R$   R%   R4   R7   R(   RE   RL   RK   RR   RT   R5   Rh   R^   R2   Rg   Rm   Ro   Rq   Rv   Rw   Rx   R…   R†   R{   Rz   R‡   Rˆ   R‰   RŠ   R‹   RŒ   R   RŽ   R   R   R‘   R’   R“   R”   R•   R–   R—   R˜   R™   t   absoluteRš   R›   Rœ   R   Rž   t	   functionsR+   RÚ   R   Rk   R)   RV   R_   (    (    (    s2   lib/python2.7/site-packages/numexpr/expressions.pyt   <module>   s¶   					

								&				
>
Y	