
    sh@V                    D   S SK r S SKrS SK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rS SKJr  S SKJrJrJrJrJrJr  S SKJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'  S SK(J)r)  S SKJ*r*  S SK+J,r,  S S	K-J.r.J/r/J0r0J1r1  S S
K2J3r3   " S S\*Rh                  5      r5S r6S r7\" S/ SQSS9r8S r9 " S S\15      r:S r;S r<S r=S r>S r?S r@S rAS rBS rCS rDS  rES! rFS" rGS# rHS$ rIS% rJS& rKS' rLS( rMS) rNS* rOS+ rPS, rQS- rRS. rSS/ rTS0 rUS1 rVS2 rWS3 rXS4 rYS5 rZS6 r[g)7    N)make_dataclass)parfor)typesirconfigcompilersigutilscgutils)add_offset_to_labelsreplace_var_namesremove_delslegalize_namesrename_labelsget_name_var_tablevisit_vars_innerget_definitionguardget_call_tableis_pureget_np_ufunc_typget_unused_var_nameis_const_callfixup_var_define_in_scopetransfer_scopefind_max_labelget_global_func_typfind_topo_order)	signature)lowering)ensure_parallel_support)NumbaParallelSafetyWarningNotDefinedErrorCompilerErrorInternalError)ParforLoweringBuilderc                   <   ^  \ rS rSrSrU 4S jr\S 5       rSrU =r	$ )ParforLower-   zhThis is a custom lowering class that extends standard lowering so as
to accommodate parfor.Parfor nodes.c                 z   > [        U[        R                  5      (       a  [        X5        g [        TU ]  U5        g N)
isinstancer   Parfor_lower_parfor_parallelsuper
lower_instselfinst	__class__s     q/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/parfors/parfor_lowering.pyr/   ParforLower.lower_inst2   s)    dFMM**"4.Gt$    c                     g)z
Force disable this because Parfor use-defs is incompatible---it only
considers use-defs in blocks that must be executing.
See https://github.com/numba/numba/commit/017e2ff9db87fc34149b49dd5367ecbf0bb45268
T )r1   s    r4   _disable_sroa_like_opt"ParforLower._disable_sroa_like_opt8   s     r6   r8   )
__name__
__module____qualname____firstlineno____doc__r/   propertyr9   __static_attributes____classcell__r3   s   @r4   r'   r'   -   s!    +%  r6   r'   c                 V    UR                   c  [        X5      $ UR                   " X5      $ r*   )lowerer_lower_parfor_parallel_std)rE   r   s     r4   r-   r-   B   s&    ~~)'::~~g..r6   c                    SSK Jn  [        5         U R                  R                  nU R                  nU R
                  nU R                  R                  n[        R                  " U5      U R                  l        [        R                  (       a*  [        SU R                  [        U R                  5      5        U R                  R                  nU R                  n[        R                  (       a  [        S5        UR                  " 5         UR                  R                   n	UR                  R"                  n
[        R                  (       a+  [        SUR                  S[        UR                  5      5        UR                  R$                   H5  n[        R                  (       a  [        SU5        U R'                  U5        M7     UR(                   HA  nX;  d  M
  X|   n[*        R,                  " XU	5      nU R/                  UR0                  U5        MC     0 n0 n[2        R4                  R6                  R9                  XR:                  UU R<                  UU5        [        R                  (       a  [        SU5        [        S	U5        UR:                  c   e[2        R4                  R6                  R?                  XR:                  5      nUR@                  URB                  nn[        R                  (       a  [        SU5        [        SU5        [E        U5      n0 n/ nUS:  Gab  UR                  R"                  n
UR                  R                   n	[G        X
U	S9nURI                  [2        RJ                  RL                  RN                  RP                  [S        [2        RJ                  RL                  RN                  RP                  5      SS9nURU                  URW                  U/ S9[X        RZ                  SS9n[]        U5       GH}  nUU   nU R                  R                  U   n[*        R,                  " U
UU	5      n[_        U5      nUR`                  n[        R                  (       a/  [        SUUUU[X        Rb                  " U5      U[        U5      5        [e        U[X        Rf                  Rh                  5      (       a  URj                  S-   n OSn URI                  [J        Rl                  [o        [J        Rl                  5      [X        Rp                  " [X        RZ                  U 5      4S[X        Rb                  " U5      0S9n!U/n"[e        U[X        Rf                  Rh                  5      (       a  URU                  [*        Rr                  Ru                  USU	5      [X        Rp                  " [X        RZ                  URj                  5      SS9n#[]        URj                  5       HS  n$URU                  [*        Rr                  Rw                  U#U$S
U	5      [X        RZ                  SS9n%U"Ry                  U%5        MU     UR{                  U"SS9n&UR|                  R                  U5      n'UR                  U'[X        Rb                  " U5      S9n(URW                  U!U&U(/S9n)URU                  U)USS9n*U*UUR0                  '   URy                  U*5        UU   R                  n+U+b  [e        U[X        Rf                  Rh                  5      (       a  URI                  [J        R                  [o        [J        R                  5      [X        Rp                  " [X        RZ                  URj                  5      U4S[X        Rb                  " U5      0S9n,UR                  U+USS9n-URW                  U,W#U-U(/S9n.URU                  U.US S9n/URy                  U/5        OUR                  U+US S9n/OUn/[        R                  (       a  S![        U5      -   S"-   n0[X        R                  " U05      n1UR                  U0U1S#S9n2[*        R                  " U2U/S
U	S$9n3[        [X        R                  UU2R0                     UUR0                     5      U R                  R                  U3'   [        S%U35        U R'                  U35        UUR0                     n4UR                  U45      n5[        R                  " UU55      n6U
R                  S&U	5      n7U4UU7R0                  '   U6U R                  U7R0                  '   [        R                  " XPR                  UR0                  5      U5S'9 n8UR                  U8R                  U65        UR                  U*U7U/S(9  S
S
S
5        GM     UR                  R                  5       n9S)U9lT        XqR                  S   R                  R0                     n:UR                  SS
  H"  n;UU;R                  R0                     U::X  a  M"   e   S*[2        R4                  R6                  lW         [        XXsUU90 [        U5      U:UR(                  5
      u  n<n=n>n?n@S+[2        R4                  R6                  lW        S,/U=-   n=[E        U5      nA[E        U=5      [E        U5      -
  UA-
  nB[        R                  (       a<  [        S-U=5        [        S.WB5        [        S/U5        [        S0U5        [        S1WA5        [        UR                  WBWAU=U>UR(                  U5      nC[        R                  (       a  [        S2WC5        UR                   V;s/ s H&  n;U;R                  U;R                  U;R                  4PM(     nDn;[        R                  (       a"  [        S3UR                  5        [        S4WD5        [        U U<WCU>U=U?WDUUUUR                  U:UR(                  W@5        US:  a  [        UUU UW5        U H1  nEU R'                  [*        R                  " UER0                  U	S595        M3     X`R                  l        [        R                  (       a  [        S65        g
g
! , (       d  f       GMW  = f! S+[2        R4                  R6                  lW        f = fs  sn;f )7aS  Lowerer that handles LLVM code generation for parfor.
This function lowers a parfor IR node to LLVM.
The general approach is as follows:
1) The code from the parfor's init block is lowered normally
   in the context of the current function.
2) The body of the parfor is transformed into a gufunc function.
3) Code is inserted into the main function that calls do_scheduling
   to divide the iteration space for each thread, allocates
   reduction arrays, calls the gufunc function, and then invokes
   the reduction function across the reduction arrays to produce
   the final reduction values.
r   )get_thread_countzlowerer.fndescr-   zinit_block =  zlower init_block instr = 	alias_maparg_aliasesNzparfor_redvars:zparfor_reddict:)rE   scopelocr8   )fobjftypeargs)rP   num_threads_var)rhstypnamereduction_info   dtype)rN   rO   rP   kwsshaperedarr_shaperedshapeonedimtuple_size_varrT   )cvalrS   redarrinit_val)r^   rS   rT   redtosetzres_print1 for redvar :	str_constrP   varargrM   res_print_redvarz$loop_index)intp)objindexvalnumpyTFschedzfunc_args = znum_inputs = parfor_outputs = parfor_redvars = znum_reductions = zgu_signature = zloop_nests = loop_ranges = )rM   z_lower_parfor_parallel done)bnumba.np.ufunc.parallelrH   r    contexttyping_contextbuilderfndesctypemapcopyr   DEBUG_ARRAY_OPTprinttypevarmapdump
init_blockrM   rL   bodyr/   racesr   Var_alloca_varrT   numbaparforsr   find_potential_aliases_parforparamsfunc_irget_parfor_outputsredvarsreddictlenr%   bind_global_functionnpufuncparallel_iget_num_threadsr   assigncallr   rg   rangeredtyp_to_redarraytyperW   DTyper+   npytypesArrayndimemptyr   UniTupleExprgetattrstatic_getitemappendmake_tuple_variable
_typingctxresolve_value_typemake_const_variabler`   fullDEBUG_ARRAY_OPT_RUNTIMEstrStringLiteralPrintr   none	calltypesget_value_typer
   alloca_onceredefine	for_rangeloadvarstoreri   setitemflagserror_model
loop_nestsindex_variablesequential_parfor_lowering_create_gufunc_for_parfor_bodybool_create_shape_signatureget_shape_classesstartstopstepcall_parallel_gufunc#_parfor_lowering_finalize_reductionDel)FrE   r   rH   	typingctx	targetctxrs   orig_typemapru   rz   rM   rL   instrracevarrvtyprvrJ   rK   parfor_output_arraysparfor_redvarsparfor_reddictnredvarsredarrs
to_cleanuppfbdrget_num_threadsrQ   ired_name
redvar_typredvarredarrvar_typreddtype	redarrdimglbl_np_emptysize_var_listredshape_varj	onedimvarsize_varr^   dt
empty_call
redarr_varr`   full_func_nodeinit_val_var	full_callra   res_print_strstrconsttyplhs	res_printnum_thread_typentllvm_typealloc_loop_varnumba_ir_loop_index_varloopr   index_var_typlfunc	func_argsfunc_sigfunc_arg_typesexp_name_to_tuple_varnum_reductions
num_inputsgu_signatureloop_rangesvsF                                                                         r4   rF   rF   I   s
    9..IIooG >>))L!YY|4GNNW^^0DEnn$$G^^F&'




C##E ov00#tF<M<M7NO""''!!-u55! (
 << $E,B/	   IK	MM66v}}g(/KQk9%m[) ==$$$ ==//BB%+^^V^^NN00 >"HGJ!|!!''##%gL  44((::%ehhnn&=&=&O&OP 5 
  ,,

?
4

" ' $ xA%a(H //9JVVE8S1F 3:>M$**H%%$!KK)#)	 *enn&:&:;;&OOa/		
 "66XX&rxx0NN5::y9 ekk(34 7 M --M *enn&:&:;;$||=uzz:??C'  ,   z/A %GG22<D#N!JJ- !- !I
 "((3 0 00$4 1 H
 ##66x@D**%++h:O*PBM2GJM & J
 $.GFKK j)%h/88H#j%..*>*>?? &+%?%?WW.rww7!NN5::zG$ %ekk(&;< &@ &N $)#<#<%$' $= $L !&

&lL"-M !+ !I  %||%&'  ,  H %%h/$88%$'  9  H "11$<s6{$JS$PM"'"5"5m"DK33*'( 4 C !#sFm04#!?I:CEJJ=DSXX=N=DV[[=Q;SGNN,,Y7 ,i8&&y1 &o&:&:;O#22?CK$00+FN ',nn]C&H#4CG+001 <JGNN2778 ""7OOO<P<P,QXcdhldjj.9 *4KQYZ edG !V LLEE--a0??DDEMqr"q'',,->>> #6:EMM3	@
 #AWE2O]FLL#:		 				 ;@7 	I%I(NY#&:";;nLJni(oz*!#78!>2!>2*  L . 7=6G6GH6GAGGQVVQVV,6GKHov001,  !|+GWno	

 266!&&c23  *NN+, c ed2 ;@70 Is   .q$+q! >-r
q	!!r_ReductionInforedvar_inforedvar_namer   r   
redarr_typr`   T)frozenc           
      H   UR                  5        H  u  pVUR                  R                  U   nUR                  R                  UR                     nUR	                  U5      n	[        X5   UUUUU	S9n
U
R                  R                  b  [        O[        nU" XXJ5        M     g)zQEmit code to finalize the reduction from the intermediate values of
each thread.
r   N)
itemsrt   ru   rT   r   r   r   redop_lower_trivial_inplace_binops_lower_non_trivial_reduce)r   r   rE   r   thread_count_varr   r   r   r   r`   reduce_infohandlers               r4   r   r     s     $+==? ^^++K8
^^++JOO<
??;/$(5#!!!
 "--33? 11 	 	!1?- $3r6   c                   (   ^  \ rS rSrU 4S jrSrU =r$ ) ParforsUnexpectedReduceNodeErrori  c                 *   > [         TU ]  SU 35        g )Nz!Unknown reduce instruction node: )r.   __init__r0   s     r4   r  )ParforsUnexpectedReduceNodeError.__init__  s    <TFCDr6   r8   )r;   r<   r=   r>   r  rA   rB   rC   s   @r4   r  r    s    E Er6   r  c                    UR                   R                   H  n[        X5      (       a  O[        XCR                  S5      (       aF  UR
                  R                  n[        XQX#5      nUR                  XdR                  R                  S9  Ol[        XCR                  S5      (       aF  UR
                  R                  n[        XQX#5      nUR                  XdR                  R                  S9  O[        U5      e[        XUUR                  5      (       d  M    O   [        R                  (       a<  UR                  nUR                  U R                    SWR"                   SU S3U5        gg)z+Lower trivial inplace-binop reduction.
    inplace_binopr]   binopz	: parfor z reduction  =N)r   reduce_nodes_lower_var_to_var_assign_is_right_op_and_rhs_is_initr   valuefn_emit_binop_reduce_callstorevartargetrT   r  _fix_redvar_name_ssa_mismatchr   r   print_variablerM   r;   )r   rE   r   r  r2   r  redvar_resultvarnames           r4   r   r     s8    ''44#G22)$0G0GYYB3-M ]1A1AB)$0G0GQQB3-M ]1A1AB 3488 )$#.#:#:< <3 54 %%))zzl)BKK=G9BG	
 &r6   c                 l  ^
 UR                    S3m
UR                  R                  R                  T
UR                  5        UR                  UR                  5      n[        R                  " UR                  U5       nUR                  nUR                  R                   H  n[        X5      (       a  O[        U[        R                   5      (       aX  [#        U
4S jUR%                  5        5       5      (       a0  ['        XaU5      nUR)                  UT
5        UR+                  U5        O[-        U5      e[/        XUUR                   5      (       d  M    O   SSS5        [0        R2                  (       a/  UR                   n	UR5                  U R6                   SU	 S3U	5        gg! , (       d  f       NS= f)zFLower non-trivial reduction such as call to `functools.reduce()`.
    #initc              3   @   >#    U  H  oR                   T:H  v   M     g 7fr*   r]   ).0var	init_names     r4   	<genexpr>,_lower_non_trivial_reduce.<locals>.<genexpr>  s     N=McHH	1=Ms   Nz: parfor non-trivial reduction r  )r   rt   ru   
setdefaultr   r   rT   r
   r   rs   ri   r   r  r  r+   r   Assignany	list_vars_emit_getitem_callr  r/   r  r  r   r   r  rM   )r   rE   r   r  num_thread_llvalr   tidr2   elemr  r  s             @r4   r   r     sd    **+51INN%%i1G1GH '7'<'<=			7??,<	=jj++88D'66T299--NT^^=MNNN)#D  y1""4( 7t<< -Vd'2'>'>@ @% 9 
>, %%))zzl9'"E	
 &- 
>	=s   =CF%F%%
F3c                 &   [        U[        R                  5      (       ar  [        UR                  [        R                  5      (       aI  U R                  UR                  R                  5      nU R                  X!R                  R                  S9  gg)zYLower Var->Var assignment.

Returns True if-and-only-if `inst` is a Var->Var assignment.
r]   TF)	r+   r   r!  r  r   r   rT   r  r  )rE   r2   loadeds      r4   r  r     s`    
 $		""z$**bff'E'E1kk&6&67r6   c                    S nUR                   nUR                  nUR                  nUR                  UR                  R
                  5      nXp4n[        UR                  U[        R                  5      n	UR                  XCX5      n
U
$ )z%Emit call to ``redarr_var[idx]``
    c                 
    X   $ r*   r8   )r_   ri   s     r4   reducer_getitem+_emit_getitem_call.<locals>.reducer_getitem.  s
    }r6   )rs   rq   r   r   r   rT   r   r   r   rg   compile_internal)idxrE   r  r,  rs   ctxr   arg_arrrP   sigr'  s              r4   r$  r$  +  sv     ooG
//C''Jook4499:G>D
K**J


CC#DDKr6   c                    S nS n[         R                  U[         R                  U[         R                  U[         R                  U[         R
                  U[         R                  U[         R                  U[         R                  U[         R                  U[         R                  U0
U    nUR                  nUR                  nUR                  n	UR                  UR                  R                   5      n
["        R$                  (       a  UR                  R&                  R)                  UR*                  5      n[,        R.                  " UR                  U/SUR0                  S9nUR2                  R4                  n[7        [8        R:                  XR                  R                      XR                      5      UR2                  R<                  U'   UR?                  U5        UR                  UR                   5      nXUR@                  4n[7        URB                  [8        RD                  XRB                  5      nURG                  XUU5      nU$ )z;Emit call to the ``binop`` for the reduction variable.
    c                 <    Un[        U 5       H
  nX1U   -  nM     U$ r*   r   thread_countr_   initcr   s        r4   reduction_add._emit_binop_reduce_call.<locals>.reduction_add?  &    |$ANA %r6   c                 <    Un[        U 5       H
  nX1U   -  nM     U$ r*   r5  r6  s        r4   reduction_mul._emit_binop_reduce_call.<locals>.reduction_mulE  r<  r6   Nrd   )$operatoriaddisubaddsubimul	ifloordivitruedivmulfloordivtruedivrq   rs   r   r   r   rT   r   r   rL   getr   r   r   rM   rt   ru   r   r   r   r   r/   r`   r   uintpr.  )r
  rE   r   r  r:  r>  kernelr0  rs   r   r1  init_varr   ru   arg_thread_countrP   r2  r  s                     r4   r  r  ;  s    	}}mm}M=m=- F //CooG''Jook4499:G%%))//33K4K4KLHH(((3D
	 ..((.7JJ 6 6 ; ;<MM"/
  + 	9%'7'<'<={';';<D
Z9O9OC ((#tDMr6   c                     [        U [        R                  5      (       d  gU R                  n[        U[        R                  5      (       d  gUR
                  U:w  a  gUR                  R                  U S3:w  a  gg)zDIs ``inst`` an inplace-binop and the RHS is the reduction init?
    Fr  T)r+   r   r!  r  r   oprR   rT   )r2   r   rQ  rR   s       r4   r  r  t  s`     dBII&&
**Cc277##
vv|
ww||+e,,r6   c                    U R                   R                  n[        U[        R                  5      (       a   UR                  U5      nUR                  nUR                  R                  nXg:H  nU(       aN  X2R                  R                  :w  a5  UR                  UR                  R                  5      n	UR                  XS9  gg! [         a    X2R                  R                  :H  n Nzf = f)z5Fix reduction variable name mismatch due to SSA.
    r]   TF)r|   rL   r+   r   r!  	get_exactunversioned_namer  r"   rT   r   r  )
r   rE   r2   r   rL   reduction_varredvar_unver_nametarget_unver_nameis_same_source_varrj   s
             r4   r  r    s     ##E$		""	H!OOK8M !. > > $ < <!2!G kk...oodkk&6&67   7+  	A "-0@0@!@		As   C "C)(C)c                 (  ^^^ [         R                  (       a4  [        SXX55        USS  H  n[        SU[        U5      U " XvS95        M      [	        U5      U-
  nUSS  V	s/ s H  oU;  a  U " XS9OSPM     n
n	[        5       nU
 H&  nU(       d  M  U H  nUR                  U5        M     M(     U(       a  [        U5      S-   OSnU
R                  SU45        UR                  U5        US-   nUR                  U5        0 m[        S5      nU H  nUS:  d  M  [        U5      TU'   US-  nM      [        U5      nS	U0mU4S
 jm/ n/ nSnSn[         R                  (       a$  [        SU5        [        SU
5        [        SU5        [        X5       Hs  u  nnUS-   nU(       a  [        UU4S jU 5       5      nOSnUU:  a,  UR                  [        U/[        USS 5      -   5      5        M]  UR                  U5        UU-  nMu     UU4$ s  sn	f )z&Create shape signature for GUFunc
    r   rV   Nargument)ru   )r   alatest_alphac                 N   > U S:  a  X   $ TS==   S-  ss'   [        TS   5      $ )Nr   r]  rV   )chr)r9  	class_map
alpha_dicts     r4   
bump_alpha+_create_shape_signature.<locals>.bump_alpha  s2    6<~&!+&z.122r6   r8   rP   classesthreadcount_ordinalc              3   6   >#    U  H  nT" UT5      v   M     g 7fr*   r8   )r  r9  rb  r`  s     r4   r  *_create_shape_signature.<locals>.<genexpr>  s     Cs!Z955ss   )r   rw   rx   ry   r   setrC  maxinsertordr_  ziptupler   list)r   r   r   rP   r   r~   ru   r   
num_inoutsr  rd  	class_set_class	max_classthread_num_classalphabetnre  gu_singu_soutcountsyms_sinclsargdim_symsra  rb  r`  s                            @@@r4   r   r     s    'TQabA*aa*;A*OP  T^+JaefgfhaijaiZ]U:J 6PUUaiGjI6a    '0I"QINN1yl#MM) 1}MM"#I3xH
q&h-9Q<q=8  h- 8,J3 FGEHfdi!#%89&S	CsCCHHJ MM%!4 5Xab\8J JKLMM(# H ' Ge ks   "Hc                 \    [        U R                  5       H  u  p[        SUSU5        M     g )N    rI   )	enumerater}   rx   )blockr   r2   s      r4   _print_blockr    s%    UZZ(fad# )r6   c                 b    [        U 5      nU H  nX   n[        SU5        [        U5        M      g)z%Pretty-print a set of IR blocks.
    zlabel: N)wrap_find_toporx   r  )	body_dict
topo_orderlabelr  s       r4   _print_bodyr    s2      	*J iU r6   c                    U R                  5       n[        UR                  5       5      n[        UR                  5       5      nX   R                  nX   R
                  R                  [        R                  " X$5      5        U$ r*   )	rv   minkeysri  rM   r}   r   r   Jump)	loop_bodyblocksfirst_label
last_labelrM   s        r4   wrap_loop_bodyr    sa    ^^Ffkkm$KV[[]#J


 
 C
""277;#<=Mr6   c                 f    [        U R                  5       5      nX   R                  S S X   l        g )Nr[  )ri  r  r}   )r  r  s     r4   unwrap_loop_bodyr    s.    Y^^%&J!*!6!;!;CR!@Ir6   c                     X;   a  gX;   a#  UR                  U 5        UR                  U 5        gUR                  U 5        g)a8  If the variable is already defined more than once, do nothing.
Else if defined exactly once previously then transition this
variable to the defined more than once set (remove it from
def_once set and add to def_more set).
Else this must be the first time we've seen this variable defined
so add to def_once set.
N)rC  remove)a_defdef_oncedef_mores      r4   add_to_def_once_setsr    s7     		UUr6   c                    U R                  [        R                  5      nU GH+  nUR                  R                  n[        XU5        UR                  n	[        U	[        R                  5      (       aA  [        U	R                  [        R                  5      (       a  U	R                  R                  XX'   [        U	[        R                  5      (       aN  U	R                  S:X  a>  U	R                  R                  U;   a$  U	R                  R                  U	R                  4X8'   [        U	[        R                  5      (       av  U	R                  S:X  af  U	R                  R                  U;   aL  X9R                  R                     u  pX;   a!  XZ   n[!        X5      (       d  [        XU5        O[        XU5        [        U	[        R                  5      (       d  GM  U	R                  S:X  d  GM  U	R"                   HR  n[        U[        R$                  5      (       a  UR                  nXM   n['        USS5      (       d  MF  [        XU5        MT     GM.     g)a  Effect changes to the set of variables defined once or more than once
for a single block.
block - the block to process
def_once - set of variable names known to be defined exactly once
def_more - set of variable names known to be defined more than once
getattr_taken - dict mapping variable name to tuple of object and attribute taken
module_assigns - dict mapping variable name to the Global that they came from
r   r   mutableFN)
find_instsr   r!  r  rT   r  r  r+   Globalpytypes
ModuleTyper;   r   rQ  attrr   r   rP   r   r   )r  r  r  getattr_takenru   module_assignsassignments
one_assignr  rR   base_obj	base_attrbase_mod_nameargvaravtypes                  r4   compute_def_once_blockr    s    ""299-K!
!!&&Uh7c299%% #))W%7%788(+		(:(:%c277##)(;		RZ@Z$'IINNCHH#=M c277##&(8SXX]]m=[ #0">H) !/ 8$]>> )XF %XBc277##&(8 ((fbff--#[[F  69e44 )8D #M "r6   c                 H    [        U 5      n[        U5      n[        U 5        U$ r*   )r  r   r  )r  r  r  s      r4   r  r  S  s$    I&F (JYr6   c           
         [        U 5      nU Hx  nX   n[        XX#XE5        UR                   HT  n	[        U	[        R
                  5      (       d  M$  [        U	R                  XX4U5        [        U	R                  XX4U5        MV     Mz     g)zCompute the set of variables defined exactly once in the given set of blocks
and use the given sets for storing which variables are defined once, more than
once and which have had a getattr call on them.
N)	r  r  r}   r+   r   r,   r|   compute_def_once_internalr  )
r  r  r  r  ru   r  r  r  r  r2   s
             r4   r  r  Y  ss      	*J  	uaJJD$..&tMdrs)$..(mftu  r6   c                 R    [        5       n[        5       n0 n0 n[        XX4X5        X#4$ )zRCompute the set of variables defined exactly once in the given set of blocks.
    )rh  r  )r  ru   r  r  r  r  s         r4   compute_def_oncer  m  s1     uHuHMNi8Gdr6   c                 ~    [        U [        R                  5      (       d   eUR                  U R                  5        U $ r*   )r+   r   r   rC  rT   )r  varsets     r4   	find_varsr  w  s.    c266""""
JJsxxJr6   c                 $   U R                   R                  U;   a5  UR                  U S45        [        R                  S:  a  [        SU S5        gXPR                   R                     n[        5       n[        U R                  [        U5        U V	V
s1 s H  u  pU	R                   R                  iM     nn	n
X-  nUR                  U5      nX-  n[        R                  S:  a  [        SU SUSU5        [        U5      S	:X  a  [        U R                  S U5      (       at  [        R                  S:  a  [        S
X5        UR                  U 5        [        U[        R                  R                   5      (       d  XR                   R                  /-  ng[        U5      S	:  a5  UR                  U S45        [        R                  S:  a  [        SU S5        gUR                  U S45        [        R                  S:  a  [        SU S5        gs  sn
n	f )Nzstored arrayrV   Instructionz9could not be hoisted because the created array is stored.Fz_hoist_internal:zuses:zdiff:r   zWill hoist instructionT
dependencyz-could not be hoisted because of a dependency.znot purez+could not be hoisted because it isn't pure.)r  rT   r   r   rw   rx   rh  r   r  r  
differencer   r   r+   r   r   r   )r2   dep_on_param
call_tablehoistednot_hoistedru   stored_arraystarget_typeusesassgn_unhoistableuse_unhoistdiffs                 r4   _hoist_internalr  |  s   {{=(D.12!!Q&-'bc++**+K5DTZZD15@A[5<<$$[KA$K??<(DD" $wE
4yA~'$**dJ??!!Q&*D>t+u~~';';<<[[--..Lt9q=l34%%*mT+Z[
  j12%%*mT+XY- Bs   "Hc                 T  ^^^	 UR                    GH  n[        U[        R                  [        R                  45      (       aw  U R                  UR                  R                  5        [        TUR                  R                     SS5      (       a'  TR                  UR                  R                  5        M  M  [        U[        R                  5      (       a2  [        U TUR                  T5        [        U TUR                  T5        M  [        U[        R                   5      (       d  GM  UR                  m	UU	U4S jn[        T	[        R"                  5      (       d  GMS  T	R$                  S;   a  T	R&                   H  nU" U5        M     GM  T	R$                  S:X  a'  T	R&                   H  nU H  nU" U5        M     M     GM  T	R$                  S:X  d  GM  [)        T	R*                  5      T	R,                   Vs/ s H  oS   PM	     sn-    H  nU" U5        M     GM     g s  snf )Nr  Fc                    > [        U [        R                  5      (       d   T5       e[        TU R                     SS5      (       a  TR                  U R                  5        g g )Nr  F)r+   r   r   r   rT   rC  )itemitemssetrR   ru   s    r4   add_to_itemset+find_setitems_block.<locals>.add_to_itemset  sM    !$//44/7499-y%@@LL+ Ar6   )build_tuple
build_list	build_set	build_mapr   rV   )r}   r+   r   StaticSetItemSetItemrC  r  rT   r   r  r   r,   find_setitems_blockr|   find_setitems_bodyr  r!  r   rQ  r   rn  rP   rX   )
setitemsr  r  ru   r2   r  r  pairxrR   s
    ` `     @r4   r  r    s|   

dR--rzz:;;LL))*
 wtzz/EBBTZZ__- Cfmm,,(DOOWMx4>>7Kbii(( **C,
 #rww''66GG #		&t, !*VV{* #		$(D*40 %) !* VVv% $SXX1H1A$1H H&t, !I? > 2Is   =H%c                 N    UR                  5        H  u  pE[        XXS5        M     g)z
Find the arrays that are written into (goes into setitems) and the
mutable objects (mostly arrays) that are written into other arrays
(goes into itemsset).
N)r   r  )r  r  r  ru   r  r  s         r4   r  r    s!     ")H? *r6   c           	         [        U [        R                  5      (       a  [        U R                  [        R                  5      (       az  U R                  R
                  S:X  a`  U R                  R                  R                  U;   a<  X R                  R                  R                     nUS[        /:X  a  [        XX#XEU5      $ g)Nr   r   F)
r+   r   r!  r  r   rQ  r   rT   r   r  )r2   r  r  r  r  ru   r  	call_lists           r4   empty_container_allocator_hoistr    s    4##4::rww''




*zz334	"%"4z#.H Hr6   c                    [         R                   " U 5      n/ n/ n[        X5      u  px[        U5      u  p[        5       n[        5       n[	        XX5        [        [        U5      R                  U5      5      n[        R                  S:  a  [        SUSUSUSUSU 5
        U H  n[        XU5        M     UR                  5        GH  u  p/ nUR                   GHm  n[        UXIXVX,5      (       a  M  [        U[        R                   5      (       a0  UR"                  R$                  U;   a  ['        UXIXVX,5      (       a  Mg  O[        U[(        R*                  5      (       a  / n[        R                  S:  a  [        S5        UR-                  5         UR.                  R                   Hy  n[        UUXXbU5      (       a  M  [        U[        R                   5      (       a0  UR"                  R$                  U;   a  ['        UXIXVUU5      (       a  Mh  UR1                  U5        M{     UUR.                  l        UR1                  U5        GMp     UUl        GM     XV4$ )NrV   zhoist - def_once:z	setitems:z	itemsset:zdep_on_param:zparfor_params:r   )rv   r  r   rh  r  rn  r  r   rw   rx   r  r   r}   r  r+   r   r!  r  rT   r  r   r,   r{   r|   r   )parfor_paramsr  ru   wrapped_blocksr  r  r  r  r  r  reverse_call_tabler  r  sir  r  	new_blockr2   new_init_blockib_insts                       r4   hoistr    s%   99]+LGK *)=H'5n'E$ZuHuHx9>L)44X>?L"!8[(KQY[jlx  {K  MZ  	[R84  ")	JJD.t\#*L LD")),,1A1AX1M"4#*L L 	L
 D&--00!#))Q.(OIIK#33G6w"[8M M $Wbii88++x7*7L+2+35 5 %"))'2  4 (6$T"; < 
A *B r6   c                 T    [        U [        R                  R                  5      (       + $ r*   )r+   r   r   r   )redtypes    r4   redtyp_is_scalarr    s    '5>>#7#7888r6   c                     Sn[        U [        R                  R                  5      (       a  XR                  -  nU R
                  n [        R                  R                  XS5      $ )z^Go from a reducation variable type to a reduction array type used to hold
per-worker results.
rV   C)r+   r   r   r   r   rW   )redtypr   s     r4   r   r     sL     I&%....//[[ 	>>377r6   c                     [        U [        R                  R                  5      (       d   e[        R                  R                  U R                  U R
                  U R                  5      $ )zYGiven a reduction array type, find the type of the reduction argument to the gufunc.
    )r+   r   r   r   rW   r   layout)redarraytyps    r4   redarraytype_to_sigr    sL     k5>>#7#78888>> 1 1;3C3C[EWEWXXr6   c                 h    [        U 5      nUR                  5        H  u  p4X4:w  d  M  X   X'   M     U$ )a,  We use ir_utils.legalize_names to replace internal IR variable names
containing illegal characters (e.g. period) with a legal character
(underscore) so as to create legal variable names.
The original variable names are in the typemap so we also
need to add the legalized name to the typemap as well.
)r   r   )namesru   outdictr  ys        r4   legalize_names_with_typemapr  $  s5     U#G6 GJ	  
 Nr6   c                 |    [        U [        R                  5      (       a  U R                  S:X  a  U R                  $ U $ )Nr   )r+   r   ArrayCompatibler   rW   )r  s    r4   to_scalar_from_0dr  4  s.    !U**++66Q;77NHr6   c
                 -   [         R                  S:  a  [        S5        UR                  R                  n
[
        R
                  " UR                  5      n[        U5        [        UR                  5      nUR                   Vs/ s H  oR                  R                  PM     nnUR                  n[        R                  R                  R!                  X5      nU R"                  R$                  n[        R                  R                  R'                  U R(                  XU R"                  R*                  5      u  nn[-        [/        [1        U5      [1        U5      -
  [1        U5      -
  5      5      n[         R                  S:  a\  [        SUS[3        U5      5        [        SUS[3        U5      5        [        SUS[3        U5      5        [        SUS[3        U5      5        / n0 n0 nSn/ nU GH  nUU   n[5        U[6        R8                  5      (       d  [5        U[6        R:                  5      (       a  UR<                  nUR>                  nU[         R@                  ::  d   e/ n[C        U5       HD  nS	[E        U5      -   nURG                  U5        URG                  U5        UU4UU'   US-  nUUU'   MF     UUU'   URG                  U5        M  [5        U[6        RH                  5      (       d  [5        U[6        RJ                  5      (       a  UR<                  nUR6                  n U[         R@                  ::  d   e/ n[C        U5       HG  nS	[E        U5      -   nURG                  U5        URG                  U5        UU4UU'   US-  nU U   UU'   MI     UUU'   URG                  U5        GM  URG                  U5        GM     Un[         R                  S:  a  [        S
US[3        U5      5        U	RM                  [1        U5      5      n	U	 H(  n!SU!-  n"[N        RP                  " [S        U"U
5      5        M*     [U        XX R"                  R*                  5        / n#/ n$U H[  n%U%S-   n&U#RG                  U&5        [W        UU%   5      n'U$RG                  U'5        [Y        U'5      n(U&U;   a  UU&   U(:X  d   eMV  U(UU&'   M]     UU-   U#-   n[         R                  S:  aP  [        SUS[3        U5      5        [        SUS[3        U5      5        [        SUS[3        U5      5        [[        U5        []        UU-   U-   U5      n)[         R                  S:  a.  [        S[-        U)R_                  5       5      S[3        U)5      5        []        X5      n*U V+s/ s H  n+U*U+   PM
     n,n+[         R                  S:  aw  [        S[-        U*R_                  5       5      S[3        U*5      5        [        SU,S[3        U,5      5        U H,  n-[        SU-5        [        SUU-   S[3        UU-   5      5        M.     U V+s/ s H  n+[a        UU+   5      PM     n.n+UU-    V+s/ s H  n+UU+   PM
     sn+U$-   n/[         R                  S:  a  [        SU.5        [        SU/5        [c        UU)5        Un0U V+s/ s H  n+U)U+   PM
     nn+Un1/ nSn2[C        [        U15      5       Hr  n3U2(       aT  U3[        U5      :  aE  [5        U.U3   [6        Rd                  Rf                  5      (       a  URG                  U1U3   S-   5        M^  URG                  U1U3   5        Mt     [c        UU*5        [i        U5      n4[k        SU45      n5[         R                  S:  a  [        SUS[3        U5      5        S[m        [o        U5      5      Rq                  SS5      -  n6[         R                  (       a  [        S[3        U65      SU65        Sn7U7SU6-   S -   S!Rs                  U5      -   S"-   -  n7[t        [        S#.n8UR_                  5        GH  u  n9n:UU9   n;U7S$U)U9   -   -  n7[5        U;[6        RJ                  5      (       d  [5        U;[6        R:                  5      (       a  S%n<OSn<U<(       Ga  [w        [x        U R(                  U95      n=S&n>[         R                  (       a  [        S'U=[3        U=5      5        U=b  [5        U=[z        R|                  5      (       aa  U=R~                  S(:X  aQ  [w        [x        U R(                  U=R                  5      n>[         R                  (       a  [        S)U>[3        U>5      5        Od[5        U=[z        R                  5      (       aE  UU=R                     n>[         R                  (       a!  [        S)U>[3        U>5      U>R                  5        U>Gb  [5        U>[z        R                  5      (       d  [5        U>[z        R                  5      (       aG  U>R                  n?[         R                  (       a  [        S*U?[3        U?5      5        U?U8U>R                  '   O[5        U>[6        R                  R                  5      (       am  U>R                  R                  S+5      S   n@[         R                  (       a+  [        S,W@U>R                  [3        U>R                  5      5        U>R                  U8W@'   OB[         R                  (       a  [        S-5        [        S.[E        U95      -   U9R                  5      eU7S/U;R                  R                  -   S+-   -  n7[        U:U;R                  5       H  u  nAnBU7UBS0-   U)UA   -   S1-   -  n7M     O?U7S2S!Rs                  U: VCs/ s H  nCU)UC   PM
     snC5      -   -  n7[        U:5      S:X  a  U7S1-  n7U7S3-  n7GM     [C        [        U5      5       HQ  n3U2(       d  M  [5        U.U3   [6        Rd                  Rf                  5      (       d  M:  U7S$U1U3   -   S4-   UU3   -   S3-   -  n7MS     S5nD[        U#5      S:  a  U7S$WD-   S/-   -  n7U7S6-  n7[        U#U5       Hm  u  n&n%U7S$U)U%   -   S0-   U)U&   -   S7-   WD-   S8-   -  n7[         R                  (       d  M:  U7S9-  n7U7S:U)U%   -   S1-   U)U%   -   S;-   -  n7U7S<U)U&   -   S1-   U)U&   -   S;-   -  n7Mo     [C        U5       HN  nE[C        UES-   5       H  nFU7S$-  n7M
     WEnGU7S=U,UE   -   S>-   [E        UG5      -   S?-   [E        UGU-   5      -   S@-   -  n7MP     [         R                  (       aM  [C        US-   5       H  nFU7S$-  n7M
     U7SA-  n7[C        U5       H  nEU7SBU,UE   -   SC-   U,UE   -   S1-   -  n7M     U7S3-  n7[C        US-   5       H  nFU7S$-  n7M
     U7U5SD-   -  n7[        U#U5       HT  u  n&n%[         R                  (       a  U7SEU)U%   -   S3-   -  n7U7SFU)U&   -   S3-   -  n7U7S$U)U&   -   S7-   WD-   SG-   U)U%   -   SH-   -  n7MV     U7SI-  n7[         R                  (       a-  [        SJ[3        U75      SHU75        [        SKU8[3        U85      5        0 nH[        U7U8UH5        UHU6   nI[         R                  (       a  [        SL[3        WI5      SHUI5        [        R                  " WI5      nJ[         R                  (       aE  [        SM[3        WJ5      5        UJR                  5         [        SN[3        U5      5        [[        U5        [i        WJR                  5      nK0 nLU5/[/        U)R                  5       5      -   U,-   nMUKR_                  5        HA  u  nAn%UAWM;  d  M  UR                  R                  R                  WAU
5      R                  WLUA'   MC     [c        WJR                  WL5        [         R                  (       a  [        SO5        WJR                  5         [6        Rd                  Rg                  USSP5      /U.-   nN[         R                  (       a  [        SQ[3        WN5      SHUN5        [        WJR                  5      S-   nO[        UUO5      n[        U5      S-   nP[         R                  (       Ga  UR_                  5        GH  u  nQnRURR                  5       nSUSR                  5         URR                  n
URR                  nTURR                   GH  nUWSRG                  UU5        [5        UU[z        R                  5      (       d  M6  UWUR                  R                     [6        R                  ;  a  Mc  SRR                  WUR                  R                  5      nV[6        R                  " UV5      nWWTR                  SSU
5      nX[z        R                  " [z        R                  " UVU
ST9UXU
SU9nYUWUUXR                  '   WSRG                  UY5        [z        R                  " UXUUR                  /S&U
SV9nZUSRG                  UZ5        [        R                  R                  R                  [6        R                  UUXR                     UUUR                  R                     5      n[U[U R"                  R*                  UZ'   GM     WSUWQ'   GM     [         R                  (       a  [        SW5        [[        U5        [        U5      n\[        XUU\5      u  n]n^WJR                  [        UJR                  R                  5       5         n_U_R                  S&SX U]-   U_R                  SX   /-   U_lY        [        U5        U R                  SY   n`U]U^SZ.U`R                  UR                  '   [         R                  (       a  [        S[5        [[        U5        WJR                  R_                  5        GH  u  nQnR[        URR                  5       GHy  u  nnU[5        UU[z        R                  5      (       d  M(  WUR                  R                  U5:X  d  MD  WUR                  n
WRR                  nT[z        R                  " UTU
5      naURR                  S&U UalY        URR                  US-   S& URlY        [        UR                  5       5      nbUaRG                  [z        R                  " UbU
5      5        UR_                  5        H  u  nnc[        UcWT5      WJR                  U'   M!     [        UR                  5       5      ndWRWJR                  WP'   WaUJR                  WQ'   UJR                  Ud   RG                  [z        R                  " UPU
5      5          O   GM    O   [         R                  (       a  [        S\5        WJR                  5         [        WJR                  5      UJlR        [        UJR                  5        [         R                  (       a3  [        S]5        WJR                  5         [        S^U5        [        S_U5        UR                  neU(       d'  [         R                  (       a  [        S`5        S%Uls        [        WJR                  5         " Sa Sb[        R                  5      nf[        R                  " UUUJWN[6        R                  UUUfSc9ngWeUls        [        [6        R                  /UNQ76 nh[         R                  (       a  [        SdWh5        WgU0WhU/U4$ s  snf s  sn+f s  sn+f s  sn+f s  sn+f s  snCf )eaV  
Takes a parfor and creates a gufunc function for its body.
There are two parts to this function.
1) Code to iterate across the iteration space as defined by the schedule.
2) The parfor body that does the work for a single point in the iteration space.
Part 1 is created as Python text for simplicity with a sentinel assignment to mark the point
in the IR where the parfor body should be added.
This Python text is 'exec'ed into existence and its IR retrieved with run_frontend.
The IR is scanned for the sentinel assignment where that basic block is split and the IR
for the parfor body inserted.
rV   z'starting _create_gufunc_for_parfor_bodyzparfor_params = rI   rm   zparfor_inputs = rn   r   expanded_tuple_var_z$parfor_inputs post tuple handling = zVariable %s used in parallel loop may be written to simultaneously by multiple workers and may result in non-deterministic or unintended results._arrzloop_indices = zloop_body = zparam_dict = zind_dict = zlegal_loop_indices = zpd = z
pd type = znew param_types:znew func_arg_types:Fparam__sentinel__zlegal parfor_params = z__numba_parfor_gufunc_%s-r  zgufunc_name  zdef z(sched, z, z):
)r   r   r~  TNz	func_def:r   znamed_tuple_def:zgval:(zname:z0Didn't find definition of namedtuple for globls.zCould not find definition of z = =,z = (z)
z = np.ascontiguousarray(!ParallelAcceleratorGufuncThreadIdz*numba.np.ufunc.parallel._iget_thread_id()
[z]
z<    print("thread id =", ParallelAcceleratorGufuncThreadId)
zF    print("initial reduction value",ParallelAcceleratorGufuncThreadId,z.shape)
z>    print("reduction array",ParallelAcceleratorGufuncThreadId,zfor z in range(sched[z	], sched[z] + np.uint8(1)):
zprint("z",z = 0
zD    print("final reduction value",ParallelAcceleratorGufuncThreadId,zD    print("final reduction array",ParallelAcceleratorGufuncThreadId,z] = 
z    return None
zgufunc_txt = zglobls:zgufunc_func = zgufunc_ir dump zloop_body dump zgufunc_ir dump after renaming r  zgufunc_param_types = z{} =rc   )r  rM   )r  r  rM   rd   zparfor loop bodyr[  parfor_diagnostics)r  r  zAfter hoistingz#gufunc_ir last dump before renamingzgufunc_ir last dumpr   ru   z(No aliases found so adding noalias flag.c                       \ rS rSrS rSrg)<_create_gufunc_for_parfor_body.<locals>.ParforGufuncCompileri<  c                 d   SSK Jn  [        R                  nU" S5      nUR	                  U R
                  5      nUR                  R                  UR                  5        UR                  U R
                  5      nUR                  R                  UR                  5        UR                  5         U/$ )Nr   )PassManagerfull_parfor_gufunc)
numba.core.compiler_machineryr  r   DefaultPassBuilderdefine_parfor_gufunc_pipelinestatepassesextend/define_parfor_gufunc_nopython_lowering_pipelinefinalize)r1   r  dpbpmparfor_gufunc_passeslowering_passess         r4   define_pipelinesM_create_gufunc_for_parfor_body.<locals>.ParforGufuncCompiler.define_pipelines=  s    A--C12B#&#D#DTZZ#P II1889!QQRVR\R\]OII_334KKM4Kr6   r8   N)r;   r<   r=   r>   r  rA   r8   r6   r4   ParforGufuncCompilerr  <  s    
	r6   r  )pipeline_classz5finished create_gufunc_for_parfor_body. kernel_sig = )wr   rw   rx   r|   rM   rv   r  r   r   r   r   rT   r   r   r   r   r   rt   ru   get_parfor_reductionsr   r   sortedrn  rh  ry   r+   r   r   NamedUniTuplerx  rW   PARFOR_MAX_TUPLE_SIZEr   r   r   Tuple
NamedTupler  warningswarnr!   replace_var_with_arrayr   r  r  r  r   r  r   r   r   r   r   hexhashreplacejoinr   r   r   r   r   rQ  r   Argr  FreeVarr  
containersBaseNamedTuplesplitinstance_classr#   r;   rl  fieldsr   execr   run_frontendr{   r  valuesrL   r   r   r   clearr}   r!  r  number_domainformatr   Constr   coretypingr   r   r  r  r  r  r  metadata
hoist_infoidr  Blockr  r   ri  r   noaliasr   CompilerBase
compile_ir)irE   r   ru   r   r   r   localshas_aliasesr   r~   rM   r  
parfor_dimr   loop_indicesr  parfor_outputsr   r   parfor_inputstuple_expanded_parfor_inputstuple_var_to_expanded_namesexpanded_name_to_tuple_varnext_expanded_tuple_varparfor_tuple_paramspipi_typetuple_counttuple_dtypethis_var_expansionr   expanded_nametuple_typesracemsgparfor_redarrsparfor_red_arg_typesr  arrredarraytype	redarrsig
param_dictind_dictr   legal_loop_indicespdparam_typesr   parfor_argsparfor_params_origascontigpindexloop_body_var_tablesentinel_namegufunc_name
gufunc_txtgloblstup_var	exp_namestup_type	named_tupfunc_defnamed_tuple_defgvalnamed_tuple_namerT   
field_namer  gufunc_thread_id_vareachdimindent	sched_dimloclsgufunc_func	gufunc_ir	var_tablenew_var_dictreserved_namesgufunc_param_typesgufunc_stub_last_label	new_labelr  r  r  rL   r2   strvalr   r   
assign_lhs
print_noder2  r  r  r  start_blockdiagnostics
prev_blockbody_first_labelbbody_last_label	old_aliasr  kernel_func
kernel_sigsi                                                                                                            r4   r   r   :  s   , "78




C 		&**+I	V&&'J393D3DE3Da$$))3DLE MMM]]))<<VSNnn$$G%*]]%9%9%O%O0H0H&J"NN   	!"M " -d=6IJ!>3^8LM -d=6IJ!>3^8LM $& "$!#"+gu~~..*WeFYFY2Z2Z!--K!--K&">">>?>!#;' 5<S8T T,33MB"))-8 >@G*=9'1,')4& ( /A'+&&r*--GUEUEU1V1V "--K!--K&">">>?>!#;' 5<S8T T,33MB"))-8=?G*=9'1,')4Q& ( /A'+&&r*(//3] ^ 1M"4mS$}J]^ S01E=?CD 	0c:;	 
 5Wnn6N6NO NFlc"-gcl;##L1'5	'>3<9,-,$GCL  "N2^CM" -d=6IJsD4FGnid9o>I -]^-KNa-acjkJ"  "$	 +<AH/;<|!(1+|<"mVHNN$45sDNK##$		&
  B'2,S$wr{2CD  
 ;HH-Q$WQZ0-KH+8>+IK+IQgaj+IKNbbN" +.#^4 i,K,9:MqZ]MM:&MH./0S''{6*ENN,@,@AA  !3F!;G!CD  !3F!;< 1 i*,Y7'8KLM"$		! -DL!!#s+-Knd;/kBJ &;&ii.0289 9J 'F
 :??A7#fz'222
x!1!122x!4!455II ^W__gFH"O%%k8T(^<#x11KK6)&+NGOOX]]&[O--0/4CXY"&&11&-hmm&<O--0/"?3_5I5IK*		::

;;*00D--gtT$Z837F?//01A1A1P1PQQ'6';';'A'A#'Fq'I$--g'7-<<"?#A#ABD 0?/M/MF+,))LM#$Cc'l$R%,[[2 2%("9"9"B"BBSHHJ$'	8??$C jj3.D1AACGG
 %D &499Y-OYjmY-O#PPPJ9~" c!
e
u Bx M*+8
;v#68L8LMM6$6v$>>,-/<V/DEGLM NJ ,
 ?
>Qf33e;;
CC
 7Sfz#.c?#%()+?@BGH 	H
)))[[Jdgqrugvvy||  @J  KN  @O  O  R]  ]  ]J\_ijm_nnqtt  xB  CF  xG  G  JU  U  UJ 8 $GaK(F& J )	v)'23)* 9~& #	#
 9%& '' -- 	.
	 % %%JN+F& J ,h
Z(G$!3G!<<uDGYZaGbbehhhJ )e
 
Q'f
 (-(**J7S))beopsettw|||Jbeopsettw|||Jfz#.&')/02<S/BDHI 	I
 8 %%JotJ/zBif.EVU#$K[ 14E%%k2Ii1i1I #9#3#34IL#_Z !"$67N__&	c&!'!2!2!8!8!A!A$!L!Q!QL ' i&&5./....1c# $&12##$		  ,I,<,<=A %Y0FGIy)A-I %%%%OO-LE5

IOO))CKKE

  &dBII..t{{//08K8KK  $]]4;;+;+;<F"'"5"5f"=K..c:C!#C1P253"@J(3GCHH%$$Z0 "$T[[/A$TW!XJ$$Z0**++55ejj+2388+<+24;;3C3C+DFC <?GNN,,Z83 #4  )Ie? .B  !I#I.N 7NSG[""3y'7'7'<'<'>#?@K"'',w6+:J:J2:N9OOKY ""#78K4;8C)EK699% I "((..0u ,GAtII #';;#3#3}#Dhh  XXeS1
"'**Ra.
"ZZA/
#&y~~'7#8  !!"''*:C"@A (oo/FQ*8E*BI$$Q' 0"%inn&6"7.3	  +*4	  '   188GGIs+-? -B G 1J 34$Y%5%56I	  !#$gui!I!!<=i../x44  %%

+-K EM5::;(:;JEzRZA[[[y FD = IK ;@ .Ps*   AZ"AZ'+AZ,AZ1AZ65AZ;c           	         / nUR                    GH@  n[        U[        R                  5      (       Ga  UR                  R
                  U ;   Ga  UR                  nUR                  R                  n[        R                  " SU5      nUR                  SU5      n	[        R                  X)R
                  '   [        R                  " XU5      n
UR                  U
5        UR                  SU5      nX%R                  R
                     X+R
                  '   UR                  [        R                  " UR                  X5      5        [        R                  " UR                  XU5      n[        [        R                   [        R"                  R%                  X%R                  R
                     SS5      [        R&                  X%R                  R
                     5      X<'   UR                  U5        GM  [        U[(        R*                  5      (       a/  [-        U SUR.                  0X#5        [-        XR0                  X#5        UR                  U5        GMC     U$ )Nr   z$const_ind_0z$valrV   r  )r}   r+   r   r!  r  rT   rM   rL   r1  r   r   rL  r   r  r  r   r   r   r   rg   r   r,   replace_var_with_array_internalr|   r  )varsr  ru   r   r  r2   rM   rL   
const_node	const_varconst_assignval_varsetitem_nodes                r4   replace_var_with_array_in_blockr  [  s   I

dBII&&4;;+;+;t+C((CKK%%E!S)J~s;I&+kkGNN#99ZC@L\*nnVS1G$+KK,<,<$=GLL!RYYtzz7@A::dkk9sKL&/

ENN009I9I1JAsSUZU_U_ahititiyiyaz'|I#\*fmm,,+D1doo2F[+D..'U/ 0 r6   c                 X    UR                  5        H  u  pE[        XX#5      Ul        M     g r*   )r   r  r}   )r  r  ru   r   r  r  s         r4   r  r  w  s#    !)4T'U
 *r6   c                     [        XX#5        U  H<  nX$   nUR                  US 5        [        R                  R	                  USS5      X$'   M>     g )NrV   r  )r  popr   r   r   )r  r  ru   r   r   el_typs         r4   r  r  {  sE    #DWHAt^^))&!S9
 r6   c                 )  ^ ^^g^h T R                   mhT R                  mgSSKJnJn  [
        R                  (       ar  [        S5        [        SUR                  UR                  UR                  UR                  5        [        SU5        [        SU5        [        SU5        [        SU5        [        R                  " U5      u  nnUR                  R                  UR                   R"                  5      nUu  nnU" 5         U" UUUUS	S
S9nUR$                  nUR                  R'                  5         [
        R                  (       a  [        SUU5        UhU 4S jn[)        U5      n[+        U5       H  nUU   u  nnnU" U5      nU" U5      nUS:X  d   eU" U5      nUUU4UU'   [
        R                  (       d  MK  [        SR-                  U5      UUU5        [.        R0                  " TgSR-                  U5      UUU5        M     [2        R4                  R7                  S5      n[2        R4                  R9                  U5      n[2        R4                  R9                  U5      nThR;                  [<        R>                  5      n ThR;                  [<        R@                  5      n![2        R4                  R9                  U 5      n"[2        R4                  R9                  U"5      n#[2        R4                  R9                  U!5      n$[2        R4                  R9                  U$5      n%ThRC                  [<        R@                  S5      n&ThRC                  [<        R@                  S5      n'U'RD                  n(ThRG                  U 5      n)URI                  S5        URI                  S5      n*[
        R                  (       a  [        SURJ                  5        URJ                  (       a  U n+U"n,U#n-OU!n+U$n,U%n-[.        RL                  " TgU+ThRC                  [<        R@                  U5      SS9n.[.        RL                  " TgU+ThRC                  [<        R@                  U5      SS9n/[+        U5       GH  nUU   u  nnnURD                  U(:w  a  TgRO                  UU(5      nURD                  U(:w  a  TgRO                  UU(5      nURD                  U(:w  a  TgRO                  UU(5      nTgRQ                  UU'5      nTgRS                  UTgRU                  U.ThRC                  [<        R@                  U5      /5      5        TgRS                  UTgRU                  U/ThRC                  [<        R@                  U5      /5      5        GM
     [.        RV                  " TgRX                  [2        R4                  R[                  U!/ 5      SS9n0[.        RV                  " TgRX                  [2        R4                  R[                  [2        R4                  R]                  5       U!/5      SS9n1[.        RV                  " TgRX                  [2        R4                  R[                  [2        R4                  R7                  [<        R>                  R^                  5      / 5      S5      n2TgRa                  U2/ 5      n3TgRa                  U0/ 5      n4[.        Rb                  " TgTgRe                  SU3U3RE                  S5      5      5         [.        R0                  " TgSU35        ThRf                  Ri                  Tg[j        S5        SSS5        [2        R4                  R[                  U!U!U!U"U"/5      n5[.        RV                  " TgRX                  U5SS9n6TgRa                  U6U3ThRC                  [<        R@                  U5      U.U//5      n7TgRa                  U1U&/5        ThRC                  [<        R@                  US-  5      n8TgRm                  U7U85      n9[2        R4                  R[                  U,U!/5      n:[.        RV                  " TgRX                  U:S S9n;TgRa                  U;U9/5      n<[.        RL                  " TgU,5      n=TgRS                  U<U=5        [
        R                  (       a  SOSn>[2        R4                  R[                  U"U!U"U"U!U,U /5      n?URJ                  (       a!  [.        RV                  " TgRX                  U?S!S9n@O [.        RV                  " TgRX                  U?S"S9n@TgRa                  W@ThRC                  [<        R@                  U5      U.U/U7TgRo                  U=5      ThRC                  [<        R>                  U>5      /5        U VAs/ s H!  nAT Rq                  U	UA   R$                  5      PM#     nBnA[)        U5      nC[)        U5      UC-
  nDUgUU 4S# jnEUSUD  VAs/ s H  nAWE" UA5      PM     snAWB-   nF[)        UF5      nG[)        U5      S-   nH[.        RL                  " TgUThRC                  [<        R>                  SUG-   5      S$S9n/ nITgRS                  TgRs                  TgRo                  U=5      U5      U5        UIRu                  ThRC                  [<        R>                  U)5      5        0 nJ[+        UG5       GH  nWFU   nKUU   nLUU   nMTgRU                  UThRC                  [<        R>                  US-   5      /5      nNUWD:  a  ThRw                  WM5      " ThTgWK5      nO[.        Rx                  " TgUORz                  UMR|                  5      nP[+        [)        UP5      5       H  nQWIRu                  WPUQ   5        M     TgRS                  TgRs                  WOR~                  U5      WN5        M  [        WM[<        R                  5      (       Ga  WLU;   a  WMR                  [<        R                  :w  a  ThR                  WMR                  5      O[2        R4                  R7                  S5      nR[.        RL                  " TgUR5      nSTgRS                  WKUS5        TgRS                  TgRs                  USU5      WN5        UKUS4WJWL'   WIRu                  ThRC                  [<        R>                  ThRG                  UR5      5      5        GM   ThRw                  WM5      " ThTgWK5      nO[.        Rx                  " TgUORz                  UMR|                  5      nP[+        [)        UP5      5       H  nQWIRu                  WPUQ   5        M     TgRS                  TgRs                  WOR~                  U5      WN5        GM  UWH:  a  [        WM[<        R                  5      (       a!  WMRD                  nTThR                  TgWKUMUT5      nKOWMnT[        WT[<        R                  5      (       d  ThR                  WT5      O[2        R4                  R7                  S5      nR[.        RL                  " TgUR5      nUTgRS                  WKUU5        Of[        WM[<        R                  5      (       d  ThR                  WM5      O[2        R4                  R7                  S5      nR[.        RL                  " TgUR5      nUTgRS                  TgRs                  WUU5      WN5        GM     0 nV/ nWU*S   /nWThRC                  [<        R>                  SU-  5      UVU*S   '   [)        U5      [)        WF5      :X  d   e[)        U5      [)        U5      :X  d   e[)        U5      [)        UU-   5      :X  d   e[)        U5      [)        UR                  SS 5      :X  d   e[        UWFUUU-   5       GHt  u  nLnKnMnX[        UM[<        R                  R                  5      (       a  WMR|                  [)        WX5      -
  nOSn[
        R                  (       a  [        S%WLS&WXS'WMS(U5        WX H  nY[
        R                  (       a  [        S)WLS*WM5        WLU;   a$  ThRC                  [<        R>                  S5      WVWY'   OMThRw                  WM5      " ThTgWK5      nO[.        Rx                  " TgUOR                  UMR|                  5      nZUZU   WVWY'   WYWW;  aR  [
        R                  (       a,  [        S+WYS,U5        [.        R0                  " TgUYS--   WVUY   5        WWRu                  WY5        US-   nM     GMw     [)        WV5      S-   n[[.        RL                  " TgU U[S.S9nZTgRS                  U7UZ5        SnWW H  nY[
        R                  (       a  [.        R0                  " TgWYS--   WVUY   5        TgRS                  WVWY   TgRU                  WZThRC                  [<        R>                  U5      /5      5        US-   nM     WGS-   [)        WI5      -   n\[.        RL                  " TgU ThRC                  [<        R>                  U\5      S/S9n]TgRS                  ThRC                  [<        R>                  SU-  U)-  5      U]5        [+        UG5       HK  nU&n^TgRU                  W]ThRC                  [<        R>                  SU-   5      /5      nNTgRS                  U^UN5        MM     [+        [)        WI5      5       HO  nQTgRU                  W]ThRC                  [<        R>                  SWG-   UQ-   5      /5      nNTgRS                  WIUQ   UN5        MQ     [.        R                  " U5      n_[2        R4                  R[                  [2        R4                  R]                  5       UU"U"U/5      n`[.        RV                  " TgRX                  U`U5      naThR                  R                  UR                  5        [
        R                  (       a  [.        R0                  " TgS0Wa5        TgRa                  WaUWZW]W_/5        [
        R                  (       a  [.        R0                  " TgS1Wa5        TgRa                  U1U4/5        [2        R4                  R[                  [2        R4                  R]                  5       U,/5      nb[.        RV                  " TgRX                  UbS2S9ncTgRa                  UcTgRo                  U=5      /5        WJR                  5        Hl  u  ndneUeu  nKnSTgRU                  USThRC                  [<        R>                  S5      /5      nfTgRS                  TgRo                  Uf5      T R                  Ud5      5        Mn     ThR                  R                  UR                  5        g! , (       d  f       GN= fs  snAf s  snAf )3z>
Adds the call to the gufunc function from the main function.
r   )build_gufunc_wrapper_launch_threadsmake_parallel_loopzouter_sig = ro   	expr_argsexpr_arg_typesr   FT)cache
is_parforszparallel function = c                    > [        U [        R                  5      (       a  TR                  U R                  5      $ TR                  [        R                  U 5      $ r*   )r+   r   r   r   rT   get_constantr   rL  )r   rq   rE   s    r4   
load_range(call_parallel_gufunc.<locals>.load_range  s>    a  ??166**''Q77r6   rV   z'call_parallel_gufunc loop_ranges[{}] = zloop range[{}]: %d %d (%d)
   z%Parfor has potentially negative start
dim_starts)sizerT   	dim_stopsget_parallel_chunksizer]   set_parallel_chunksizer   z<=znum_threads: %d
)z@Invalid number of threads. This likely indicates a bug in Numba.Nget_sched_size   allocate_scheddo_scheduling_signeddo_scheduling_unsignedc                    > U T;   a+  TU    u  pTR                  U5      nTR                  X25      nU$ TR                  U 5      $ )a  Given a variable name, if that variable is not a new name
introduced as the extracted part of a tuple then just return
the variable loaded from its name.  However, if the variable
does represent part of a tuple, as recognized by the name of
the variable being present in the exp_name_to_tuple_var dict,
then we load the original tuple var instead that we get from
the dict and then extract the corresponding element of the
tuple, also stored and returned to use in the dict (i.e., offset).
)r   extract_value)r  orig_tupoffsetrb  resrs   r   rE   s        r4   load_potential_tuple_var6call_parallel_gufunc.<locals>.load_potential_tuple_varM  sM     %%4Q7Hooh/G''8CJ??1%%r6   pargszvar =zgu_sig =ztype =zi =zvar = z type = z
dim_sym = z, i = z = %d
pshapepstepszbefore calling kernel %p
zafter calling kernel %p
deallocate_sched)Qrq   rs   rp   r  r  r   rw   rx   rP   return_typerecvrpysigr	   normalize_signaturelibraryget_functionrt   llvm_func_namerT   _ensure_finalizedr   r   r0  r
   printfllvmliter   IntTypePointerTyper   r   rg   rL  r  ry   get_abi_sizeofr  signedr   sextrD  r   gepget_or_insert_functionmoduleFunctionTypeVoidTypebitwidthr   if_unlikelyicmp_signed	call_convreturn_user_excRuntimeErrorrH  loadr   bitcastr   
make_arrayunpack_tuplestridesr   datar+   r  rW   booleanget_data_typeOptionalcastBooleanrl  r   r   rY   get_null_valueactive_code_libraryadd_linking_libraryr   getvar)irE   cresr   	outer_sigr  r  r   r   r   
redarrdictr|   r   r~   r   r  r  rP   r  	llvm_funcsinsoutinfowrapper_namer  num_dimr   r   r   r   byte_t
byte_ptr_tbyte_ptr_ptr_tintp_tuintp_t
intp_ptr_tintp_ptr_ptr_tuintp_ptr_tuintp_ptr_ptr_tzerooneone_typesizeof_intp	sched_sig
sched_typesched_ptr_typesched_ptr_ptr_typer  r  get_chunksizeset_chunksizer   num_threadscurrent_chunksizeget_sched_size_fntyr  num_divisions
multiplier
sched_sizealloc_sched_fntyalloc_sched_funcalloc_spacerl   
debug_flagscheduling_fntydo_schedulingr  r   r   ninoutsr  all_argsnum_argsnum_inpsarray_stridesrv_to_arg_dictr{  r  atydstaryr  r   rS   rv_argunpacked_atyptrsig_dim_dictoccurrencesgu_sigdim_symshapesnshapes	num_stepsstepsstepsizer  fntyr  dealloc_sched_fntydealloc_sched_funckr   only_elem_ptrrs   rq   si   `            `                                                                                         @@r4   r   r     s>    ooGooG, "#ninni.C.Cooy	0,k9%/nl+ !44Y?D+))$++*D*DEIIC 	4d&+>D99LLL""$$lD98 +G7^'NtT5!$qyy$t,A!!!;BB1EuNN7$B$I$I!$L $.  [[  #F((0J[[,,Z8N##EJJ/F$$U[[1G((0J[[,,Z8N++))'2Kkk--k:OQ/D


u{{A
.CxxH((0K MM!
I5}7K7KL
#+
$, $$'"6"6KK#"(46J ##'"6"6KK#"(35I 7^'NtT::!LL1E99 <<h/D99 <<h/D{{4%7;;((Q()*	+
 	dGKK	)0)=)=ekk1)M(NP 	Q & 22  "-%'M
 22  !5!5!7'C%'M
 44  !4!4UZZ5H5H!I2NO ,,3K]B7			Wg&9&9$2=2B2B12E'G 
Hw 3[A))'<3]	^
H #++227Wgz[e<fg33N LL+292F2Fu{{T[2\2<2;2= >M
 LL' %%ekk7Q;?J]J7J  {{//	J55 ,,/*>K8EMM+u%,,!Jkk..Wj*g~vVXO66w~~7F<RT  66w~~7F<TV
 LL  W&'19mLL!5!5JJ
",-. =DDGqwz!}112GGD7|H)nx'G&( 6?x5HI5H(+5HIGSH8}H3x!|H!!JJL D MMM'//',,u"5zBDI--ejj+FGN8_qklQkk$!5!5ejj!a%!H IJ<$$S)'7C@C**7CKKJG3w<($$WQZ0 )MM'//#((J?EU2233e|))u}}4 ,,SYY7$KK//2  !,,Wc:c6*goofjA3G'*Fms#$$W%9%9%**gF\F\]`Fa%bc((-gwD!..wSXXNs7|,A!((4 -goochh
CSI8|c5>>22#&88L!,,wS,GC#&L(u}}EE ,,\:$KK//2  ))'37c3' )emm<< ,,S1$KK//2  ))'37MM'//#z:C@e l LKQ<.K!(!5!5ejj!g+!NL1y>S]***y>S0000y>St_,,,y>S!34444!$Y%3S4Z"AS#vc5>>//003v;&AA!!'3
FHc5!LG%%hZ5e|(/(<(<UZZ(KW%((-gwD --gsyy#((K(.q	W%{*)),1=NN7Gi,?gAVW""7+AA "A: ,!#G  &wXNFMM-(	A!!NN7Gi$7g9NO!7;;((

A'($)	*
 E  1s=11Ig22JJ	#)13E MM'&&uzz1w;3LM 8_kk%'"6"6uzz1q5"I!JKh$  3}%&kk$$JJHq 0234 	mA&, ' !!*-D;;##HKK$8$8$:%3Z%/%=>D 
	'	'l	KB33DLLAw <bALLdFE401w ;R@LL!2 34 "11(++2F2F2H>JZ[ 77! LL#gll5&9%:;$$&1VFW-A-A%**a-P,QRgll=17>>!3DE '
 33DLLAU
H 
H| E2 Js   :AS(AS'AS,S
AS$)\rv   r@  r   r  r  dataclassesr   llvmlite.irr  rk   r   r   numba.parforsr   
numba.corer   r   r   r	   r
   numba.core.ir_utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   numba.core.typingr   r   numba.parfors.parforr    numba.core.errorsr!   r"   r#   r$   #numba.parfors.parfor_lowering_utilsr%   Lowerr'   r-   rF   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  r  r  r   r  r  r  r   r  r  r  r   r8   r6   r4   <module>r(     sf        &      E E     * (  8  F(.. */R-j
   !@HE} E
"
J$
L	 6r!FCJ$A <E|v(
$L!-F@
3 j9
8Y _\B8V:RBr6   