
    |h}                    h   S r SSKrSSKrSSKJrJrJr  SSKJr  SSK	J
r
JrJrJr  SSKJrJr  SSKJr  SSKJr  \R*                  " \5      rS	r\r\" 1 S
k5      r\S;   a  SSKJr   " S S\5      r\rO\S;   a  O\ " \5      e\ " S S\!5      5       r" " S S\!5      r#S r$ " S S\!5      r%\ " S S\!5      5       r& " S S\&5      r' " S S\'5      r(\S;   a  \(r)O\S;   a  \'r)O\S:  a  \&r)O\ " \5      e\" S / S!Q5      r* " S" S#\!5      r+\" S$/ S%Q5      r,S& r-S' r. " S( S)\!5      r/ " S* S+\!5      r0g),z)
Implement python 3.8+ bytecode analysis
    N)
namedtupledefaultdictdeque)total_ordering)
UniqueDict	PYVERSIONALL_BINOPS_TO_OPERATORS_lazy_pformat)NEW_BLOCKERSCFGraph)Loc)UnsupportedBytecodeError   >   NOPPRECALL
LOAD_CONST
LOAD_DEREF      r      )Enumc                        \ rS rSrSrSrSrSrg)CALL_INTRINSIC_1_Operand   r      r    N)__name__
__module____qualname____firstlineno__INTRINSIC_STOPITERATION_ERRORUNARY_POSITIVEINTRINSIC_LIST_TO_TUPLE__static_attributes__r       M/home/james-whalen/.local/lib/python3.13/site-packages/numba/core/byteflow.pyr   r      s    ()%"#r(   r   r   
   r      c                   J    \ rS rSrSr\" 1 Sk5      rS rS rS r	S r
S rS	rg
)	BlockKind*   z?Kinds of block to make related code safer than just `str`.
    >   TRYLOOPWITHEXCEPTFINALLYWITH_FINALLYc                 2    XR                   ;   d   eXl        g N)_members_value)selfvalues     r)   __init__BlockKind.__init__4   s    %%%r(   c                 B    [        [        U 5      U R                  45      $ r9   )hashtyper;   r<   s    r)   __hash__BlockKind.__hash__8   s    T$Z-..r(   c                     [        U[        5      (       a  U R                  UR                  :  $ [        SR	                  [        U5      5      5      eNzcannot compare to {!r}
isinstancer0   r;   	TypeErrorformatrB   r<   others     r)   __lt__BlockKind.__lt__;   s=    eY'';;--4;;DKHIIr(   c                     [        U[        5      (       a  U R                  UR                  :H  $ [        SR	                  [        U5      5      5      erG   rH   rL   s     r)   __eq__BlockKind.__eq__A   s=    eY'';;%,,..4;;DKHIIr(   c                 8    SR                  U R                  5      $ )NzBlockKind({}))rK   r;   rC   s    r)   __repr__BlockKind.__repr__G   s    %%dkk22r(   )r;   N)r    r!   r"   r#   __doc__	frozensetr:   r>   rD   rN   rQ   rT   r'   r   r(   r)   r0   r0   *   s1      H/JJ3r(   r0   c                   t    \ rS rSrSrS rS r\S;   a  S rO\S;   a  S rO\	" \5      eS	 r
S
 rS rS rSrg)FlowK   zaData+Control Flow analysis.

Simulate execution to recover dataflow and controlflow information.
c                 l    [         R                  S[        US S95        Xl        [	        5       U l        g )Nzbytecode dump:
%sc                 "    U R                  5       $ r9   )dumpxs    r)   <lambda>Flow.__init__.<locals>.<lambda>R   s
    !&&(r(   )	lazy_func)_loggerdebugr
   	_bytecoder   block_infos)r<   bytecodes     r)   r>   Flow.__init__P   s,    *#H8JK	M!%<r(   c                    [        U R                  SSSS9n[        U R                  R                  R                  S9nUR
                  R                  U5        [        5       nUR
                  (       Ga  [        R                  SUR
                  5        UR
                  R                  5       nXBR                  ;  Ga#  [        R                  SUR                  5        [        R                  SU5        XCUR                  '    UR                  U5        UR                  5       (       a  OQU R!                  X$5      (       a  O:U R#                  U5      (       a"  U R%                  U5        UR'                  5         OMx  [        R                  SUR(                  5        UR                  R+                  U5        UR-                  5       nUR
                  R/                  U5        UR
                  (       a  GM  U R1                  UR                  5        U R3                  U5        [5        UR                  S	 S
9 H=  n[7        U5      =U R8                  UR                  '   n[        R                  SXF5        M?     g)a  Run a trace over the bytecode over all reachable path.

The trace starts at bytecode offset 0 and gathers stack and control-
flow information by partially interpreting each bytecode.
Each ``State`` instance in the trace corresponds to a basic-block.
The State instances forks when a jump instruction is encountered.
A newly forked state is then added to the list of pending states.
The trace ends when there are no more pending states.
r   r   )rg   pcnstack
blockstack)debug_filenamezpending: %sz	stack: %szstate.pc_initial: %szend state. edges=%sc                     U R                   $ r9   )
pc_initialr^   s    r)   r`   Flow.run.<locals>.<lambda>   s    1<<r(   )keyzblock_infos %s:
%sN)Statere   TraceRunnerfunc_idfilenamependingappendr   rc   rd   popleftfinished_stackro   dispatchhas_terminated_run_handle_exception_is_implicit_new_block_guard_with_assplit_new_blockoutgoing_edgesaddget_outgoing_statesextend
_build_cfg_prune_phissortedadapt_state_infosrf   )r<   
firststaterunnerfirst_encounterstate
out_statessis          r)   runFlow.runV   s    DNNq&(*
DNN,B,B,K,KLj)
 %, nnnMM-8NN**,EOO+k5<<84e<49 0 01OOE*++--55fDD!66u== //6!113!  3U5I5IJ##E*"668
%%j15 nnn: 	( FOO1GHE6G6NNDU--.MM/; Ir(   r-   r   r   c                 "   UR                  5       (       dp  UR                  5       (       a[  UR                  5       R                  [        ;  a9  UR                  UR                  5       R                  S9  UR                  U5        gUR                  5         UR                  5       (       d  UR                  5       (       a  [        R                  SUR                  5       UR                  5        UR                  5       nUR                  S5      nU(       a  US   UR                  :X  a  S ng UR!                  SUR                  S9nUR"                  US'   UR$                  US'   UR&                  US	'   UR                  UR                  US
9  gg g )Nrj   Tz3.11 exception %s PC=%sr2   endr   
end_offsetstack_depth
push_lastirj   extra_block)in_withhas_active_tryget_instopname_NO_RAISE_OPSforknext_adjust_except_stack
advance_pcis_in_exceptionrc   rd   get_exception_pcget_top_blocktarget
make_blockr   depthlasti)r<   r   r   eheh_topeh_blocks         r)   r}   Flow._run_handle_exception   s=   ==??((**NN$++=@

enn.33
4++E2  " }}5+@+@+B+BMM";"'"5"5"7D,,.B"007F&-299"<#'#(#3#3Eryy#3#I13.24((/13.

eiiX
F# ,Cr(   r+   c                    UR                  5       (       a  UR                  5       R                  [        ;  a  UR	                  UR                  5       R
                  S9  UR                  S5      nUR                  U5        UR                  n0 nXCS   :  a
  XCS   -
  US'   US   n[        S5      [        [        S5      [        0US      US	'   XeS
'   UR                  " SSUS   0UD6  gUR                  5         g )Nr   r2   entry_stacknpophandlerr5   r6   kindnpushr   rj   r   Tr   )r   r   r   r   r   r   r   pop_block_and_abover   r0   _EXCEPT_STACK_OFFSET_FINALLY_POPr   )r<   r   r   tryblkrk   kwargsr   s          r)   r}   r      s    $$&&NN$++=@

enn.33
4,,U3))&1**=11%+].C%CF6N +h')=i(,# &/##w )0}%

6fUm6v6  "r(   c                 8   [        5       nU H   nUR                  nUR                  U5        M"     U H=  nUR                   H*  nUR	                  UR                  UR
                  S5        M,     M?     UR                  S5        UR                  5         X l        g )Nr   )	r   ro   add_noder   add_edgerj   set_entry_pointprocesscfgraph)r<   
all_statesgraphr   bedges         r)   r   Flow._build_cfg   s~    	E  ANN1    E,,u//!< -   	a r(   c                 R  ^^	 [         R                  SR                  SS5      5        U4S jnU	U4S jnU	4S jnU4S jnU" 5       u  nm	[         R                  S[        U5      5        U" 5       u  pxU" U5        U" Xh5        [         R                  S	R                  SS5      5        g )
Nz
Prune PHIs<   -c                     > [        [        5      n [        5       nTR                   H?  n[        UR                  5      n[        UR                  5      nX==   XC-  -  ss'   X-  nMA     X4$ r9   )r   setry   
_used_regs_phis)	used_phisphi_setr   usedphisr   s        r)   get_used_phis_per_state1Flow._prune_phis.<locals>.get_used_phis_per_state   sb    #C(IeG5++,5;;' DK/ 	 )
 %%r(   c                  P  > 0 n [        [        5      nTR                   HD  nUR                  R	                  5        H#  u  p4UT;  a  X U'   X   R                  XB45        M%     MF     [        R                  S[        U 5      5        [        R                  S[        U5      5        X4$ )Nz
defmap: %szphismap: %s)	r   r   ry   _outgoing_phisitemsr   rc   rd   r
   )defmapphismapr   phirhsr   r   s        r)   find_use_defs'Flow._prune_phis.<locals>.find_use_defs   s    F!#&G % 4 4 : : <HC')&+sL$$c\2	 != ) MM,f(=>MM-w)?@?"r(   c                 z  > [        [        5      n Sn[        [        U R	                  5       5      5       HZ  u  p4[        [        U5      5       H(  u  pVUT;   d  M  X@U   -  nX   R                  XV45        M*     X   nXt-  (       d  MT  XG-  nSnM\     [        R                  S[        U 5      5        U(       d  gM  )zVAn iterative dataflow algorithm to find the definition
(the source) of each PHI node.
TFzchanging phismap: %sN)	r   r   r   listr   r   rc   rd   r
   )	r   	blacklistchangingr   defsitesr   r   	to_remover   s	           r)   propagate_phi_map+Flow._prune_phis.<locals>.propagate_phi_map   s     $C(I %+D,A%BMC&,T(^&<
'>$4H%N..|< '= !*I ++ -#' &C 4mG6LM r(   c                   > 0 nU R                  5        H  u  p4U H	  nX   X%'   M     M     [        R                  S[        U5      5        [	        [
        5      nU H  nX%    H  u  psXvU   U'   M     M     [        R                  S[        U5      5        TR                   H:  nUR                  R                  5         UR                  R                  Xc   5        M<     g )Nzkeep phismap: %sznew_out: %s)
r   rc   rd   r
   r   dictry   r   clearupdate)	r   r   keepr   used_setr   new_outr   r   s	           r)   apply_changes'Flow._prune_phis.<locals>.apply_changes  s    D#,??#4#C 'DI $ $5 MM,mD.AB!$'G"&)JC*-EN3' #,  MM-w)?@$$**,$$++GN; )r(   zUsed_phis: %szDONE Prune PHIs)rc   rd   centerr
   )
r<   r   r   r   r   r   r   r   r   r   s
    `       @r)   r   Flow._prune_phis   s    l))"c23	&	#	,	<  56	7o}Y'?@'/'"i)'..r378r(   c                     UR                  5       nUR                  U R                  R                  ;   a  gUR                  [
        ;   a  gg)NTF)r   offsetre   labelsr   r   r<   r   insts      r)   r~   Flow._is_implicit_new_block  s9    ~~;;$..///[[L(r(   c                     UR                  5       nUR                  S;   a7  U R                  UR                     R                  nUS:w  a  Sn[	        U5      egg)zChecks if the next instruction after a SETUP_WITH is something other
than a POP_TOP, if it is something else it'll be some sort of store
which is not supported (this corresponds to `with CTXMGR as VAR(S)`).>   
SETUP_WITHBEFORE_WITHPOP_TOPzGThe 'with (context manager) as (variable):' construct is not supported.N)r   r   re   r   r   )r<   r   current_instnext_opmsgs        r)   r   Flow._guard_with_as(  s`     ~~'"??nn\%6%67>>G)#$ /s33	 $ @r(   )re   rf   r   N)r    r!   r"   r#   rV   r>   r   r   r}   NotImplementedErrorr   r   r~   r   r'   r   r(   r)   rY   rY   K   sT    (8<t //	$6 
j	 	#, "),,
K9Z4r(   rY   c                 $    U R                  S5      $ )Nz$null$)
startswith)regs    r)   _is_null_temp_regr  6  s    >>(##r(   c                      \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS r\S;   a  S rS rS rS r\S;   a  S rO\S:  a   \S;   a  S rO\S;   a  S rO\S;   a  S rO\" \5      eS rS rS rS rS rS r\S;   a
  S rS  rS! rO\S";   a  O\" \5      e\S#;   a  \r \r!O\S$;   a  O\" \5      eS% r"S& r#S' r$S( r%S) r&S* r'S+ r(S, r)S- r*S. r+S/ r,S0 r-S1 r.S2 r/S3 r0S4 r1S5 r2\S#;   a  S6 r3O\S$;   a  O\" \5      e\S#;   a  S7 r4O\S$;   a  O\" \5      eS8 r5\5r6\5r7\S#;   a  \5r8\5r9O\S$;   a  O\" \5      eS9 r:\:r;\:r<S: r=S; r>S< r?S= r@S> rAS? rBS@ rCSA rDSB rESC rF\FrGSD rHSE rISF rJ\S#;   a  SG rKO\S$;   a  O\" \5      eSH rL\SI;   a  SJ rMO\S;   a  SK rMO\" \5      eSL rNSM rO\S;   a  SN rPO\SO;   a  SP rPO\S$;   a  O\" \5      eSQ rQSR rRSS rSST rTSU rUSV rVSW rWSX rXSY rYSZ rZS[ r[\SI;   a  S\ r\O\S;   a  S] r\O\" \5      eS^ r]S_ r^S` r_Sa r`Sb raSc rbSd rcSe rd\S;   a  Sf reO\S";   a  O\" \5      e\S;   a  Sg rfO\S";   a  Sh rfO\" \5      eSi rg\S#;   a  Sj rhO\S$;   a  O\" \5      eSk riSl rjSm rkSn rlSo rmSp rnSq roSr rpSs rqSt rrSu rsSv rtSw ruSx rvSy rwSz rxS{ ryS| rzS} r{S~ r|S r}S r~S rS rS rS rS rS r\r\r\r\rS 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\rSS jrS rS rS rS rS rS r\SI;   a  S rO\S;   a  S rO\" \5      e\S#;   a  O\S;   a  S rO\S;   a  S rO\" \5      eS rSrg)rs   i:  zLTrace runner contains the states for the trace and the opcode dispatch.
    c                 L    Xl         [        5       U l        [        5       U l        g r9   )rm   r   rv   r   ry   )r<   rm   s     r)   r>   TraceRunner.__init__=  s    ,wr(   c                 .    [        U R                  U5      $ r9   )r   rm   )r<   linenos     r)   get_debug_locTraceRunner.get_debug_locB  s    4&&//r(   c                    [         S;   ax  UR                  (       af  UR                  (       aU  UR                  S   nUS   nUb*  X1R                  ::  a  UR                  R                  5         OO.UR                  (       a  MU  O[         S;   a  O[	        [         5      eUR                  5       nUR                  S:w  aA  [        R                  SUR                  U5        [        R                  SUR                  5        [        U SR                  UR                  5      S 5      nUb	  U" X5        g S	UR                  -  n[        UU R                  UR                  5      S
9e)Nr   r   r   CACHEzdispatch pc=%s, inst=%szstack %szop_{}z$Use of unsupported opcode (%s) foundloc)r   _blockstackro   popr   r   r   rc   rd   r   rz   getattrrK   r   r  r  )r<   r   topblkblk_endr   fnr   s          r)   r{   TraceRunner.dispatchE  s   33  ''"..r2F$UmG*w:J:J/J))--/ ''' *$%i00~~;;'!MM3UYYEMM*ell3T7>>$++6=>uO84;;FC*3/3/A/A$++/NP Pr(   c                     UR                  S5      nUR                  U5        UR                  n0 nUS   nX5:  a  X5-
  US'   SnUS   (       a  US-  nXdS'   UR                  " S
SUS   0UD6  g	)zW
Adjust stack when entering an exception handler to match expectation
by the bytecode.
r2   r   r      r   r   rj   r   Nr   )r   r   r   r   )r<   r   r   rk   r   expected_depthextra_stacks          r)   r    TraceRunner._adjust_except_stack`  s    
 $$U+!!&)""."#4F6N,1K%w

.fUm.v.r(   c                 &    UR                  U5        g r9   rw   r   s      r)   op_NOPTraceRunner.op_NOPt      Tr(   c                 &    UR                  U5        g r9   r  r   s      r)   	op_RESUMETraceRunner.op_RESUMEw  r  r(   c                 &    UR                  U5        g r9   r  r   s      r)   op_CACHETraceRunner.op_CACHEz  r  r(   c                 &    UR                  U5        g r9   r  r   s      r)   
op_PRECALLTraceRunner.op_PRECALL}  r  r(   c                 d    UR                  UR                  5       5        UR                  U5        g r9   )push	make_nullrw   r   s      r)   op_PUSH_NULLTraceRunner.op_PUSH_NULL  s!    

5??$%Tr(   c                 d    UR                  UR                  5       5        UR                  U5        g r9   )r*  	make_temprw   r   s      r)   op_RETURN_GENERATORTraceRunner.op_RETURN_GENERATOR  s#     	

5??$%Tr(   r   c                     [         S:X  d   eUR                  5       nUR                  5       nUR                  5       nUR                  X#XTS9  UR	                  U5        g )Nr   r=   resstrvar)r   r  r/  rw   r*  )r<   r   r   r=   r6  r5  s         r)   op_FORMAT_SIMPLETraceRunner.op_FORMAT_SIMPLE  sN    '''IIKE__&F//#CLLLCJJsOr(   c                    UR                   S:w  a%  Sn[        UU R                  UR                  5      S9eUR	                  5       nUR                  5       nUR                  5       nUR                  X$XeS9  UR                  U5        g)a  
FORMAT_VALUE(flags): flags argument specifies format spec which is
not supported yet. Currently, we just call str() on the value.
Pops a value from stack and pushes results back.
Required for supporting f-strings.
https://docs.python.org/3/library/dis.html#opcode-FORMAT_VALUE
r   z*format spec in f-strings not supported yetr  r4  N)argr   r  r  r  r/  rw   r*  )r<   r   r   r   r=   r6  r5  s          r)   op_FORMAT_VALUETraceRunner.op_FORMAT_VALUE  su     88q=>C*3/3/A/A$++/NP P		"ooTC?

3r(   c           	      t   UR                   n[        [        [        U5       Vs/ s H  oAR	                  5       PM     sn5      5      nUS:X  a  UR                  5       /nO+[        US-
  5       Vs/ s H  oAR                  5       PM     nnUR                  X%US9  UR                  US   5        gs  snf s  snf )z
BUILD_STRING(count): Concatenates count strings from the stack and
pushes the resulting string onto the stack.
Required for supporting f-strings.
https://docs.python.org/3/library/dis.html#opcode-BUILD_STRING
r   r  )stringstmpsr  Nr:  r   reversedranger  r/  rw   r*  )r<   r   r   count_r>  r?  s          r)   op_BUILD_STRINGTraceRunner.op_BUILD_STRING  s     xeEl Cll CDEA:OO%&D/4UQY/?@/?!OO%/?D@T6

48 !D
 As   B00B5c                 $    UR                  5         g r9   r  r   s      r)   
op_POP_TOPTraceRunner.op_POP_TOP  s    		r(   c                     UR                  5       nUR                  5       nUR                  X$US9  UR                  U5        g )N)valr5  )r/  r  rw   r*  )r<   r   r   r5  toss        r)   
op_TO_BOOLTraceRunner.op_TO_BOOL  s4    //#C))+CLLCL0JJsOr(   r   c                     UR                  5       nUR                  S-	  nUR                  X$US9  UR                  U5        UR                  S-  (       a   UR                  UR	                  5       5        g g Nr  )idxr5  r/  r:  rw   r*  r+  r<   r   r   r5  rR  s        r)   op_LOAD_GLOBALTraceRunner.op_LOAD_GLOBAL  sY    //#C((a-CLLCL0JJsOxx!|

5??,- r(   r-   r   c                     UR                  5       nUR                  S-	  nUR                  X$US9  UR                  S-  (       a  UR                  UR	                  5       5        UR                  U5        g rQ  rS  rT  s        r)   rU  rV    sT    //#C((a-CLLCL0xx!|

5??,-JJsOr(   r   c                 d    UR                  5       nUR                  X#S9  UR                  U5        g Nr5  r/  rw   r*  r<   r   r   r5  s       r)   rU  rV    s'    //#CLLL'JJsOr(   c                 &    UR                  U5        g r9   r  r   s      r)   op_COPY_FREE_VARSTraceRunner.op_COPY_FREE_VARS  r  r(   c                 &    UR                  U5        g r9   r  r   s      r)   op_MAKE_CELLTraceRunner.op_MAKE_CELL  r  r(   c                 d    UR                  5       nUR                  X#S9  UR                  U5        g rZ  r\  r]  s       r)   op_LOAD_DEREFTraceRunner.op_LOAD_DEREF  '    ooT#

3r(   c                     UR                  S5      SUR                   3-   nUR                  U5        UR                  X#S9  g )Nconst.r[  )r/  r:  r*  rw   r]  s       r)   op_LOAD_CONSTTraceRunner.op_LOAD_CONST  s8    oog&1TXXJ7

3T#r(   c                    UR                  5       nUR                  5       n[        S;   aE  UR                  U5        UR                  S-  (       a  UR                  UR                  5       5        Oz[        S;   aE  UR                  S-  (       a  UR                  UR                  5       5        UR                  U5        O+[        S;   a  UR                  U5        O[        [        5      eUR                  X#US9  g )Nr2  r  r   r*   itemr5  )r  r/  r   r*  r:  r+  r   rw   )r<   r   r   rp  r5  s        r)   op_LOAD_ATTRTraceRunner.op_LOAD_ATTR  s    yy{oo
"JJsOxx!|

5??,-*$xx!|

5??,-JJsO,,JJsO%i00T#.r(   c                 8   [         S::  d   e[         S;   a   UR                  U5      nOUR                  U5      nUR                  U5      n	UR                  X)S9  UR                  U	5        g ! [         a    UR                  n[	        UR
                  5      n[	        UR                  5      n[	        UR                  5      nXv-   nSUR                  U-
  s=::  a  U:  d   e   eUR                  5       n	UR                  X)SS9  UR                  U	5         g f = f)Nr   r2  r   T)r5  as_load_derefr[  )r   get_varname
IndexErrorre   lenco_varnamesco_freevarsco_cellvarsr:  r/  rw   r*  )
r<   r   r   namebcnum_varnamesnum_freevarsnum_cellvarsmax_fast_localr5  s
             r)   op_LOAD_FASTTraceRunner.op_LOAD_FAST  s    G####((.$ $$T*Dood#T#

3)   __"2>>2"2>>2"2>>2!-!<DHH|3DnDDDDDoo'T$?

3s   A- -B)DDc                    UR                   nUS-	  nUS-  nUR                  U5      nUR                  U5      nUR                  U5      nUR                  U5      n	UR                  X(U	S9  UR	                  U5        UR	                  U	5        g )N      )res1res2)r:  get_varname_by_argr/  rw   r*  )
r<   r   r   opargoparg1oparg2name1name2r  r  s
             r)   op_LOAD_FAST_LOAD_FAST"TraceRunner.op_LOAD_FAST_LOAD_FAST#  s    HHEaZFRZF,,V4E,,V4E??5)D??5)DLLtL4JJtJJtr(   c                     UR                   nUS-  nUR                  5       nUR                  U5      nUR                  U5      nUR	                  X%US9  UR                  U5        g )Nr  )store_valueload_res)r:  r  r  r/  rw   r*  )r<   r   r   r  r  r  	load_namer  s           r)   op_STORE_FAST_LOAD_FAST#TraceRunner.op_STORE_FAST_LOAD_FAST/  sY    HHERZF))+K008Iy1HLLLJJJx r(   c                 d    UR                  5       nUR                  5       nUR                  X#US9  g )N)value1value2r  rw   )r<   r   r   r  r  s        r)   op_STORE_FAST_STORE_FAST$TraceRunner.op_STORE_FAST_STORE_FAST9  s(    YY[FYY[FLLVL<r(   r+   r-   r   r   r*   c                 &    UR                  U5        g r9   r  r   s      r)   op_DELETE_FASTTraceRunner.op_DELETE_FASTK  r  r(   c                 B    UR                  5       nUR                  X#S9  g )N)r   r  )r<   r   r   r   s       r)   op_DELETE_ATTRTraceRunner.op_DELETE_ATTRN  s    T)r(   c                 d    UR                  5       nUR                  5       nUR                  X#US9  g )N)r   r=   r  )r<   r   r   r   r=   s        r)   op_STORE_ATTRTraceRunner.op_STORE_ATTRR  s(    		T6r(   c                 B    UR                  5       nUR                  X#S9  g N)r=   r  r<   r   r   r=   s       r)   op_STORE_DEREFTraceRunner.op_STORE_DEREFW      		T'r(   c                 B    UR                  5       nUR                  X#S9  g r  r  r  s       r)   op_STORE_FASTTraceRunner.op_STORE_FAST[  r  r(   c           
         UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUUS9  UR                  U5        g)z
TOS = TOS1[TOS:]
)basestartr5  slicevarindexvarnonevarNr  r/  rw   r*  	r<   r   r   rM  tos1r5  r  r  r  s	            r)   
op_SLICE_1TraceRunner.op_SLICE_1_  s}     iikyy{oo??$??$//# 	 	
 	

3r(   c           
         UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUUS9  UR                  U5        g)z
TOS = TOS1[:TOS]
)r  stopr5  r  r  r  Nr  r  s	            r)   
op_SLICE_2TraceRunner.op_SLICE_2t  s}     iikyy{oo??$??$//# 	 	
 	

3r(   c           
         UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUUS9  UR                  U5        g)z
TOS = TOS2[TOS1:TOS]
)r  r  r  r5  r  r  Nr  )	r<   r   r   rM  r  tos2r5  r  r  s	            r)   
op_SLICE_3TraceRunner.op_SLICE_3  s|     iikyy{yy{oo??$??$ 	 	
 	

3r(   c           	          UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUS9  g)z
TOS[:] = TOS1
)r  r=   r  r  r  Nr  r/  rw   )r<   r   r   rM  r=   r  r  r  s           r)   op_STORE_SLICE_0TraceRunner.op_STORE_SLICE_0  sa     iik		??$??$//# 	 	
r(   c           
          UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUUS9  g)z
TOS1[TOS:] = TOS2
)r  r  r  r=   r  r  Nr  	r<   r   r   rM  r  r=   r  r  r  s	            r)   op_STORE_SLICE_1TraceRunner.op_STORE_SLICE_1  so     iikyy{		??$??$//# 	 	
r(   c           
          UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUUS9  g)z
TOS1[:TOS] = TOS2
)r  r  r=   r  r  r  Nr  r  s	            r)   op_STORE_SLICE_2TraceRunner.op_STORE_SLICE_2  so     iikyy{		??$??$//# 	 	
r(   c           
          UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUUS9  g)z
TOS2[TOS1:TOS] = TOS3
)r  r  r  r=   r  r  Nr  )	r<   r   r   rM  r  r  r=   r  r  s	            r)   op_STORE_SLICE_3TraceRunner.op_STORE_SLICE_3  sn     iikyy{yy{		??$??$ 	 	
r(   c                     UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  X#XEUS9  g)z
del TOS[:]
)r  r  r  r  Nr  )r<   r   r   rM  r  r  r  s          r)   op_DELETE_SLICE_0TraceRunner.op_DELETE_SLICE_0  sL     iik??$??$//#X 	 	
r(   c           	          UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUS9  g)z
del TOS1[TOS:]
)r  r  r  r  r  Nr  r<   r   r   rM  r  r  r  r  s           r)   op_DELETE_SLICE_1TraceRunner.op_DELETE_SLICE_1  sa     iikyy{??$??$//# 	 	
r(   c           	          UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  UUUUUUS9  g)z
del TOS1[:TOS]
)r  r  r  r  r  Nr  r  s           r)   op_DELETE_SLICE_2TraceRunner.op_DELETE_SLICE_2  sa     iikyy{??$??$//# 	 	
r(   c           	          UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  X%XCUUS9  g)z
del TOS2[TOS1:TOS]
)r  r  r  r  r  Nr  )r<   r   r   rM  r  r  r  r  s           r)   op_DELETE_SLICE_3TraceRunner.op_DELETE_SLICE_3  sX     iikyy{yy{??$??$4H 	 	
r(   c           	         UR                   nUS:X  a'  UR                  5       nUR                  5       nUnUnSnOHUS:X  a7  UR                  5       nUR                  5       nUR                  5       n	U	nUnUnO[        S5      eUR                  5       n
UR                  5       nUR	                  X&XxXS9  UR                  U5        g)z,
slice(TOS1, TOS) or slice(TOS2, TOS1, TOS)
   Nr   unreachable)r  r  stepr5  r  )r:  r  	Exceptionr/  rw   r*  )r<   r   r   argcrM  r  r  r  r  r  r  r5  s               r)   op_BUILD_SLICETraceRunner.op_BUILD_SLICE+  s     xx19))+C99;DEDDQY))+C99;D99;DEDDM**??$ooD 	 	
 	

3r(   c           
      
   UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  X$X5UXS9  UR                  U5        g )N)r  r   	containerr5  r  temp_resr  )	r<   r   r   r   r  r  r  r5  r  s	            r)   op_BINARY_SLICETraceRunner.op_BINARY_SLICEG  so    ))+CIIKE		I(H//#C(HLLsS!   JJsOr(   c           
          UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  X$X5UXS9  g )N)r  r   r  r=   r5  r  r  )	r<   r   r   r   r  r  r=   r  r5  s	            r)   op_STORE_SLICETraceRunner.op_STORE_SLICEY  sa    ))+CIIKE		IIIKE(H//#CLLsu  r(   c                     UR                  5       nUR                  X#S9  UR                  5       nUR                  nUR	                  US9  XE:w  a  UR	                  US9  g g )Npredr   )r  rw   get_jump_targetr   r   )r<   r   r   r  target_inst	next_insts         r)   _op_POP_JUMP_IFTraceRunner._op_POP_JUMP_IFj  s[    yy{T%**,II	 	

i
 #JJ+J& $r(   c                     UR                  5       nUR                  X#S9  UR                  UR                  SS9  UR                  UR	                  5       S9  g )Nr  r  rj   r   r   )get_tosrw   r   r   r  )r<   r   r   r  s       r)   _op_JUMP_IF_OR_POPTraceRunner._op_JUMP_IF_OR_POP  sF    }}T%

diia
(

d**,
-r(   c                 &    U R                  X5        g r9   r  r   s      r)   op_POP_JUMP_FORWARD_IF_NONE'TraceRunner.op_POP_JUMP_FORWARD_IF_NONE      U)r(   c                 &    U R                  X5        g r9   r  r   s      r)   op_POP_JUMP_FORWARD_IF_NOT_NONE+TraceRunner.op_POP_JUMP_FORWARD_IF_NOT_NONE  r  r(   c                 &    U R                  X5        g r9   r  r   s      r)   op_POP_JUMP_BACKWARD_IF_NONE(TraceRunner.op_POP_JUMP_BACKWARD_IF_NONE  r  r(   c                 &    U R                  X5        g r9   r  r   s      r)    op_POP_JUMP_BACKWARD_IF_NOT_NONE,TraceRunner.op_POP_JUMP_BACKWARD_IF_NOT_NONE  r  r(   c                 &    U R                  X5        g r9   r  r   s      r)   op_POP_JUMP_FORWARD_IF_FALSE(TraceRunner.op_POP_JUMP_FORWARD_IF_FALSE  r  r(   c                 &    U R                  X5        g r9   r  r   s      r)   op_POP_JUMP_FORWARD_IF_TRUE'TraceRunner.op_POP_JUMP_FORWARD_IF_TRUE  r  r(   c                 &    U R                  X5        g r9   r  r   s      r)   op_POP_JUMP_BACKWARD_IF_FALSE)TraceRunner.op_POP_JUMP_BACKWARD_IF_FALSE  r  r(   c                 &    U R                  X5        g r9   r  r   s      r)   op_POP_JUMP_BACKWARD_IF_TRUE(TraceRunner.op_POP_JUMP_BACKWARD_IF_TRUE  r  r(   c                 `    UR                  U5        UR                  UR                  5       S9  g Nr   rw   r   r  r   s      r)   op_JUMP_FORWARDTraceRunner.op_JUMP_FORWARD  %    T

d**,
-r(   c                 `    UR                  U5        UR                  UR                  5       S9  g r  r  r   s      r)   op_JUMP_BACKWARDTraceRunner.op_JUMP_BACKWARD  r  r(   c                 `    UR                  U5        UR                  UR                  5       S9  g r  r  r   s      r)   op_JUMP_ABSOLUTETraceRunner.op_JUMP_ABSOLUTE  r  r(   c                     UR                  S5      S   nUR                  X#S9  UR                  5         UR                  US9  g )Nr3   r   r   r   )r   rw   	pop_blockr   )r<   r   r   r   s       r)   op_BREAK_LOOPTraceRunner.op_BREAK_LOOP  s=    !!&)%0T#

c
r(   c                 |    UR                  X!R                  5       UR                  5       S9  UR                  5         g )Nretvalcastval)rw   r  r/  	terminater   s      r)   op_RETURN_VALUETraceRunner.op_RETURN_VALUE  s)    T))+u7HIr(   c                     UR                  S5      nUR                  X#UR                  5       S9  UR                  5         g )Nri  r%  )r/  rw   r(  r]  s       r)   op_RETURN_CONSTTraceRunner.op_RETURN_CONST  s1    //'*CLL5??3DLEOOr(   c                     UR                  5       nUR                  5       nUR                  X#US9  UR                  U5        g N)r=   r5  r  r<   r   r   rL  r5  s        r)   op_YIELD_VALUETraceRunner.op_YIELD_VALUE  4    iikooT#.

3r(   r   c                 ~   UR                   S:X  a;  S nUR                  5       (       a#  [        SU R                  UR                  5      S9eO,UR                   S:X  a  UR                  5       nO[        S5      eUR                  X#S9  UR                  5       (       a  U R                  U5        g UR                  5         g )Nr   4The re-raising of an exception is not yet supported.r  r  )Multiple argument raise is not supported.exc)
r:  r   r   r  r  r  
ValueErrorrw   r   r(  r<   r   r   r8  s       r)   op_RAISE_VARARGSTraceRunner.op_RAISE_VARARGS  s    xx1} ''))2N ..t{{;  *
 Qiik !LMMLLL'##%%))%0!r(   c                 r   [        UR                  S5      S LUR                  S5      S L/5      nUR                  S:X  a-  S nU(       a#  [        SU R	                  UR
                  5      S9eO,UR                  S:X  a  UR                  5       nO[        S5      eUR                  X$S9  UR                  5         g )	Nr5   r6   r   r5  r  r  r6  r7  )
anyr   r:  r   r  r  r  r9  rw   r(  )r<   r   r   in_exc_blockr8  s        r)   r;  r<    s    ##H-T9##I.d:  L xx1}2N ..t{{;   
 Qiik !LMMLLL'OOr(   c                     / n[        [        5       H5  nUR                  5       nUR                  U5        UR	                  U5        M7     UR                  X#S9  g )N)temps)rB  r   r/  rw   r*  )r<   r   r   rA  itmps         r)   op_BEGIN_FINALLYTraceRunner.op_BEGIN_FINALLY  sJ    +,A//#CLLJJsO - 	T'r(   c                 L    UR                  5       nUR                  US   5        g )Nr   )r!  reset_stackr<   r   r   blks       r)   op_END_FINALLYTraceRunner.op_END_FINALLY  s!    oo#m,-r(   c                 $    UR                  5         g r9   rH  r   s      r)   
op_END_FORTraceRunner.op_END_FOR      IIKr(   rn  c                 D    UR                  5         UR                  5         g r9   rH  r   s      r)   rM  rN    s    IIKIIKr(   c                 n    UR                   S:w  a%  Sn[        UU R                  UR                  5      S9eg )Nr   zGUnsupported use of a bytecode related to try..finally or a with-contextr  )r:  r   r  r  )r<   r   r   r   s       r)   op_POP_FINALLYTraceRunner.op_POP_FINALLY  s<    88q=(C*3/3/A/A$++/NP P r(   c                     g r9   r   r   s      r)   op_CALL_FINALLYTraceRunner.op_CALL_FINALLY  s    r(   c                 $    UR                  5         g r9   )r(  r   s      r)   op_WITH_EXCEPT_START TraceRunner.op_WITH_EXCEPT_START  s    r(   c                 &    UR                  U5        g r9   r  r   s      r)   op_WITH_CLEANUP_START!TraceRunner.op_WITH_CLEANUP_START      Tr(   c                 &    UR                  U5        g r9   r  r   s      r)   op_WITH_CLEANUP_FINISH"TraceRunner.op_WITH_CLEANUP_FINISH!  r]  r(   c                 ^    UR                  UR                  SUR                  5       S95        g )Nr3   r   r   )
push_blockr   r  r   s      r)   op_SETUP_LOOPTraceRunner.op_SETUP_LOOP%  s2    ((*  	
r(   c                 .   UR                  5       nUR                  5       nUR                  SS9nUR                  U5        UR                  U5        UR                  nUR	                  UR
                  5      nU/nUR                   H0  n	U	R                  UR                  :X  d  M  UR                  U	5        M2     [        S U 5       5      n
UR                  X#XZS9  UR                  UR                  SU
S95        UR                  UR
                  S9  g )Nsetup_with_exitfnprefixc              3   8   #    U  H  oR                   v   M     g 7fr9   r   ).0r   s     r)   	<genexpr>-TraceRunner.op_BEFORE_WITH.<locals>.<genexpr>@  s     -9R&&9s   )contextmanagerexitfnr   r4   rb  r   )r  r/  r*  re   find_exception_entryr   exception_entriesr   rw   maxrc  r   r   )r<   r   r   cmyieldedro  r|  ehhead	ehrelatedr   r   s              r)   op_BEFORE_WITHTraceRunner.op_BEFORE_WITH.  s    YY[//#(;<

6

7 __((3H	&&ByyFMM)  $ ' -9--TVE  	
 	

dii
 r(   c                 R   UR                  5       nUR                  5       nUR                  SS9nUR                  X#US9  UR                  U5        UR                  U5        UR	                  UR                  SUR                  5       S95        UR                  UR                  S9  g )Nrg  rh  )rn  ro  r4   rb  r   )	r  r/  rw   r*  rc  r   r  r   r   )r<   r   r   rs  rt  ro  s         r)   op_SETUP_WITHTraceRunner.op_SETUP_WITHL  s    YY[//#(;<TV<

6

7((*  	
 	

dii
 r(   c           
      f    UR                  US SS9nUR                  UUR                  SUSUS9S9  g )NF)r   r   rG  r2   )r   r   rG  r   r   )r   r   )r<   r   r   r   r   handler_blocks         r)   
_setup_tryTraceRunner._setup_try_  sW     (( ) 
 	

((!%	 )  	 	
r(   c                     UR                  5       nUR                  UR                  S5      5        UR                  U5        g )N	exception)r  r*  r/  )r<   r   r   rM  s       r)   op_PUSH_EXC_INFOTraceRunner.op_PUSH_EXC_INFOs  s-    iik

5??;/0

3r(   c                 x    UR                  U5        U R                  SXR                  UR                  5       S9  g )Nr6   )r   r   )rw   r~  r   r  r   s      r)   op_SETUP_FINALLYTraceRunner.op_SETUP_FINALLYx  s3    Tu99$2F2F2H 	 	
r(   c                 $    UR                  5         g r9   rH  r   s      r)   op_POP_EXCEPTTraceRunner.op_POP_EXCEPT  rO  r(   c                 B   UR                  5       nUS   [        S5      [        S5      1;  a)  [        SUS    3U R                  UR                  5      S9eUR                  5         UR                  5         UR                  5         UR                  UR                  S9  g )Nr   r5   r6   z$POP_EXCEPT got an unexpected block: r  r   )r!  r0   r   r  r  r  r   r   rH  s       r)   r  r    s    //#C6{9X#6	)8L"MM.:3v;-H**4;;7  IIKIIKIIKJJ$))J$r(   c                     UR                  5       nUS   [        S5      :X  a  UR                  USS9  O"US   [        S5      :X  a  UR                  USS9  UR                  UR                  S9  g )Nr   r2   try)r   r4   withr   )r!  r0   rw   r   r   rH  s       r)   op_POP_BLOCKTraceRunner.op_POP_BLOCK  sb    oov;)E**LLEL*[If--LLFL+

dii
 r(   c                     UR                  5       nUR                  5       nUR                  5       nUR                  X#XES9  UR                  U5        g )N)indexr   r5  r  )r<   r   r   r  r   r5  s         r)   op_BINARY_SUBSCRTraceRunner.op_BINARY_SUBSCR  s?    		ooTv?

3r(   c                     UR                  5       nUR                  5       nUR                  5       nUR                  X$X5S9  g )N)r   r  r=   r  )r<   r   r   r  r   r=   s         r)   op_STORE_SUBSCRTraceRunner.op_STORE_SUBSCR  s3    				TCr(   c                 d    UR                  5       nUR                  5       nUR                  X$US9  g )N)r   r  r  )r<   r   r   r  r   s        r)   op_DELETE_SUBSCRTraceRunner.op_DELETE_SUBSCR  s(    		T6r(   c           	      0   UR                   n[        [        [        U5       Vs/ s H  oAR	                  5       PM     sn5      5      n[
        S:X  a8  UR	                  5       nUR	                  5       n[        U5      (       d  U/UQnS nOT[
        S:  aJ  UR	                  5       n	UR	                  5       n
[        U
5      (       a  U	nOU
nU	/UQnUR                  5       nUR                  5       nUR                  UWUWUS9  UR                  U5        g s  snf )Nr   funcargskw_namesr5  )r:  r   rA  rB  r  r   r  pop_kw_namesr/  rw   r*  )r<   r   r   nargrD  r  null_or_selfcallabler  callable_or_firstargnull_or_callabler5  s               r)   op_CALLTraceRunner.op_CALL  s    xxH5;?;aiik;?@A 99;Lyy{H$\22$,t,H #(99; $yy{ !122/+,4t4))+HooTthCP

3) @s   Dc                 :    UR                  UR                  5        g r9   )set_kw_namesr:  r   s      r)   op_KW_NAMESTraceRunner.op_KW_NAMES  s    488$r(   c           	         UR                   n[        [        [        U5       Vs/ s H  oAR	                  5       PM     sn5      5      nUR	                  5       nUR                  5       nUR                  X&XWS9  UR                  U5        g s  snf )N)r  r  r5  r@  )r<   r   r   r  rD  r  r  r5  s           r)   op_CALL_FUNCTIONTraceRunner.op_CALL_FUNCTION  si    xxH5;?;aiik;?@Ayy{ooT49

3 @s   B
c           	      @   UR                   nUR                  5       n[        [        [	        U5       Vs/ s H  oQR                  5       PM     sn5      5      nUR                  5       nUR                  5       nUR                  X'XdUS9  UR                  U5        g s  snf )N)r  r  namesr5  )r:  r  r   rA  rB  r/  rw   r*  )	r<   r   r   r  r  rD  r  r  r5  s	            r)   op_CALL_FUNCTION_KWTraceRunner.op_CALL_FUNCTION_KW  sv    xx		H5;?;aiik;?@Ayy{ooT4#F

3 @s   Bc           	         UR                   nUR                  5       n[        [        [	        U5       Vs/ s H  oQR                  5       PM     sn5      5      nUR                  5       nUR                  5       n[        U5      (       d  U/UQnUR                  5       n	UR                  X(XdU	S9  UR                  U	5        g s  snf )Nr  )	r:  r  r   rA  rB  r  r/  rw   r*  )
r<   r   r   r  r  rD  r  null_or_firstargr  r5  s
             r)   
op_CALL_KWTraceRunner.op_CALL_KW  s    88Dyy{HuT{!C{!))+{!CDED$yy{yy{H$%566(040//#CLL4   "JJsO "Ds   C c                    UR                   S-  (       a  UR                  5       nOS nUR                  5       nUR                  5         UR                  5       nUR                  5       nUR                  X%XCUS9  UR	                  U5        g )Nr  r  varargvarkwargr5  )r:  r  r/  rw   r*  r<   r   r   r  r  r  r5  s          r)   op_CALL_FUNCTION_EXTraceRunner.op_CALL_FUNCTION_EX  sk    xx!| 99;YY[FIIK99;D//#CLL   "JJsOr(   c                    UR                   S-  (       a  UR                  5       nOS nUR                  5       nUR                  5       n[        S;   a0  [        UR	                  S5      5      (       a  UR                  5         O[        S;   a  O[        [        5      eUR                  5       nUR                  X%XCUS9  UR                  U5        g )Nr  rW  r   r  )	r:  r  r   r  peekr   r/  rw   r*  r  s          r)   r  r    s    xx!| 99;YY[F99;D..$UZZ]33IIKj())44//#CLL   "JJsOr(   c                 `   [        U5       Vs/ s H  oAR                  5       PM     nnUR                  5         [        U5       Vs/ s H  oAR                  5       PM     nnUR	                  X%US9  U H  nUR                  U5        M     U H  nUR                  U5        M     g s  snf s  snf )N)origduped)rB  r  reverser/  rw   r*  )r<   r   r   rC  rD  r  r  rL  s           r)   	_dup_topxTraceRunner._dup_topx  s    %*5\2\		\2 -2%L9Lq"L9TE2CJJsO CJJsO  3 :s   B&B+c                     [        UR                  5      nU[        R                  :X  a   UR                  X#S9  UR                  5         g U[        R                  :X  aB  UR                  5       nUR                  5       nUR                  X#XgS9  UR                  U5        g U[        R                  :X  aB  UR                  5       nUR                  5       nUR                  X#XS9  UR                  U5        g [        U5      e! [         a5    SUR                   S3nU R                  UR                  5      n[        XES9ef = f)Nzop_CALL_INTRINSIC_1()r  )operand)r  r=   r5  )r  
const_listr5  )r   r:  rJ   r  r  r   ci1opr$   rw   r(  r%   r  r/  r*  r&   r   )	r<   r   r   r  r   r  rL  r5  rM  s	            r)   op_CALL_INTRINSIC_1TraceRunner.op_CALL_INTRINSIC_1%  s   =2488<
 %===T3!E000iikoo'T#&  1

3E999iikoo'T(+  6

3)'22/  =,TXXJa8((5.s<<=s   D ?Ec                 x    UR                   nSUs=::  a  S::  d   S5       e   S5       eU R                  XU5        g )Nr  r   zInvalid DUP_TOPX count)r:  r  )r<   r   r   rC  s       r)   op_DUP_TOPXTraceRunner.op_DUP_TOPXH  s:    EQ8 888 88uE*r(   c                 $    U R                  XSS9  g )Nr  rC  r  r   s      r)   
op_DUP_TOPTraceRunner.op_DUP_TOPM      u!,r(   c                 $    U R                  XSS9  g )Nr  r  r  r   s      r)   op_DUP_TOP_TWOTraceRunner.op_DUP_TOP_TWOP  r  r(   c                 X    UR                  UR                  UR                  5      5        g r9   )r*  r  r:  r   s      r)   op_COPYTraceRunner.op_COPYS  s    

5::dhh'(r(   c                 :    UR                  UR                  5        g r9   )swapr:  r   s      r)   op_SWAPTraceRunner.op_SWAPV  s    

488r(   c                     UR                  5       nUR                  5       nUR                  U5        UR                  U5        g r9   r  r*  )r<   r   r   firstseconds        r)   
op_ROT_TWOTraceRunner.op_ROT_TWOY  s0    		

5

6r(   c                     UR                  5       nUR                  5       nUR                  5       nUR                  U5        UR                  U5        UR                  U5        g r9   r  )r<   r   r   r  r  thirds         r)   op_ROT_THREETraceRunner.op_ROT_THREE_  sG    				

5

5

6r(   c                    UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  U5        UR                  U5        UR                  U5        UR                  U5        g r9   r  )r<   r   r   r  r  r  forths          r)   op_ROT_FOURTraceRunner.op_ROT_FOURg  s^    						

5

5

5

6r(   c                    UR                   nUR                  5       n[        U5       Vs/ s H  oQR                  5       PM     nnUR                  5       nUR	                  X$XgS9  [        U5       H  nUR                  U5        M     g s  snf )N)iterablestorestupleobj)r:  r  rB  r/  rw   rA  r*  )	r<   r   r   rC  r  rD  r  r  sts	            r)   op_UNPACK_SEQUENCETraceRunner.op_UNPACK_SEQUENCEq  sn    99;-25\:\//#\:??$TVO6"BJJrN # ;s   B	c           	          UR                   n[        [        [        U5       Vs/ s H  oAR	                  5       PM     sn5      5      nUR                  5       nUR                  X%US9  UR                  U5        g s  snf N)r   r5  r@  )r<   r   r   rC  rD  r   tups          r)   op_BUILD_TUPLETraceRunner.op_BUILD_TUPLEz  ^    XE%LALqyy{LABCooTC0

3 B   A:c           	         [        [        [        UR                  5       Vs/ s H  o1R	                  5       PM     sn5      5      n[        [        U5      S-
  5       Vs/ s H  o1R                  5       PM     nn[        U5      S:H  nU(       a  UR                  5       /nUR                  X$XVS9  UR                  US   5        g s  snf s  snf )Nr  )tuplesrA  	is_assignr  )	r   rA  rB  r:  r  rw  r/  rw   r*  )r<   r   r   rD  r  rA  r  s          r)   _build_tuple_unpackTraceRunner._build_tuple_unpack  s    hU488_E_		_EFG,1#f+/,BC,Bq",BC K1$	__&(ETK

59  FCs   CC
c                 &    U R                  X5        g r9   r  r   s      r)   op_BUILD_TUPLE_UNPACK_WITH_CALL+TraceRunner.op_BUILD_TUPLE_UNPACK_WITH_CALL  s      -r(   c                 &    U R                  X5        g r9   r  r   s      r)   op_BUILD_TUPLE_UNPACK!TraceRunner.op_BUILD_TUPLE_UNPACK  s      -r(   c                     UR                  5       nUR                  5       nUR                  X#US9  UR                  U5        g )N)r  r5  r  )r<   r   r   rM  r5  s        r)   op_LIST_TO_TUPLETraceRunner.op_LIST_TO_TUPLE  s6     iikooTs3

3r(   c           	         UR                  5       n[        [        [        UR                  5       Vs/ s H  oAR                  5       PM     sn5      5      n[        UR                  5       Vs/ s H  oAR                  5       PM     nnUR                  5       nUR                  X#XeUS9  UR                  U5        g s  snf s  snf )N)keyskeytmpsvaluesr5  )r  r   rA  rB  r:  r/  rw   r*  )r<   r   r   r  rD  valsr  r5  s           r)   op_BUILD_CONST_KEY_MAP"TraceRunner.op_BUILD_CONST_KEY_MAP  s    yy{H5?C?aiik?CDE.3DHHo>o??$o>ooTgL

3	 D>s   B;-C c           	          UR                   n[        [        [        U5       Vs/ s H  oAR	                  5       PM     sn5      5      nUR                  5       nUR                  X%US9  UR                  U5        g s  snf r  r@  )r<   r   r   rC  rD  r   lsts          r)   op_BUILD_LISTTraceRunner.op_BUILD_LIST  r  r  c                     UR                  5       nUR                  nUR                  U5      nUR                  5       nUR                  5       nUR	                  X%X6US9  g )N)r   r=   	appendvarr5  r  r:  r  r/  rw   )r<   r   r   r=   r  r   r  r5  s           r)   op_LIST_APPENDTraceRunner.op_LIST_APPEND  T    		E"OO%	ooT 	 	r(   c                     UR                  5       nUR                  nUR                  U5      nUR                  5       nUR                  5       nUR	                  X%X6US9  g )N)r   r=   	extendvarr5  r  )r<   r   r   r=   r  r   r  r5  s           r)   op_LIST_EXTENDTraceRunner.op_LIST_EXTEND  r  r(   c                    UR                  5       nUR                  n/ n[        U5       H4  nUR                  5       UR                  5       pUR	                  X45        M6     UR	                  X%S S S2   XCS9  UR                  U5        g )Nr  )r   sizer5  )r/  r:  rB  r  rw   r*  )	r<   r   r   dctrC  r   rB  vks	            r)   op_BUILD_MAPTraceRunner.op_BUILD_MAP  sp    oouA99;		qLL!   	Ttt5B

3r(   c           	          UR                  5       nUR                  5       nXCpeUR                  nUR                  U5      nUR                  5       n	UR                  5       n
UR	                  X(XVXS9  g )N)r   rq   r=   
setitemvarr5  r  )r<   r   r   TOSTOS1rq   r=   r  r   r'  r5  s              r)   
op_MAP_ADDTraceRunner.op_MAP_ADD  sd    iikyy{UE"__&
ooTc * 	 	5r(   c           	          UR                   n[        [        [        U5       Vs/ s H  oAR	                  5       PM     sn5      5      nUR                  5       nUR                  X%US9  UR                  U5        g s  snf r  r@  )r<   r   r   rC  rD  r   r5  s          r)   op_BUILD_SETTraceRunner.op_BUILD_SET  s^    XE%LALqyy{LABCooTC0

3 Br  c                     UR                  5       nUR                  nUR                  U5      nUR                  5       nUR                  5       nUR	                  X%X6US9  g N)r   r=   	updatevarr5  r  r<   r   r   r=   r  r   r1  r5  s           r)   op_SET_UPDATETraceRunner.op_SET_UPDATE  r  r(   c                     UR                  5       nUR                  nUR                  U5      nUR                  5       nUR                  5       nUR	                  X%X6US9  g r0  r  r2  s           r)   op_DICT_UPDATETraceRunner.op_DICT_UPDATE  r  r(   c                     UR                  5       nUR                  5       nUR                  X#US9  UR                  U5        g r/  r  )r<   r   r   r=   r5  s        r)   op_GET_ITERTraceRunner.op_GET_ITER  s4    		ooTC0

3r(   c                    UR                  5       nUR                  5       nUR                  5       nUR                  5       nUR                  X#XEUS9  UR                  U5        UR	                  5       n[
        S;   a  UR                  US9  O*[
        S;   a  UR                  USS9  O[        [
        5      eUR                  UR                  S9  g )N)iteratorpairindvalr  r   r   r*   r  r  )	r  r/  rw   r*  r  r   r   r   r   )r<   r   r   r<  r=  r>  r  r   s           r)   op_FOR_ITERTraceRunner.op_FOR_ITER  s    ==? " T4 	 	 

6""$** JJ#J,,JJ#AJ&%i00

dii
 r(   c                     g)a   Pops TOS. If TOS was not None, raises an exception. The kind
operand corresponds to the type of generator or coroutine and
determines the error message. The legal kinds are 0 for generator,
1 for coroutine, and 2 for async generator.

New in version 3.10.
Nr   r   s      r)   op_GEN_STARTTraceRunner.op_GEN_START
  s     	r(   c                    [         R                  UR                     S   nUR                  5       nUR                  5       n[        U   R
                  nUR                  SU 3S9nUR                  X#XTUS9  UR                  U5        g )Nr  binop_rh  )oplhsr   r5  )	dis_nb_opsr:  r  r	   r    r/  rw   r*  )r<   r   r   rF  r   rG  op_namer5  s           r)   op_BINARY_OPTraceRunner.op_BINARY_OP  ss    [["1%iikiik)"-66oovgY%7o8Tc<

3r(   c                     UR                  5       nUR                  5       nUR                  X#US9  UR                  U5        g r/  r  r0  s        r)   _unaryopTraceRunner._unaryop  r3  r(   c                     UR                  5       nUR                  5       nUR                  5       nUR                  X$X5S9  UR                  U5        g )N)rG  r   r5  r  )r<   r   r   r   rG  r5  s         r)   	_binaryopTraceRunner._binaryop)  s?    iikiikooT5

3r(   c                 b   [         S;   a  S nO*[         S;   a  UR                  5       nO[        [         5      eUR                  5       nS =n=n=p[         S;   a  UR                  b   eOUR                  S-  (       a  UR                  5       nUR                  S-  (       a  UR                  5       nUR                  S-  (       a  UR                  5       nUR                  S-  (       a  UR                  5       n	UR	                  5       n
UR                  UUUUUUU	U
S9  UR                  U
5        g )	Nr   r   r2     r  r  r  )r{  codeclosureannotations
kwdefaultsdefaultsr5  )r   r  r   r:  r/  rw   r*  )r<   r   r   MAKE_CLOSUREr{  rU  rV  rW  rX  rY  r5  s              r)   op_MAKE_FUNCTIONTraceRunner.op_MAKE_FUNCTIONT  s   33 D*$99;D%i00yy{8<<<+<
#88### xx#~))+xx#~#iikxx#~"YY[
xx#~ 99;oo#! 	 		
 	

3r(   c                    [         S;   d   eUR                  5       nUR                  5       nUR                  S:X  a  UR                  X4S9  OsUR                  S-  (       a  UR                  X4S9  OOUR                  S-  (       a  UR                  X4S9  O+UR                  S:X  a  UR                  X4S	9  O[	        S
5      eUR                  U5        g )Nr2  r  )rY  r  )rX  r  )rW  rT  )rV  r  )r   r  r:  set_function_attributeAssertionErrorr*  )r<   r   r   make_func_stackdatas        r)   op_SET_FUNCTION_ATTRIBUTE%TraceRunner.op_SET_FUNCTION_ATTRIBUTEy  s    K'''))+yy{88s? (((HXX^(((JXX^(((KXX_(((G //

?#r(   c                 $    U R                  XSS9  g )NT)rZ  )r[  r   s      r)   op_MAKE_CLOSURETraceRunner.op_MAKE_CLOSURE  s    e=r(   c                 d    UR                  5       nUR                  X#S9  UR                  U5        g rZ  r\  r]  s       r)   op_LOAD_CLOSURETraceRunner.op_LOAD_CLOSURE  rg  r(   c                 f    UR                  S5      nUR                  X#S9  UR                  U5        g )Nassertion_errorr[  r\  r]  s       r)   op_LOAD_ASSERTION_ERROR#TraceRunner.op_LOAD_ASSERTION_ERROR  s*    oo/0T#

3r(   c                     UR                  S5      nUR                  5       nUR                  5       nUR                  X#XES9  UR	                  U5        g )N	predicater  rM  r  )r/  r  r  rw   r*  r<   r   r   r  rM  r  s         r)   op_CHECK_EXC_MATCHTraceRunner.op_CHECK_EXC_MATCH  sB    {+iik}}T#9

4r(   c                     UR                  S5      nUR                  5       nUR                  5       nUR                  X#XES9  UR                  UR                  S9  UR                  UR                  5       S9  g )Nro  rp  r   )r/  r  rw   r   r   r  rq  s         r)   op_JUMP_IF_NOT_EXC_MATCH$TraceRunner.op_JUMP_IF_NOT_EXC_MATCH  sa     {+iikyy{T#9

dii
 

d**,
-r(   c                     UR                  5       nUR                  S:w  a  UR                  5         UR                  X#S9  UR                  5       (       a  U R	                  U5        g UR                  5         g )Nr   r7  )r  r:  rw   r   r   r(  r:  s       r)   
op_RERAISETraceRunner.op_RERAISE  sV    ))+Cxx1}		LLL'##%%))%0!r(   c                 b    UR                  5       nUR                  X#S9  UR                  5         g )Nr7  )r  rw   r(  r:  s       r)   rx  ry    s%    ))+CLLL'OOr(   )r-   c                     UR                  5       nUR                  5       nUR                  U5        UR                  5       nUR	                  X#US9  UR                  U5        g )Nro  )r  r+  r*  r/  rw   )r<   r   r   rp  extrar5  s         r)   op_LOAD_METHODTraceRunner.op_LOAD_METHOD  sL    99;DOO%EJJu//#CLLcL2JJsOr(   c                 &    U R                  X5        g r9   )rq  r   s      r)   r}  r~    s    e*r(   c                 &    U R                  X5        g r9   )r  r   s      r)   op_CALL_METHODTraceRunner.op_CALL_METHOD  s    e*r(   )rm   ry   rv   N)F)r    r!   r"   r#   rV   r>   r  r{   r   r  r!  r$  r'  r,  r0  r   r7  r;  rE  rI  rN  rU  r   r_  rb  re  rk  rq  r  r  r  r  op_LOAD_FAST_CHECKop_LOAD_FAST_AND_CLEARr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  op_POP_JUMP_IF_TRUEop_POP_JUMP_IF_FALSEop_POP_JUMP_IF_NONEop_POP_JUMP_IF_NOT_NONEr  op_JUMP_IF_FALSE_OR_POPop_JUMP_IF_TRUE_OR_POPr  r   r  r  r	  r  r  r  r  r  op_JUMP_BACKWARD_NO_INTERRUPTr  r"  r)  r,  r1  r;  rD  rJ  rM  rR  rU  rX  r[  r_  rd  rw  rz  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*  r-  r3  r6  r9  r?  rB  rK  rN  op_UNARY_NEGATIVEop_UNARY_POSITIVEop_UNARY_NOTop_UNARY_INVERTrQ  op_COMPARE_OPop_IS_OPop_CONTAINS_OPop_INPLACE_ADDop_INPLACE_SUBTRACTop_INPLACE_MULTIPLYop_INPLACE_DIVIDEop_INPLACE_TRUE_DIVIDEop_INPLACE_FLOOR_DIVIDEop_INPLACE_MODULOop_INPLACE_POWERop_INPLACE_MATRIX_MULTIPLYop_INPLACE_LSHIFTop_INPLACE_RSHIFTop_INPLACE_ANDop_INPLACE_ORop_INPLACE_XORop_BINARY_ADDop_BINARY_SUBTRACTop_BINARY_MULTIPLYop_BINARY_DIVIDEop_BINARY_TRUE_DIVIDEop_BINARY_FLOOR_DIVIDEop_BINARY_MODULOop_BINARY_POWERop_BINARY_MATRIX_MULTIPLYop_BINARY_LSHIFTop_BINARY_RSHIFTop_BINARY_ANDop_BINARY_ORop_BINARY_XORr[  rb  re  rh  rl  rr  ru  rx  r}  r  r'   r   r(   r)   rs   rs   :  s   
0P6/( J	$" J	 
W	J	. 
(	(	 
j	 	
 "),,
$/"6 J
		!	=
 
1	1!),,&&)!-	(	(!),,*7
((***
$
(
(
(

$
$
6 &&	 
(	(!),,&&	 
(	(!),,
' **&&-"1	(	(!),,. 1/********.. %5!. &&	 
(	(!),, //	"* 
j	 	& "),,(. J		j	 	 
(	(!),,P
!<!&
(

 //	 
j	 	% "),,!D7
0% J	 
1	1!),,J	  
1	1	* "),,
 &&	3< 
(	(!),,+
--)..		5!(	 ! LO MHNN##!&'! !*!!NMNM"" %& O )  MLM#J$*>

. //
	" 
j	 	 "),,
 &&	k	!	 
j	 	+ "),,+r(   rs   c                   P   \ rS rSrSrS,S jrS rS rS rS r	S r
\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rS rS rS rS-S jrS rS rS rS rS rS rS rS rS.S jrS r S r!S  r"S! r#S" r$S# r%S$\&4S% jr'S& r(S/S' jr)S( r*S) r+S* r,S+r-g)0_Statei  zState of the trace
    c                    Xl         X l        X l        X0l        / U l        [        U5      U l        [        U5      U l        / U l	        / U l
        / U l        SU l        0 U l        [        5       U l        [!        5       U l        [%        U5       HJ  nXe;   a  U R'                  S5      nOU R'                  S5      nX`R                  U'   U R)                  U5        ML     g)z
Parameters
----------
bytecode : numba.bytecode.ByteCode
    function bytecode
pc : int
    program counter
nstack : int
    stackdepth at entry
blockstack : Sequence[Dict]
    A sequence of dictionary denoting entries on the blockstack.
Fnull$r   N)re   _pc_initialr   _nstack_initialrz   tuple_blockstack_initialr   r  _temp_registers_insts	_outedges_terminatedr   r   r   r   r   rB  r/  r*  )r<   rg   rj   rk   rl   nullvalsrB  r   s           r)   r>   _State.__init__  s     "%#(#4 
+! 
(l%vA}nnW-nnU+JJsOIIcN r(   c                 N    SR                  U R                  U R                  5      $ )Nz&State(pc_initial={} nstack_initial={}))rK   r  r  rC   s    r)   rT   _State.__repr__  s&    7>>d22
 	
r(   c                 2    U R                   U R                  4$ r9   )r  r  rC   s    r)   get_identity_State.get_identity  s      $"6"677r(   c                 4    [        U R                  5       5      $ r9   )rA   r  rC   s    r)   rD   _State.__hash__	  s    D%%'((r(   c                 D    U R                  5       UR                  5       :  $ r9   r  rL   s     r)   rN   _State.__lt__  s      "U%7%7%999r(   c                 D    U R                  5       UR                  5       :H  $ r9   r  rL   s     r)   rQ   _State.__eq__  s      "e&8&8&:::r(   c                     U R                   $ )zMThe starting bytecode offset of this State.
The PC given to the constructor.
)r  rC   s    r)   ro   _State.pc_initial  s    
 r(   c                     U R                   $ )zYThe list of instructions information as a 2-tuple of
``(pc : int, register_map : Dict)``
)r  rC   s    r)   instructions_State.instructions  s    
 {{r(   c                     U R                   $ )zAThe list of outgoing edges.

Returns
-------
edges : List[State]
)r  rC   s    r)   r   _State.outgoing_edges   s     ~~r(   c                     U R                   $ )zsThe dictionary of outgoing phi nodes.

The keys are the name of the PHI nodes.
The values are the outgoing states.
)r   rC   s    r)   outgoing_phis_State.outgoing_phis*  s     """r(   c                     U R                   $ )z6A copy of the initial state of the blockstack
        )r  rC   s    r)   blockstack_initial_State.blockstack_initial3  s     '''r(   c                 ,    [        U R                  5      $ )z9The current size of the stack

Returns
-------
res : int
)rw  rz   rC   s    r)   r   _State.stack_depth9  s     4;;r(   c                 h    [        U R                  5       H  nUS   [        S5      :X  d  M  Us  $    g)z&Find the initial *try* block.
        r   r2   N)rA  r  r0   )r<   rI  s     r)   find_initial_try_block_State.find_initial_try_blockC  s/     D445C6{i..
 6r(   c                     U R                   $ r9   r  rC   s    r)   r|   _State.has_terminatedJ  s    r(   c                 4    U R                   U R                     $ r9   )re   r   rC   s    r)   r   _State.get_instM  s    ~~dhh''r(   c                 F    U R                  5       nUR                  U l        g r9   )r   r   r   r<   r   s     r)   r   _State.advance_pcP  s    }}99r(   c                 R   U(       dV  SR                  UU R                  U R                  5       R                  R	                  5       [        U R                  5      S9nO.SR                  UU R                  [        U R                  5      S9nU R                  R                  U5        U$ )Nz"${prefix}{offset}{opname}.{tempct})ri  r   r   tempctz${prefix}{offset}.{tempct})ri  r   r  )rK   r   r   r   lowerrw  r  rw   )r<   ri  r{  s      r)   r/  _State.make_tempT  s    7>>xx}}--3354//0	 ? D 066xx4//0 7 D 	##D)r(   c                     U R                   R                  UR                  U45        U =R                  [	        [        UR                  5       5      5      -  sl        g)zAppend new instN)r  rw   r   r   r   _flatten_inst_regsr  )r<   r   r   s      r)   rw   _State.appendf  s<    DKK0131&--/BCCr(   c                 $    U R                  S5      $ )Nr  )r  rC   s    r)   r  _State.get_tosk  s    yy|r(   c                 "    U R                   U*    $ )z-Return the k'th element on the stack
        rz   )r<   r#  s     r)   r  _State.peekn  s     {{A2r(   c                 :    U R                   R                  U5        g)zPush to stackN)rz   rw   )r<   rp  s     r)   r*  _State.pushs  s    4 r(   c                 6    U R                   R                  5       $ )zPop the stack)rz   r  rC   s    r)   r  
_State.popw  s    {{  r(   c                 >    U R                   nX!*    US   sUS'   X!* '   g)zSwap stack[idx] with the tosr  Nr  )r<   rR  ss      r)   r  _State.swap{  s&    KK4!B%"qwr(   c                 J    SU;   d   eU R                   R                  U5        g)z#Push a block to blockstack
        r   N)r  rw   )r<   synblks     r)   rc  _State.push_block  s&     &&&'r(   c                 N    U R                   SU U R                   US sU l         nU$ )zFReset the stack to the given stack depth.
Returning the popped items.
Nr  )r<   r   poppeds      r)   rG  _State.reset_stack  s-     #kk&514;;uv3FVr(   Nc                     [        U5      U[        U R                  5      S.nU(       a  [        U R                  5      US'   OSUS'   XES'   U$ )zMake a new block
        )r   r   r   r   Nr   )r0   rw  rz   )r<   r   r   rG  r   ds         r)   r   _State.make_block  sO     dOt{{+

 "4;;/Am#Am)r(   c                 b    U R                   R                  5       nU R                  US   5        U$ )z)Pop a block and unwind the stack
        r   )r  r  rG  r<   r   s     r)   r!  _State.pop_block  s0       "=)*r(   c                     U R                   R                  U5      nSUs=::  a  [        U R                   5      :  d   e   eU R                   SU U l         g)zSFind *blk* in the blockstack and remove it and all blocks above it
from the stack.
r   N)r  r  rw  )r<   rI  rR  s      r)   r   _State.pop_block_and_above  sS     $$S)C/#d..//////++DS1r(   c                 l    [        U5      n[        U R                  5       H  nUS   U:X  d  M  Us  $    gz1Find the first block that matches *kind*
        r   Nr0   rA  r  )r<   r   bss      r)   r   _State.get_top_block  s3     4++,B&zT!	 -r(   c                     U Vs1 s H  n[        U5      iM     nn[        U R                  5       H  nUS   U;   d  M  Us  $    gs  snf r  r  )r<   kindsr   r  s       r)   get_top_block_either_State.get_top_block_either  sG     .33UT4U34++,B&zU"	 - 4s   Ac                 (    U R                  S5      SL$ )zGReturns a boolean indicating if the top-block is a *try* block
        r2   N)r   rC   s    r)   r   _State.has_active_try  s     !!%(44r(   c                 8    U R                  UR                  5      $ )zBGet referenced variable name from the instruction's oparg
        )r  r:  r  s     r)   ru  _State.get_varname  s     &&txx00r(   r  c                 4    U R                   R                  U   $ )z4Get referenced variable name from the oparg
        )re   rx  )r<   r  s     r)   r  _State.get_varname_by_arg  s     ~~))%00r(   c                     SU l         g)z!Mark block as terminated
        TNr  rC   s    r)   r(  _State.terminate  s      r(   c           
         [        U R                  5      nU(       aB  SUs=::  a  [        U R                  5      ::  d   e   e[        U R                  5      U-
  nUSU nU(       a9  SU::  d   e[        U5       H"  nUR	                  U R                  5       5        M$     [        U R                  5      n[        S;   aJ  U(       aB  US   n	U	R                  S5      =(       d    U	S   n
X:  a  UR                  5         OO$U(       a  MB  O[        S;   a  O[        [        5      eU(       a  UR	                  U5        U R                  R	                  [        U[        U5      U[        U5      S95        U R                  5         g)	zFork the state
        r   Nr   r  r   r   r   )rj   stackr   rl   )r   rz   rw  rB  rw   r/  r  r   getr  r   r  Edger  r(  )r<   rj   r   r   r   r  rk   rB  rl   topr   s              r)   r   _State.fork  s>    T[[!0DKK 000000%,F'6NE::5\T^^-. " $**+
33 nggl+9s5z9NN$ * *$%i00k*duUZ(
 	 	r(   c                 6    U R                  U R                  S9  g)zSplit the state
        r   N)r   r   rC   s    r)   r   _State.split_new_block  s     			TXX	r(   c                    U R                   (       a   e/ nU R                   H  n[        U R                  UR                  [        UR                  5      UR                  [        UR                  5       VVs/ s H  u  p4[        U5      (       d  M  UPM     snnS9nUR                  U5        UR                  R                  5        H!  u  pcUR                  U   U R                   U'   M#     M     U$ s  snnf )z+Get states for each outgoing edges
        )rg   rj   rk   rl   r  )r   r  rr   re   rj   rw  r  rl   	enumerater  rw   r   r   )r<   retr   rB  r"  r   r   s          r)   r   _State.get_outgoing_states  s     &&&&NND4>>dgg!$TZZT__2;DJJ2G $=2G$!'8'; %&2G $=>E JJu++++-+/::a=##C( . # 
$=s   7C3C3c           	          U R                    Vs0 s H1  nUR                  [        UR                  UR                  * S 5      _M3     sn$ s  snf )zf
Returns
-------
Dict[int, int]
    where keys are the PC
    values are the edge-pushed stack values
N)r  rj   r  r  r   )r<   r   s     r)   get_outgoing_edgepushed_State.get_outgoing_edgepushed
  sL     !NN,*D tzz4::+,788*, 	, ,s   8A
)r  r  re   r  r  r  r   r   r  r   rz   r  r  r   )r   ) )TN)r   r   N).r    r!   r"   r#   rV   r>   rT   r  rD   rN   rQ   propertyro   r  r   r  r  r   r  r|   r   r   r/  rw   r  r  r*  r  r  rc  rG  r   r!  r   r   r  r   ru  intr  r(  r   r   r   r"  r'   r   r(   r)   r  r    s)   !F

8):;         # # ( (
     ($D

!!(
(25
1
1 1
 
#J
"
,r(   r  c                   L   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	rU =r$ )

StatePy311i  c                 4   > [         TU ]  " U0 UD6  S U l        g r9   )superr>   	_kw_namesr<   r  r   	__class__s      r)   r>   StatePy311.__init__  s    $)&)r(   c                 ,    U R                   nS U l         U$ r9   r+  )r<   outs     r)   r  StatePy311.pop_kw_names  s    nn
r(   c                 .    U R                   b   eXl         g r9   r0  )r<   rL  s     r)   r  StatePy311.set_kw_names!  s    ~~%%%r(   c                 T    U R                   nUR                  U R                  5      S L$ r9   re   rp  r   r<   r|  s     r)   r   StatePy311.is_in_exception%  s%    ^^&&txx0<<r(   c                 P    U R                   nUR                  U R                  5      $ r9   r6  r7  s     r)   r   StatePy311.get_exception)  s     ^^&&txx00r(   c                 R    U R                    H  nUS   [        S5      :X  d  M    g   g )Nr   r4   T)r  r0   )r<   ents     r)   r   StatePy311.in_with-  s&    ++C6{i// ,r(   c                      U R                  SS9$ )Nr  rh  )r/  rC   s    r)   r+  StatePy311.make_null2  s    ~~W~--r(   r0  )r    r!   r"   r#   r>   r  r  r   r   r   r+  r'   __classcell__r-  s   @r)   r(  r(    s+    
=1
. .r(   r(  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )
StatePy313i6  c                 N   > [         TU ]  " U0 UD6  [        [        5      U l        g r9   )r*  r>   r   r   _make_func_attrsr,  s      r)   r>   StatePy313.__init__7  s"    $)&) +D 1r(   c                 @    U R                   U   R                  U5        g r9   )rE  r   )r<   make_func_resr   s      r)   r^  !StatePy313.set_function_attribute;  s    m,33F;r(   c                      U R                   U   $ r9   rE  )r<   rH  s     r)   get_function_attributes"StatePy313.get_function_attributes>  s    $$]33r(   rK  )	r    r!   r"   r#   r>   r^  rL  r'   r@  rA  s   @r)   rC  rC  6  s    2<4 4r(   rC  r2  rW  r-   r  )rj   r  rl   r   c                   .    \ rS rSrSrS r\S 5       rSrg)AdaptDFAiO  z<Adapt Flow to the old DFA class expected by Interpreter
    c                     Xl         g r9   _flow)r<   flows     r)   r>   AdaptDFA.__init__R  s    
r(   c                 .    U R                   R                  $ r9   )rR  rf   rC   s    r)   infosAdaptDFA.infosU  s    zz%%%r(   rQ  N)	r    r!   r"   r#   rV   r>   r%  rV  r'   r   r(   r)   rO  rO  O  s      & &r(   rO  AdaptBlockInfoinstsr  rl   active_try_blockoutgoing_edgepushedc                 <  ^  U 4S jn[         S;   a   [        [        UT R                  5      5      nO/[         S;   a  [        T R                  5      nO[	        [         5      e[        UT R                  T R                  T R                  5       T R                  5       S9$ )Nc                    > U u  pTR                   U   nUR                  S:X  a#  UR                  TR                  US   5      5        X4$ )NMAKE_FUNCTIONr5  )re   r   r   rL  )	inst_pairr   ra  r   r   s       r)   process_function_attributes6adapt_state_infos.<locals>.process_function_attributesb  sG     v&;;/)KK55d5kBC|r(   r2  r  rY  )
r   r  mapr  r   rX  r  r  r  r"  )r   ra  rZ  s   `  r)   r   r   a  s     Kc5u7I7IJK	1	1e(()!),,))++557!99; r(   c              #      #    U  HQ  n[        U[        5      (       a  Uv   M  [        U[        [        45      (       d  M;  [	        U5       H  nUv   M	     MS     g7f)z<Flatten an iterable of registers used in an instruction
    N)rI   strr  r   r  )r  rp  r_   s      r)   r  r  w  sH      dC  Judm,,'- .	 s   :A Ac                   Z    \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	S r
S rS	rg
)AdaptCFAi  z<Adapt Flow to the old CFA class expected by Interpreter
    c                    Xl         0 U l        UR                  R                  5        H  u  p#[	        X25      U R                  U'   M     U R                   R
                  R                  5       nUR
                  nUR                  5       n[        5       nU R                  R                  5        H,  nUR                  U5      (       d  M  UR                  U5        M.     XF-
  U l        g r9   )rR  _blocksrf   r   AdaptCFBlockr   backboner   blocksr  in_loopsr   	_backbone)r<   rS  r   	blockinfork  r   inloopblocksr   s           r)   r>   AdaptCFA.__init__  s    
!%!1!1!7!7!9F#/	#BDLL  ":::%%..0>># u!!#A~~a    # $ "0r(   c                 .    U R                   R                  $ r9   )rR  r   rC   s    r)   r   AdaptCFA.graph  s    zz!!!r(   c                     U R                   $ r9   )rn  rC   s    r)   rk  AdaptCFA.backbone  s    ~~r(   c                     U R                   $ r9   )ri  rC   s    r)   rl  AdaptCFA.blocks  s    ||r(   c              #   f   #    [        U R                  5       H  nU R                  U   v   M     g 7fr9   )r   rl  r   s     r)   iterliveblocksAdaptCFA.iterliveblocks  s&     $A++a.  %s   /1c                 L    U R                   R                  R                  5         g r9   )rR  r   r]   rC   s    r)   r]   AdaptCFA.dump  s    

!r(   )rn  ri  rR  N)r    r!   r"   r#   rV   r>   r%  r   rk  rl  ry  r]   r'   r   r(   r)   rg  rg    sR    1& " "    !"r(   rg  c                       \ rS rSrS rSrg)rj  i  c                 R    X l         [        S UR                   5       5      U l        g )Nc              3   *   #    U  H	  u  pUv   M     g 7fr9   r   )rk  rB  rD  s      r)   rl  (AdaptCFBlock.__init__.<locals>.<genexpr>  s     8!s   )r   r  rZ  body)r<   ro  r   s      r)   r>   AdaptCFBlock.__init__  s    8	88	r(   )r  r   N)r    r!   r"   r#   r>   r'   r   r(   r)   rj  rj    s    9r(   rj  )1rV   rH  loggingcollectionsr   r   r   	functoolsr   numba.core.utilsr   r   r	   r
   numba.core.controlflowr   r   numba.core.irr   numba.core.errorsr   	getLoggerr    rc   r   r   rW   r   enumr   r   r  r   objectr0   rY   r  rs   r  r(  rC  rr   r  rO  rX  r   r  rg  rj  r   r(   r)   <module>r     s     6 6 $- - 8  6 

H
% #   ""$4 $ %E$$
i
(( 3 3 3@h46 h4V$]+& ]+@- y,V y, y,x	. .>	4 	4 E$$EE
i
(( &@A&v & ,'"v '"T96 9r(   