
    iA                        S SK r S SKJrJr  S SKrS SKrS SKJr  S SKr	S SK
r
S SKJrJrJrJrJr  S SKJr  S SKJr  S r\R*                  " S5       " S	 S
\R,                  5      5       r\
R0                  \ R2                  \
R4                  \ R6                  \
R8                  \ R:                  0r\
R>                  \ R@                  \
RB                  \ RD                  \
RF                  \ RH                  \
RJ                  \ RL                  \
RN                  \ RP                  \
RR                  \ RT                  \
RV                  \ RX                  \
RZ                  \ R\                  \
R^                  \ R`                  \
Rb                  \ Rd                  \
Rf                  \ Rh                  \
Rj                  \ Rl                  0r7\
Rp                  \ Rr                  \
Rt                  \ Rv                  \
Rx                  \ Rz                  \
R|                  \ R~                  \
R                  \ R                  \
R                  \ R                  0rDS rE\R                  S 5       rG " S S\ R                  5      rIS\ R                  4S jrKS rLg)    N)defaultdictOrderedDict)SimpleNamespace)typestargetconfigirrewritescompiler)npydecl)DUFuncc                 B    [        U [        R                  [        45      $ N)
isinstancenpufuncr   )funcs    U/var/www/html/trading/venv/lib/python3.13/site-packages/numba/np/ufunc/array_exprs.py	_is_ufuncr      s    dRXXv.//    zafter-inferencec                   b   ^  \ rS rSrSrU 4S jrS rS rS rS r	S r
S	 rS
 rS rS rSrU =r$ )RewriteArrayExprs   zThe RewriteArrayExprs class is responsible for finding array
expressions in Numba intermediate representation code, and
rewriting those expressions to a single operation that will expand
into something similar to a ufunc call.
c                    > [         [        U ]
  " U/UQ70 UD6  UR                  R                  nSU;  a
  [
        US'   g g )N	arrayexpr)superr   __init__	targetctxspecial_ops_lower_array_expr)selfstateargskwsr   	__class__s        r   r   RewriteArrayExprs.__init__   sC    /DDDoo11k)'8K$ *r   c                 L   [        U5      S:X  a  gX l        X0l        [        5       U l        0 U l        UR                  [        R                  5      nU H  nUR                  R                  nUR                  n[        U[        R                  5      (       aC  [        UR                  US5      [        R                   5      (       a  U R#                  XhU5        M  [        U[        R$                  5      (       d  M  XR
                  U'   M     [        U R                  5      S:  $ )z
Using typing and a basic block, search the basic block for array
expressions.
Return True when one or more matches were found, False otherwise.
r   FN)len
crnt_blocktypemapr   array_assignsconst_assigns
find_instsr   Assigntargetnamevaluer   Exprgetr   Array_match_array_exprConst)	r    func_irblockr)   	calltypesassignmentsinstrtarget_nameexprs	            r   matchRewriteArrayExprs.match!   s     y>Q(]&&ryy1 E,,++K;;D4))7;;{D95;;GG&&uK@D"((++ 37"";/ ! 4%%&**r   c                 (  ^  UR                   nT R                  nUS;   aL  UR                  [        R                  ;   a.  [        U 4S jUR                  5        5       5      (       a  XU'   ggUS:X  a  UR                  R                  T R                  ;   a|  T R                  UR                  R                     n[        U[        R                  5      (       a9  UR                  n[        U5      (       a  T R                  X'5      (       d  XU'   gggggg)zy
Find whether the given assignment (*instr*) of an expression (*expr*)
to variable *target_name* is an array expression.
unarybinopc              3   j   >#    U  H(  nTR                   UR                     R                  v   M*     g 7fr   )r)   r/   is_internal).0varr    s     r   	<genexpr>6RewriteArrayExprs._match_array_expr.<locals>.<genexpr>Q   s+      0.s <<)55.s   03callN)opr*   fnr   supported_array_operatorsall	list_varsr   r/   r)   r   r   Function
typing_keyr   _has_explicit_output)r    r:   r<   r;   expr_opr*   	func_typefunc_keys   `       r   r4   #RewriteArrayExprs._match_array_exprB   s     ''****7<<<  0"nn.0 0 0-2k*0 & tyy~~'ETYY^^4I)U^^44$//X&&44TDD5:k2 E ' 5 (F r   c                     [        UR                  5      [        UR                  5      -   nUR                  b  gX2R                  :  $ )zZ
Return whether the *expr* call to *func* (a ufunc) features an
explicit output argument.
T)r'   r"   r#   varargnin)r    r<   r   nargss       r   rQ   &RewriteArrayExprs._has_explicit_output`   s:    
 DIITXX.;;" xxr   c                     UR                   nUS;   a  UR                  $ US:X  a-  U R                  UR                  R                     R
                  $ [        SR                  U5      5      e)Nr@   rI   z:Don't know how to find the operator for '{0}' expressions.)rJ   rK   r)   r   r/   rP   NotImplementedErrorformatr    ir_exprir_ops      r   _get_array_operator%RewriteArrayExprs._get_array_operatorl   sb    

&&::f_<< 1 12===!HOO 	r   c                     UR                   nUS:X  a  UR                  UR                  4$ US:X  a  UR                  5       $ US:X  a  UR                  $ [        SR                  U5      5      e)zkGiven a Numba IR expression, return the operands to the expression
in order they appear in the expression.
rB   rA   rI   z:Don't know how to find the operands for '{0}' expressions.)rJ   lhsrhsrN   r"   r\   r]   r^   s      r   _get_operandsRewriteArrayExprs._get_operandsv   sn     

G;;++g$$&&f_<<!HOO 	r   c                     UR                   nUS:X  a  UR                  $ U R                  U5       Vs/ s H)  nU R                  R	                  UR
                  U5      PM+     nnU R                  U5      U4$ s  snf )zJTranslate the given expression from Numba IR to an array expression
tree.
r   )rJ   r<   rf   r+   r2   r/   ra   )r    r_   r`   op_varoperands_or_argss        r   _translate_expr!RewriteArrayExprs._translate_expr   s     

K<<*.*<*<W*EG*E !..226;;G*E 	 G''02BBBGs   0A7c                    0 n[        5       n[        [        5      nU R                  R	                  5        GH  nUR
                  n/ nU R                  U5      U4n[        R                  " SUR                  UU R                  UR                  R                     S9n[        R                  " XR                  UR                  5      n	XU'   XR                  UR                  R                  '   U R                  U5       GH9  n
U
R                  nU
R                  (       a  XR                  ;   a  U R                  U   nUR
                  nUR!                  5       nU H  n
X:R                  ==   S-  ss'   M     UR#                  U R%                  U5      5        UR                  R                  (       a+  UR'                  UR                  R                  5        SX'   M  M  XR(                  ;   a!  UR#                  U R(                  U   5        GM  X:R                  ==   S-  ss'   UR#                  U
5        GM<     GM
     XU4$ )zdIterate over the matches, trying to find which instructions should
be rewritten, deleted, or moved.
r   )rJ   locr<   ty   N)setr   intr*   valuesr0   ra   r   r1   rn   r)   r.   r/   r-   rf   is_temprN   appendrk   addr+   )r    replace_map	dead_vars	used_varsr:   r<   arr_inpsarr_exprnew_expr	new_instroperandoperand_namechild_assign
child_exprchild_operandss                  r   _handle_matches!RewriteArrayExprs._handle_matches   s    E	$	''..0E;;DH//5x?Hww+#'88$,"&,,u||/@/@"ACH 		(LL%))DI!*4=u||001--d3&||??|7I7I'I#'#5#5l#CL!-!3!3J%/%9%9%;N#1!,,/14/ $2OOD$8$8$DE#**22!l&9&9&>&>?481 3 "%7%77OOD$6$6|$DEll+q0+OOG,! 4 18 y00r   c                 .    X   nX1;   a  X   nX1;   a  M  U$ )zFind the final replacement instruction for a given initial
instruction by chasing instructions in a map from instructions
to replacement instructions.
 )r    replacement_mapr:   replacements       r   _get_final_replacement(RewriteArrayExprs._get_final_replacement   s(    
 &,,)6K ,r   c                    U R                  5       u  pnU R                  R                  5       nUR                  5         0 nU R                  R                   GHC  n[        U[        R                  5      (       a  Xa;   a  U R                  X5      nU(       a{  UR                  U5        UR                  R                  5        HJ  nUR                  n	X;   a   UR                  UR                  U	5      5        X9   S:  d  M>  X9==   S-  ss'   ML     M  M  UR                  U5        M  [        U[        R                  5      (       aC  UR                  n
X:   S:  a  X:==   S-  ss'   XeU
'   GM  X;  a  UR                  U5        GM/  GM2  UR                  U5        GMF     U(       a(  UR                  5        H  nUR!                  U5        M     U$ )zmWhen we've found array expressions in a basic block, rewrite that
block, returning a new, transformed block.
r   rp   )r   r(   copyclearbodyr   r   r-   r   ru   r0   rN   r/   popDelrs   insert_before_terminator)r    rw   rx   ry   result
delete_mapr:   r   rF   var_nameinstr_values              r   applyRewriteArrayExprs.apply   s{    -1,@,@,B)	 %%'
__))E%++'"&"="=##,K"k2#.#4#4#>#>#@C'*xxH'5 &jnnX.F G(2Q6 ) 3q 8 3 $A # MM%(E266**#kk)A-*a/*.3{+ 1MM%( 2 e$1 *2 #**,//6 -r   )r*   r+   r(   r)   )__name__
__module____qualname____firstlineno____doc__r   r=   r4   rQ   ra   rf   rk   r   r   r   __static_attributes____classcell__r$   s   @r   r   r      sB    
9+B;<
 	C#1J( (r   r   c                 *   [        U [        5      (       Ga  U u  p/ n0 nU H2  n[        U5      u  pgUR                  U5        UR	                  U5        M4     U[
        R                  ;   a  [        U5      S:X  ap  U[        ;   a,  [        R                  " US   [        U   " 5       US   5      U4$ U[        ;   a.  [        R                  " US   [        U   " 5       /US   /5      U4$ GOU[        ;   d   e[        R                  " [        U   " 5       US   5      U4$ [        U5      (       a{  SR!                  [#        [%        U5      5      R'                  SS5      5      n[        R(                  " U[        R*                  " 5       5      n	XU'   [        R,                  " X/ 5      n
X4$ O[        U [.        R0                  5      (       a{  [        R(                  " U R2                  [        R*                  " 5       U R4                  R6                  U R4                  R8                  (       a  U R4                  R8                  OSS90 4$ [        U [.        R:                  5      (       a"  [        R<                  " U R>                  5      0 4$ [A        SU < S	35      e)
zSBuild a Python expression AST from an array expression built by
RewriteArrayExprs.
   r   rp   z__ufunc_or_dufunc_{0}-_)lineno
col_offsetz.Don't know how to translate array expression '')!r   tuple_arr_expr_to_astru   updater   rL   r'   _binopsastBinOp_cmpopsCompare	_unaryopsUnaryOpr   r]   hexhashreplaceNameLoadCallr   Varr/   rn   linecolr5   Constantr0   r\   )r<   rJ   arr_expr_argsast_argsenvargast_arg	child_envfn_namefn_ast_nameast_calls              r   r   r   
  s    $  C!1#!6GOOG$JJy! ! 2228}!=99 WR[]HQKABEF F=;; gbkm_x{mEFIJ J ! Y&{{9R=?HQK@#EEr]]-44DH%%c3/1G((7CHHJ7KLxxr:H=   
D"&&	!	!xx		388:#xx}}3788<<488<<QHIKL 	L 
D"((	#	#||DJJ'++
?CEG Gr   c              #     #    [        5       nU  H}  nUR                  nUR                  R                  X2R                  S9R                  nUR                  SS5      R                  SS5      nXA;   a  [        U< S35      eX#4X'   XBl        M     [        U5      n Uv   UR                  5        H  u  p#X2l        M     g! UR                  5        H  u  p#X2l        M     f = f7f)zU
Legalize names in the variable list for use as a Python function's
parameter names.
)rn   $r   .z not uniqueN)	r   r/   scoperedefinern   r   AssertionErrorlistrs   )var_listvar_maprF   old_namenew_nameparam_namess         r   _legalize_parameter_namesr   2  s      mG8899%%hGG%<AA##C-55c3? H<{!;<<M  w-K  %^^-MCH .W^^-MCH .s   BC$C    C$ !C!!C$c                   \   ^  \ rS rSrS\R
                  S\R
                  4U 4S jjrSrU =r$ )_EraseInvalidLineRangesiL  nodereturnc                    > [         TU ]  U5      n[        US5      (       a,  [        USS 5      b  UR                  UR
                  :  a  U?U?U$ )Nr   
end_lineno)r   generic_visithasattrgetattrr   r   )r    r   r$   s     r   r   %_EraseInvalidLineRanges.generic_visitM  sM    w$T*4""t\40<;;0r   r   )	r   r   r   r   r   ASTr   r   r   r   s   @r   r   r   L  s#    #'' cgg  r   r   astreec                     [         R                  " U 5        [        5       R                  U 5        [         R                  " U 5        g)z)Inplace fixes invalid lineno ranges.
    N)r   fix_missing_locationsr   visit)r   s    r   _fix_invalid_lineno_rangesr   W  s1     f%##F+f%r   c                   ^ ^^^ S[        [        U5      5      R                  SS5      -  nUR                  R                  nUR                  5       n[        [        U5      S S9nU Vs/ s H  ofR                  PM     nn[        U5       nU V	s/ s H  n	[        R                  " U	S5      PM     n
n	[        R                  " SR                  U5      US5      n[        US	5      (       a  [        UR                   5      S
:X  d   eUR                   S   nXR"                  l        [%        UR&                  5      u  UR                   S   l        n[+        U5        SSS5        [-        WUS5      n[/        UW5        X   nT R0                  nT R2                  mUR4                  " U 4S jU 5       6 n/ nUR"                   H{  n[7        U[8        R:                  5      (       a  UR<                  n[7        U[8        R>                  5      (       a  URA                  URB                  5        Mj  URA                  U5        M}     URD                  RB                  " U6 m[F        RH                  " 5       RK                  5       nUc  [L        RN                  " 5       OURQ                  5       nSUl)        URU                  TUTUSS9mSSK+J,n   " UUU4S jSURZ                  5      n[]        [        U5      S
US9nUR^                  UR`                  -   Ul1        U Vs/ s H  nT Re                  U5      PM     nnURg                  UTUUUU5      $ s  snf s  sn	f ! , (       d  f       GN= fs  snf )z:Lower an array expression built by RewriteArrayExprs.
    z__numba_array_expr_%sr   r   c                     U R                   $ r   )r/   )rF   s    r   <lambda>#_lower_array_expr.<locals>.<lambda>j  s    r   )keyNzdef {0}(): returnexecr   rp   r   c              3   F   >#    U  H  nTR                  U5      v   M     g 7fr   )typeof)rE   r/   lowerers     r   rG   $_lower_array_expr.<locals>.<genexpr>  s     E94'....9s   !numpyF)flagscaching)npyimplc                   &   > \ rS rSrU UU4S jrSrg)%_lower_array_expr.<locals>.ExprKerneli  c           
      j  > [        XR                  R                  T
R                  5      nU VVVs/ s H  u  p4nU R                  X4U5      PM     nnnnU R                  R                  TT	R                  T
U5      nU R                  UT
R                  U R                  R                  5      $ s  snnnf r   )zip	outer_sigr"   castcontextcall_internalfndescreturn_type)r    r"   arg_zipvalintyoutty	cast_argsr   buildercres	inner_sigs           r   generate._lower_array_expr.<locals>.ExprKernel.generate  s    $ 3 3Y^^DG18:18-S 3e418  :\\//i<F99VY%:%:!^^779 9	:s   B.r   N)r   r   r   r   r  r   )r   r   r   s   r   
ExprKernelr     s    	9 	9r   r  )rX   noutr   )4r   r   r   rn   filenamerN   sortedrq   r/   r   r   r   parser]   r   r'   r   r"   r   r<   r0   r   compiler   r   r   ro   r   r   Optionaltyper3   ru   dtyper   r   ConfigStacktop_or_noner
   Flagsr   error_modelcompile_subroutinenumba.npr   _Kernelr   rX   r  rY   loadvarnumpy_ufunc_kernel)r   r<   	expr_nameexpr_filenameexpr_var_listexpr_var_uniquerF   	expr_argsexpr_params
param_namer   
ast_moduleast_fn	namespacecode_objimplr   r   inner_sig_argsargtyr   r   r  r   r/   r"   r   r   r   s   `                         @@@r   r   r   b  s    (3tDz?+B+B3+LMIHH%%MNN$M S/5IJO &55_c_I5 
#?	3{&13&1
 GGJ-&1 	 3 YY299)D,f6
z6**s:??/Cq/HHH##*:499*E'Ai":. 
4 z=&9H9D ooGooGE9EFINeU^^,,JJEeU[[))!!%++.!!%(   %%++^<I$$&224E %HNN5::<E  E%%gtYe.3 & 5D !9 9W__ 9 IQKE))ejj(EK.78idGOOD!iD8%%)T5*> >} 63 
4	3t 9s+   *MM!M
2B)MM!
M
M)Mr   collectionsr   r   
contextlibsysr   r   r   r   operator
numba.corer   r   r	   r
   numba.core.typingr   numba.np.ufunc.dufuncr   r   register_rewriteRewriter   posUAddnegUSubinvertInvertr   rv   AddsubSubmulMulttruedivDivmodModor_BitOrrshiftRShiftxorBitXorlshiftLShiftand_BitAndpowPowfloordivFloorDivr   eqEqneNotEqltLtleLtEgtGtgeGtEr   r   contextmanagerr   NodeTransformerr   r   r   r   r   r   r   <module>rW     s   
 0  
 !   B B % (0 
,-S(( S .Sn LL#((LL#((OOSZZ	 LL#''LL#''LL#((cggLL#''LL#))OOSZZLL#**OOSZZMM3::LL#''s||" KKKKKKKKKKKK%GP    2c11 &sww &J>r   