
    eA                     l   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          Z e            Z G d dej                  Z e            Zd Zd Zd Zd Z d Z!dZ"e" dz
  Z#d Z$d Z%dVdZ&dWdZ'ed             Z(d Z)d  Z*ed!             Z+ed"             Z,ed#             Z-ed$             Z.ed%             Z/ej0        e_1        i d& e'ej2                  d' e'ej3                  d( e'ej4        d          d) e'ej5        d          d* e'ej6        d          d+ e'ej7        d          d, e'ej8        d          d- e'ej9        d          d. e'ej:        d          d/ e'ej;        d          d0 e'ej<        d          d1 e'ej=        d          d2 e'ej>        d          d3 e'ej?        d          d4 e'ej@        d          d5 e'ejA        d          d6 e'ejB        d          i d7 e'ejC        d          d8 e'ejD        d          d9 e'ejE        d          d: e'ejF        d          d; e'ej0        d          d< e'ejG        d          d= e'ejH        dd          d> e'ejI        dd          d?e(d@ e'ejJ        dd          dA e'ejK        dd          d e'ed          dB e'ejL        d          dC e*dC          dD e*dD          dE e*dE          dF e*dF          dGe+iZM G dH dI          ZN G dJ dKeN          ZO G dL dMeO          ZP G dN dO          ZQ G dP dQeO          ZR G dR dSeN          ZS G dT dUeS          ZTdS )X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                       e Zd Zd ZdS )
Expressionc                     |                     d          r#	 | j        |         S # t          $ r t          w xY wt	          |t
                    S )N_)
startswith__dict__KeyErrorAttributeErrorVariableNodedefault_kind)selfnames     3lib/python3.11/site-packages/numexpr/expressions.py__getattr__zExpression.__getattr__(   s[    ??3 	4%}T** % % %$$%  l333s   $ 6N)__name__
__module____qualname__r        r   r   r   &   s#        4 4 4 4 4r    r   c                        e Zd Zd Zd Zd ZdS )Contextc                 8    | j                             ||          S N)r   get)r   valuedefaults      r   r%   zContext.get7   s    }  000r    c                     | j         S r$   )r   r   s    r   get_current_contextzContext.get_current_context:   s
    }r    c                 :    | j                             |           d S r$   )r   update)r   dict_s     r   set_new_contextzContext.set_new_context=   s    U#####r    N)r   r   r   r%   r*   r.   r   r    r   r"   r"   5   sA        1 1 1  $ $ $ $ $r    r"   c                  8    t                               dd          S )Noptimizationr   )_contextr%   r   r    r   get_optimizationr2   D   s    <<///r    c                       fd} j         |_          j        |_        |j                             j                   |S )Nc                     t          |           } t          |           D ]\\  }}t          |          rt          |          x| |<   }t	          |t
                    st          dt          |          z            ] |  S )Nzunsupported object type: %s)list	enumerate
isConstantConstantNode
isinstanceExpressionNode	TypeErrortype)argsixfs      r   funczophelper.<locals>.funcJ   s    DzzdOO 	I 	IDAq!}} .*1oo-Q!a00 I =Q GHHHIq$xr    )r   __doc__r   r,   )r@   rA   s   ` r   ophelperrC   I   sM         JDM9DLM$$$Kr    c                 @    | D ]}t          |t                    s dS dS )z+returns True if args are all ConstantNodes.FT)r9   r8   )r=   r?   s     r   allConstantNodesrE   Y   s4      !\** 	55	4r    c                 ,    t          | t                    S )z;Returns True if ex is a constant scalar of an allowed type.)r9   scalar_constant_types)exs    r   r7   r7   a   s    b/000r    c                 Z   d | D             }|                     d          |                     d          z   }d|cxk     rt          |          k     rn nt          d          |dk    rdS d}| D ]/}t          |t                              |j                            }0t          |         S )Nc                     g | ]	}|j         
S r   )astKind).0nodes     r   
<listcomp>zcommonKind.<locals>.<listcomp>g   s    1114$,111r    r
   r   r   z)strings can only be operated with strings)countlenr;   max	kind_rankindexrK   )nodes
node_kinds	str_countnr?   s        r   
commonKindrY   f   s    115111J  ))J,<,<U,C,CCI9&&&&s:&&&&&CDDD1}}w
A / /9??19--..Q<r    i   c                    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          r't          | cxk    rt          k    s	n t          S t          S t          t           fD ]D}	  ||           }n# t"          $ r
}Y d }~d }~ww xY w|| k    st	          j        |          r|c S Ed S r$   )r9   r
   r   r   numpybool_long_int64r   float32r   r   integer	min_int32	max_int32int_r	   	Exceptionisnan)r?   	converteryerrs       r   bestConstantTyperj   w   sV   !eS\"" 
 !dEK())  !eU[)**  !V !U]## !c5=)**  Q++++)++++L G^  			!AA 	 	 	HHHH	66U[^^6  s   
D
D*%D*c                 :    t          |           }t          |         S r$   )rj   type_to_kind)r?   rg   s     r   getKindrm      s     ##I	""r    Fc                 h     t          t          d z            t           fd            }|S )Nz__%s__c                     r|| }} t          | |g          r#t           | j        |j                            S t          | |f          S Nkind)rE   r8   r&   OpNode)r   otherrr   opfuncopnamereverseds     r   	operationzbinop.<locals>.operation   s_     	&%DT5M** 	<tz5; ? ?@@@&4-d;;;;r    )getattroperatorrC   )rv   rw   rr   rx   ru   s   ``` @r   binopr{      sV     Xx&011F< < < < < < < X< r    c                 4     t            fd            }|S )Nc                     t          |           rt           d | D                        S t          |           }|dv rd}ntr8t                                        t                              |          k    r}r8t                                        t                              |          k     r}t          j        | |          S )Nc                     g | ]	}|j         
S r   r&   )rL   r?   s     r   rN   z*func.<locals>.function.<locals>.<listcomp>   s    &=&=&=1qw&=&=&=r    r   r   r   )rE   r8   rY   rS   rT   FuncNoder   )r=   rr   rA   maxkindminkinds     r   functionzfunc.<locals>.function   s    D!! 	@&=&=&=&=&= >???$?""
 DD  9??733iood6K6KKK 9??733iood6K6KKKtT222r    )rC   )rA   r   r   r   s   ``` r   rA   rA      s9    3 3 3 3 3 3 X3$ Or    c                     t          | t                    r| j        r|n|S t          | ||g          r#t          t	          j        | ||                    S t          d| ||g          S )Nwhere)r9   r8   r&   rE   r\   r   r   )abcs      r   
where_funcr      sm    !\"" #G"qq"Aq	"" 2EK1a00111GaAY'''r    c                     t          | t                    r| j        } | t          j        } n*| dk     rt          d          | dk    rt          d          t          |           S )Nr   znegative axis are not supported   zcannot encode axis)r9   r8   r&   r   allaxes
ValueErrorRawNode)axiss    r   encode_axisr      sf    $%% z|"!88>???#::12224==r    c                      d fd	}|S )Nc           	         t          |          }t          | t                    r| S t          | t          t          t
          t          t          t          f          rt          |           } t          | |g| j
                  S rp   )r   r9   r8   r   rd   r^   r   r   r	   r   rK   )r   r   r   s     r   _funcz#gen_reduce_axis_func.<locals>._func   sl    4  a&& 	Ha$eUFGDEE 	 QAq$iai8888r    r$   r   )r   r   s   ` r   gen_reduce_axis_funcr      s(    9 9 9 9 9 9 Lr    c                 *    t          d| |gd          S )Ncontainsr   rq   )r   r   r   s     r   contains_funcr      s    JAV4444r    c                     t                      dv rUt          |t                    r@| j        |j        k    r0| j        dv r't	          d| t          d|j        z            g          S t	          d| |g          S )Nmoderate
aggressiver   r   r	   mul      ?div)r2   r9   r8   rK   rs   r&   r   s     r   div_opr      s{    777q,'' 	Bai''I!???%!\"qw,%?%?!@AAA%!Q   r    c                 "   t                      dv rUt          |t                    r@| j        |j        k    r0| j        dv r't	          d| t          d|j        z            g          S t          | |g          }|dv rd}t	          d| |g|          S )	Nr   r   r   r   )r   r   r   r   r   rq   )r2   r9   r8   rK   rs   r&   rY   )r   r   rr   s      r   
truediv_opr      s    777q,'' 	Bai''I!???%!\"qw,%?%?!@AAAq!fD&&&%!Qd++++r    c                 "    t          ||           S r$   )r   r   s     r   rtruediv_opr   	  s    ar    c                 4   t          |t                    r|j        }| j        dv r|j        dv r|dk     rt	          d          t                      dk    rd}t          d|z            d|z  k    r| t          |          cxk    r|k    rn nt          t          |                    }t          t          d|z                      dz  }d }d }| }d}		 ||	z  r |||          }|	dz  }	|	|k    rnt          d
||g          }0|r2t          | g          }
|
dv rd}
 ||t          d| g|
                    }|t          d| g          }|dk     rt          t          d          |          }|S t                      dv r|dk    rt          dt          d          | g          S |dk    rt          d| g          S |dk    r | j        }
|
dv rd}
t          d| g|
          S |dk    r| S |dk    rt          d
| | g          S t          d| |g          S )Nr   r   z4Integers to negative integer powers are not allowed.r   2      c                 .    | |S t          d| |g          S )Nr   rs   )r?   rh   s     r   multiplyzpow_op.<locals>.multiply  s    y(!%!Q000r    rZ   Tr   r   sqrt	ones_liker   rO   r   g      ?rq   pow)r9   r8   r&   rK   r   r2   r   absrd   rs   rY   r   r   )r   r   r?   RANGErX   ishalfpowerr   rpmaskrr   s              r   pow_opr     s    !\"" 3-G	_,,	_,,QFH H H--E AE

a!e##5&CFF*C*C*C*Ce*C*C*C*C*CQLL"3q1u::..21 1 1 .D +$HQNNQJDaxxuq!f--A.  ?%qc??D..' F6A3$=$=>>A9{QC00Aq55"<??A66A!;;;Bwwel1ooq%9:::AvvkA3///Cxxy?**8D$7777AvvAvveaV,,,%!Q   r    copyr   r   sincostanarcsinarccosarctansinhcoshtanharcsinharccosharctanhfmodarctan2loglog1plog10expexpm1r   ceilfloorr   realimagconjsumprodminrR   r   c                   h   e Zd ZdZdZ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          xZZ ed          Z edd          Z ed          xZZeZeZeZ edd          Z ed          Z edd          Z  ed          Z! edd          Z" ed          Z# edd          Z$ edd          Z% edd          Z& edd          Z' edd          Z( edd          Z) edd          Z* eddd          Z+ eddd          Z,dS ) r:   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                 h    || _         |d}|| _        |	d| _        d S t          |          | _        d S )Nr   r   )r&   rK   childrentupler   r&   rr   r   s       r   __init__zExpressionNode.__init__  s<    
<DDMMM!(OODMMMr    c                     | j         dk    r&t          t          | j                  j                  S t          d| fd          S )Nconstantr   r   )astTyper8   r	   r&   r   rs   r)   s    r   get_realzExpressionNode.get_real  >    <:%%
 3 3 8999ftgx000r    c                     | j         dk    r&t          t          | j                  j                  S t          d| fd          S )Nr   r   r   )r   r8   r	   r&   r   rs   r)   s    r   get_imagzExpressionNode.get_imag  r   r    c                 P    | j         j        d| j        d| j        d| j        dS )N(z, ))	__class__r   r&   rK   r   r)   s    r   __str__zExpressionNode.__str__  s5    #'>#:#:#:DJJJ#'<<<@ 	@r    c                 *    |                                  S r$   )r   r)   s    r   __repr__zExpressionNode.__repr__  s    ||~~r    c                 $    t          d| f          S )Nnegr   r)   s    r   __neg__zExpressionNode.__neg__  s    edW%%%r    c                 $    t          d| f          S )Ninvertr   r)   s    r   
__invert__zExpressionNode.__invert__  s    h(((r    c                     | S r$   r   r)   s    r   __pos__zExpressionNode.__pos__  s    r    c                      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'.)r;   r)   s    r   __bool__zExpressionNode.__bool__  s     I J J 	Jr    addsubT)rw   r   r   modlshiftrshiftandr   rq   orgtgeeqne)rw   rr   NNN)-r   r   r   rB   r   r   r   propertyr   r   r   r   r   r   r   r   r   r{   __add____radd____sub____rsub____mul____rmul__r   __truediv__r   __rtruediv__r   __pow____rpow____mod____rmod__
__lshift____rlshift__
__rshift____rrshift____and____or____gt____ge____eq____ne____lt____le__r   r    r   r:   r:   x  sF         G, , , ,1 1 1
 8HD1 1 1
 8HD@ @ @  & & &) ) )  
J J J u%GheEllGuUT***Hu%GhKLGuUT***HeEllGuUT***HxJ%4000KxJ%4000K eE'''GU4f%%%FU4f%%%FU4f%%%FU4f%%%FU4f%%%FU4$V444FU4$V444FFFr    r:   c                       e Zd ZdZdS )LeafNodeTN)r   r   r   leafNoder   r    r   r  r    s        HHHr    r  c                       e Zd ZdZddZdS )r   variableNc                 @    t                               | ||           d S )Nr&   rr   )r  r   r   s       r   r   zVariableNode.__init__  s#    $e$77777r    r   r   r   r   r   r   r   r    r   r   r     s-        G8 8 8 8 8 8r    r   c                   *    e Zd ZdZdZdZd Z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                 "    || _         d| _        d S )Nr   )r&   r   )r   r&   s     r   r   zRawNode.__init__  s    
r    c                     d| j         dS )NzRawNode(r   r   r)   s    r   r   zRawNode.__str__  s      $


,,r    N)	r   r   r   rB   r   rK   r   r   r   r   r    r   r   r     sI          GG  - - - HHHr    r   c                   &    e Zd ZdZddZd Zd ZdS )r8   r   Nc                     t          |          }|dk    rt          |t                    rd}t                              | ||           d S )Nr   r   r  )rm   r9   r   r  r   )r   r&   r   rr   s       r   r   zConstantNode.__init__  sJ    u~~7??z%77?D$e$77777r    c                 ,    t          | j                   S r$   r8   r&   r)   s    r   r   zConstantNode.__neg__      TZK(((r    c                 ,    t          | j                   S r$   r&  r)   s    r   r   zConstantNode.__invert__  r'  r    NN)r   r   r   r   r   r   r   r   r    r   r8   r8     sK        G8 8 8 8) ) )) ) ) ) )r    r8   c                       e Zd ZdZddZdS )rs   opNc                 h    ||t          |          }t                              | |||           d S )N)r&   rr   r   )rY   r:   r   r   opcoder=   rr   s       r   r   zOpNode.__init__  s<    Lt/d##DFMMMMMr    r   r  r   r    r   rs   rs     s3        GN N N N N Nr    rs   c                       e Zd ZddZdS )r   Nc                 f    ||t          |          }t                              | |||           d S r$   )rY   rs   r   r-  s       r   r   zFuncNode.__init__  s7    Lt/d##DfdD11111r    r   )r   r   r   r   r   r    r   r   r     s(        2 2 2 2 2 2r    r   )FNr)  )U__all__rz   sys	threadingr\   r   r   int32rd   r_   r^   r   r   r	   r
   r   rl   kind_to_typerS   r   rG   r   numexprr   r   r   localr"   r1   r2   rC   rE   r7   rY   rc   rb   rj   rm   r{   rA   r   r   r   r   r   r   r   r   r   expm1xr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   absoluter   r   r   r   r   	functionsr:   r  r   r   r8   rs   r   r   r    r   <module>r;     s   %  



      
 {fdE5&%'9eWc5RT55 WuSR RI	tS%%M 344       	4 	4 	4 	4 	4 	4 	4 	4 JLL	$ 	$ 	$ 	$ 	$io 	$ 	$ 	$ 7990 0 0
     1 1 1

 
 
 	JN	% % %P# # #
   "   . 
( ( 
(
 
 
   
5 5 
5 
! ! 
! 
	, 	, 
	, 
  
 
6! 6! 
6!r {,
DD,eo&&, DDW%%,
 
44	7##, 
44	7##, 
44	7##, dd5<)), dd5<)), dd5<)), DDW%%, DDW%%, DDW%%, ttEM7++,  ttEM7++!," ttEM7++#,& DDW%%',( ttEM7++), ,, 
44	7##-,. TT%+w''/,0 TT%+w''1,2 
44	7##3,4 TT%+w''5,8 
44((9,: DDWh//;,< TT%+w11=,@ ZA,D DDXx00E,F DDXx00G,H ttGY''I,J DDY''K,N 
&&O,P   ((Q,R 
&&S,T 
&&U, ,V W, ,	^S5 S5 S5 S5 S5 S5 S5 S5l    ~   8 8 8 8 88 8 8 8       () ) ) ) )8 ) ) )"N N N N N^ N N N2 2 2 2 2v 2 2 2 2 2r    