
    "
3jxB                    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      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/wildlama/miniconda3/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      $ r;   )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}
isinstancer2   r=   	TypeErrorformatrD   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rI   rJ   rN   s     r+   __eq__BlockKind.__eq__A   s=    eY'';;%,,..4;;DKHIIr*   c                 8    SR                  U R                  5      $ )NzBlockKind({}))rM   r=   rE   s    r+   __repr__BlockKind.__repr__G   s    %%dkk22r*   )r=   N)r"   r#   r$   r%   __doc__	frozensetr<   r@   rF   rP   rS   rV   r)   r!   r*   r+   r2   r2   *   s1      H/JJ3r*   r2   c                       \ 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;   a  S rSrg\S;   a  S rSrg\	" \5      e)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       $ r;   )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!   )ri   pcnstack
blockstack)debug_filenamezpending: %sz	stack: %szstate.pc_initial: %szend state. edges=%sc                     U R                   $ r;   )
pc_initialr`   s    r+   rb   Flow.run.<locals>.<lambda>   s    1<<r*   )keyzblock_infos %s:
%sN)Staterg   TraceRunnerfunc_idfilenamependingappendr   re   rf   popleftfinished_stackrq   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_infosrh   )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   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rl   Tz3.11 exception %s PC=%sr4   endr   
end_offsetstack_depth
push_lastirl   extra_block)in_withhas_active_tryget_instopname_NO_RAISE_OPSforknext_adjust_except_stack
advance_pcis_in_exceptionre   rf   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   r4   entry_stacknpophandlerr7   r8   kindnpushr   rl   r   Tr!   )r   r   r   r   r   r   r   pop_block_and_abover   r2   _EXCEPT_STACK_OFFSET_FINALLY_POPr   )r>   r   r   tryblkrm   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   rq   add_noder   add_edgerl   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$ r;   )r   setr{   
_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   r{   _outgoing_phisitemsr   re   rf   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   re   rf   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   re   rf   r
   r   dictr{   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)re   rf   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   offsetrg   labelsr   r   r>   r   insts      r+   r   Flow._is_implicit_new_block  s9    ~~;;$..///[[L(r*   r   c                     g r;   r!   )r>   r   s     r+   r   Flow._guard_with_as)  s    r*   r-   r/   r   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_TOPGThe 'with (context manager) as (variable):' construct is not supported.N)r   r   rg   r   r   )r>   r   current_instnext_opmsgs        r+   r   r   -  s^    
 !>>+L""&CC..):):;BBi'9C2377 ( Dr*   )rg   rh   r   N)r"   r#   r$   r%   rX   r@   r   r   r   NotImplementedErrorr   r   r   r   r)   r!   r*   r+   r[   r[   K   s{    (8<t 88	$6 
j	 	#, "),,
K9Z J	 
:	:	8 "),,r*   r[   c                 $    U R                  S5      $ )Nz$null$)
startswith)regs    r+   _is_null_temp_regr  =  s    >>(##r*   c                      \ rS rSrSrS rS rS rS rS r	\
S;   a  \	rO\
S	;   a  O\" \
5      eS
 rS rS rS rS r\
S;   a  S rO\
S;   a  O\" \
5      eS rS rS r\
S;   a  \rO\
S	;   a  O\" \
5      e\
S;   a  S rO\
S;   a  O\" \
5      e\
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;   a  S rO\
S	;   a  O\" \
5      e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;   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/S0 r0S1 r1S2 r2S3 r3S4 r4S5 r5S6 r6S7 r7\
S%;   a  S8 r8O\
S&;   a  O\" \
5      e\
S%;   a  S9 r9O\
S&;   a  O\" \
5      eS: r:\:r;\:r<\
S%;   a  \:r=\:r>O\
S&;   a  O\" \
5      eS; r?\?r@\?rAS< rBS= rCS> rDS? rES@ rFSA rGSB rHSC rISD rJSE rK\KrLSF rMSG rNSH rO\
S%;   a  SI rPO\
S&;   a  O\" \
5      eSJ rQ\
SK;   a  SL rRO\
S;   a  SM rRO\" \
5      eSN rSSO rT\
S;   a  SP rUO\
SQ;   a  SR rUO\
S&;   a  O\" \
5      eSS rVST rWSU rXSV rYSW rZSX r[\
S;   a  O\
S	;   a  SY r\O\" \
5      eSZ r]S[ r^S\ r_S] r`\
SK;   a  S^ raO\
S;   a  S_ raO\" \
5      eS` rb\
S;   a  O\
S	;   a  Sa rcO\" \
5      eSb rdSc reSd rfSe rgSf rhSg ri\
S;   a  Sh rjO\
S;   a  O\" \
5      e\
S;   a  Si rkO\
Sj;   a  Sk rkO\
S;   a  Sl rkO\" \
5      eSm rl\
S%;   a  Sn rmO\
S&;   a  O\" \
5      eSo rnSp roSq rpSr rqSs rrSt rsSu rtSv ruSw rvSx rwSy rxSz ryS{ rzS| r{S} r|S~ r}S r~S rS rS rS rS rS rS rS 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 r\
S;   a  O\
S	;   a  S rO\" \
5      eS rS r\
SK;   a  S rO\
S;   a  S rO\" \
5      e\
S%;   a  O\
S;   a  S rO\
S;   a  S rO\" \
5      eS r\
S;   a  S rO\
S	;   a  O\" \
5      e\
S;   a  S rSrg\
S	;   a  Srg\" \
5      e)ru   iA  zLTrace runner contains the states for the trace and the opcode dispatch.
    c                 L    Xl         [        5       U l        [        5       U l        g r;   )ro   r   rx   r   r{   )r>   ro   s     r+   r@   TraceRunner.__init__D  s    ,wr*   c                 .    [        U R                  U5      $ r;   )r   ro   )r>   linenos     r+   get_debug_locTraceRunner.get_debug_locI  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   _blockstackrq   popr  r   r   re   rf   r   r|   getattrrM   r   r  r  )r>   r   topblkblk_endr   fnr  s          r+   r}   TraceRunner.dispatchL  s   <<  ''"..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.
r4   r   r      r   r   rl   r   Nr!   )r   r   r   r   )r>   r   r   rm   r   expected_depthextra_stacks          r+   r    TraceRunner._adjust_except_stackg  s    
 $$U+!!&)""."#4F6N,1K%w

.fUm.v.r*   c                 &    UR                  U5        g r;   ry   r   s      r+   op_NOPTraceRunner.op_NOP{      Tr*   r   r   c                 &    UR                  U5        g r;   r"  r   s      r+   	op_RESUMETraceRunner.op_RESUME  r%  r*   c                 &    UR                  U5        g r;   r"  r   s      r+   op_CACHETraceRunner.op_CACHE  r%  r*   c                 &    UR                  U5        g r;   r"  r   s      r+   
op_PRECALLTraceRunner.op_PRECALL  r%  r*   c                 d    UR                  UR                  5       5        UR                  U5        g r;   )push	make_nullry   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 r;   )r0  	make_tempry   r   s      r+   op_RETURN_GENERATORTraceRunner.op_RETURN_GENERATOR  s#     	

5??$%Tr*   r   r   c                     UR                  5       nUR                  5       nUR                  5       nUR                  X#XTS9  UR                  U5        g )Nr?   resstrvarr  r5  ry   r0  )r>   r   r   r?   r<  r;  s         r+   op_FORMAT_SIMPLETraceRunner.op_FORMAT_SIMPLE  s@    IIKE__&F//#CLLLCJJsOr*   r-   r/   r   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  r:  N)argr   r  r  r  r5  ry   r0  )r>   r   r   r  r?   r<  r;  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rB  r   reversedranger  r5  ry   r0  )r>   r   r   count_rF  rG  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 r;   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)valr;  )r5  r  ry   r0  )r>   r   r   r;  toss        r+   
op_TO_BOOLTraceRunner.op_TO_BOOL  s4    //#C))+CLLCL0JJsOr*   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  )idxr;  r5  rB  ry   r0  r1  r>   r   r   r;  rZ  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 rY  r[  r\  s        r+   r]  r^    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r;  r5  ry   r0  r>   r   r   r;  s       r+   r]  r^    s'    //#CLLL'JJsOr*   c                 &    UR                  U5        g r;   r"  r   s      r+   op_COPY_FREE_VARSTraceRunner.op_COPY_FREE_VARS   r%  r*   c                 &    UR                  U5        g r;   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 rb  rd  re  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.rc  )r5  rB  r0  ry   re  s       r+   op_LOAD_CONSTTraceRunner.op_LOAD_CONST  s8    oog&1TXXJ7

3T#r*   c                     SUR                   s=::  a  S:  d   e   eUR                  S5      SUR                    3-   nUR                  U5        UR                  X#S9  g )Nr      rq  rr  rc  )rB  r5  r0  ry   re  s       r+   op_LOAD_SMALL_INTTraceRunner.op_LOAD_SMALL_INT  sU    &3&&&&&//'*q
^;CJJsOLLL'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 )Nr8  r  r   r,   itemr;  )r  r5  r   r0  rB  r1  r  ry   )r>   r   r   r|  r;  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                 T   [         S;   a   UR                  U5      nO+[         S;   a  UR                  U5      nO[        [         5      e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)Nr8  r   T)r;  as_load_derefr@  rc  )r   get_varname
IndexErrorrg   lenco_varnamesco_freevarsco_cellvarsrB  r5  ry   r0  r  )
r>   r   r   namebcnum_varnamesnum_freevarsnum_cellvarsmax_fast_localr;  s
             r+   op_LOAD_FASTTraceRunner.op_LOAD_FAST.  s   **((." 55$$T*D%i00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)rB  get_varname_by_argr5  ry   r0  )
r>   r   r   opargoparg1oparg2name1name2r  r  s
             r+   op_LOAD_FAST_LOAD_FAST"TraceRunner.op_LOAD_FAST_LOAD_FASTK  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)rB  r  r  r5  ry   r0  )r>   r   r   r  r  r  	load_namer  s           r+   op_STORE_FAST_LOAD_FAST#TraceRunner.op_STORE_FAST_LOAD_FASTW  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  ry   )r>   r   r   r  r  s        r+   op_STORE_FAST_STORE_FAST$TraceRunner.op_STORE_FAST_STORE_FASTa  s(    YY[FYY[FLLVL<r*   r   r,   c                 &    UR                  U5        g r;   r"  r   s      r+   op_DELETE_FASTTraceRunner.op_DELETE_FAST|  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_ATTR  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_ATTR  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_DEREF      		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startr;  slicevarindexvarnonevarNr=  	r>   r   r   rU  tos1r;  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  stopr;  r  r  r  Nr=  r  s	            r+   
op_SLICE_2TraceRunner.op_SLICE_2  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  r;  r  r  Nr=  )	r>   r   r   rU  r  tos2r;  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  r5  ry   )r>   r   r   rU  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   rU  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   rU  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   rU  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   rU  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   rU  r  r  r  r  s           r+   op_DELETE_SLICE_3TraceRunner.op_DELETE_SLICE_3N  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  stepr;  r  )rB  r  	Exceptionr5  ry   r0  )r>   r   r   argcrU  r  r  r  r  r  r  r;  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   	containerr;  r  temp_resr=  )	r>   r   r   r   r  r  r  r;  r  s	            r+   op_BINARY_SLICETraceRunner.op_BINARY_SLICEx  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?   r;  r  r  )	r>   r   r   r   r  r  r?   r  r;  s	            r+   op_STORE_SLICETraceRunner.op_STORE_SLICE  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  ry   get_jump_targetr   r   )r>   r   r   r  target_inst	next_insts         r+   _op_POP_JUMP_IFTraceRunner._op_POP_JUMP_IF  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  rl   r   r   )get_tosry   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 r;   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 r;   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 r;   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 r;   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 r;   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 r;   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 r;   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 r;   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   ry   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 )Nr5   r   r   r   )r   ry   	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)ry   r  r5  	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 )Nrq  r/  )r5  ry   r2  re  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?   r;  r=  r>   r   r   rT  r;  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)
rB  r   r   r  r  r  
ValueErrorry   r   r2  r>   r   r   rB  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 )	Nr7   r8   r   r?  r  r  r@  rA  )
anyr   rB  r   r  r  r  rC  ry   r2  )r>   r   r   in_exc_blockrB  s        r+   rE  rF    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)rJ  r   r5  ry   r0  )r>   r   r   rK  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_FINALLY0  s!    oo#m,-r*   c                 $    UR                  5         g r;   rP  r   s      r+   
op_END_FORTraceRunner.op_END_FOR5      IIKr*   rz  c                 D    UR                  5         UR                  5         g r;   rP  r   s      r+   rW  rX  8  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  )rB  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 r;   r!   r   s      r+   op_CALL_FINALLYTraceRunner.op_CALL_FINALLYH  s    r*   c                 $    UR                  5         g r;   )r2  r   s      r+   op_WITH_EXCEPT_START TraceRunner.op_WITH_EXCEPT_STARTK  s    r*   c                 &    UR                  U5        g r;   r"  r   s      r+   op_WITH_CLEANUP_START!TraceRunner.op_WITH_CLEANUP_STARTN      Tr*   c                 &    UR                  U5        g r;   r"  r   s      r+   op_WITH_CLEANUP_FINISH"TraceRunner.op_WITH_CLEANUP_FINISHR  rg  r*   c                 ^    UR                  UR                  SUR                  5       S95        g )Nr5   r   r   )
push_blockr   r  r   s      r+   op_SETUP_LOOPTraceRunner.op_SETUP_LOOPV  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r;   r   .0r   s     r+   	<genexpr>-TraceRunner.op_BEFORE_WITH.<locals>.<genexpr>u       1yffy   )contextmanagerexitfnr   r6   rl  r   )r  r5  r0  rg   find_exception_entryr   exception_entriesr   ry   maxrm  r   r   )r>   r   r   cmyieldedr|  r  ehhead	ehrelatedr   r   s              r+   op_BEFORE_WITHTraceRunner.op_BEFORE_WITHb  s     Boo'G__,?_@FJJvJJw B,,TYY7FI**99-$$R( + 1y11CLLLI   !  JJ$))J$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 )Nrq  rr  )r{  r|  r6   rl  r   )	r  r5  ry   r0  rm  r   r  r   r   )r>   r   r   r  r  r|  s         r+   op_SETUP_WITHTraceRunner.op_SETUP_WITH  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   rQ  r4   )r   r   rQ  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  r0  r5  )r>   r   r   rU  s       r+   op_PUSH_EXC_INFOTraceRunner.op_PUSH_EXC_INFO  s-    iik

5??;/0

3r*   c                 x    UR                  U5        U R                  SXR                  UR                  5       S9  g )Nr8   )r   r   )ry   r  r   r  r   s      r+   op_SETUP_FINALLYTraceRunner.op_SETUP_FINALLY  s3    Tu99$2F2F2H 	 	
r*   c                 $    UR                  5         g r;   rP  r   s      r+   op_POP_EXCEPTTraceRunner.op_POP_EXCEPT  rY  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   r7   r8   z$POP_EXCEPT got an unexpected block: r  r   )r+  r2   r   r  r  r  r   r   rR  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   r4   try)r   r6   withr   )r+  r2   ry   r   r   rR  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   r;  r=  )r>   r   r   r  r   r;  s         r+   op_BINARY_SUBSCRTraceRunner.op_BINARY_SUBSCR  s?    IIKEYY[F//#CLL6LCJJsOr*   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;   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 )Nr8  r   funcargskw_namesr;  )rB  r   rI  rJ  r  r   r  pop_kw_namesr5  ry   r0  )r>   r   r   nargrL  r  null_or_selfcallabler  callable_or_firstargnull_or_callabler;  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 r;   )set_kw_namesrB  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  r;  rH  )r>   r   r   r  rL  r  r  r;  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  namesr;  )rB  r  r   rI  rJ  r5  ry   r0  )	r>   r   r   r  r  rL  r  r  r;  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  )	rB  r  r   rI  rJ  r  r5  ry   r0  )
r>   r   r   r  r  rL  r  null_or_firstargr  r;  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                  5       n[        U5      (       a  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 )Nr  varargvarkwargr;  )r  r  r5  ry   r0  r>   r   r   r  r  r  r;  s          r+   op_CALL_FUNCTION_EXTraceRunner.op_CALL_FUNCTION_EX,  sm     yy{H **YY[FIIK99;D//#CLL   "JJsOr*   )r   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  )rB  r  r5  ry   r0  r  s          r+   r  r  <  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  r_  r   r  )	rB  r  r   r  peekr  r5  ry   r0  r  s          r+   r  r  L  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)rJ  r  reverser5  ry   r0  )r>   r   r   rK  rL  r  r  rT  s           r+   	_dup_topxTraceRunner._dup_topxc  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?   r;  )r  
const_listr;  )r   rB  rL   r  r  r   ci1opr&   ry   r2  r'   r  r5  r0  r(   r  )	r>   r   r   r  r  r  rT  r;  rU  s	            r+   op_CALL_INTRINSIC_1TraceRunner.op_CALL_INTRINSIC_1p  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)rB  r  )r>   r   r   rK  s       r+   op_DUP_TOPXTraceRunner.op_DUP_TOPX  s:    EQ8 888 88uE*r*   c                 $    U R                  XSS9  g )Nr  rK  r  r   s      r+   
op_DUP_TOPTraceRunner.op_DUP_TOP      u!,r*   c                 $    U R                  XSS9  g )Nr  r  r  r   s      r+   op_DUP_TOP_TWOTraceRunner.op_DUP_TOP_TWO  r  r*   c                 X    UR                  UR                  UR                  5      5        g r;   )r0  r  rB  r   s      r+   op_COPYTraceRunner.op_COPY  s    

5::dhh'(r*   c                 :    UR                  UR                  5        g r;   )swaprB  r   s      r+   op_SWAPTraceRunner.op_SWAP  s    

488r*   c                     UR                  5       nUR                  5       nUR                  U5        UR                  U5        g r;   r  r0  )r>   r   r   firstseconds        r+   
op_ROT_TWOTraceRunner.op_ROT_TWO  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 r;   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 r;   r  )r>   r   r   r  r  r  forths          r+   op_ROT_FOURTraceRunner.op_ROT_FOUR  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)rB  r  rJ  r5  ry   rI  r0  )	r>   r   r   rK  r  rL  r  r  sts	            r+   op_UNPACK_SEQUENCETraceRunner.op_UNPACK_SEQUENCE  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   r;  rH  )r>   r   r   rK  rL  r   tups          r+   op_BUILD_TUPLETraceRunner.op_BUILD_TUPLE  ^    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  )tuplesrK  	is_assignr  )	r   rI  rJ  rB  r  r  r5  ry   r0  )r>   r   r   rL  r
  rK  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 r;   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 r;   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  r;  r=  )r>   r   r   rU  r;  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valuesr;  )r  r   rI  rJ  rB  r5  ry   r0  )r>   r   r   r  rL  valsr  r;  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  rH  )r>   r   r   rK  rL  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?   	appendvarr;  r  rB  r  r5  ry   )r>   r   r   r?   r  r   r$  r;  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?   	extendvarr;  r%  )r>   r   r   r?   r  r   r*  r;  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   sizer;  )r5  rB  rJ  r  ry   r0  )	r>   r   r   dctrK  r   rL  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   rs   r?   
setitemvarr;  r%  )r>   r   r   TOSTOS1rs   r?   r  r   r5  r;  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  rH  )r>   r   r   rK  rL  r   r;  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                  5       nUR                  5       nUR                  5       nUR                  X#XEUS9  g )N)r?   r   addvarr;  )r  r  r5  ry   )r>   r   r   r?   r   r>  r;  s          r+   
op_SET_ADDTraceRunner.op_SET_ADD)  sB    		"ooTv#Nr*   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?   	updatevarr;  r%  r>   r   r   r?   r  r   rC  r;  s           r+   op_SET_UPDATETraceRunner.op_SET_UPDATE0  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 rB  r%  rD  s           r+   op_DICT_UPDATETraceRunner.op_DICT_UPDATE9  r(  r*   c                     UR                  5       nUR                  5       nUR                  X#US9  UR                  U5        g r9  r=  )r>   r   r   r?   r;  s        r+   op_GET_ITERTraceRunner.op_GET_ITERB  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  r5  ry   r0  r  r   r   r  r   )r>   r   r   rN  rO  rP  r  r   s           r+   op_FOR_ITERTraceRunner.op_FOR_ITERH  s    ==? " T4 	 	 

6""$33 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S:X  a?  [        S:X  d   eUR                  5       nUR                  X#XTUS9  UR                  U5        g [        U   R                  nUR                  SU 3S9nUR                  X#XTUS9  UR                  U5        g )Nr  z[]r   )oplhsr   r;  binop_rr  )
dis_nb_opsrB  r  r   r5  ry   r0  r	   r"   )r>   r   r   rW  r   rX  r;  op_names           r+   op_BINARY_OPTraceRunner.op_BINARY_OPg  s    [["1%iikiik:'''//#CLL#CL@JJsO-b1::G//6');/<CLL#CL@JJsOr*   c                     UR                  5       nUR                  5       nUR                  X#US9  UR                  U5        g r9  r=  r:  s        r+   _unaryopTraceRunner._unaryopw  r=  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)rX  r   r;  r=  )r>   r   r   r   rX  r;  s         r+   	_binaryopTraceRunner._binaryop  s?    iikiikooT5

3r*   c                 h   [         S;   a  S nO*[         S;   a  UR                  5       nO[        [         5      eUR                  5       nS =n=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
US9	  UR                  U5        g )	Nr   r   r8     r  r  r  )r  codeclosureannotationsannotate
kwdefaultsdefaultsr;  )r   r  r  rB  r5  ry   r0  )r>   r   r   MAKE_CLOSUREr  rg  rh  ri  rj  rk  rl  r;  s               r+   op_MAKE_FUNCTIONTraceRunner.op_MAKE_FUNCTION  s
   << D*$99;D%i00yy{CGGG+GG:**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-  (       a  UR                  X4S9  OUR                  S-  (       a  UR                  X4S9  OwUR                  S-  (       a  UR                  X4S9  OSUR                  S-  (       a  UR                  X4S	9  O/UR                  S
-  (       a  UR                  X4S9  O[	        S5      eUR                  U5        g )Nr8  r  )rl  r  )rk  r  )ri  rf  )rh     )rj  r  )r   r  rB  set_function_attributeAssertionErrorr0  )r>   r   r   make_func_stackdatas        r+   op_SET_FUNCTION_ATTRIBUTE%TraceRunner.op_SET_FUNCTION_ATTRIBUTE  s    ....))+yy{88d? (((HXX_(((JXX_(((KXX_(((GXX_ (((H //

?#r*   c                 $    U R                  XSS9  g )NT)rm  )rn  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 rb  rd  re  s       r+   op_LOAD_CLOSURETraceRunner.op_LOAD_CLOSURE  ro  r*   c                 f    UR                  S5      nUR                  X#S9  UR                  U5        g )Nassertion_errorrc  rd  re  s       r+   op_LOAD_ASSERTION_ERROR#TraceRunner.op_LOAD_ASSERTION_ERROR  s*    //"34CLLL'JJsOr*   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  rU  r  )r5  r  r  ry   r0  r>   r   r   r  rU  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 )Nr  r  r   )r5  r  ry   r   r   r  r  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   rA  )r  rB  ry   r   r   r2  rD  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 )NrA  )r  ry   r2  rD  s       r+   r  r    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 )Nr{  )r  r1  r0  r5  ry   )r>   r   r   r|  extrar;  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 r;   )r}  r   s      r+   r  r  5  s    e*r*   c                 &    U R                  X5        g r;   )r  r   s      r+   op_CALL_METHODTraceRunner.op_CALL_METHOD:  s    e*r*   c                    [         R                  UR                     S;  a  [        S5      eUR	                  5       nUR	                  5       nUR                  SS9nUnS HP  u  pxUR                  5         UR                  5       nUR                  U:w  d  UR                  U:w  d  MG  [        S5      e   UR                  5         UR                  5       nUR                  S:w  a  Sn	[        U	5      eUR                  b   e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#                  U5        UR#                  U5        UR                  XcUUS
9  UR%                  UR'                  SUS95        UR)                  UR*                  S9  g )N)	__enter____exit__z#async special methods not supportedrq  rr  ))SWAPr  )r  r   )LOAD_SPECIALr   )CALLr   z0Unsupported bytecode pattern for 'LOAD_SPECIAL'.r   r   c              3   8   #    U  H  oR                   v   M     g 7fr;   r   ru  s     r+   rw  .TraceRunner.op_LOAD_SPECIAL.<locals>.<genexpr>  ry  rz  )r{  exit_method	block_endr6   rl  r   )rZ  _special_method_namesrB  r  r  r5  r   r   r   r   rg   r}  r   r~  r   ry   r  r0  rm  r   r   r   )r>   r   r   rU  rL  methodold_instrL  ar  r  r  r  r   r   s                  r+   op_LOAD_SPECIALTraceRunner.op_LOAD_SPECIAL?  s    ))$((345)9; ;> ))+C		A __,?_@FH
   "~~'KK1$A2JL L >>#D
 {{i'$ /s3388### B,,T[[9FI**99-$$R( + 1y11C JJvJJsOLL6#&  (    !  JJ$))J$r*   c                     UR                   n[        R                  U   [        :X  a  SnO[        eUR                  U5      nUR                  X%US9  UR                  U5        g )Nr  )r;  rZ  )rB  rZ  _common_constantsrs  r  r5  ry   r0  )r>   r   r   r  r  r;  s         r+   op_LOAD_COMMON_CONSTANT#TraceRunner.op_LOAD_COMMON_CONSTANT  sR    HHE$$U+~=())//$'CLLEL2JJsOr*   )ro   r{   rx   N)F)r"   r#   r$   r%   rX   r@   r  r}   r   r#  r   op_NOT_TAKENr  r'  r*  r-  r2  r6  r>  rC  rM  rQ  op_POP_ITERrV  r]  rg  rj  rm  rs  rw  r}  r  r  r  r  op_LOAD_FAST_CHECKop_LOAD_FAST_AND_CLEARop_LOAD_FAST_BORROW$op_LOAD_FAST_BORROW_LOAD_FAST_BORROWr  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,  r3  r6  r;  rE  rN  rT  rW  r\  r_  rb  re  ri  rn  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+  r2  r8  r;  r?  rE  rH  rK  rQ  rT  r]  r`  op_UNARY_NEGATIVEop_UNARY_POSITIVEop_UNARY_NOTop_UNARY_INVERTrc  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_XORrn  rv  ry  r|  r  r  r  r  r  r  r  r  r)   r!   r*   r+   ru   ru   A  s   
0P6/( J	:	:!),, &&	 
1	1!),,$" K 	:	:!),,%%	
 
1	1!),,&&	. 
(	(	 
j	 	
 "),,
$ K	(
 
:	:!),,/"8 &&
		!	=
 
1	1!),,//)!-	(	(!),,J*/E,	:	:!),,*7
((***
$
(
(
(

$
$
6 //	 
(	(!),,//	 
(	(!),,
' **//-"1	(	(!),,. 1/********.. %5!. //	 
(	(!),, 88	"* 
j	 	& "),,(. &&		j	 	 
(	(!),,P
 K	:	:	%> "),,!&
(

 88	 
j	 	% "),,! J	:	:	 "),,D7
0% &&	 
1	1!),,K	 
k	!	 
1	1	* "),,
 //	3< 
(	(!),,+
--)..		5O!(	  ! LO MHNN##!&'! !*!!NMNM"" %& O )  MLM$L$2>
 K	:	:	
 "),,. 77
	" 
j	 	 "),,
 //	k	!	 
j	 	+ "),,+ Ko	%b 
:	:!),,K	 
:	:!),,r*   ru   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)rg   _pc_initialr   _nstack_initialr|   tuple_blockstack_initialr   r  _temp_registers_insts	_outedges_terminatedr   r   r   r   r   rJ  r5  r0  )r>   ri   rl   rm   rn   nullvalsrL  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={}))rM   r  r  rE   s    r+   rV   _State.__repr__  s&    7>>d22
 	
r*   c                 2    U R                   U R                  4$ r;   )r  r  rE   s    r+   get_identity_State.get_identity  s      $"6"677r*   c                 4    [        U R                  5       5      $ r;   )rC   r  rE   s    r+   rF   _State.__hash__  s    D%%'((r*   c                 D    U R                  5       UR                  5       :  $ r;   r  rN   s     r+   rP   _State.__lt__  s      "U%7%7%999r*   c                 D    U R                  5       UR                  5       :H  $ r;   r  rN   s     r+   rS   _State.__eq__  s      "e&8&8&:::r*   c                     U R                   $ )zMThe starting bytecode offset of this State.
The PC given to the constructor.
)r  rE   s    r+   rq   _State.pc_initial  s    
 r*   c                     U R                   $ )zYThe list of instructions information as a 2-tuple of
``(pc : int, register_map : Dict)``
)r  rE   s    r+   instructions_State.instructions  s    
 {{r*   c                     U R                   $ )zAThe list of outgoing edges.

Returns
-------
edges : List[State]
)r  rE   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   rE   s    r+   outgoing_phis_State.outgoing_phis  s     """r*   c                     U R                   $ )z6A copy of the initial state of the blockstack
        )r  rE   s    r+   blockstack_initial_State.blockstack_initial  s     '''r*   c                 ,    [        U R                  5      $ )z9The current size of the stack

Returns
-------
res : int
)r  r|   rE   s    r+   r   _State.stack_depth$  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   r4   N)rI  r  r2   )r>   rS  s     r+   find_initial_try_block_State.find_initial_try_block.  s/     D445C6{i..
 6r*   c                     U R                   $ r;   r  rE   s    r+   r~   _State.has_terminated5  s    r*   c                 4    U R                   U R                     $ r;   )rg   r   rE   s    r+   r   _State.get_inst8  s    ~~dhh''r*   c                 F    U R                  5       nUR                  U l        g r;   )r   r   r   r>   r   s     r+   r   _State.advance_pc;  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})rs  r   r   tempctz${prefix}{offset}.{tempct})rs  r   r  )rM   r   r   r   lowerr  r  ry   )r>   rs  r  s      r+   r5  _State.make_temp?  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  ry   r   r   r   _flatten_inst_regsr  )r>   r   r   s      r+   ry   _State.appendQ  s<    DKK0131&--/BCCr*   c                 $    U R                  S5      $ )Nr  )r  rE   s    r+   r  _State.get_tosV  s    yy|r*   c                 "    U R                   U*    $ )z-Return the k'th element on the stack
        r|   )r>   r1  s     r+   r  _State.peekY  s     {{A2r*   c                 :    U R                   R                  U5        g)zPush to stackN)r|   ry   )r>   r|  s     r+   r0  _State.push^  s    4 r*   c                 6    U R                   R                  5       $ )zPop the stack)r|   r  rE   s    r+   r  
_State.popb  s    {{  r*   c                 >    U R                   nX!*    US   sUS'   X!* '   g)zSwap stack[idx] with the tosr  Nr  )r>   rZ  ss      r+   r  _State.swapf  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  ry   )r>   synblks     r+   rm  _State.push_blockk  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+   rQ  _State.reset_stackq  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   )r2   r  r|   )r>   r   r   rQ  r   ds         r+   r   _State.make_blockx  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  rQ  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  r  )r>   rS  rZ  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r2   rI  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 r1  r2  )r>   kindsr   r3  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
        r4   N)r   rE   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  rB  r  s     r+   r  _State.get_varname  s     &&txx00r*   r  c                 4    U R                   R                  U   $ )z4Get referenced variable name from the oparg
        )rg   r  )r>   r  s     r+   r  _State.get_varname_by_arg  s     ~~))%00r*   c                     SU l         g)z!Mark block as terminated
        TNr  rE   s    r+   r2  _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   )rl   stackr   rn   )r   r|   r  rJ  ry   r5  r  r   getr  r  r  Edger  r2  )r>   rl   r   r   r   rB  rm   rL  rn   topr   s              r+   r   _State.fork  s>    T[[!0DKK 000000%,F'6NE::5\T^^-. " $**+
<< 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   rE   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
        )ri   rl   rm   rn   r  )r   r  rt   rg   rl   r  rB  rn   	enumerater  ry   r   r   )r>   retr   rL  r0  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  rl   r  rB  r   )r>   r   s     r+   get_outgoing_edgepushed_State.get_outgoing_edgepushed  sL     !NN,*D tzz4::+,788*, 	, ,s   8A
)r  r  rg   r  r  r  r   r   r  r   r|   r  r  r   )r!   ) )TN)r   r   N).r"   r#   r$   r%   rX   r@   rV   r  rF   rP   rS   propertyrq   r  r   r  r   r   r  r~   r   r   r5  ry   r  r  r0  r  r  rm  rQ  r   r+  r   r   r7  r   r  intr  r2  r   r   r   rN  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 r;   )superr@   	_kw_namesr>   r  r   	__class__s      r+   r@   StatePy311.__init__	  s    $)&)r*   c                 ,    U R                   nS U l         U$ r;   rW  )r>   outs     r+   r  StatePy311.pop_kw_names	  s    nn
r*   c                 .    U R                   b   eXl         g r;   r\  )r>   rT  s     r+   r  StatePy311.set_kw_names	  s    ~~%%%r*   c                 T    U R                   nUR                  U R                  5      S L$ r;   rg   r}  r   r>   r  s     r+   r   StatePy311.is_in_exception	  s%    ^^&&txx0<<r*   c                 P    U R                   nUR                  U R                  5      $ r;   rb  rc  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   r6   T)r  r2   )r>   ents     r+   r   StatePy311.in_with	  s&    ++C6{i// ,r*   c                      U R                  SS9$ )Nr  rr  )r5  rE   s    r+   r1  StatePy311.make_null	  s    ~~W~--r*   r\  )r"   r#   r$   r%   r@   r  r  r   r   r   r1  r)   __classcell__rY  s   @r+   rT  rT  	  s+    
=1
. .r*   rT  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )
StatePy313i!	  c                 N   > [         TU ]  " U0 UD6  [        [        5      U l        g r;   )rV  r@   r   r   _make_func_attrsrX  s      r+   r@   StatePy313.__init__"	  s"    $)&) +D 1r*   c                 @    U R                   U   R                  U5        g r;   )rq  r   )r>   make_func_resr   s      r+   rr  !StatePy313.set_function_attribute&	  s    m,33F;r*   c                      U R                   U   $ r;   rq  )r>   rt  s     r+   get_function_attributes"StatePy313.get_function_attributes)	  s    $$]33r*   rw  )	r"   r#   r$   r%   r@   rr  rx  r)   rl  rm  s   @r+   ro  ro  !	  s    2<4 4r*   ro  r8  r_  r/   rD  )rl   rB  rn   r   c                   .    \ rS rSrSrS r\S 5       rSrg)AdaptDFAi:	  z<Adapt Flow to the old DFA class expected by Interpreter
    c                     Xl         g r;   _flow)r>   flows     r+   r@   AdaptDFA.__init__=	  s    
r*   c                 .    U R                   R                  $ r;   )r~  rh   rE   s    r+   infosAdaptDFA.infos@	  s    zz%%%r*   r}  N)	r"   r#   r$   r%   rX   r@   rQ  r  r)   r!   r*   r+   r{  r{  :	  s      & &r*   r{  AdaptBlockInfoinstsr  rn   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_FUNCTIONr;  )rg   r   r   rx  )	inst_pairr   ru  r   r   s       r+   process_function_attributes6adapt_state_infos.<locals>.process_function_attributesM	  sG     v&;;/)KK55d5kBC|r*   r8  r@  r  )
r   r  mapr  r  r  r  r   r  rN  )r   r  r  s   `  r+   r   r   L	  s     &&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)rK   strr  r   r  )r  r|  ra   s      r+   r  r  b	  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
)AdaptCFAim	  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 r;   )r~  _blocksrh   r   AdaptCFBlockr   backboner   blocksr  in_loopsr   	_backbone)r>   r  r   	blockinfor  r   inloopblocksr   s           r+   r@   AdaptCFA.__init__p	  s    
!%!1!1!7!7!9F#/	#BDLL  ":::%%..0>># u!!#A~~a    # $ "0r*   c                 .    U R                   R                  $ r;   )r~  r   rE   s    r+   r   AdaptCFA.graph	  s    zz!!!r*   c                     U R                   $ r;   )r  rE   s    r+   r  AdaptCFA.backbone	  s    ~~r*   c                     U R                   $ r;   )r  rE   s    r+   r  AdaptCFA.blocks	  s    ||r*   c              #   f   #    [        U R                  5       H  nU R                  U   v   M     g 7fr;   )r   r  r,  s     r+   iterliveblocksAdaptCFA.iterliveblocks	  s&     $A++a.  %s   /1c                 L    U R                   R                  R                  5         g r;   )r~  r   r_   rE   s    r+   r_   AdaptCFA.dump	  s    

!r*   )r  r  r~  N)r"   r#   r$   r%   rX   r@   rQ  r   r  r  r  r_   r)   r!   r*   r+   r  r  m	  sR    1& " "    !"r*   r  c                       \ rS rSrS rSrg)r  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r;   r!   )rv  rL  rL  s      r+   rw  (AdaptCFBlock.__init__.<locals>.<genexpr>	  s     8!s   )r   r  r  body)r>   r  r   s      r+   r@   AdaptCFBlock.__init__	  s    8	88	r*   )r  r   N)r"   r#   r$   r%   r@   r)   r!   r*   r+   r  r  	  s    9r*   r  )1rX   rZ  loggingcollectionsr   r   r   	functoolsr   numba.core.utilsr   r   r	   r
   numba.core.controlflowr   r   numba.core.irr   numba.core.errorsr   	getLoggerr"   re   r   r   rY   r   enumr   r   r  r  objectr2   r[   r  ru   r  rT  ro  rt   rD  r{  r  r   r  r  r  r!   r*   r+   <module>r     s     6 6 $- - 8  6 

H
% #   ++$4 $ %E$$
i
(( 3 3 3@o-6 o-d$A-& A-H4 y,V y, y,x	. .>	4 	4 ""E$$EE
i
(( &@A&v & ,'"v '"T96 9r*   