
     !gA                        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j4                        Z e       Zd Zd Zd Zd Z d Z!dZ"e" dz
  Z#d Z$d Z%dUdZ&dVdZ'ed        Z(d Z)d Z*ed         Z+ed!        Z,ed"        Z-ed#        Z.ed$        Z/ej`                  e_1        i d% e'ejd                        d& e'ejf                        d' e'ejh                  d      d( e'ejj                  d      d) e'ejl                  d      d* e'ejn                  d      d+ e'ejp                  d      d, e'ejr                  d      d- e'ejt                  d      d. e'ejv                  d      d/ e'ejx                  d      d0 e'ejz                  d      d1 e'ej|                  d      d2 e'ej~                  d      d3 e'ej                  d      d4 e'ej                  d      d5 e'ej                  d      i d6 e'ej                  d      d7 e'ej                  d      d8 e'ej                  d      d9 e'ej                  d      d: e'ej`                  d      d; e'ej                  d      d< e'ej                  dd      d= e'ej                  dd      d>e(d? e'ej                  dd      d@ e'ej                  dd      d e'ed      dA e'ej                  d      dB e*dB      dC e*dC      dD e*dD      dE e*dE      dFe+iZM G dG dH      ZN G dI dJeN      ZO G dK dLeO      ZP G dM dN      ZQ G dO dPeO      ZR G dQ dReN      ZS G dS dTeS      ZTy)W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y)
Expressionc                     |j                  d      r	 | j                  |   S t	        |t
              S # t        $ r t        w xY w)N_)
startswith__dict__KeyErrorAttributeErrorVariableNodedefault_kind)selfnames     3lib/python3.12/site-packages/numexpr/expressions.py__getattr__zExpression.__getattr__(   sH    ??3%}}T**  l33  %$$%s	   2 AN)__name__
__module____qualname__r        r   r   r   &   s    4r    r   c                       e Zd Zd Zd Zd Zy)Contextc                 :    | j                   j                  ||      S N)r   get)r   valuedefaults      r   r%   zContext.get7   s    }}  00r    c                     | j                   S r$   )r   r   s    r   get_current_contextzContext.get_current_context:   s    }}r    c                 :    | j                   j                  |       y 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   s    1$r    r"   c                  .    t         j                  dd      S )Noptimizationr   )_contextr%   r   r    r   get_optimizationr2   D   s    <<//r    c                       fd} j                   |_          j                  |_        |j                  j                   j                         |S )Nc                      t        |       } t        |       D ]G  \  }}t        |      rt        |      x| |<   }t	        |t
              r2t        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   sa    DzdODAq!}*1o-Q!a0 =Q GHH	 $
 $xr    )r   __doc__r   r,   )r@   rA   s   ` r   ophelperrC   I   s;     JJDM99DLMM$Kr    c                 6    | D ]  }t        |t              r y y)z+returns True if args are all ConstantNodes.FT)r9   r8   )r=   r?   s     r   allConstantNodesrE   Y   s    !\*  r    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0r    c                 F   | D cg c]  }|j                    }}|j                  d      |j                  d      z   }d|cxk  rt        |      k  rt        d       |dkD  ryd}| D ]+  }t	        |t
        j                  |j                               }- t
        |   S c c}w )Nr
   r   r   z)strings can only be operated with strings)astKindcountlenr;   max	kind_rankindex)nodesnode
node_kinds	str_countnr?   s         r   
commonKindrV   f   s    +0154$,,5J1  )J,<,<U,CCI9&s:&CDD '1}
A9??199-. Q< 2s   Bi   c                 h   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t        S  t        S t        S t        t         fD ])  }	  ||       }|| k(  st	        j$                  |      s'|c S  y # t"        $ r
}Y d }~;d }~ww xY w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   bestConstantTyperg   w   s    !eS\"
 !dEKK() !eU[[)* !V!U]]#!c5==)* Q+)+L ,L G^		!A 6U[[^ $  		s   5D	D1,D1c                 *    t        |       }t        |   S r$   )rg   type_to_kind)r?   rd   s     r   getKindrj      s     #I	""r    c                 V     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   otherro   opfuncopnamereverseds     r   	operationzbinop.<locals>.operation   sH    %DT5M*tzz5;; ?@@&4-d;;r    )getattroperatorrC   )rs   rt   ro   ru   rr   s   ``` @r   binoprx      s0     Xx&01F< < r    c                 ,     t          fd       }|S )Nc                  ~   t        |       r&t         | D cg c]  }|j                   c}       S t        |       }|dv rd}n^r-t        j                        t        j                  |      kD  r}r-t        j                        t        j                  |      k  r}t        j                  | |      S c c}w )Nr   r   r   )rE   r8   r&   rV   rO   rP   FuncNoder   )r=   r?   ro   rA   maxkindminkinds      r   functionzfunc.<locals>.function   s    D!&=1qww&= >??$?"
 D 9??73iood6KK9??73iood6KKtT22 '>s   B:)rC   )rA   r~   r}   r   s   ``` r   rA   rA      s    3 3$ Or    c                     t        | t              r| j                  r|S |S t        | ||g      r t        t	        j
                  | ||            S t        d| ||g      S )Nwhere)r9   r8   r&   rE   rY   r   r|   )abcs      r   
where_funcr      sV    !\"GGq""Aq	"EKK1a011GaAY''r    c                     t        | t              r| j                  } | t        j                  } t        |       S | dk  rt        d      | dkD  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      sc    $%zz|"" 4=	 !8>??#:1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 rm   )r   r9   r8   r   ra   r[   r   r   r	   r|   rK   )r   r   r   s     r   _funcz#gen_reduce_axis_func.<locals>._func   sS    4 a&Ha$eUFGDEQAq$iaii88r    r$   r   )r   r   s   ` r   gen_reduce_axis_funcr      s    9 Lr    c                 "    t        d| |gd      S )Ncontainsr   rn   )r|   r   r   s     r   contains_funcr      s    JAV44r    c                     t               dv r[t        |t              rK| j                  |j                  k(  r2| 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   rp   r&   r   s     r   div_opr      se    77q,'aii'II!??%!\"qww,%?!@AA%!Q  r    c                    t               dv r[t        |t              rK| j                  |j                  k(  r2| 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   rn   )r2   r9   r8   rK   rp   r&   rV   )r   r   ro   s      r   
truediv_opr      s    77q,'aii'II!??%!\"qww,%?!@AAq!fD&&%!Qd++r    c                     t        ||       S r$   )r   r   s     r   rtruediv_opr   	  s    ar    c                    t        |t              r|j                  }| j                  dv r|j                  dv r|dk  rt	        d      t               dk(  rd}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  }	|	|kD  rnt        d	||g      }(|r't        | g      }
|
dv rd
}
 ||t        d| g|
            }|t        d| g      }|dk  rt        t        d      |      }|S t               dv rn|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   rp   )r?   re   s     r   multiplyzpow_op.<locals>.multiply  s    y(!%!Q00r    rW   r   r   sqrt	ones_liker   rJ   r   g      ?rn   pow)r9   r8   r&   rK   r   r2   r   absra   rp   rV   r   r|   )r   r   r?   RANGErU   ishalfpowerr   rpmaskro   s              r   pow_opr     s    !\"GG		_,		_,QFH H-E AE
a!e#5&CF*Ce*CQL"3q1u:.21 D$QNQJDaxuq!f-A  %qc?D.' F6A3$=>A9{QC0Aq5"<?A6A!;;Bwel1oq%9::AvkA3//Cxyy?*8D$77AvAv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minrN   r   c                      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,y) 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                 \    || _         |d}|| _        |d| _        y t        |      | _        y )Nr   r   )r&   rK   childrentupler   r&   ro   r   s       r   __init__zExpressionNode.__init__  s2    
<DDM!(ODMr    c                     | j                   dk(  r(t        t        | j                        j                        S t        d| fd      S )Nconstantr   r   )astTyper8   r	   r&   r   rp   r)   s    r   get_realzExpressionNode.get_real  9    <<:%

 3 8 899ftgx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   rp   r)   s    r   get_imagzExpressionNode.get_imag  r   r    c                     | j                   j                  d| j                  d| j                  d| j                  dS )N(z, ))	__class__r   r&   rK   r   r)   s    r   __str__zExpressionNode.__str__  s.    #'>>#:#:DJJ#'<<@ 	@r    c                 "    | j                         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r    addsubT)rt   r   r   modlshiftrshiftandr   rn   orgtgeeqne)rt   ro   NNN)-r   r   r   rB   r   r   r   propertyr   r   r   r   r   r   r   r   r   rx   __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  sH    G,1
 HD1
 HD@&)
J u%GhElGUT*Hu%GhKLGUT*HElGUT*HxJ40KxJ40K E'G4f%F4f%F4f%F4f%F4f%F4$V4F4$V4Fr    r:   c                       e Zd ZdZy)LeafNodeTN)r   r   r   leafNoder   r    r   r  r    s    Hr    r  c                       e Zd ZdZddZy)r   variableNc                 4    t         j                  | ||       y )Nr&   ro   )r  r   r   s       r   r   zVariableNode.__init__  s    $e$7r    r   r   r   r   r   r   r   r    r   r   r     s    G8r    r   c                   (    e Zd ZdZdZdZd Zd ZeZy)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| _        y )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     s$     GG- Hr    r   c                   $    e Zd ZdZddZd Zd Zy)r8   r   Nc                 x    t        |      }|dk(  rt        |t              rd}t        j	                  | ||       y )Nr   r   r  )rj   r9   r   r  r   )r   r&   r   ro   s       r   r   zConstantNode.__init__  s5    u~7?z%7D$e$7r    c                 .    t        | j                         S r$   r8   r&   r)   s    r   r   zConstantNode.__neg__      TZZK((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     s    G8))r    r8   c                       e Zd ZdZddZy)rp   opNc                 T    ||t        |      }t        j                  | |||       y )N)r&   ro   r   )rV   r:   r   r   opcoder=   ro   s       r   r   zOpNode.__init__  s-    Lt/d#DFMr    r   r  r   r    r   rp   rp     s    GNr    rp   c                       e Zd ZddZy)r|   Nc                 R    ||t        |      }t        j                  | |||       y r$   )rV   rp   r   r(  s       r   r   zFuncNode.__init__  s(    Lt/d#DfdD1r    r   )r   r   r   r   r   r    r   r|   r|     s    2r    r|   )FNr$  )U__all__rw   sys	threadingrY   r   r   int32ra   r\   r[   r   r   r	   r
   r   ri   kind_to_typerO   r   rG   r   numexprr   r   r   localr"   r1   r2   rC   rE   r7   rV   r`   r_   rg   rj   rx   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   rp   r|   r   r    r   <module>r6     s   %  
   
 {{fdE5&%'9eWc5RT55 WuSRI	tS%%M 34  	4 	4 L	$ioo 	$ 90
 1

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