
    pi78                        d dl Z d dlmZmZ d dlmZmZ d dlZd dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmc mZ  ej2                         Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z"dZ#d Z$ edd      Z% G d de      Z& edd      Z' G d  d!e      Z( e(       Z)[(	 e)jT                  Z+y)"    N)abstractmethodABCMeta)
namedtupleOrderedDict)global_compiler_lock)errorsconfig
transformsutils)event)PostProcessor)enforce_no_delslegalize_single_scopec                       e Zd ZdZd Zd Zy)SimpleTimerz(
    A simple context managed timer
    c                 8    t        j                         | _        | S N)timeitdefault_timertsselfs    _/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/numba/core/compiler_machinery.py	__enter__zSimpleTimer.__enter__   s    &&(    c                 P    t        j                         | j                  z
  | _        y r   )r   r   r   elapsed)r   excs     r   __exit__zSimpleTimer.__exit__   s    ++-7r   N)__name__
__module____qualname____doc__r   r    r   r   r   r      s    8r   r   c                       e Zd ZdZed        Zed        Zed        Z	e	j                  d        Z	ed        Zej                  d        Zd Zed	        Zd
 Zd Zd Zy)CompilerPassz- The base class for all compiler passes.
    c                      d | _         d | _        y r   )	_analysis_pass_idr   argskwargss      r   __init__zCompilerPass.__init__#   s    r   c                     | j                   S )z.
        Returns the name of the pass
        )_name)clss    r   namezCompilerPass.name(   s    
 yyr   c                     | j                   S )z$
        The ID of the pass
        r)   r   s    r   pass_idzCompilerPass.pass_id/   s    
 }}r   c                     || _         y)z)
        Sets the ID of the pass
        Nr3   r   vals     r   r4   zCompilerPass.pass_id6   s    
 r   c                     | j                   S )z,
        Analysis data for the pass
        r(   r   s    r   analysiszCompilerPass.analysis=   s    
 ~~r   c                     || _         y)z4
        Set the analysis data for the pass
        Nr9   r6   s     r   r:   zCompilerPass.analysisD   s    
 r   c                      yzd
        Runs the initialization sequence for the pass, will run before
        `run_pass`.
        Fr$   r*   s      r   run_initializationzCompilerPass.run_initializationK       
 r   c                      y)z
        Runs the pass itself. Must return True/False depending on whether
        statement level modification took place.
        Nr$   r*   s      r   run_passzCompilerPass.run_passR   s     	r   c                      yr=   r$   r*   s      r   run_finalizerzCompilerPass.run_finalizerZ   r?   r   c                      y)z( Override to set analysis usage
        Nr$   )r   AUs     r   get_analysis_usagezCompilerPass.get_analysis_usagea   s     	r   c                      | j                   |   S )z5
        Gets the analysis from a given pass
        r9   )r   	pass_names     r   get_analysiszCompilerPass.get_analysisf   s     ~~i((r   N)r    r!   r"   r#   r   r-   classmethodr1   propertyr4   setterr:   r>   rA   rC   rF   rI   r$   r   r   r&   r&      s           ^^    __   
)r   r&   )	metaclassc                       e Zd ZdZy)SSACompliantMixinzn Mixin to indicate a pass is SSA form compliant. Nothing is asserted
    about this condition at present.
    Nr    r!   r"   r#   r$   r   r   rO   rO   m   s     	r   rO   c                       e Zd ZdZy)FunctionPassz$ Base class for function passes
    NrP   r$   r   r   rR   rR   t   
    r   rR   c                       e Zd ZdZy)AnalysisPasszD Base class for analysis passes (no modification made to state)
    NrP   r$   r   r   rU   rU   z   rS   r   rU   c                       e Zd ZdZy)LoweringPassz$ Base class for lowering passes
    NrP   r$   r   r   rW   rW      rS   r   rW   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	AnalysisUsagezLThis looks and behaves like LLVM's AnalysisUsage because its like that.
    c                 @    t               | _        t               | _        y r   )set	_required
_preservedr   s    r   r-   zAnalysisUsage.__init__   s    %r   c                     | j                   S r   r\   r   s    r   get_required_setzAnalysisUsage.get_required_set   s    ~~r   c                     | j                   S r   )r]   r   s    r   get_preserved_setzAnalysisUsage.get_preserved_set   s    r   c                 :    | j                   j                  |       y r   )r\   addr   psss     r   add_requiredzAnalysisUsage.add_required   s    3r   c                 :    | j                   j                  |       y r   )r]   rd   re   s     r   add_preservedzAnalysisUsage.add_preserved   s    C r   c                      d| j                   z  S )Nzrequired: %s
r_   r   s    r   __str__zAnalysisUsage.__str__   s    $..00r   N)
r    r!   r"   r#   r-   r`   rb   rg   ri   rk   r$   r   r   rY   rY      s%      !1r   rY   Fc                  (    t         rt        | i | y y r   )_DEBUGprint)r+   r,   s     r   debug_printro      s    tv r   pass_timingszinit run finalizec                   l    e Zd ZdZdZd Zd ZddZd Zd Z	d Z
ed	        Zd
 Zed        Zd Zd Zy)PassManagerzR
    The PassManager is a named instance of a particular compilation pipeline
    Fc                 h    g | _         t               | _        d| _        d| _        d| _        || _        y)zA
        Create a new pipeline with name "pipeline_name"
        FN)passesr   
exec_times
_finalizedr(   _print_afterpipeline_name)r   rx   s     r   r-   zPassManager.__init__   s2     %- *r   c                     t        |t              s5t        j                  |      rt	        |t
              sd|z  }t        |      t        |t              rt        j                  |      }y t        j                  |      st        d|z        y )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_passzPassManager._validate_pass   sy    Hc*//(+X|4+-56CC. h$%228<H!//9 !<x!GHH :r   c                 r    | j                  |       ||f}| j                  j                  |       d| _        y)zI
        Append a pass to the PassManager's compilation pipeline
        FN)r   rt   appendrv   )r   rf   descriptionfunc_desc_tuples       r   add_passzPassManager.add_pass   s5     	C ,?+r   c                 0   | j                   sJ | j                  |       | j                  |       t        | j                         D ]  \  }\  }}||k(  s n t        d|z        | j                   j	                  |dz   |t        |      f       d| _        y)zt
        Add a pass `pass_cls` to the PassManager's compilation pipeline after
        the pass `location`.
        zCould not find pass %s   FN)rt   r   	enumerater   insertr{   rv   )r   r   locationidxx_s         r   add_pass_afterzPassManager.add_pass_after   s    
 {{{H%H%$T[[1 	BKC!QH}	B 5@AA37Xs8}$=>r   c                       fd} |t         j                         |t         j                         |t         j                        f}|S )Nc                     g }| dk7  ra| dk(  r.j                   D cg c]  \  }}|j                          }}}|S | j                  d      }|D cg c]  }|j                          }}|S c c}}w c c}w )Nnoneall,)rt   r1   splitstrip)	conf_itemprint_passesr   r   splittedr   s        r   parsez&PassManager._debug_init.<locals>.parse   s|    LF"%;?;;#G!QAFFH#GL#G    )s3H7?#@!AGGI#@L#@ $H $As   A,A2)r	   DEBUG_PRINT_AFTERDEBUG_PRINT_BEFOREDEBUG_PRINT_WRAP)r   r   rets   `  r   _debug_initzPassManager._debug_init   sB    	  V--.V../V,,-0 
r   c                     | j                         | _        | j                         \  | _        | _        | _        d| _        y)zt
        Finalize the PassManager, after which no more passes may be added
        without re-finalization.
        TN)dependency_analysisr(   r   rw   _print_before_print_wraprv   r   s    r   finalizezPassManager.finalize   s<    
 113 	@4-t/?r   c                     | j                   S r   )rv   r   s    r   	finalizedzPassManager.finalized   s    r   c                 <    dj                  ||      }|f|_        |S )zG
        Patches the error to show the stage that it arose in.
        z{desc}
{exc})descr   )formatr+   )r   r   r   newmsgs       r   _patch_errorzPassManager._patch_error  s'     !''Ts';9
r   c           
          d}fd} fd} |j                          j                   j                  z   d        j                  _        j
                  j                  }t        j                          d| d|j
                  j                  t        j                  j                  j                               t        j                        t        j                              }t!        j"                  dj                         	      }	t%        j&                  d
|      5  |	5  t)               5 }
| |j*                        z  }d d d        t)               5 }| |j,                        z  }d d d        t)               5 }| |j.                        z  }d d d        d d d        d d d        t1        t2              rt5        j6                          j8                  rt:        j=                  j>                        j@                  r^|r$tC        j6                        jE                          n8tG        jH                  j6                  jJ                        j6                  _%        tM        j6                  jJ                        st!        jN                  d       tQ        
jR                  jR                  jR                        }| jT                  |dj                         <    |j                          jV                   j                  z   d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)NFc                 \     | |      }|dvrd}t        |j                         z        |S )N)TFz[CompilerPass implementations should return True/False. CompilerPass with name '%s' did not.)r   r1   )funccompiler_statemangledr   rf   s       r   checkz#PassManager._runPass.<locals>.check  s7    >*Gm+> sxxz!122Nr   c                    | |v rj                   }|j                  |j                  j                  || f}t	        d|z  j                  dd             j                  j                  j                          y t	        d       y y )Nz%s.%s: %s: %s %sx   -zfunc_ir is None)func_idmodnamefunc_qualnamerx   rn   centerfunc_irdump)rH   print_conditionprintable_conditionfidr+   internal_stater   s        r   ro   z)PassManager._runPass.<locals>.debug_print  s    O+$,,S%6%68J8J+Y8)D088cBC!))5"**//1+, ,r   BEFOREz [])r1   qualnamemoduleflagsr+   return_typezPass {name})r1   znumba:run_pass)dataz&multiple scope in func_ir detected in r   AFTER),r1   r   r   r(   r:   r   r   dictr   r   _lazy_pformatr   valuesr{   r+   r   r   new_error_contextevtrigger_eventr   r>   rA   rC   rz   rR   r   r   
_ENFORCINGr   get	__class__mutates_CFGr   runr
   canonicalize_cfgblocksr   CompilerErrorrp   r   ru   rw   )r   indexrf   r   mutatedr   ro   r   
ev_detailserrctx	init_time	pass_timefinalize_timepts   ` ``          r   _runPasszPassManager._runPass  s   			- 	CHHJ 2 2T5E5E ExP ~~!))77HHJ<r(1-!))11%%n&:&:&A&A&CD^(()N667

 ))-chhjI.Z@ 	D& 	D I)5!7!7HHI ?)5~>>? D-5!2!2NCCD	D 	D c<(N223?? !!#--0<<!."8"89==?4>4O4O&..5557N**1 ))?)?)F)FG**<SEB  )++Y->->'//19;5#((*56 	CHHJ 1 1D4D4D DgNAI I? ?D D	D 	D 	D 	Dsl   -M0M;L(M$L5;MM$M,M(L2-M5L?:MMMM	MM&c                    ddl m} | j                  st        d      t	        | j
                        D ]e  \  }\  }}	 t        d|z         t        j                  |      j                  }t        |t              r| j                  |||       nt        d      g y# |$ r}|d}~wt        $ rH}t        |t        j                         s|d| j"                  d|d	}| j%                  ||      }	|	d}~ww xY w)
z9
        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   rt   r   r   r   	pass_instrz   r&   r   BaseException	Exceptionr   
NumbaErrorrx   r   )
r   stater   r   rf   	pass_descr   er   patched_exceptions
             r   r   zPassManager.runV  s     	A~~BCC &/t{{%; 	(!C!#y(g	)**..s3==	i6MM#y%8'(<== 9	( ,  (!!V%6%67G 8 ''4$($5$5c1$=!''(s%   ABC7!B##C7/AC22C7c                    t               }| j                  D ]M  \  }}t        j                  |      j                  }t               }|j                  |       ||t        |      <   O t               }|j                         D ]  \  }}|j                         ||<    d }	t               }
|j                         D ]  \  }}t        |       |	||      z  |
|<    |
S )z.
        Computes dependency analysis
        c                 L    fdt               }| D ]  }| ||      z  } |S )Nc                 l    | |v r||    n	t               }|r|D ]  }| ||      z  } |S t               S r   r[   )lkeyrmapdep_setr   walks       r   r   zGPassManager.dependency_analysis.<locals>.resolve_requires.<locals>.walk  sD    (,$t*#%$ 3DDM23"N5Lr   r   )keyr   r   kr   s       @r   resolve_requiresz9PassManager.dependency_analysis.<locals>.resolve_requires  s5    ! %C %tAt}$%Jr   )r   rt   r   r   r   rY   rF   typeitemsr`   r[   )r   depsrf   r   r   aurequires_mapr   vr   	dep_chains              r   r   zPassManager.dependency_analysisq  s     v 	HS!""3'11AB  $DaM		 vJJL 	3DAq002LO	3	 F	 &&( 	HDAqq6%5a%FGIaL	H r   N) )r    r!   r"   r#   r   r-   r   r   r   r   r   rK   r   r   r   r   r   r   r$   r   r   rr   rr      si     J	+I  "&   HO HOT(6!r   rr   	pass_infoz#pass_inst mutates_CFG analysis_onlyc                   F    e Zd ZdZdZ e       Zd Zd Zd Z	d Z
d Zd Zy	)
PassRegistryz(
    Pass registry singleton class.
    r   c                       fd}|S )Nc                     j                  |       rJ j                  | j                               rJ j                  | _        xj                  dz  c_        t         |              j                  | <   | S )Nr   )r   _does_pass_name_aliasr1   _idr4   r  	_registry)
pass_classanalysis_onlyr   r   s    r   make_festivez+PassRegistry.register.<locals>.make_festive  sn    ))*55511*//2CDDD!%JHHMH)2:<3@*BDNN:&r   r$   )r   r   r  r  s   ``` r   registerzPassRegistry.register  s    	 r   c                 :    || j                   j                         v S r   )r
  keysr   clazzs     r   r   zPassRegistry.is_registered  s    ++---r   c                 F    | j                  |      sJ | j                  |   S r   )r   r
  r  s     r   r   zPassRegistry.get  s%    !!%(((~~e$$r   c                 ~    | j                   j                         D ]   \  }}|j                  j                  |k(  s  y y)NTF)r
  r   r   r1   )r   r   r   r   s       r   r  z"PassRegistry._does_pass_name_alias  s<    NN((* 	DAq{{5(	 r   c                     t        |t              sJ | j                  j                         D ]"  \  }}|j                  j
                  |k(  s |c S  t        d|z        )Nz"No pass with name %s is registered)rz   r{   r
  r   r   r1   r   )r   
class_namer   r   s       r   r   zPassRegistry.find_by_name  s^    *c***NN((* 	PDAq{{:-	P AJNOOr   c                 h    | j                   j                         D ]  \  }}t        |d|        y )Nz: )r
  r   rn   )r   r   r   s      r   r   zPassRegistry.dump  s/    NN((* 	%DAqa#$	%r   N)r    r!   r"   r#   r	  r   r
  r  r   r   r  r   r   r$   r   r   r  r    s4     CI	.%P%r   r  ),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&   rO   rR   rU   rW   rY   rm   ro   rp   rr   r  r  r   r  register_passr$   r   r   <module>r%     s     ' /  : 8 8 $ - F   V

8& 
8K)W K)\	 		< 		< 		< 	1F 10 

 .*=>i& iX {$IJ	+%6 +%\  ''r   