o
    i4C                     @   sP  d gZ ddlZddlZddlZddlZejZdZejZej	Z
edede
dedededed	ed
iZeee
eeeeedZdZeeeeeeeegZeeZddlmZ G dd d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%dld#d$Z&dmd%d&Z'ed'd( Z(d)d* Z)d+d, Z*ed-d. Z+ed/d0 Z,ed1d2 Z-ed3d4 Z.ed5d6 Z/ej0e_1i d7e'ej2d8e'ej3d9e'ej4dd:e'ej5dd;e'ej6dd<e'ej7dd=e'ej8dd>e'ej9dd?e'ej:dd@e'ej;ddAe'ej<ddBe'ej=ddCe'ej>ddDe'ej?ddEe'ej@ddFe'ejAddGe'ejBdi dHe'ejCddIe'ejDddJe'ejEddKe'ejFddLe'ejGddMe'ejHddNe'ejIddOe'ejJddPe'ejKddQe'ejLddRe'ej0ddSe'ejMddTe'ejNdddUe'ejOdddVe'ejPddWe'ejQddXe'ejRde(e'ejSdde'ejTdde'ede'ejUde'ejVde'ejWde'ejXde'ejYde*dYe*dZe*d[e*d\e+d]ZZG d^d_ d_Z[G d`da dae[Z\G dbdc dce\Z]G ddde deZ^G dfdg dge\Z_G dhdi die[Z`G djdk dke`ZadS )nE    Ndoubleboolintlongfloatcomplexbytesstr)r   r   r   r   r   r   r	   r
   )r   r   r   r   r   r   none)interpreterc                   @   s   e Zd Zdd ZdS )
Expressionc                 C   s4   | drz| j| W S  ty   tw t|tS )N_)
startswith__dict__KeyErrorAttributeErrorVariableNodedefault_kind)selfname r   V/home/ubuntu/maya3_transcribe/venv/lib/python3.10/site-packages/numexpr/expressions.py__getattr__)   s   

zExpression.__getattr__N)__name__
__module____qualname__r   r   r   r   r   r   '   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   8   s   zContext.getc                 C   s   | j S r   )r   r   r   r   r   get_current_context;   s   zContext.get_current_contextc                 C   s   | j | d S r   )r   update)r   dict_r   r   r   set_new_context>   s   zContext.set_new_contextN)r   r   r   r   r#   r&   r   r   r   r   r   6   s    r   c                   C   s   t ddS )Noptimizationr   )_contextr   r   r   r   r   get_optimizationE      r)   c                    s.    fdd} j |_  j|_|j j |S )Nc                     sT   t | } t| D ]\}}t|rt| | |< }t|ts%tdt| q |  S )Nzunsupported object type: %s)list	enumerate
isConstantConstantNode
isinstanceExpressionNode	TypeErrortype)argsixfr   r   funcK   s   
zophelper.<locals>.func)r   __doc__r   r$   )r7   r8   r   r6   r   ophelperJ   s
   	r:   c                 C   s   | D ]
}t |ts dS qdS )z+returns True if args are all ConstantNodes.FT)r/   r.   )r3   r5   r   r   r   allConstantNodesZ   s
   
r;   c                 C   s
   t | tS )z;Returns True if ex is a constant scalar of an allowed type.)r/   scalar_constant_types)exr   r   r   r-   b      
r-   c                 C   sv   dd | D }| d| d }d|  k r t|k r!td |dkr'dS d}| D ]}t|t|j}q+t| S )Nc                 S      g | ]}|j qS r   )astKind).0noder   r   r   
<listcomp>h       zcommonKind.<locals>.<listcomp>r	   r
   r   z)strings can only be operated with strings)countlenr1   max	kind_rankindexr@   )nodes
node_kinds	str_countnr5   r   r   r   
commonKindg   s   rO   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r$tS t | tj	r,t
S t | ttjfrDt|   kr?tksBtS  tS tS t
tfD ](}z|| }W n tyb } zW Y d }~qHd }~ww || kslt|rp|  S qHd S r   )r/   r	   r
   r   numpybool_long_int64r   float32r   r   integer	min_int32	max_int32int_r   	Exceptionisnan)r5   	converteryerrr   r   r   bestConstantTypex   s6   
r_   c                 C   s   t | }t| S r   )r_   type_to_kind)r5   r\   r   r   r   getKind   s   ra   Fc                    s(   t td t fdd}|S )Nz__%s__c                    s>   r|| } }t | |grt| j|jS t| |f dS Nkind)r;   r.   r    OpNode)r   otherrd   opfuncopnamereversedr   r   	operation   s
   
zbinop.<locals>.operation)getattroperatorr:   )ri   rj   rd   rk   r   rg   r   binop   s   rn   c                    s   t  fdd}|S )Nc                     s   t | rt dd | D  S t| }|dv r jdvrd}nr-tt|kr-}r;tt|k r;}t j| |S )Nc                 S   r?   r   r    )rA   r5   r   r   r   rC      rD   z*func.<locals>.function.<locals>.<listcomp>r   r   )copyabs	ones_likeroundsignr   )r;   r.   rO   r   rI   rJ   FuncNode)r3   rd   r8   maxkindminkindr   r   function   s   
zfunc.<locals>.function)r:   )r8   ry   rx   rz   r   rw   r   r8      s   r8   c                 C   sH   t | tr| jr
|S |S t| ||grtt| ||S td| ||gS )Nwhere)r/   r.   r    r;   rQ   r{   rv   )abcr   r   r   
where_func   s
   
r   c                 C   sN   t | tr| j} | d u rtj} t| S | dk rtd| dkr#tdt| S )Nr   znegative axis are not supported   zcannot encode axis)r/   r.   r    r   allaxes
ValueErrorRawNode)axisr   r   r   encode_axis   s   
r   c                    s   d fdd	}|S )Nc                    sH   t |}t| tr| S t| ttttttfrt| } t	 | |g| j
dS rb   )r   r/   r.   r   rY   rS   r   r   r   rv   r@   )r|   r   r   r   r   _func   s   
z#gen_reduce_axis_func.<locals>._funcr   r   )r   r   r   r   r   gen_reduce_axis_func   s   r   c                 C   s   t d| |gddS )Ncontainsr   rc   )rv   r|   r}   r   r   r   contains_func   s   r   c                 C   sP   t  dv r!t|tr!| j|jkr!| jdv r!td| td|j gS td| |gS )Nmoderate
aggressiver   r   r   mul      ?div)r)   r/   r.   r@   re   r    r   r   r   r   div_op   s   


r   c                 C   sl   t  dv r!t|tr!| j|jkr!| jdv r!td| td|j gS t| |g}|dv r-d}td| |g|dS )	Nr   r   r   r   )r   r   r   r   r   rc   )r)   r/   r.   r@   re   r    rO   )r|   r}   rd   r   r   r   
truediv_op   s   


r   c                 C   s
   t || S r   )r   r   r   r   r   rtruediv_op  r>   r   c                 C   s  t |tr|j}| jdv r|jdv r|dk rtdt dkrd}td| d| kr| t|  kr8|krn nctt|}ttd| d }dd }d }| }d	}		 ||	@ r^|||}|	d	K }	|	|krgnt	d||g}qU|rt
| g}
|
dv r|d}
||t	d| g|
}|d u rt	d| g}|dk rttd	|}|S t dv r|dkrt	dtd	| gS |dkrt	d| gS |dkr| j}
|
dv rd}
td| g|
dS |d	kr| S |dkrt	d| | gS t	d| |gS )Nrp   r   z4Integers to negative integer powers are not allowed.r   2      c                 S   s   | d u r|S t d| |gS )Nr   re   )r5   r]   r   r   r   multiply!  s   zpow_op.<locals>.multiplyrP   Tr   r   sqrtrs   r   rE   r   g      ?rc   pow)r/   r.   r    r@   r   r)   r   rr   rY   re   rO   r   rv   )r|   r}   r5   RANGErN   ishalfpowerr   rpmaskrd   r   r   r   pow_op  s`   


2


r   rq   rs   r   sincostanarcsinarccosarctansinhcoshtanharcsinharccosharctanhfmodarctan2hypot	nextaftercopysignmaximumminimumloglog1plog10log2expexpm1rr   ceilfloorrt   truncru   sumprodminrH   )r{   realimagr   conjr[   isfiniteisinfsignbitr   r   r   rH   r   c                   @   sZ  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ZeZed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 Z&e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$d)Z-ed&dd$d)Z.dS )+r0   z
    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.
    genericNc                 C   s8   || _ |d u r	d}|| _|d u rd| _d S t|| _d S )Nr   r   )r    r@   childrentupler   r    rd   r   r   r   r   __init__  s   
zExpressionNode.__init__c                 C   (   | j dkrtt| jjS td| fdS )Nconstantr   r   )astTyper.   r   r    r   re   r"   r   r   r   get_real     
zExpressionNode.get_realc                 C   r   )Nr   r   r   )r   r.   r   r    r   re   r"   r   r   r   get_imag  r   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 r   )r   r"   r   r   r   __repr__     zExpressionNode.__repr__c                 C      t d| fS )Nnegr   r"   r   r   r   __neg__  r*   zExpressionNode.__neg__c                 C   r   )Ninvertr   r"   r   r   r   
__invert__  r*   zExpressionNode.__invert__c                 C   s   | S r   r   r"   r   r   r   __pos__  s   zExpressionNode.__pos__c                 C   s   t d)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'.)r1   r"   r   r   r   __bool__  r   zExpressionNode.__bool__addsubT)rj   r   floordivr   modlshiftrshiftandorxorgtr   rc   geeqne)rj   rd   NNN)/r   r   r   r9   r   r   r   propertyr   r   r   r   r   r   r   r   r   rn   __add____radd____sub____rsub____mul____rmul__r   __truediv__r   __rtruediv____floordiv__r   __pow____rpow____mod____rmod__
__lshift____rlshift__
__rshift____rrshift____and____or____xor____gt____ge____eq____ne____lt____le__r   r   r   r   r0     sL    

r0   c                   @   s   e Zd ZdZdS )LeafNodeTN)r   r   r   leafNoder   r   r   r   r    s    r  c                   @      e Zd ZdZdddZdS )r   variableNc                 C   s   t j| ||d d S )Nr    rd   )r  r   r   r   r   r   r     s   zVariableNode.__init__r   r   r   r   r   r   r   r   r   r   r         r   c                   @   s,   e Zd ZdZdZdZdd Zdd ZeZdS )	r   z
    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.
    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)ro   r"   r   r   r   r     r*   zRawNode.__str__N)	r   r   r   r9   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d Zdd ZdS )
r.   r   Nc                 C   s2   t |}|dkrt|trd}tj| ||d d S )Nr   r   r
  )ra   r/   r   r  r   )r   r    r   rd   r   r   r   r     s   zConstantNode.__init__c                 C   s   t | j S r   r.   r    r"   r   r   r   r   	  r*   zConstantNode.__neg__c                 C   s   t | j S r   r  r"   r   r   r   r     r*   zConstantNode.__invert__NN)r   r   r   r   r   r   r   r   r   r   r   r.     s
    
r.   c                   @   r  )re   opNc                 C   sV   |d u r|d urt |}|dkr |dkrdn|}|dkrdn|}tj| |||d d S )Nr   r   r   r   r   )r    rd   r   )rO   r0   r   r   opcoder3   rd   r   r   r   r     s   zOpNode.__init__r   r  r   r   r   r   re     r  re   c                   @   s   e Zd ZdddZdS )rv   Nc                 C   s8   |d u r|d urt |}|dv rd}t| ||| d S )N)r[   r   r   r   r   )rO   re   r   r  r   r   r   r     s
   zFuncNode.__init__r   )r   r   r   r   r   r   r   r   rv     s    rv   )FNr  )b__all__rm   sys	threadingrQ   r   r   int32rY   rT   rS   r   r   r   r	   r
   r`   kind_to_typerI   r   r<   r   numexprr   r   r   localr   r(   r)   r:   r;   r-   rO   rX   rW   r_   ra   rn   r8   r   r   r   r   r   r   r   r   r   expm1xrq   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   absoluter   r   rt   r   ru   r   r   r   r[   r   r   r   	functionsr0   r  r   r   r.   re   rv   r   r   r   r   <module>   s  

(




	


9

	
 !#$%&'(*




>W