
    sh-8                        S SK r S SKJrJr  S SKJrJr  S SKrS SKJ	r	  S SK
JrJrJrJr  S SKJr  S SKJr  S SKJrJr  S SKJs  Jr  \R2                  " 5       r " S	 S
\5      r " S S\S9r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r"Sr#S r$\" SS5      r% " S S\5      r&\" SS5      r' " S  S!\5      r(\(" 5       r)C( \)RT                  r+g)"    N)abstractmethodABCMeta)
namedtupleOrderedDict)global_compiler_lock)errorsconfig
transformsutils)event)PostProcessor)enforce_no_delslegalize_single_scopec                   $    \ rS rSrSrS rS rSrg)SimpleTimer   z 
A simple context managed timer
c                 :    [         R                  " 5       U l        U $ N)timeitdefault_timertsselfs    q/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/core/compiler_machinery.py	__enter__SimpleTimer.__enter__   s    &&(    c                 R    [         R                  " 5       U R                  -
  U l        g r   )r   r   r   elapsed)r   excs     r   __exit__SimpleTimer.__exit__   s    ++-7r   )r   r   N)__name__
__module____qualname____firstlineno____doc__r   r!   __static_attributes__ r   r   r   r      s    8r   r   c                       \ rS rSrSr\S 5       r\S 5       r\	S 5       r
\
R                  S 5       r
\	S 5       r\R                  S 5       rS	 r\S
 5       rS rS rS rSrg)CompilerPass   z,The base class for all compiler passes.
    c                      S U l         S U l        g r   	_analysis_pass_idr   argskwargss      r   __init__CompilerPass.__init__#   s    r   c                     U R                   $ )z
Returns the name of the pass
)_name)clss    r   nameCompilerPass.name(   s    
 yyr   c                     U R                   $ )z
The ID of the pass
r0   r   s    r   pass_idCompilerPass.pass_id/   s    
 }}r   c                     Xl         g)z
Sets the ID of the pass
Nr<   r   vals     r   r=   r>   6   s	    
 r   c                     U R                   $ )z
Analysis data for the pass
r/   r   s    r   analysisCompilerPass.analysis=   s    
 ~~r   c                     Xl         g)z$
Set the analysis data for the pass
NrC   r@   s     r   rD   rE   D   s	    
 r   c                     gzL
Runs the initialization sequence for the pass, will run before
`run_pass`.
Fr)   r1   s      r   run_initializationCompilerPass.run_initializationK       
 r   c                     g)zl
Runs the pass itself. Must return True/False depending on whether
statement level modification took place.
Nr)   r1   s      r   run_passCompilerPass.run_passR   s     	r   c                     grH   r)   r1   s      r   run_finalizerCompilerPass.run_finalizerZ   rK   r   c                     g)z'Override to set analysis usage
        Nr)   )r   AUs     r   get_analysis_usageCompilerPass.get_analysis_usagea   s     	r   c                      U R                   U   $ )z%
Gets the analysis from a given pass
rC   )r   	pass_names     r   get_analysisCompilerPass.get_analysisf   s     ~~i((r   r.   N)r#   r$   r%   r&   r'   r   r4   classmethodr9   propertyr=   setterrD   rI   rM   rP   rT   rX   r(   r)   r   r   r+   r+      s           ^^    __   
)r   r+   )	metaclassc                       \ rS rSrSrSrg)SSACompliantMixinm   zeMixin to indicate a pass is SSA form compliant. Nothing is asserted
about this condition at present.
r)   Nr#   r$   r%   r&   r'   r(   r)   r   r   r_   r_   m   s     	r   r_   c                       \ rS rSrSrSrg)FunctionPasst   z#Base class for function passes
    r)   Nra   r)   r   r   rc   rc   t   
    r   rc   c                       \ rS rSrSrSrg)AnalysisPassz   zCBase class for analysis passes (no modification made to state)
    r)   Nra   r)   r   r   rg   rg   z   re   r   rg   c                       \ rS rSrSrSrg)LoweringPass   z#Base class for lowering passes
    r)   Nra   r)   r   r   rj   rj      re   r   rj   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)AnalysisUsage   zLThis looks and behaves like LLVM's AnalysisUsage because its like that.
    c                 @    [        5       U l        [        5       U l        g r   )set	_required
_preservedr   s    r   r4   AnalysisUsage.__init__   s    %r   c                     U R                   $ r   rq   r   s    r   get_required_setAnalysisUsage.get_required_set   s    ~~r   c                     U R                   $ r   )rr   r   s    r   get_preserved_setAnalysisUsage.get_preserved_set   s    r   c                 :    U R                   R                  U5        g r   )rq   addr   psss     r   add_requiredAnalysisUsage.add_required   s    3r   c                 :    U R                   R                  U5        g r   )rr   r|   r}   s     r   add_preservedAnalysisUsage.add_preserved   s    C r   c                      SU R                   -  $ )Nzrequired: %s
ru   r   s    r   __str__AnalysisUsage.__str__   s    $..00r   )rr   rq   N)r#   r$   r%   r&   r'   r4   rv   ry   r   r   r   r(   r)   r   r   rm   rm      s%      !1r   rm   Fc                  2    [         (       a  [        U 0 UD6  g g r   )_DEBUGprint)r2   r3   s     r   debug_printr      s    vtv r   pass_timingszinit run finalizec                   v    \ rS rSrSrSrS rS rSS jrS r	S r
S	 r\S
 5       rS r\S 5       rS rS rSrg)PassManager   zJ
The PassManager is a named instance of a particular compilation pipeline
Fc                 f    / U l         [        5       U l        SU l        SU l        SU l        Xl        g)z1
Create a new pipeline with name "pipeline_name"
FN)passesr   
exec_times
_finalizedr/   _print_afterpipeline_name)r   r   s     r   r4   PassManager.__init__   s0     %- *r   c                 T   [        U[        5      (       d@  [        R                  " U5      (       a  [	        U[
        5      (       d  SU-  n[        U5      e[        U[        5      (       a  [        R                  U5      ng [        R                  U5      (       d  [        SU-  5      eg )NzKPass must be referenced by name or be a subclass of a CompilerPass. Have %szPass %s is not registered)
isinstancestrinspectisclass
issubclassr+   	TypeError_pass_registryfind_by_nameis_registered
ValueError)r   pass_clsmsgs      r   _validate_passPassManager._validate_pass   s    Hc**//(++X|44+-56CC. h$$%228<H!//99 !<x!GHH :r   c                 p    U R                  U5        X4nU R                  R                  U5        SU l        g)z9
Append a pass to the PassManager's compilation pipeline
FN)r   r   appendr   )r   r~   descriptionfunc_desc_tuples       r   add_passPassManager.add_pass   s3     	C ,?+r   c                 <   U R                   (       d   eU R                  U5        U R                  U5        [        U R                   5       H  u  nu  pEXB:X  d  M    O   [        SU-  5      eU R                   R	                  US-   U[        U5      45        SU l        g)z\
Add a pass `pass_cls` to the PassManager's compilation pipeline after
the pass `location`.
zCould not find pass %s   FN)r   r   	enumerater   insertr   r   )r   r   locationidxx_s         r   add_pass_afterPassManager.add_pass_after   s    
 {{{H%H%$T[[1KC!} 2 5@AA37Xs8}$=>r   c                    ^  U 4S jnU" [         R                  5      U" [         R                  5      U" [         R                  5      4nU$ )Nc                    > / nU S:w  af  U S:X  a0  TR                    VVs/ s H  u  p#UR                  5       PM     nnnU$ U R                  S5      nU Vs/ s H  o"R                  5       PM     nnU$ s  snnf s  snf )Nnoneall,)r   r9   splitstrip)	conf_itemprint_passesr   r   splittedr   s        r   parse&PassManager._debug_init.<locals>.parse   sz    LF"%;?;;#G;!AFFH;L#G    )s3H7?#@x!GGIxL#@ $H $As   A2A8)r	   DEBUG_PRINT_AFTERDEBUG_PRINT_BEFOREDEBUG_PRINT_WRAP)r   r   rets   `  r   _debug_initPassManager._debug_init   sB    	  V--.V../V,,-0 
r   c                     U R                  5       U l        U R                  5       u  U l        U l        U l        SU l        g)z\
Finalize the PassManager, after which no more passes may be added
without re-finalization.
TN)dependency_analysisr/   r   r   _print_before_print_wrapr   r   s    r   finalizePassManager.finalize   s<    
 113 	@4-t/?r   c                     U R                   $ r   )r   r   s    r   	finalizedPassManager.finalized   s    r   c                 4    SR                  XS9nU4Ul        U$ )z7
Patches the error to show the stage that it arose in.
z{desc}
{exc})descr    )formatr2   )r   r   r    newmsgs       r   _patch_errorPassManager._patch_error  s%     !''T';9
r   c           
      8  ^ ^^ SnU4S jnUU 4S jnU" TR                  5       T R                  T R                  -   S5        T R                  Tl        TR
                  R                  n[        TR                  5        SU S3UTR
                  R                  [        R                  " TR                  R                  5       5      [        TR                  5      [        TR                  5      S9n[         R"                  " STR                  5        35      n	[$        R&                  " S	US
9   U	   [)        5        n
XE" TR*                  T5      -  nS S S 5        [)        5        nXE" TR,                  T5      -  nS S S 5        [)        5        nXE" TR.                  T5      -  nS S S 5        S S S 5        S S S 5        [1        T[2        5      (       a  [5        TR6                  5        T R8                  (       a  [:        R=                  TR>                  5      R@                  (       ad  U(       a$  [C        TR6                  5      RE                  5         O9[F        RH                  " TR6                  RJ                  5      TR6                  l%        [M        TR6                  RJ                  5      (       d  [         RN                  " ST 35      e[Q        W
RR                  WRR                  WRR                  5      nUT RT                  U< STR                  5       < 3'   U" TR                  5       T RV                  T R                  -   S5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f)NFc                 `   > U " U5      nUS;  a  Sn[        UTR                  5       -  5      eU$ )N)TFz[CompilerPass implementations should return True/False. CompilerPass with name '%s' did not.)r   r9   )funccompiler_statemangledr   r~   s       r   check#PassManager._runPass.<locals>.check  s7    >*Gm+> sxxz!122Nr   c                   > X;   a  TR                   nUR                  UR                  TR                  X 4n[	        SU-  R                  SS5      5        TR                  b  TR                  R                  5         g [	        S5        g g )Nz%s.%s: %s: %s %sx   -zfunc_ir is None)func_idmodnamefunc_qualnamer   r   centerfunc_irdump)rW   print_conditionprintable_conditionfidr2   internal_stater   s        r   r   )PassManager._runPass.<locals>.debug_print  s|    +$,,S%6%68J8J+8)D088cBC!))5"**//1+, ,r   BEFOREz [])r9   qualnamemoduleflagsr2   return_typezPass znumba:run_pass)dataz&multiple scope in func_ir detected in r   AFTER),r9   r   r   r/   rD   r   r   dictr   r   _lazy_pformatr   valuesr   r2   r   r   new_error_contextevtrigger_eventr   rI   rM   rP   r   rc   r   r   
_ENFORCINGr   get	__class__mutates_CFGr   runr
   canonicalize_cfgblocksr   CompilerErrorr   r   r   r   )r   indexr~   r   mutatedr   r   r   
ev_detailserrctx	init_time	pass_timefinalize_timepts   ` ``          r   _runPassPassManager._runPass  s   			- 	CHHJ 2 2T5E5E ExP ~~!))77HHJ<r(1-!))11%%n&:&:&A&A&CD^(()N667

 ))E#((**>?.Z@&)5!7!7HH )5~>> -5!2!2NCC  CI@ c<((N223?? !!#--0<<!."8"89==?4>4O4O&..5557N**1 ))?)?)F)FGG**<SEB  )++Y->->'//19;5#((*56 	CHHJ 1 1D4D4D DgNA  CI&@@sl   -N
0M8;MM8#M9M8M&!M8)N

MM8
M#M8&
M50M88
N	N


Nc                    SSK Jn  U R                  (       d  [        S5      e[	        U R
                  5       Hh  u  nu  pE [        SU-  5        [        R                  U5      R                  n[        U[        5      (       a  U R                  X6U5        M_  [        S5      e   g! U a  nUeSnAf[         aN  n[        U[        R                   5      (       d  UeSU R"                  < SU< S	3nU R%                  X5      n	U	eSnAff = f)
z)
Run the defined pipelines on the state.
r   )_EarlyPipelineCompletionz!Cannot run non-finalised pipelinez-- %szLegacy pass in useNz
Failed in z mode pipeline (step: ))numba.core.compilerr  r   RuntimeErrorr   r   r   r   r   	pass_instr   r+   r	  BaseException	Exceptionr   
NumbaErrorr   r   )
r   stater  r   r~   	pass_descr  er   patched_exceptions
             r   r   PassManager.runV  s     	A~~BCC &/t{{%;!C!#(g	)**..s3==	i66MM#%8'(<== &< ,  (!!V%6%677G 8 ''4$($5$5c$=!''(s,   AB%B%%D+B--D:A	DDc                    [        5       nU R                   HL  u  p#[        R                  U5      R                  n[        5       nUR                  U5        XQ[        U5      '   MN     [        5       nUR                  5        H  u  pxUR                  5       Xg'   M     S n	[        5       n
UR                  5        H  u  px[        U5      U	" X5      -  X'   M     U
$ )z
Computes dependency analysis
c                 P   ^ U4S jm[        5       nU  H  nUT" X15      -  nM     U$ )Nc                 x   > X;   a  X   O	[        5       nU(       a  U H  nUT" X15      -  nM     U$ [        5       $ r   rp   )lkeyrmapdep_setr   walks       r   r   GPassManager.dependency_analysis.<locals>.resolve_requires.<locals>.walk  s9    (,$*#%$DM2 %"N5Lr   r  )keyr  r   kr   s       @r   resolve_requires9PassManager.dependency_analysis.<locals>.resolve_requires  s.    ! %CtA}$ Jr   )r   r   r   r   r  rm   rT   typeitemsrv   rp   )r   depsr~   r   r   aurequires_mapr#  vr$  	dep_chains              r   r   PassManager.dependency_analysisq  s     vHS""3'11AB  $aM	 $ vJJLDA002LO !	 F	 &&(DAq6%5a%FGIL ) r   )r/   r   r   r   r   r   r   r   N) )r#   r$   r%   r&   r'   r   r4   r   r   r   r   r   r[   r   r   r   r	  r   r   r(   r)   r   r   r   r      si     J	+I  "&   HO HOT(6!r   r   	pass_infoz#pass_inst mutates_CFG analysis_onlyc                   N    \ rS rSrSrSr\" 5       rS rS r	S r
S rS rS	 rS
rg)PassRegistryi  z 
Pass registry singleton class.
r   c                    ^ ^^ UUU 4S jnU$ )Nc                   > TR                  U 5      (       a   eTR                  U R                  5       5      (       a   eTR                  U l        T=R                  S-  sl        [        U " 5       TT5      TR                  U '   U $ )Nr   )r   _does_pass_name_aliasr9   _idr=   r/  	_registry)
pass_classanalysis_onlyr   r   s    r   make_festive+PassRegistry.register.<locals>.make_festive  st    ))*555511*//2CDDDD!%JHHMH)2:<3@*BDNN:&r   r)   )r   r   r8  r9  s   ``` r   registerPassRegistry.register  s    	 r   c                 :    XR                   R                  5       ;   $ r   )r6  keysr   clazzs     r   r   PassRegistry.is_registered  s    ++---r   c                 P    U R                  U5      (       d   eU R                  U   $ r   )r   r6  r?  s     r   r   PassRegistry.get  s(    !!%((((~~e$$r   c                     U R                   R                  5        H!  u  p#UR                  R                  U:X  d  M!    g   g)NTF)r6  r'  r  r9   )r   r   r#  r+  s       r   r4  "PassRegistry._does_pass_name_alias  s5    NN((*DA{{5( + r   c                     [        U[        5      (       d   eU R                  R                  5        H#  u  p#UR                  R
                  U:X  d  M!  Us  $    [        SU-  5      e)Nz"No pass with name %s is registered)r   r   r6  r'  r  r9   r   )r   
class_namer#  r+  s       r   r   PassRegistry.find_by_name  sX    *c****NN((*DA{{:- + AJNOOr   c                 n    U R                   R                  5        H  u  p[        U< SU< 35        M     g )Nz: )r6  r'  r   )r   r#  r+  s      r   r   PassRegistry.dump  s(    NN((*DAa#$ +r   r)   N)r#   r$   r%   r&   r'   r5  r   r6  r;  r   r   r4  r   r   r(   r)   r   r   r1  r1    s4     CI	.%P%r   r1  ),r   abcr   r   collectionsr   r   r   numba.core.compiler_lockr   
numba.corer   r	   r
   r   numba.core.tracingr   numba.core.postprocr   numba.core.ir_utilsr   r   numba.core.eventcorer   	termcolor
_termcolorobjectr   r+   r_   rc   rg   rj   rm   r   r   r   r   r/  r1  r   r;  register_passr)   r   r   <module>rX     s     ' /  : 8 8 $ - F   

8& 
8K)W K)\	 		< 		< 		< 	1F 10 

 .*=>i& iX {$IJ	+%6 +%\  ''r   