B
    :9\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 rfeZeZnejZejZededed	ed
e	dedediZeeeee	eedZdZeeeee	eegZejd dkrdee< eed< ee eeZddlmZ G dd deZe Z G dd dej!Z"e" Z#dd Z$dd Z%dd Z&dd Z'dd Z(d Z)e) d! Z*d"d# Z+d$d% Z,dNd'd(Z-dOd)d*Z.e%d+d, Z/d-d. Z0d/d0 Z1e%d1d2 Z2e%d3d4 Z3e%d5d6 Z4e%d7d8 Z5e%d9d: Z6e.ej7e.ej8e.ej9d
e.ej:d
e.ej;d
e.ej<d
e.ej=d
e.ej>d
e.ej?d
e.ej@d
e.ejAd
e.ejBd
e.ejCd
e.ejDd
e.ejEd
e.ejFd
e.ejGd
e.ejHd
e.ejId
e.ejJd
e.ejKd
e.ejLd
e.ejMd
e.ejNd
de.ejOd
de/e.ejPdde.ejQdde.ede.ejRde1d;e1d<e1d=e1d>e2d?#ZSG d@dA dAeZTG dBdC dCeTZUG dDdE dEeUZVG dFdG dGeZWG dHdI dIeUZXG dJdK dKeTZYG dLdM dMeYZZdS )PE    N)LooseVersionz1.12.0b1double   boolintlongfloatcomplexbytes)r   r   r   r	   r   r
   r   )r   r   r   r	   r   r
   none   str)interpreterc               @   s   e Zd Zdd Zdd ZdS )
Expressionc             C   s   t |  d S )N)object__init__)self r   2lib/python3.7/site-packages/numexpr/expressions.pyr   5   s    zExpression.__init__c             C   s>   | dr0y
| j| S  tk
r,   tY q:X n
t|tS d S )N_)
startswith__dict__KeyErrorAttributeErrorVariableNodedefault_kind)r   namer   r   r   __getattr__8   s    

zExpression.__getattr__N)__name__
__module____qualname__r   r   r   r   r   r   r   4   s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )Contextc             C   s   | j ||S )N)r   get)r   valuedefaultr   r   r   r#   G   s    zContext.getc             C   s   | j S )N)r   )r   r   r   r   get_current_contextJ   s    zContext.get_current_contextc             C   s   | j | d S )N)r   update)r   Zdict_r   r   r   set_new_contextM   s    zContext.set_new_contextN)r   r    r!   r#   r&   r(   r   r   r   r   r"   E   s   r"   c               C   s   t ddS )Noptimizationr   )_contextr#   r   r   r   r   get_optimizationT   s    r+   c                s.    fdd} j |_  j|_|j j |S )Nc                 sX   t | } xFt| D ]:\}}t|r2t| | |< }t|tstdt| qW  |  S )Nzunsupported object type: %s)list	enumerate
isConstantConstantNode
isinstanceExpressionNode	TypeErrortype)argsix)fr   r   funcZ   s    
zophelper.<locals>.func)r   __doc__r   r'   )r7   r8   r   )r7   r   ophelperY   s
    	r:   c             C   s    x| D ]}t |tsdS qW dS )z+returns True if args are all ConstantNodes.FT)r0   r/   )r4   r6   r   r   r   allConstantNodesi   s    

r;   c             C   s
   t | tS )z;Returns True if ex is a constant scalar of an allowed type.)r0   scalar_constant_types)exr   r   r   r.   q   s    r.   c             C   s~   dd | D }| d| d }d|  k r:t|k rFn ntd|dkrRdS d}x| D ]}t|t|j}q\W t| S )Nc             S   s   g | ]
}|j qS r   )astKind).0Znoder   r   r   
<listcomp>w   s    zcommonKind.<locals>.<listcomp>r   r   r   z)strings can only be operated with strings)countlenr2   max	kind_rankindexr>   )ZnodesZ
node_kindsZ	str_countnr6   r   r   r   
commonKindv   s    
rH   i   c             C   s   t | ttfrtS t | ttjfr&tS t | ttjfr:tS t | trHtS t | t	tj
frvt|   krltksrn tS tS xNttfD ]B}y|| }W n$ tk
r } zwW d d }~X Y nX || kr|S qW d S )N)r0   r   r   r   numpyZbool_long_int64r   r   Zinteger	min_int32	max_int32int_r	   r
   	Exception)r6   	converteryerrr   r   r   bestConstantType   s&    
rT   c             C   s   t | }t| S )N)rT   type_to_kind)r6   rQ   r   r   r   getKind   s    rV   Fc                s(   t td t fdd}|S )Nz__%s__c                sB   r||  } }t | |gr,t| j|jS t| |f dS d S )N)kind)r;   r/   r$   OpNode)r   other)rW   opfuncopnamereversedr   r   	operation   s
    
zbinop.<locals>.operation)getattroperatorr:   )r[   r\   rW   r]   r   )rW   rZ   r[   r\   r   binop   s    	r`   c                s   t  fdd}|S )Nc                 sz   t | rt dd | D  S t| }|dkr4d}n8rPtt|krP}rltt|k rl}t j| |S )Nc             S   s   g | ]
}|j qS r   )r$   )r?   r6   r   r   r   r@      s    z*func.<locals>.function.<locals>.<listcomp>)r   r   r   )r;   r/   rH   rE   rF   FuncNoder   )r4   rW   )r8   maxkindminkindr   r   function   s    zfunc.<locals>.function)r:   )r8   rc   rb   rd   r   )r8   rb   rc   r   r8      s    r8   c             C   sH   t | tr| jr|S |S t| ||gr8tt| ||S td| ||gS )Nwhere)r0   r/   r$   r;   rJ   re   ra   )abcr   r   r   
where_func   s
    
ri   c             C   sH   t | tr| j} | d kr tj} n | dk r0td| dkr@tdt| S )Nr   znegative axis are not supported   zcannot encode axis)r0   r/   r$   r   Zallaxes
ValueErrorRawNode)axisr   r   r   encode_axis   s    
rn   c                s   d fdd	}|S )Nc                sH   t |}t| tr| S t| ttttttfr4t| } t	 | |g| j
dS )N)rW   )rn   r0   r/   r   rO   rK   r	   r   r
   ra   r>   )rf   rm   )r   r   r   _func   s    
z#gen_reduce_axis_func.<locals>._func)Nr   )r   ro   r   )r   r   gen_reduce_axis_func   s    rp   c             C   s   t d| |gddS )Ncontainsr   )rW   )ra   )rf   rg   r   r   r   contains_func   s    rr   c             C   sP   t  dkrBt|trB| j|jkrB| jdkrBtd| td|j gS td| |gS )N)moderate
aggressive)r	   r   r
   mulg      ?div)r+   r0   r/   r>   rX   r$   )rf   rg   r   r   r   div_op   s    


rw   c             C   sl   t  dkrBt|trB| j|jkrB| jdkrBtd| td|j gS t| |g}|dkrZd}td| |g|dS )	N)rs   rt   )r	   r   r
   ru   g      ?)r   r   r   r   rv   )rW   )r+   r0   r/   r>   rX   r$   rH   )rf   rg   rW   r   r   r   
truediv_op
  s    


rx   c             C   s
   t || S )N)rx   )rf   rg   r   r   r   rtruediv_op  s    ry   c             C   s  t r0|jdkr0| jdkr0t|jdk r0tdt| |grLt| j|j S t|tr
|j}t	 dkrxd}t
d| d| krx| t|  kr|krxn ntt|}ttd| d }dd }d }| }d	}	x6||	@ r|||}|	d	K }	|	|krP td
||g}qW |rBt| g}
|
dkr.d}
||td| g|
}|d krXtd| g}|dk rttdtd	|g}|S t	 dkr
|dkrtdtd	| gS |dkrtd| gS |dkr| j}
|
dkrd}
td| g|
dS |d	kr| S |dkr
td
| | gS td| |gS )N)r   r   r   z4Integers to negative integer powers are not allowed.rt   2   r   c             S   s   | d kr|S t d| |gS )Nru   )rX   )r6   rR   r   r   r   multiply2  s     zpow_op.<locals>.multiplyrI   ru   r   sqrt	ones_likerv   )rs   rt   rA   g      ?)rW   pow)_np_version_forbids_neg_powintr>   rJ   anyr$   rk   r;   r/   r0   r+   r   absrO   rX   rH   ra   )rf   rg   r6   RANGErG   Zishalfpowerr{   rpmaskrW   r   r   r   pow_op  sf    

6








 

r   sumprodminrD   )#copyr}   r|   sincostanarcsinarccosarctansinhcoshtanharcsinharccosharctanhfmodarctan2loglog1plog10expexpm1r   ceilfloorre   realimagr
   conjr   r   r   rD   rq   c               @   sp  e Zd ZdZdZd+ddZdd ZeeZdd	 Z	ee	Z
d
d Zdd Zdd Zdd Zdd Zdd Zed ZZedZedddZed ZZejd dk reZedddZeZeZ e!Z"edddZ#edZ$edddZ%ed Z&ed ddZ'e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$Z-ed(d#d$Z.ed)d#d$Z/ed&dd#d*Z0ed'dd#d*Z1dS ),r1   zAn 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.
    ZgenericNc             C   s@   t |  || _|d krd}|| _|d kr2d| _n
t|| _d S )Nr   r   )r   r   r$   r>   childrentuple)r   r$   rW   r   r   r   r   r     s    
zExpressionNode.__init__c             C   s(   | j dkrtt| jjS td| fdS )Nconstantr   r   )astTyper/   r
   r$   r   rX   )r   r   r   r   get_real  s    
zExpressionNode.get_realc             C   s(   | j dkrtt| jjS td| fdS )Nr   r   r   )r   r/   r
   r$   r   rX   )r   r   r   r   get_imag  s    
zExpressionNode.get_imagc             C   s   d| j j| j| j| jf S )Nz%s(%s, %s, %s))	__class__r   r$   r>   r   )r   r   r   r   __str__  s    zExpressionNode.__str__c             C   s   |   S )N)r   )r   r   r   r   __repr__  s    zExpressionNode.__repr__c             C   s   t d| fS )Nneg)rX   )r   r   r   r   __neg__  s    zExpressionNode.__neg__c             C   s   t d| fS )Ninvert)rX   )r   r   r   r   
__invert__  s    zExpressionNode.__invert__c             C   s   | S )Nr   )r   r   r   r   __pos__  s    zExpressionNode.__pos__c             C   s   t dd S )NzYou 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'.)r2   )r   r   r   r   __bool__  s    zExpressionNode.__bool__addsubT)r\   ru   r   r   rv   r~   modlshiftrshiftandr   )rW   orgtgeeqne)r\   rW   )NNN)2r   r    r!   r9   r   r   r   propertyr   r   r   r   r   r   r   r   r   r`   __add____radd____sub____rsub____mul____rmul__sysversion_inforw   Z__div__Z__rdiv__rx   __truediv__ry   __rtruediv__r   __pow____rpow____mod____rmod__
__lshift____rlshift__
__rshift____rrshift____and____or____gt____ge____eq____ne____lt____le__r   r   r   r   r1     sL   
r1   c               @   s   e Zd ZdZdS )LeafNodeTN)r   r    r!   ZleafNoder   r   r   r   r     s   r   c               @   s   e Zd ZdZdddZdS )r   ZvariableNc             C   s   t j| ||d d S )N)r$   rW   )r   r   )r   r$   rW   r   r   r   r   r     s    zVariableNode.__init__)NNN)r   r    r!   r   r   r   r   r   r   r     s   r   c               @   s,   e Zd ZdZdZdZdd Zdd ZeZdS )	rl   zUsed 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.
    rawr   c             C   s   || _ d| _d S )Nr   )r$   r   )r   r$   r   r   r   r     s    zRawNode.__init__c             C   s   d| j f S )NzRawNode(%s))r$   )r   r   r   r   r     s    zRawNode.__str__N)	r   r    r!   r9   r   r>   r   r   r   r   r   r   r   rl     s   rl   c               @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
r/   r   Nc             C   s(   t |}|dkrd}tj| ||d d S )Nr	   r   )r$   rW   )rV   r   r   )r   r$   r   rW   r   r   r   r     s    zConstantNode.__init__c             C   s   t | j S )N)r/   r$   )r   r   r   r   r   
  s    zConstantNode.__neg__c             C   s   t | j S )N)r/   r$   )r   r   r   r   r     s    zConstantNode.__invert__)NN)r   r    r!   r   r   r   r   r   r   r   r   r/      s   
r/   c               @   s   e Zd ZdZdddZdS )rX   opNc             C   s.   |d kr|d k	rt |}tj| |||d d S )N)r$   rW   r   )rH   r1   r   )r   opcoder4   rW   r   r   r   r     s    zOpNode.__init__)NNN)r   r    r!   r   r   r   r   r   r   rX     s   rX   c               @   s   e Zd ZdddZdS )ra   Nc             C   s,   |d kr|d k	rt |}t| ||| d S )N)rH   rX   r   )r   r   r4   rW   r   r   r   r     s    zFuncNode.__init__)NNN)r   r    r!   r   r   r   r   r   ra     s   ra   )FN)NN)[__all__r_   r   Z	threadingrJ   Zdistutils.versionr   __version__r   r   r   r   r   rO   rK   Zint32rL   r   r	   r
   r   rU   Zkind_to_typerE   r<   r   appendr   Znumexprr   r   r   r   Zlocalr"   r*   r+   r:   r;   r.   rH   rN   rM   rT   rV   r`   r8   ri   rn   rp   rr   rw   rx   ry   r   r   r}   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zabsoluter   r   r   r   r   Z	functionsr1   r   r   rl   r/   rX   ra   r   r   r   r   <module>   s   

&

	
?





















Y	