
    J/PhA                       d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZmZ ddlmZ ddlmZ  ej        e          Zd	ZeZ eh d
          Zedv rddlmZ  G d de          ZeZnedv rn e e          e G d de!                      Z" G d de!          Z#d Z$ G d de!          Z%e G d de!                      Z& G d de&          Z' G d de'          Z(edv re(Z)nedv re'Z)nedk     re&Z)n e e           ed g d!          Z* G d" d#e!          Z+ ed$g d%          Z,d& Z-d' Z. G d( d)e!          Z/ G d* d+e!          Z0dS ),z)
Implement python 3.8+ bytecode analysis
    N)
namedtupledefaultdictdeque)total_ordering)
UniqueDict	PYVERSIONALL_BINOPS_TO_OPERATORS_lazy_pformat)NEW_BLOCKERSCFGraph)Loc)UnsupportedBytecodeError   >   NOPPRECALL
LOAD_CONST
LOAD_DEREF      r      )Enumc                       e Zd ZdZdZdZdS )CALL_INTRINSIC_1_Operandr      r   N)__name__
__module____qualname__INTRINSIC_STOPITERATION_ERRORUNARY_POSITIVEINTRINSIC_LIST_TO_TUPLE     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/core/byteflow.pyr   r      s!        ()%"#r%   r   r   
   r      c                   J    e Zd ZdZ eh d          Zd Zd Zd Zd Z	d Z
dS )		BlockKindz?Kinds of block to make related code safer than just `str`.
    >   TRYLOOPWITHEXCEPTFINALLYWITH_FINALLYc                 *    || j         v sJ || _        d S N)_members_value)selfvalues     r&   __init__zBlockKind.__init__4   s     %%%%r%   c                 H    t          t          |           | j        f          S r5   )hashtyper7   r8   s    r&   __hash__zBlockKind.__hash__8   s    T$ZZ-...r%   c                     t          |t                    r| j        |j        k     S t          d                    t          |                              Nzcannot compare to {!r}
isinstancer-   r7   	TypeErrorformatr=   r8   others     r&   __lt__zBlockKind.__lt__;   sG    eY'' 	J;--4;;DKKHHIIIr%   c                     t          |t                    r| j        |j        k    S t          d                    t          |                              rA   rB   rF   s     r&   __eq__zBlockKind.__eq__A   sG    eY'' 	J;%,..4;;DKKHHIIIr%   c                 6    d                     | j                  S )NzBlockKind({}))rE   r7   r>   s    r&   __repr__zBlockKind.__repr__G   s    %%dk222r%   N)r   r   r    __doc__	frozensetr6   r:   r?   rH   rJ   rL   r$   r%   r&   r-   r-   *   s         y     H  / / /J J JJ J J3 3 3 3 3r%   r-   c                   l    e Zd ZdZd Zd Zedv rd Znedv rd Zn ee          d Z	d	 Z
d
 Zd ZdS )FlowziData+Control Flow analysis.

    Simulate execution to recover dataflow and controlflow information.
    c                     t                               d|                                           || _        t	                      | _        d S )Nzbytecode dump:
%s)_loggerdebugdump	_bytecoder   block_infos)r8   bytecodes     r&   r:   zFlow.__init__P   s8    *HMMOO<<<!%<<r%   c                    t          | j        ddd          }t          | j        j        j                  }|j                            |           t                      }|j        rzt          	                    d|j                   |j        
                                }||j        vr/t          	                    d|j                   t          	                    d|           |||j        <   	 |                    |           |                                rnW|                     ||          rn@|                     |          r*|                     |           |                                 nt          	                    d	|j                   |j                            |           |                                }|j                            |           |j        z|                     |j                   |                     |           t5          |j        d
           D ]<}t7          |          x| j        |j        <   }t          	                    d||           =dS )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$   )rW   pcnstack
blockstack)debug_filenamezpending: %sz	stack: %szstate.pc_initial: %sTzend state. edges=%sc                     | j         S r5   )
pc_initial)xs    r&   <lambda>zFlow.run.<locals>.<lambda>   s    1< r%   )keyzblock_infos %s:
%sN)StaterU   TraceRunnerfunc_idfilenamependingappendr   rR   rS   popleftfinished_stackr^   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_infosrV   )r8   
firststaterunnerfirst_encounterstate
out_statessis          r&   runzFlow.runU   sS    DNq&(* * *
DN,B,KLLLj)))
 %,, n 	2MM-888N**,,EFO++k5<8884e<<<49 01"OOE***++-- "55feDD "!66u== " //666!11333!" 3U5IJJJ##E***"6688
%%j1115 n 	2: 	(((   FO1G1GHHH 	< 	<E6G6N6NNDU-.MM/;;;;	< 	<r%   r*   r   r   c                 0   |                                 sx|                                rd|                                j        t          vrD|                    |                                j                   |                    |           dS |                                 |                                 s|	                                rt                              d|                                |j                   |                                }|                    d          }|r|d         |j        k    rd }d S |                    d|j                  }|j        |d<   |j        |d<   |j        |d	<   |                    |j        |
           dS d S d S )NrY   Tz3.11 exception %s PC=%sr.   endr   
end_offsetstack_depth
push_lastirY   extra_block)in_withhas_active_tryget_instopname_NO_RAISE_OPSforknext_adjust_except_stack
advance_pcis_in_exceptionrR   rS   get_exception_pcget_top_blocktarget
make_blockr   depthlasti)r8   rz   r|   eheh_topeh_blocks         r&   rm   zFlow._run_handle_exception   s   ==?? $((**$NN$$+=@@

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

eiX
FFF#t$ $ $ $r%   r(   c                 D   |                                 r|                                j        t          vr|                    |                                j                   |                    d          }|                    |           |j        }i }||d         k    r||d         z
  |d<   |d         }t          d          t          t          d          t          i|d                  |d	<   ||d
<    |j        dd|d         i| dS |                                 d S )Nr   r.   entry_stacknpophandlerr1   r2   kindnpushr   rY   r   Tr$   )r   r   r   r   r   r   r   pop_block_and_abover   r-   _EXCEPT_STACK_OFFSET_FINALLY_POPr   )r8   rz   r|   tryblkrZ   kwargsr   s          r&   rm   zFlow._run_handle_exception   s.   $$&& #NN$$+=@@

enn..3
444,,U33))&111*F=111%+f].C%CF6N +h'')=i((,# &/##w )0}%
66fUm6v666t  """""r%   c                 $   t                      }|D ]}|j        }|                    |           |D ]-}|j        D ]#}|                    |j        |j        d           $.|                    d           |                                 || _        d S )Nr   )	r   r^   add_noderq   add_edgerY   set_entry_pointprocesscfgraph)r8   
all_statesgraphr|   bedges         r&   ru   zFlow._build_cfg   s    		 	 	E ANN1 	= 	=E, = =u/!<<<<=a   r%   c                   	 t                               d                    dd                     fd}	fd}	fd}fd} |            \  }	t                               dt          |                      |            \  }} ||            |||           t                               d	                    dd                     d S )
Nz
Prune PHIs<   -c                      t          t                    } t                      }j        D ]B}t          |j                  }t          |j                  }| |xx         ||z  z  cc<   ||z  }C| |fS r5   )r   setri   
_used_regs_phis)	used_phisphi_setr|   usedphisrz   s        r&   get_used_phis_per_statez1Flow._prune_phis.<locals>.get_used_phis_per_state   s    #C((IeeG    5+,,5;''%   D4K/   4g%%r%   c                  v   i } t          t                    }j        D ]G}|j                                        D ]+\  }}|vr|| |<   ||                             ||f           ,Ht                              dt          |                      t                              dt          |                     | |fS )Nz
defmap: %szphismap: %s)	r   r   ri   _outgoing_phisitemsrr   rR   rS   r
   )defmapphismapr|   phirhsr   rz   s        r&   find_use_defsz'Flow._prune_phis.<locals>.find_use_defs   s    F!#&&G 3 3 % 4 : : < < 3 3HC'))&+sCL$$c5\2222	3
 MM,f(=(=>>>MM-w)?)?@@@7?"r%   c                    t          t                    }	 d}t          t          |                                                     D ]g\  }}t          t          |                    D ]1\  }}|v r(|| |         z  }||                             ||f           2||         }||z  r||z  }d}ht                              dt          |                      |sdS )znAn iterative dataflow algorithm to find the definition
            (the source) of each PHI node.
            TFzchanging phismap: %sN)	r   r   rw   listr   rr   rR   rS   r
   )	r   	blacklistchangingr   defsitesr   r|   	to_remover   s	           r&   propagate_phi_mapz+Flow._prune_phis.<locals>.propagate_phi_map   s     $C((I %+D,A,A%B%B ( (MC&,T(^^&<&< = =
U'>>$4H%cN..U|<<< )#I 8+ ( I-#'4mG6L6LMMM Er%   c                    i }|                                  D ]\  }}|D ]}||         ||<   t                              dt          |                     t	          t
                    }|D ]}||         D ]\  }}|||         |<   t                              dt          |                     j        D ];}|j                                         |j        	                    ||                    <d S )Nzkeep phismap: %sznew_out: %s)
r   rR   rS   r
   r   dictri   r   clearupdate)	r   r   keepr|   used_setr   new_outr   rz   s	           r&   apply_changesz'Flow._prune_phis.<locals>.apply_changes  s   D#,??#4#4 - -x# - -C 'DII-MM,mD.A.ABBB!$''G . ."&s) . .JC*-GEN3''. MM-w)?)?@@@ < <$**,,,$++GEN;;;;< <r%   zUsed_phis: %szDONE Prune PHIs)rR   rS   centerr
   )
r8   rz   r   r   r   r   r   r   r   r   s
    `       @r&   rv   zFlow._prune_phis   s   l))"c22333	& 	& 	& 	& 	&	# 	# 	# 	# 	# 	#	 	 	 	 	,	< 	< 	< 	< 	<  5466	7o}Y'?'?@@@'-//'"""i)))'..r37788888r%   c                 x    |                                 }|j        | j        j        v rdS |j        t
          v rdS dS )NTF)r   offsetrU   labelsr   r   r8   r|   insts      r&   rn   zFlow._is_implicit_new_block  s?    ~~;$.///4[L((45r%   c                     |                                 }|j        dv r.| j        |j                 j        }|dk    rd}t	          |          dS dS )zChecks if the next instruction after a SETUP_WITH is something other
        than a POP_TOP, if it is something else it'll be some sort of store
        which is not supported (this corresponds to `with CTXMGR as VAR(S)`).>   
SETUP_WITHBEFORE_WITHPOP_TOPzGThe 'with (context manager) as (variable):' construct is not supported.N)r   r   rU   r   r   )r8   r|   current_instnext_opmsgs        r&   ro   zFlow._guard_with_as'  se     ~~''"???n\%67>G)##$ /s333 @?##r%   N)r   r   r    rM   r:   r   r   rm   NotImplementedErrorru   rv   rn   ro   r$   r%   r&   rP   rP   K   s         ( ( (
8< 8< 8<t ///	$ 	$ 	$ 	$6 
j	 	 	# 	# 	# 	#, "!),,,
 
 
K9 K9 K9Z  4 4 4 4 4r%   rP   c                 ,    |                      d          S )Nz$null$)
startswith)regs    r&   _is_null_temp_regr   5  s    >>(###r%   c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zedv rd Zd Zd Zd Zedv rd Znedk     r	 edv rd Znedv rd Znedv rd Zn ee          d Zd Zd Zd Zd Zd Zedv r
d Zd Zd  Zned!v rn ee          ed"v reZeZ ned#v rn ee          d$ Z!d% Z"d& Z#d' Z$d( Z%d) Z&d* Z'd+ Z(d, Z)d- Z*d. Z+d/ Z,d0 Z-d1 Z.d2 Z/d3 Z0d4 Z1ed"v rd5 Z2ned#v rn ee          ed"v rd6 Z3ned#v rn ee          d7 Z4e4Z5e4Z6ed"v re4Z7e4Z8ned#v rn ee          d8 Z9e9Z:e9Z;d9 Z<d: Z=d; Z>d< Z?d= Z@d> ZAd? ZBd@ ZCdA ZDdB ZEeEZFdC ZGdD ZHdE ZIed"v rdF ZJned#v rn ee          dG ZKedHv rdI ZLnedv rdJ ZLn ee          dK ZMdL ZNedv rdM ZOnedNv rdO ZOned#v rn ee          dP ZPdQ ZQdR ZRdS ZSdT ZTdU ZUdV ZVdW ZWdX ZXdY ZYdZ ZZedHv rd[ Z[nedv rd\ Z[n ee          d] Z\d^ Z]d_ Z^d` Z_da Z`db Zadc Zbdd Zcedv rde Zdned!v rn ee          edv rdf Zened!v rdg Zen ee          dh Zfed"v rdi Zgned#v rn ee          dj Zhdk Zidl Zjdm Zkdn Zldo Zmdp Zndq Zodr Zpds Zqdt Zrdu Zsdv Ztdw Zudx Zvdy Zwdz Zxd{ Zyd| Zzd} Z{d~ Z|d Z}d Z~d Zd Zd Zd Zd ZeZeZeZeZd ZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZddZd Zd Zd Zd Zd Zd ZedHv rd Znedv rd Zn ee          ed"v rnedv rd Znedv rd Zn ee          d ZdS )rc   zLTrace runner contains the states for the trace and the opcode dispatch.
    c                 `    || _         t                      | _        t                      | _        d S r5   )r\   r   rf   r   ri   )r8   r\   s     r&   r:   zTraceRunner.__init__<  s$    ,wwr%   c                 ,    t          | j        |          S r5   )r   r\   )r8   linenos     r&   get_debug_loczTraceRunner.get_debug_locA  s    4&///r%   c                    t           dv rS|j        rK|j        rD|j        d         }|d         }|%||j        k    r|j                                         nn|j        Dnt           dv rnt	          t                     |                                }|j        dk    rAt                              d|j	        |           t                              d|j
                   t          | d                    |j                  d           }| |||           d S d	|j        z  }t          ||                     |j                  
          )Nr   r   r   CACHEzdispatch pc=%s, inst=%szstack %szop_{}z$Use of unsupported opcode (%s) foundloc)r   _blockstackr^   popr   r   r   rR   rS   r   rj   getattrrE   r   r   r   )r8   r|   topblkblk_endr   fnr   s          r&   rk   zTraceRunner.dispatchD  sR   333  ' ".r2F$UmG*w%:J/J/J)--//// '  *$$%i000~~;'!!MM3UYEEEMM*el333T7>>$+66==>BudOOOOO84;FC*3/3/A/A$+/N/NP P P Pr%   c                     |                     d          }|                    |           |j        }i }|d         }||k    r||z
  |d<   d}|d         r|dz  }||d<    |j        d
d|d         i| d	S )zo
        Adjust stack when entering an exception handler to match expectation
        by the bytecode.
        r.   r   r      r   r   rY   r   Nr$   )r   r   r   r   )r8   r|   r   rZ   r   expected_depthextra_stacks          r&   r   z TraceRunner._adjust_except_stack_  s    
 $$U++!!&)))".N""#n4F6N, 	1K%w
..fUm.v.....r%   c                 0    |                     |           d S r5   rg   r   s      r&   op_NOPzTraceRunner.op_NOPs      Tr%   c                 0    |                     |           d S r5   r   r   s      r&   	op_RESUMEzTraceRunner.op_RESUMEv  r   r%   c                 0    |                     |           d S r5   r   r   s      r&   op_CACHEzTraceRunner.op_CACHEy  r   r%   c                 0    |                     |           d S r5   r   r   s      r&   
op_PRECALLzTraceRunner.op_PRECALL|  r   r%   c                 ~    |                     |                                           |                    |           d S r5   )push	make_nullrg   r   s      r&   op_PUSH_NULLzTraceRunner.op_PUSH_NULL  s6    

5??$$%%%Tr%   c                 ~    |                     |                                           |                    |           d S r5   )r  	make_temprg   r   s      r&   op_RETURN_GENERATORzTraceRunner.op_RETURN_GENERATOR  s8     	

5??$$%%%Tr%   r   c                     t           dk    sJ |                                }|                                }|                                }|                    ||||           |                    |           d S )Nr   r9   resstrvar)r   r   r  rg   r  )r8   r|   r   r9   r  r  s         r&   op_FORMAT_SIMPLEzTraceRunner.op_FORMAT_SIMPLE  sk    ''''IIKKE__&&F//##CLLUFLCCCJJsOOOOOr%   c                 F   |j         dk    r+d}t          ||                     |j                            |                                }|                                }|                                }|                    ||||           |                    |           dS )aF  
        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   r  rg   r  )r8   r|   r   r   r9   r  r  s          r&   op_FORMAT_VALUEzTraceRunner.op_FORMAT_VALUE  s     8q==>C*3/3/A/A$+/N/NP P P P		""ooTC???

3r%   c                 Z   |j         }t          t          fdt          |          D                                 }|dk    r                                g}nfdt          |dz
            D             }                    |||                               |d                    dS )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
        c                 8    g | ]}                                 S r$   r   .0_r|   s     r&   
<listcomp>z/TraceRunner.op_BUILD_STRING.<locals>.<listcomp>  s!     C C C C C Cr%   r   c                 8    g | ]}                                 S r$   r  r  s     r&   r  z/TraceRunner.op_BUILD_STRING.<locals>.<listcomp>  s#    @@@!EOO%%@@@r%   r   )stringstmpsr   Nr  r   reversedranger  rg   r  )r8   r|   r   countr   r!  s    `    r&   op_BUILD_STRINGzTraceRunner.op_BUILD_STRING  s     x C C C CeEll C C CDDEEA::OO%%&DD@@@@uUQY/?/?@@@DT7666

48r%   c                 .    |                                  d S r5   r  r   s      r&   
op_POP_TOPzTraceRunner.op_POP_TOP  s    		r%   c                     |                                 }|                                }|                    |||           |                    |           d S )N)valr  )r  r   rg   r  )r8   r|   r   r  toss        r&   
op_TO_BOOLzTraceRunner.op_TO_BOOL  sI    //##C))++CLL3CL000JJsOOOOOr%   r   c                    |                                 }|j        dz	  }|                    |||           |                    |           |j        dz  r)|                    |                                           d S d S Nr   )idxr  r  r  rg   r  r	  r8   r|   r   r  r/  s        r&   op_LOAD_GLOBALzTraceRunner.op_LOAD_GLOBAL  s}    //##C(a-CLL3CL000JJsOOOx!| .

5??,,-----. .r%   r*   r   c                     |                                 }|j        dz	  }|                    |||           |j        dz  r'|                    |                                           |                    |           d S r.  r0  r1  s        r&   r2  zTraceRunner.op_LOAD_GLOBAL  sq    //##C(a-CLL3CL000x!| .

5??,,---JJsOOOOOr%   r   c                     |                                 }|                    ||           |                    |           d S Nr  r  rg   r  r8   r|   r   r  s       r&   r2  zTraceRunner.op_LOAD_GLOBAL  s:    //##CLL3L'''JJsOOOOOr%   c                 0    |                     |           d S r5   r   r   s      r&   op_COPY_FREE_VARSzTraceRunner.op_COPY_FREE_VARS  r   r%   c                 0    |                     |           d S r5   r   r   s      r&   op_MAKE_CELLzTraceRunner.op_MAKE_CELL  r   r%   c                     |                                 }|                    ||           |                    |           d S r6  r8  r9  s       r&   op_LOAD_DEREFzTraceRunner.op_LOAD_DEREF  :    ooTs###

3r%   c                     |                     d          d|j         z   }|                    |           |                    ||           d S )Nconst.r7  )r  r  r  rg   r9  s       r&   op_LOAD_CONSTzTraceRunner.op_LOAD_CONST  sK    oog&&TX7

3Ts#####r%   c                 ,   |                                 }|                                }t          dv rG|                    |           |j        dz  r'|                    |                                           nt          dv rG|j        dz  r'|                    |                                           |                    |           n3t          dv r|                    |           nt          t                    |                    |||           d S )Nr  r   r   r'   itemr  )r   r  r   r  r  r	  r   rg   )r8   r|   r   rH  r  s        r&   op_LOAD_ATTRzTraceRunner.op_LOAD_ATTR  s    yy{{oo
""JJsOOOx!| .

5??,,---*$$x!| .

5??,,---JJsOOOO,,,JJsOOOO%i000T#.....r%   c                 r   t           dk    sJ t           dv r	 |                    |          }n# t          $ r |j        }t	          |j                  }t	          |j                  }t	          |j                  }||z   }d|j        |z
  cxk    r|k     sn J |	                                }	|
                    ||	d           |                    |	           Y d S w xY w|                    |          }|	                    |          }	|
                    ||	           |                    |	           d S )Nr   r  r   T)r  as_load_derefr7  )r   get_varname
IndexErrorrU   lenco_varnamesco_freevarsco_cellvarsr  r  rg   r  )
r8   r|   r   namebcnum_varnamesnum_freevarsnum_cellvarsmax_fast_localr  s
             r&   op_LOAD_FASTzTraceRunner.op_LOAD_FAST  sK   G######((..    _"2>22"2>22"2>22!-!<DH|3DDDDnDDDDDDoo''Ts$???

3" $$T**Dood##Ts###

3s   . B,CCc                 T   |j         }|dz	  }|dz  }|                    |          }|                    |          }|                    |          }|                    |          }	|                    |||	           |                    |           |                    |	           d S )N      )res1res2)r  get_varname_by_argr  rg   r  )
r8   r|   r   opargoparg1oparg2name1name2r\  r]  s
             r&   op_LOAD_FAST_LOAD_FASTz"TraceRunner.op_LOAD_FAST_LOAD_FAST"  s    HEaZFRZF,,V44E,,V44E??5))D??5))DLLDtL444JJtJJtr%   c                     |j         }|dz  }|                                }|                    |          }|                    |          }|                    |||           |                    |           d S )Nr[  )store_valueload_res)r  r   r^  r  rg   r  )r8   r|   r   r_  ra  rf  	load_namerg  s           r&   op_STORE_FAST_LOAD_FASTz#TraceRunner.op_STORE_FAST_LOAD_FAST.  ss    HERZF))++K0088Iy11HLL;LJJJJJx     r%   c                     |                                 }|                                 }|                    |||           d S )N)value1value2r   rg   )r8   r|   r   rk  rl  s        r&   op_STORE_FAST_STORE_FASTz$TraceRunner.op_STORE_FAST_STORE_FAST8  s:    YY[[FYY[[FLLfVL<<<<<r%   r(   r*   r   r   r'   c                 0    |                     |           d S r5   r   r   s      r&   op_DELETE_FASTzTraceRunner.op_DELETE_FASTJ  r   r%   c                 \    |                                 }|                    ||           d S )N)r   rm  )r8   r|   r   r   s       r&   op_DELETE_ATTRzTraceRunner.op_DELETE_ATTRM  s+    T&)))))r%   c                     |                                 }|                                 }|                    |||           d S )N)r   r9   rm  )r8   r|   r   r   r9   s        r&   op_STORE_ATTRzTraceRunner.op_STORE_ATTRQ  s:    		T&66666r%   c                 \    |                                 }|                    ||           d S N)r9   rm  r8   r|   r   r9   s       r&   op_STORE_DEREFzTraceRunner.op_STORE_DEREFV  +    		T'''''r%   c                 \    |                                 }|                    ||           d S rw  rm  rx  s       r&   op_STORE_FASTzTraceRunner.op_STORE_FASTZ  rz  r%   c           	      X   |                                 }|                                 }|                                }|                                }|                                }|                                }|                    |||||||           |                    |           dS )z"
        TOS = TOS1[TOS:]
        )basestartr  slicevarindexvarnonevarNr   r  rg   r  	r8   r|   r   r+  tos1r  r  r  r  s	            r&   
op_SLICE_1zTraceRunner.op_SLICE_1^  s     iikkyy{{oo??$$??$$//## 	 	
 	
 	
 	

3r%   c           	      X   |                                 }|                                 }|                                }|                                }|                                }|                                }|                    |||||||           |                    |           dS )z"
        TOS = TOS1[:TOS]
        )r~  stopr  r  r  r  Nr  r  s	            r&   
op_SLICE_2zTraceRunner.op_SLICE_2s  s     iikkyy{{oo??$$??$$//## 	 	
 	
 	
 	

3r%   c           	      X   |                                 }|                                 }|                                 }|                                }|                                }|                                }|                    |||||||           |                    |           dS )z&
        TOS = TOS2[TOS1:TOS]
        )r~  r  r  r  r  r  Nr  )	r8   r|   r   r+  r  tos2r  r  r  s	            r&   
op_SLICE_3zTraceRunner.op_SLICE_3  s     iikkyy{{yy{{oo??$$??$$ 	 	
 	
 	
 	

3r%   c                    |                                 }|                                 }|                                }|                                }|                                }|                    ||||||           dS )z
        TOS[:] = TOS1
        )r~  r9   r  r  r  Nr   r  rg   )r8   r|   r   r+  r9   r  r  r  s           r&   op_STORE_SLICE_0zTraceRunner.op_STORE_SLICE_0  s     iikk		??$$??$$//## 	 	
 	
 	
 	
 	
r%   c           	      .   |                                 }|                                 }|                                 }|                                }|                                }|                                }|                    |||||||           dS )z#
        TOS1[TOS:] = TOS2
        )r~  r  r  r9   r  r  Nr  	r8   r|   r   r+  r  r9   r  r  r  s	            r&   op_STORE_SLICE_1zTraceRunner.op_STORE_SLICE_1  s     iikkyy{{		??$$??$$//## 	 	
 	
 	
 	
 	
r%   c           	      .   |                                 }|                                 }|                                 }|                                }|                                }|                                }|                    |||||||           dS )z#
        TOS1[:TOS] = TOS2
        )r~  r  r9   r  r  r  Nr  r  s	            r&   op_STORE_SLICE_2zTraceRunner.op_STORE_SLICE_2  s     iikkyy{{		??$$??$$//## 	 	
 	
 	
 	
 	
r%   c           	      .   |                                 }|                                 }|                                 }|                                 }|                                }|                                }|                    |||||||           dS )z'
        TOS2[TOS1:TOS] = TOS3
        )r~  r  r  r9   r  r  Nr  )	r8   r|   r   r+  r  r  r9   r  r  s	            r&   op_STORE_SLICE_3zTraceRunner.op_STORE_SLICE_3  s     iikkyy{{yy{{		??$$??$$ 	 	
 	
 	
 	
 	
r%   c                     |                                 }|                                }|                                }|                                }|                    |||||           dS )z
        del TOS[:]
        )r~  r  r  r  Nr  )r8   r|   r   r+  r  r  r  s          r&   op_DELETE_SLICE_0zTraceRunner.op_DELETE_SLICE_0  so     iikk??$$??$$//##sX 	 	
 	
 	
 	
 	
r%   c                    |                                 }|                                 }|                                }|                                }|                                }|                    ||||||           dS )z 
        del TOS1[TOS:]
        )r~  r  r  r  r  Nr  r8   r|   r   r+  r  r  r  r  s           r&   op_DELETE_SLICE_1zTraceRunner.op_DELETE_SLICE_1  s     iikkyy{{??$$??$$//## 	 	
 	
 	
 	
 	
r%   c                    |                                 }|                                 }|                                }|                                }|                                }|                    ||||||           dS )z 
        del TOS1[:TOS]
        )r~  r  r  r  r  Nr  r  s           r&   op_DELETE_SLICE_2zTraceRunner.op_DELETE_SLICE_2
  s     iikkyy{{??$$??$$//## 	 	
 	
 	
 	
 	
r%   c                    |                                 }|                                 }|                                 }|                                }|                                }|                    ||||||           dS )z$
        del TOS2[TOS1:TOS]
        )r~  r  r  r  r  Nr  )r8   r|   r   r+  r  r  r  r  s           r&   op_DELETE_SLICE_3zTraceRunner.op_DELETE_SLICE_3  s|     iikkyy{{yy{{??$$??$$t4cH 	 	
 	
 	
 	
 	
r%   c                    |j         }|dk    r/|                                }|                                }|}|}d}nX|dk    rC|                                }|                                }|                                }	|	}|}|}nt          d          |                                }
|                                }|                    ||||||
           |                    |           dS )z<
        slice(TOS1, TOS) or slice(TOS2, TOS1, TOS)
           Nr   unreachable)r  r  stepr  r  )r  r   	Exceptionr  rg   r  )r8   r|   r   argcr+  r  r  r  r  r  r  r  s               r&   op_BUILD_SLICEzTraceRunner.op_BUILD_SLICE*  s     x199))++C99;;DEDDDQYY))++C99;;D99;;DEDDDM***??$$ooDtx 	 	
 	
 	
 	

3r%   c           	      X   |                                 }|                                 }|                                 }|                                }|                                }|                                }|                    |||||||           |                    |           d S )N)r  r   	containerr  r  temp_resr  )	r8   r|   r   r   r  r  r  r  r  s	            r&   op_BINARY_SLICEzTraceRunner.op_BINARY_SLICEF  s    ))++CIIKKE		I((H//##C((HLLEsiS!H     JJsOOOOOr%   c           	      .   |                                 }|                                 }|                                 }|                                 }|                                }|                                }|                    |||||||           d S )N)r  r   r  r9   r  r  r  )	r8   r|   r   r   r  r  r9   r  r  s	            r&   op_STORE_SLICEzTraceRunner.op_STORE_SLICEX  s    ))++CIIKKE		IIIKKE((H//##CLLEsiu(      r%   c                     |                                 }|                    ||           |                                }|j        }|                    |           ||k    r|                    |           d S d S )Npredr   )r   rg   get_jump_targetr   r   )r8   r|   r   r  target_inst	next_insts         r&   _op_POP_JUMP_IFzTraceRunner._op_POP_JUMP_IFi  s    yy{{T%%%**,,I	 	

i
   )##JJ+J&&&&& $#r%   c                     |                                 }|                    ||           |                    |j        d           |                    |                                           d S )Nr  r   rY   r   r   )get_tosrg   r   r   r  )r8   r|   r   r  s       r&   _op_JUMP_IF_OR_POPzTraceRunner._op_JUMP_IF_OR_POP  sc    }}T%%%

dia
(((

d**,,
-----r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_POP_JUMP_FORWARD_IF_NONEz'TraceRunner.op_POP_JUMP_FORWARD_IF_NONE      UD)))))r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_POP_JUMP_FORWARD_IF_NOT_NONEz+TraceRunner.op_POP_JUMP_FORWARD_IF_NOT_NONE  r  r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_POP_JUMP_BACKWARD_IF_NONEz(TraceRunner.op_POP_JUMP_BACKWARD_IF_NONE  r  r%   c                 2    |                      ||           d S r5   r  r   s      r&    op_POP_JUMP_BACKWARD_IF_NOT_NONEz,TraceRunner.op_POP_JUMP_BACKWARD_IF_NOT_NONE  r  r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_POP_JUMP_FORWARD_IF_FALSEz(TraceRunner.op_POP_JUMP_FORWARD_IF_FALSE  r  r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_POP_JUMP_FORWARD_IF_TRUEz'TraceRunner.op_POP_JUMP_FORWARD_IF_TRUE  r  r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_POP_JUMP_BACKWARD_IF_FALSEz)TraceRunner.op_POP_JUMP_BACKWARD_IF_FALSE  r  r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_POP_JUMP_BACKWARD_IF_TRUEz(TraceRunner.op_POP_JUMP_BACKWARD_IF_TRUE  r  r%   c                     |                     |           |                    |                                           d S Nr   rg   r   r  r   s      r&   op_JUMP_FORWARDzTraceRunner.op_JUMP_FORWARD  :    T

d**,,
-----r%   c                     |                     |           |                    |                                           d S r  r  r   s      r&   op_JUMP_BACKWARDzTraceRunner.op_JUMP_BACKWARD  r  r%   c                     |                     |           |                    |                                           d S r  r  r   s      r&   op_JUMP_ABSOLUTEzTraceRunner.op_JUMP_ABSOLUTE  r  r%   c                     |                     d          d         }|                    ||           |                                 |                    |           d S )Nr/   r   r   r   )r   rg   	pop_blockr   )r8   r|   r   r   s       r&   op_BREAK_LOOPzTraceRunner.op_BREAK_LOOP  sZ    !!&))%0Ts###

c
r%   c                     |                     ||                                |                                           |                                 d S )Nretvalcastval)rg   r   r  	terminater   s      r&   op_RETURN_VALUEzTraceRunner.op_RETURN_VALUE  sB    T%))++u7H7HIIIr%   c                     |                     d          }|                    |||                                            |                                 d S )NrB  r  )r  rg   r  r9  s       r&   op_RETURN_CONSTzTraceRunner.op_RETURN_CONST  sK    //'**CLLc5??3D3DLEEEOOr%   c                     |                                 }|                                }|                    |||           |                    |           d S N)r9   r  r  r8   r|   r   r*  r  s        r&   op_YIELD_VALUEzTraceRunner.op_YIELD_VALUE  I    iikkooT#...

3r%   r   c                    |j         dk    r@d }|                                r)t          d|                     |j                            n/|j         dk    r|                                }nt          d          |                    ||           |                                r|                     |           d S |	                                 d S )Nr   4The re-raising of an exception is not yet supported.r   r   )Multiple argument raise is not supported.exc)
r  r   r   r   r   r   
ValueErrorrg   r   r  r8   r|   r   r  s       r&   op_RAISE_VARARGSzTraceRunner.op_RAISE_VARARGS  s    x1}} '')) 2N ..t{;;   
 Qiikk !LMMMLL3L'''##%% "))%00000!!!!!r%   c                    t          |                    d          d u|                    d          d ug          }|j        dk    r.d }|r)t          d|                     |j                            n/|j        dk    r|                                }nt          d          |                    ||           |	                                 d S )	Nr1   r2   r   r  r   r   r  r  )
anyr   r  r   r   r   r   r  rg   r  )r8   r|   r   in_exc_blockr  s        r&   r  zTraceRunner.op_RAISE_VARARGS  s    ##H--T9##I..d:   L x1}} 2N ..t{;;   
 Qiikk !LMMMLL3L'''OOr%   c                     g }t          t                    D ]@}|                                }|                    |           |                    |           A|                    ||           d S )N)temps)r$  r   r  rg   r  )r8   r|   r   r  itmps         r&   op_BEGIN_FINALLYzTraceRunner.op_BEGIN_FINALLY  sm    +,, 	 	A//##CLLJJsOOOOT'''''r%   c                 d    |                                 }|                    |d                    d S )Nr   )r  reset_stackr8   r|   r   blks       r&   op_END_FINALLYzTraceRunner.op_END_FINALLY  s0    oo#m,-----r%   c                 .    |                                  d S r5   r  r   s      r&   
op_END_FORzTraceRunner.op_END_FOR      IIKKKKKr%   rF  c                 V    |                                  |                                  d S r5   r  r   s      r&   r  zTraceRunner.op_END_FOR  s     IIKKKIIKKKKKr%   c                 r    |j         dk    r+d}t          ||                     |j                            d S )Nr   zGUnsupported use of a bytecode related to try..finally or a with-contextr   )r  r   r   r   )r8   r|   r   r   s       r&   op_POP_FINALLYzTraceRunner.op_POP_FINALLY  sK    8q==(C*3/3/A/A$+/N/NP P P P =r%   c                     d S r5   r$   r   s      r&   op_CALL_FINALLYzTraceRunner.op_CALL_FINALLY  s    r%   c                 .    |                                  d S r5   )r  r   s      r&   op_WITH_EXCEPT_STARTz TraceRunner.op_WITH_EXCEPT_START  s    r%   c                 0    |                     |           d S r5   r   r   s      r&   op_WITH_CLEANUP_STARTz!TraceRunner.op_WITH_CLEANUP_START      Tr%   c                 0    |                     |           d S r5   r   r   s      r&   op_WITH_CLEANUP_FINISHz"TraceRunner.op_WITH_CLEANUP_FINISH   r  r%   c                 ~    |                     |                    d|                                                     d S )Nr/   r   r   )
push_blockr   r  r   s      r&   op_SETUP_LOOPzTraceRunner.op_SETUP_LOOP$  sN    ((**   	
 	
 	
 	
 	
r%   c                 j   |                                 }|                                }|                    d          }|                    |           |                    |           |j        }|                    |j                  }|g}|j        D ]'}	|	j        |j        k    r|                    |	           (t          d |D                       }
|                    ||||
           |
                    |                    d|
                     |                    |j                   d S )Nsetup_with_exitfnprefixc              3   $   K   | ]}|j         V  d S r5   r   )r  r   s     r&   	<genexpr>z-TraceRunner.op_BEFORE_WITH.<locals>.<genexpr>?  s$      --R"&------r%   )contextmanagerexitfnr   r0   r  r   )r   r  r  rU   find_exception_entryr   exception_entriesr   rg   maxr	  r   r   )r8   r|   r   cmyieldedr  rS  ehhead	ehrelatedr   r   s              r&   op_BEFORE_WITHzTraceRunner.op_BEFORE_WITH-  s;   YY[[//##(;<<

6

7 _((33H	& 	% 	%ByFM))  $$$--9-----T"VEEE   	
 	
 	
 	

di
     r%   c                    |                                 }|                                }|                    d          }|                    |||           |                    |           |                    |           |                    |                    d|                                                     |                    |j                   d S )Nr  r  )r  r  r0   r  r   )	r   r  rg   r  r	  r   r  r   r   )r8   r|   r   r  r  r  s         r&   op_SETUP_WITHzTraceRunner.op_SETUP_WITHK  s    YY[[//##(;<<T"V<<<

6

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

di
     r%   c           	          |                     |d d          }|                    ||                     d|d|                     d S )NF)r   r   r  r.   )r   r   r  r   r   )r   r   )r8   r   r|   r   r   handler_blocks         r&   
_setup_tryzTraceRunner._setup_try^  su     (( ) 
 
 	

((!%	 )   	 	
 	
 	
 	
 	
r%   c                     |                                 }|                    |                    d                     |                    |           d S )N	exception)r   r  r  )r8   r|   r   r+  s       r&   op_PUSH_EXC_INFOzTraceRunner.op_PUSH_EXC_INFOr  s@    iikk

5??;//000

3r%   c                     |                     |           |                     d||j        |                                           d S )Nr2   )r   r   )rg   r  r   r  r   s      r&   op_SETUP_FINALLYzTraceRunner.op_SETUP_FINALLYw  sP    Tu49$2F2F2H2H 	 	
 	
 	
 	
 	
r%   c                 .    |                                  d S r5   r  r   s      r&   op_POP_EXCEPTzTraceRunner.op_POP_EXCEPT~  r  r%   c                    |                                 }|d         t          d          t          d          hvr2t          d|d          |                     |j                            |                                 |                                 |                                 |                    |j                   d S )Nr   r1   r2   z$POP_EXCEPT got an unexpected block: r   r   )r  r-   r   r   r   r   r   r   r  s       r&   r&  zTraceRunner.op_POP_EXCEPT  s    //##C6{9X#6#6	)8L8L"MMM.H3v;HH**4;77    IIKKKIIKKKIIKKKJJ$)J$$$$$r%   c                 &   |                                 }|d         t          d          k    r|                    |d           n0|d         t          d          k    r|                    |d           |                    |j                   d S )Nr   r.   try)r   r0   withr   )r  r-   rg   r   r   r  s       r&   op_POP_BLOCKzTraceRunner.op_POP_BLOCK  s    oov;)E****LLEL****[If----LLFL+++

di
     r%   c                     |                                 }|                                 }|                                }|                    ||||           |                    |           d S )N)indexr   r  r  )r8   r|   r   r-  r   r  s         r&   op_BINARY_SUBSCRzTraceRunner.op_BINARY_SUBSCR  sX    		ooTv3???

3r%   c                     |                                 }|                                 }|                                 }|                    ||||           d S )N)r   r-  r9   rm  )r8   r|   r   r-  r   r9   s         r&   op_STORE_SUBSCRzTraceRunner.op_STORE_SUBSCR  sI    				T&UCCCCCr%   c                     |                                 }|                                 }|                    |||           d S )N)r   r-  rm  )r8   r|   r   r-  r   s        r&   op_DELETE_SUBSCRzTraceRunner.op_DELETE_SUBSCR  s:    		T&66666r%   c                 Z   |j         }t          t          fdt          |          D                                 }t          dk    r?                                }                                }t          |          s|g|}d }n`t          dk     rU                                }                                }	t          |	          r|}n|	}|g|}                                }                                }
	                    |||||
           
                    |
           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z'TraceRunner.op_CALL.<locals>.<listcomp>  !    ???aeiikk???r%   r   funcargskw_namesr  )r  r   r#  r$  r   r   r   pop_kw_namesr  rg   r  )r8   r|   r   nargr8  null_or_selfcallabler9  callable_or_firstargnull_or_callabler  s    `         r&   op_CALLzTraceRunner.op_CALL  s#   xH????5;;???@@AA 99;;Lyy{{H$\22 -$,t,HH  #(99;; $yy{{ !122 5/+,4t4))++HooTthCPPP

3r%   c                 :    |                     |j                   d S r5   )set_kw_namesr  r   s      r&   op_KW_NAMESzTraceRunner.op_KW_NAMES  s    48$$$$$r%   c                 ,   |j         }t          t          fdt          |          D                                 }                                }                                }                    ||||                               |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z0TraceRunner.op_CALL_FUNCTION.<locals>.<listcomp>  r5  r%   )r7  r8  r  )r  r   r#  r$  r   r  rg   r  )r8   r|   r   r;  r8  r7  r  s    `     r&   op_CALL_FUNCTIONzTraceRunner.op_CALL_FUNCTION  s    xH????5;;???@@AAyy{{ooT4S999

3r%   c                 V   |j         }                                }t          t          fdt	          |          D                                 }                                }                                }                    |||||                               |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z3TraceRunner.op_CALL_FUNCTION_KW.<locals>.<listcomp>  r5  r%   )r7  r8  namesr  )r  r   r   r#  r$  r  rg   r  )r8   r|   r   r;  rI  r8  r7  r  s    `      r&   op_CALL_FUNCTION_KWzTraceRunner.op_CALL_FUNCTION_KW  s    x		H????5;;???@@AAyy{{ooT4u#FFF

3r%   c                    |j         }                                }t          t          fdt	          |          D                                 }                                }                                }t          |          s|g|}                                }                    |||||                               |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z*TraceRunner.op_CALL_KW.<locals>.<listcomp>  s!    !C!C!C!%))++!C!C!Cr%   r6  )	r  r   r   r#  r$  r   r  rg   r  )	r8   r|   r   r;  r9  r8  null_or_firstargr=  r  s	    `       r&   
op_CALL_KWzTraceRunner.op_CALL_KW  s    8Dyy{{H!C!C!C!CuT{{!C!C!CDDEED$yy{{yy{{H$%566 1(040//##CLLH4(   " " "JJsOOOOOr%   c                 F   |j         dz  r|                                }nd }|                                }|                                 |                                }|                                }|                    |||||           |                    |           d S )Nr   r7  varargvarkwargr  )r  r   r  rg   r  r8   r|   r   rR  rQ  r7  r  s          r&   op_CALL_FUNCTION_EXzTraceRunner.op_CALL_FUNCTION_EX  s    x!|   99;;YY[[FIIKKK99;;D//##CLLD(   " " "JJsOOOOOr%   c                    |j         dz  r|                                }nd }|                                }|                                }t          dv r7t          |                    d                    r|                                 nt          dv rnt          t                    |                                }|                    |||||           |                    |           d S )Nr   r3  r   rP  )	r  r   r   r   peekr   r  rg   r  rS  s          r&   rT  zTraceRunner.op_CALL_FUNCTION_EX   s    x!|   99;;YY[[F99;;D...$UZZ]]33  IIKKKj(())444//##CLLD(   " " "JJsOOOOOr%   c                 4   fdt          |          D             }|                                 fdt          |          D             }                    |||           |D ]}                    |           |D ]}                    |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z)TraceRunner._dup_topx.<locals>.<listcomp>  s!    222		222r%   c                 8    g | ]}                                 S r$   r  r  s     r&   r  z)TraceRunner._dup_topx.<locals>.<listcomp>  s#    999q""999r%   )origduped)r$  reverserg   r  )r8   r|   r   r%  rZ  r[  r*  s    `     r&   	_dup_topxzTraceRunner._dup_topx  s    2222U5\\222 :999E%LL999TE222 	 	CJJsOOOO 	 	CJJsOOOO	 	r%   c                    	 t          |j                  }nD# t          $ r7 d|j         d}|                     |j                  }t          ||          w xY w|t          j        k    r-|                    ||           |	                                 d S |t          j
        k    rX|                                }|                                }|                    ||||           |                    |           d S |t          j        k    rX|                                }|                                }|                    ||||           |                    |           d S t          |          )Nzop_CALL_INTRINSIC_1()r   )operand)r`  r9   r  )r`  
const_listr  )r   r  rD   r   r   r   ci1opr!   rg   r  r"   r   r  r  r#   r   )	r8   r|   r   r`  r   r   r*  r  r+  s	            r&   op_CALL_INTRINSIC_1zTraceRunner.op_CALL_INTRINSIC_1$  sz   =248<< = = =8TX888((55.s<<<<= %===T7333!!!E000iikkoo''T7#&C  1 1 1

3E999iikkoo''T7(+  6 6 6

3)'222s
    AAc                 t    |j         }d|cxk    rdk    sn J d            |                     |||           d S )Nr   r   zInvalid DUP_TOPX count)r  r]  )r8   r|   r   r%  s       r&   op_DUP_TOPXzTraceRunner.op_DUP_TOPXG  sG    EQ 8udE*****r%   c                 6    |                      ||d           d S )Nr   r%  r]  r   s      r&   
op_DUP_TOPzTraceRunner.op_DUP_TOPL       ud!,,,,,r%   c                 6    |                      ||d           d S )Nr  rg  rh  r   s      r&   op_DUP_TOP_TWOzTraceRunner.op_DUP_TOP_TWOO  rj  r%   c                 `    |                     |                    |j                             d S r5   )r  rV  r  r   s      r&   op_COPYzTraceRunner.op_COPYR  s(    

5::dh''(((((r%   c                 :    |                     |j                   d S r5   )swapr  r   s      r&   op_SWAPzTraceRunner.op_SWAPU  s    

48r%   c                     |                                 }|                                 }|                    |           |                    |           d S r5   r   r  )r8   r|   r   firstseconds        r&   
op_ROT_TWOzTraceRunner.op_ROT_TWOX  sF    		

5

6r%   c                     |                                 }|                                 }|                                 }|                    |           |                    |           |                    |           d S r5   rs  )r8   r|   r   rt  ru  thirds         r&   op_ROT_THREEzTraceRunner.op_ROT_THREE^  se    				

5

5

6r%   c                 N   |                                 }|                                 }|                                 }|                                 }|                    |           |                    |           |                    |           |                    |           d S r5   rs  )r8   r|   r   rt  ru  rx  forths          r&   op_ROT_FOURzTraceRunner.op_ROT_FOURf  s    						

5

5

5

6r%   c                    |j         }                                }fdt          |          D             }                                }                    ||||           t          |          D ]}                    |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z2TraceRunner.op_UNPACK_SEQUENCE.<locals>.<listcomp>s  s#    :::%//##:::r%   )iterablestorestupleobj)r  r   r$  r  rg   r#  r  )r8   r|   r   r%  r  r  r  sts    `      r&   op_UNPACK_SEQUENCEzTraceRunner.op_UNPACK_SEQUENCEp  s    99;;::::U5\\:::??$$THVhOOO6"" 	 	BJJrNNNN	 	r%   c                    |j         }t          t          fdt          |          D                                 }                                }                    |||                               |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z.TraceRunner.op_BUILD_TUPLE.<locals>.<listcomp>{  !    AAAquyy{{AAAr%   r   r  r"  )r8   r|   r   r%  r   tups    `    r&   op_BUILD_TUPLEzTraceRunner.op_BUILD_TUPLEy  t    XAAAAE%LLAAABBCCooTC000

3r%   c                    t          t          fdt          |j                  D                                 }fdt          t	          |          dz
            D             }t	          |          dk    }|r                                g}                    ||||                               |d                    d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z3TraceRunner._build_tuple_unpack.<locals>.<listcomp>  s!    EEE		EEEr%   c                 8    g | ]}                                 S r$   r  r  s     r&   r  z3TraceRunner._build_tuple_unpack.<locals>.<listcomp>  s#    CCCq""CCCr%   r   )tuplesr  	is_assignr   )r   r#  r$  r  rN  r  rg   r  )r8   r|   r   r  r  r  s    `    r&   _build_tuple_unpackzTraceRunner._build_tuple_unpack  s    hEEEEU48__EEEFFGGCCCCE#f++/,B,BCCC KK1$	 	)__&&(ET&KKK

59r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_BUILD_TUPLE_UNPACK_WITH_CALLz+TraceRunner.op_BUILD_TUPLE_UNPACK_WITH_CALL  s      -----r%   c                 2    |                      ||           d S r5   r  r   s      r&   op_BUILD_TUPLE_UNPACKz!TraceRunner.op_BUILD_TUPLE_UNPACK  s      -----r%   c                     |                                 }|                                }|                    |||           |                    |           d S )N)ra  r  r  )r8   r|   r   r+  r  s        r&   op_LIST_TO_TUPLEzTraceRunner.op_LIST_TO_TUPLE  sK     iikkooTcs333

3r%   c                 j                                    }t          t          fdt          |j                  D                                 }fdt          |j                  D             }                                }                    |||||                               |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z6TraceRunner.op_BUILD_CONST_KEY_MAP.<locals>.<listcomp>  s!    CCCaeiikkCCCr%   c                 8    g | ]}                                 S r$   r  r  s     r&   r  z6TraceRunner.op_BUILD_CONST_KEY_MAP.<locals>.<listcomp>  s#    >>>5??$$>>>r%   )keyskeytmpsvaluesr  )r   r   r#  r$  r  r  rg   r  )r8   r|   r   r  valsr  r  s    `     r&   op_BUILD_CONST_KEY_MAPz"TraceRunner.op_BUILD_CONST_KEY_MAP  s    yy{{HCCCC5??CCCDDEE>>>>eDHoo>>>ooTgdLLL

3r%   c                    |j         }t          t          fdt          |          D                                 }                                }                    |||                               |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z-TraceRunner.op_BUILD_LIST.<locals>.<listcomp>  r  r%   r  r"  )r8   r|   r   r%  r   lsts    `    r&   op_BUILD_LISTzTraceRunner.op_BUILD_LIST  r  r%   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S )N)r   r9   	appendvarr  r   r  rV  r  rg   )r8   r|   r   r9   r-  r   r  r  s           r&   op_LIST_APPENDzTraceRunner.op_LIST_APPEND  u    		E""OO%%	ooT& 	 	 	 	 	 	r%   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S )N)r   r9   	extendvarr  r  )r8   r|   r   r9   r-  r   r  r  s           r&   op_LIST_EXTENDzTraceRunner.op_LIST_EXTEND  r  r%   c                 P   |                                 }|j        }g }t          |          D ]A}|                                |                                }}|                    ||f           B|                    ||d d d         ||           |                    |           d S )Nr   )r   sizer  )r  r  r$  r   rg   r  )	r8   r|   r   dctr%  r   r  vks	            r&   op_BUILD_MAPzTraceRunner.op_BUILD_MAP  s    oou 	! 	!A99;;		qALL!Q    Tttt5cBBB

3r%   c                    |                                 }|                                 }||}}|j        }|                    |          }|                                }	|                                }
|                    |||||	|
           d S )N)r   ra   r9   
setitemvarr  r  )r8   r|   r   TOSTOS1ra   r9   r-  r   r  r  s              r&   
op_MAP_ADDzTraceRunner.op_MAP_ADD  s    iikkyy{{CUE""__&&
ooT&c * 	 	5 	5 	5 	5 	5r%   c                    |j         }t          t          fdt          |          D                                 }                                }                    |||                               |           d S )Nc                 8    g | ]}                                 S r$   r  r  s     r&   r  z,TraceRunner.op_BUILD_SET.<locals>.<listcomp>  r  r%   r  r"  )r8   r|   r   r%  r   r  s    `    r&   op_BUILD_SETzTraceRunner.op_BUILD_SET  st    XAAAAE%LLAAABBCCooTC000

3r%   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S N)r   r9   	updatevarr  r  r8   r|   r   r9   r-  r   r  r  s           r&   op_SET_UPDATEzTraceRunner.op_SET_UPDATE  r  r%   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S r  r  r  s           r&   op_DICT_UPDATEzTraceRunner.op_DICT_UPDATE  r  r%   c                     |                                 }|                                }|                    |||           |                    |           d S r  r  )r8   r|   r   r9   r  s        r&   op_GET_ITERzTraceRunner.op_GET_ITER  sI    		ooTC000

3r%   c                    |                                 }|                                }|                                }|                                }|                    |||||           |                    |           |                                }t
          dv r|                    |           n5t
          dv r|                    |d           nt          t
                    |                    |j                   d S )N)iteratorpairindvalr  r   r   r'   r  r  )	r  r  rg   r  r  r   r   r   r   )r8   r|   r   r  r  r  r  r   s           r&   op_FOR_ITERzTraceRunner.op_FOR_ITER  s    ==??  ""  TH4 	 	  	  	 

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

di
     r%   c                     dS )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_STARTzTraceRunner.op_GEN_START	  s	     	r%   c                 D   t           j        |j                 d         }|                                }|                                }t          |         j        }|                    d|           }|                    |||||           |                    |           d S )Nr   binop_r  )oplhsr   r  )	dis_nb_opsr  r   r	   r   r  rg   r  )r8   r|   r   r  r   r  op_namer  s           r&   op_BINARY_OPzTraceRunner.op_BINARY_OP  s    ["1%iikkiikk)"-6oo%7g%7%7o88Tbcs<<<

3r%   c                     |                                 }|                                }|                    |||           |                    |           d S r  r  r  s        r&   _unaryopzTraceRunner._unaryop  r  r%   c                     |                                 }|                                 }|                                }|                    ||||           |                    |           d S )N)r  r   r  r  )r8   r|   r   r   r  r  s         r&   	_binaryopzTraceRunner._binaryop(  sX    iikkiikkooTs555

3r%   Fc           
      \   t           dv rd }n2t           dv r|                                }nt          t                     |                                }d x}x}x}}	t           dv r
|j        J nx|j        dz  r|                                }|j        dz  r|                                }|j        dz  r|                                }|j        dz  r|                                }	|                                }
|                    |||||||	|
           |                    |
           d S )	Nr   r   r     rZ  r  r   )rR  codeclosureannotations
kwdefaultsdefaultsr  )r   r   r   r  r  rg   r  )r8   r|   r   MAKE_CLOSURErR  r  r  r  r  r  r  s              r&   op_MAKE_FUNCTIONzTraceRunner.op_MAKE_FUNCTIONS  sA   333 DD*$$99;;DD%i000yy{{8<<<+<
X##8#### x#~ &))++x#~ *#iikkx#~ )"YY[[
x#~ ' 99;;oo#! 	 		
 		
 		
 	

3r%   c                    t           dv sJ |                                }|                                }|j        dk    r|                    ||           nv|j        dz  r|                    ||           nT|j        dz  r|                    ||           n2|j        dk    r|                    ||	           nt	          d
          |                    |           d S )Nr  r   )r  r  )r  rZ  )r  r  )r  r  )r   r   r  set_function_attributeAssertionErrorr  )r8   r|   r   make_func_stackdatas        r&   op_SET_FUNCTION_ATTRIBUTEz%TraceRunner.op_SET_FUNCTION_ATTRIBUTEx  s    K''''))++yy{{8s?? ((4(HHHHX^ 
	0((T(JJJJX^ 	0((d(KKKKX__(($(GGGG ///

?#####r%   c                 6    |                      ||d           d S )NT)r  )r  r   s      r&   op_MAKE_CLOSUREzTraceRunner.op_MAKE_CLOSURE  s#    eT=====r%   c                     |                                 }|                    ||           |                    |           d S r6  r8  r9  s       r&   op_LOAD_CLOSUREzTraceRunner.op_LOAD_CLOSURE  r@  r%   c                     |                     d          }|                    ||           |                    |           d S )Nassertion_errorr7  r8  r9  s       r&   op_LOAD_ASSERTION_ERRORz#TraceRunner.op_LOAD_ASSERTION_ERROR  s=    oo/00Ts###

3r%   c                     |                     d          }|                                }|                                }|                    ||||           |                    |           d S )N	predicater  r+  r  )r  r   r  rg   r  r8   r|   r   r  r+  r  s         r&   op_CHECK_EXC_MATCHzTraceRunner.op_CHECK_EXC_MATCH  s_    {++iikk}}T#D999

4r%   c                 8   |                     d          }|                                }|                                }|                    ||||           |                    |j                   |                    |                                           d S )Nr  r  r   )r  r   rg   r   r   r  r  s         r&   op_JUMP_IF_NOT_EXC_MATCHz$TraceRunner.op_JUMP_IF_NOT_EXC_MATCH  s     {++iikkyy{{T#D999

di
   

d**,,
-----r%   c                    |                                 }|j        dk    r|                                  |                    ||           |                                r|                     |           d S |                                 d S )Nr   r  )r   r  rg   r   r   r  r  s       r&   
op_RERAISEzTraceRunner.op_RERAISE  s    ))++Cx1}}		LL3L'''##%% "))%00000!!!!!r%   c                     |                                 }|                    ||           |                                 d S )Nr  )r   rg   r  r  s       r&   r  zTraceRunner.op_RERAISE  s;    ))++CLL3L'''OOr%   )r*   c                    |                                 }|                                }|                    |           |                                }|                    |||           |                    |           d S )NrG  )r   r	  r  r  rg   )r8   r|   r   rH  extrar  s         r&   op_LOAD_METHODzTraceRunner.op_LOAD_METHOD  sj    99;;DOO%%EJJu//##CLLDcL222JJsOOOOOr%   c                 2    |                      ||           d S r5   )rI  r   s      r&   r  zTraceRunner.op_LOAD_METHOD  s    eT*****r%   c                 2    |                      ||           d S r5   )rF  r   s      r&   op_CALL_METHODzTraceRunner.op_CALL_METHOD  s    eT*****r%   N)F)r   r   r    rM   r:   r   rk   r   r   r  r  r  r
  r  r   r  r  r&  r(  r,  r2  r   r;  r=  r?  rD  rI  rX  rd  ri  rn  op_LOAD_FAST_CHECKop_LOAD_FAST_AND_CLEARrq  rs  ru  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  op_POP_JUMP_IF_TRUEop_POP_JUMP_IF_FALSEop_POP_JUMP_IF_NONEop_POP_JUMP_IF_NOT_NONEr  op_JUMP_IF_FALSE_OR_POPop_JUMP_IF_TRUE_OR_POPr  r  r  r  r  r  r  r  r  r  op_JUMP_BACKWARD_NO_INTERRUPTr  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r"  r$  r&  r+  r.  r0  r2  r@  rC  rF  rJ  rN  rT  r]  rc  re  ri  rl  rn  rq  rv  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  op_UNARY_NEGATIVEop_UNARY_POSITIVEop_UNARY_NOTop_UNARY_INVERTr  op_COMPARE_OPop_IS_OPop_CONTAINS_OPop_INPLACE_ADDop_INPLACE_SUBTRACTop_INPLACE_MULTIPLYop_INPLACE_DIVIDEop_INPLACE_TRUE_DIVIDEop_INPLACE_FLOOR_DIVIDEop_INPLACE_MODULOop_INPLACE_POWERop_INPLACE_MATRIX_MULTIPLYop_INPLACE_LSHIFTop_INPLACE_RSHIFTop_INPLACE_ANDop_INPLACE_ORop_INPLACE_XORop_BINARY_ADDop_BINARY_SUBTRACTop_BINARY_MULTIPLYop_BINARY_DIVIDEop_BINARY_TRUE_DIVIDEop_BINARY_FLOOR_DIVIDEop_BINARY_MODULOop_BINARY_POWERop_BINARY_MATRIX_MULTIPLYop_BINARY_LSHIFTop_BINARY_RSHIFTop_BINARY_ANDop_BINARY_ORop_BINARY_XORr  r  r  r  r  r  r  r  r  r  r$   r%   r&   rc   rc   9  s          
0 0 0P P P6/ / /(             J	 	 	  $  "   J	 	 	 	 
W		J	. 	. 	. 	. 
(	(	(	 	 	 	 
j	 	 	 	 	 	
 "!),,,      
$ $ $/ / /"  6 J
	 
	 
		! 	! 	!	= 	= 	= 	=
 
1	1	1!!),,,&&&)!-	(	(	(!!),,,  * * *7 7 7
( ( (( ( (  *  *  *
 
 
$
 
 
(
 
 
(
 
 
(
 
 

 
 
$
 
 
$
 
 
  6 &&&	 	 	 	 
(	(	(!!),,,&&&	 	 	 	 
(	(	(!!),,,
' 
' 
' **&&&-"1	(	(	(!!),,,. . . 1/* * ** * ** * ** * ** * ** * ** * ** * *. . .. . . %5!. . .     &&&	 	 	 	 
(	(	(!!),,,   ///	" 	" 	" 	"* 
j	 	 	 	 	 	& "!),,,( ( (. . . J	 	 	 		j	 	 	 	 	 	 
(	(	(!!),,,P P P        
 
 
! ! !<! ! !&
 
 
(  

 
 
 ///	 	 	 	 
j	 	 	% 	% 	% 	% "!),,,! ! !  D D D7 7 7
  0% % %     J	 	 	 	 
1	1	1!!),,,J	 	 	 	  
1	1	1	 	 	 	* "!),,,
 
 
 &&&	3 	3 	3 	3< 
(	(	(!!),,,+ + +
- - -- - -) ) )              . . .. . .          	 	 		5 	5 	5        ! ! !(	 	 	     ! LO   MHNN##!&'! !*!!NMNM"" %& O )  MLM# # # #J$ $ $*> > >  
  
  . . . ///
	" 
	" 
	" 
	" 
j	 	 	 	 	 	 "!),,,
 &&&	k	!	!	 	 	 	 
j	 	 	+ 	+ 	+ 	+ "!),,,+ + + + +r%   rc   c                   d   e Zd ZdZd.dZd Zd Zd Zd Zd Z	e
d	             Ze
d
             Ze
d             Ze
d             Ze
d             Ze
d             Zd Zd Zd Zd Zd/dZd Zd Zd Zd Zd Zd Zd Zd Zd0dZd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d&e%fd'Z&d( Z'd1d*Z(d+ Z)d, Z*d- Z+dS )2_StatezState of the trace
    r$   c                    || _         || _        || _        || _        g | _        t          |          | _        t          |          | _        g | _	        g | _
        g | _        d| _        i | _        t                      | _        t!                      | _        t%          |          D ]P}||v r|                     d          }n|                     d          }|| j        |<   |                     |           QdS )aG  
        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)rU   _pc_initialr   _nstack_initialrj   tuple_blockstack_initialr   r   _temp_registers_insts	_outedges_terminatedr   r   r   r   r   r$  r  r  )r8   rW   rY   rZ   r[   nullvalsr  r   s           r&   r:   z_State.__init__  s     "%#(#4#4 
++! 
(ll%%v 	 	AH}}nnW--nnU++DJsOIIcNNNN	 	r%   c                 B    d                     | j        | j                  S )Nz&State(pc_initial={} nstack_initial={}))rE   r,  r-  r>   s    r&   rL   z_State.__repr__   s%    7>>d2
 
 	
r%   c                     | j         | j        fS r5   )r,  r-  r>   s    r&   get_identityz_State.get_identity  s     $"677r%   c                 D    t          |                                           S r5   )r<   r7  r>   s    r&   r?   z_State.__hash__  s    D%%''(((r%   c                 V    |                                  |                                 k     S r5   r7  rF   s     r&   rH   z_State.__lt__  s%      ""U%7%7%9%999r%   c                 V    |                                  |                                 k    S r5   r:  rF   s     r&   rJ   z_State.__eq__  s%      ""e&8&8&:&:::r%   c                     | j         S )z]The starting bytecode offset of this State.
        The PC given to the constructor.
        )r,  r>   s    r&   r^   z_State.pc_initial  s    
 r%   c                     | j         S )ziThe list of instructions information as a 2-tuple of
        ``(pc : int, register_map : Dict)``
        )r1  r>   s    r&   instructionsz_State.instructions  s    
 {r%   c                     | j         S )zaThe list of outgoing edges.

        Returns
        -------
        edges : List[State]
        r2  r>   s    r&   rq   z_State.outgoing_edges  s     ~r%   c                     | j         S )zThe dictionary of outgoing phi nodes.

        The keys are the name of the PHI nodes.
        The values are the outgoing states.
        )r   r>   s    r&   outgoing_phisz_State.outgoing_phis)  s     ""r%   c                     | j         S )z6A copy of the initial state of the blockstack
        )r/  r>   s    r&   blockstack_initialz_State.blockstack_initial2  s     ''r%   c                 *    t          | j                  S )zYThe current size of the stack

        Returns
        -------
        res : int
        )rN  rj   r>   s    r&   r   z_State.stack_depth8  s     4;r%   c                 n    t          | j                  D ]}|d         t          d          k    r|c S  dS )z&Find the initial *try* block.
        r   r.   N)r#  r/  r-   )r8   r  s     r&   find_initial_try_blockz_State.find_initial_try_blockB  sM     D455 	 	C6{i....


 /	 	r%   c                     | j         S r5   r3  r>   s    r&   rl   z_State.has_terminatedI  s    r%   c                 &    | j         | j                 S r5   )rU   r   r>   s    r&   r   z_State.get_instL  s    ~dh''r%   c                 F    |                                  }|j        | _        d S r5   )r   r   r   r8   r   s     r&   r   z_State.advance_pcO  s    }}9r%    c                 P   |sZd                     || j        |                                 j                                        t          | j                            }n/d                     || j        t          | j                            }| j                            |           |S )Nz"${prefix}{offset}{opname}.{tempct})r  r   r   tempctz${prefix}{offset}.{tempct})r  r   rO  )rE   r   r   r   lowerrN  r0  rg   )r8   r  rR  s      r&   r  z_State.make_tempS  s     	7>>x}}-33554/00	 ?  DD 066x4/00 7  D 	##D)))r%   c                     | j                             |j        |f           | xj        t	          t          |                                                    z  c_        dS )zAppend new instN)r1  rg   r   r   r   _flatten_inst_regsr  )r8   r   r   s      r&   rg   z_State.appende  sL    DK011131&--//BBCCCr%   c                 ,    |                      d          S )Nr   )rV  r>   s    r&   r  z_State.get_tosj  s    yy||r%   c                     | j         |          S )z-Return the k'th element on the stack
        rj   )r8   r  s     r&   rV  z_State.peekm  s     {A2r%   c                 :    | j                             |           dS )zPush to stackN)rj   rg   )r8   rH  s     r&   r  z_State.pushr  s    4     r%   c                 4    | j                                         S )zPop the stack)rj   r   r>   s    r&   r   z
_State.popv  s    {   r%   c                 F    | j         }||          |d         c|d<   || <   dS )zSwap stack[idx] with the tosr   NrU  )r8   r/  ss      r&   rp  z_State.swapz  s,    KC4!B%"q#wwwr%   c                 F    d|v sJ | j                             |           dS )z#Push a block to blockstack
        r   N)r   rg   )r8   synblks     r&   r	  z_State.push_block  s2     &&&&'''''r%   c                 N    | j         d|         | j         |d         c| _         }|S )zVReset the stack to the given stack depth.
        Returning the popped items.
        NrU  )r8   r   poppeds      r&   r  z_State.reset_stack  s-     #k&5&14;uvv3FVr%   TNc                     t          |          |t          | j                  d}|rt          | j                  |d<   nd|d<   ||d<   |S )zMake a new block
        )r   r   r   r   Nr   )r-   rN  rj   )r8   r   r   r  r   ds         r&   r   z_State.make_block  sb     dOOt{++
 

  	$"4;//Am#Am)r%   c                 n    | j                                         }|                     |d                    |S )z)Pop a block and unwind the stack
        r   )r   r   r  r8   r   s     r&   r  z_State.pop_block  s6       ""=)***r%   c                     | j                             |          }d|cxk    rt          | j                   k     sn J | j         d|         | _         dS )zcFind *blk* in the blockstack and remove it and all blocks above it
        from the stack.
        r   N)r   r-  rN  )r8   r  r/  s      r&   r   z_State.pop_block_and_above  sd     $$S))C////#d.////////+DSD1r%   c                 r    t          |          }t          | j                  D ]}|d         |k    r|c S dS )1Find the first block that matches *kind*
        r   N)r-   r#  r   )r8   r   bss      r&   r   z_State.get_top_block  sP     4+,, 	 	B&zT!!			 "	 	r%   c                 h    d |D             }t          | j                  D ]}|d         |v r|c S dS )rd  c                 ,    h | ]}t          |          S r$   )r-   )r  r   s     r&   	<setcomp>z._State.get_top_block_either.<locals>.<setcomp>  s    333T4333r%   r   N)r#  r   )r8   kindsre  s      r&   get_top_block_eitherz_State.get_top_block_either  sX     43U3334+,, 	 	B&zU""			 #	 	r%   c                 0    |                      d          duS )zGReturns a boolean indicating if the top-block is a *try* block
        r.   N)r   r>   s    r&   r   z_State.has_active_try  s     !!%((44r%   c                 6    |                      |j                  S )zBGet referenced variable name from the instruction's oparg
        )r^  r  rL  s     r&   rL  z_State.get_varname  s     &&tx000r%   r_  c                 &    | j         j        |         S )z4Get referenced variable name from the oparg
        )rU   rO  )r8   r_  s     r&   r^  z_State.get_varname_by_arg  s     ~)%00r%   c                     d| _         dS )z!Mark block as terminated
        TNrI  r>   s    r&   r  z_State.terminate  s      r%   r   c           
      "   t          | j                  }|rDd|cxk    rt          | j                  k    sn J t          | j                  |z
  }|d|         }|rAd|k    sJ t          |          D ])}|                    |                                            *t          | j                  }t          dv rF|rC|d         }	|	                    d          p|	d         }
||
k    r|	                                 nn|Cnt          dv rnt          t                    |r|                    |           | j                            t          |t          |          |t          |                               |                                  dS )	zFork the state
        r   Nr   r   r   r   r   )rY   stackr   r[   )r   rj   rN  r$  rg   r  r   r   getr   r   r2  Edger.  r  )r8   rY   r   r   r   rp  rZ   r  r[   topr   s              r&   r   z_State.fork  s    T[!! 	#0000DK 0 0000000%%,F'6'NE 	/::::5\\ / /T^^--....$*++
333  nggl++9s5z99NN$$$$   *$$%i000 	+k***duUZ((
 
 
 	 	 	 	r%   c                 <    |                      | j                   dS )zSplit the state
        r   N)r   r   r>   s    r&   rp   z_State.split_new_block  s      			TX	r%   c                 d   | j         rJ g }| j        D ]}t          | j        |j        t          |j                  |j        d t          |j                  D                       }|	                    |           |j
                                        D ]\  }}|j        |         | j         |<   |S )z+Get states for each outgoing edges
        c                 6    g | ]\  }}t          |          |S r$   )r   )r  r  r  s      r&   r  z._State.get_outgoing_states.<locals>.<listcomp>  s8     $= $= $=$!Q'8';';$=A $= $= $=r%   )rW   rY   rZ   r[   r4  )r   r2  rb   rU   rY   rN  rp  r[   	enumeraterg   r   r   )r8   retr   r|   r   r  s         r&   rs   z_State.get_outgoing_states  s     &&&&N 	9 	9D4>dg!$TZT_$= $=)DJ2G2G $= $= $=> > >E JJu+++-- 9 9Q+/:a=#C((9
r%   c                 $    d | j         D             S )z
        Returns
        -------
        Dict[int, int]
            where keys are the PC
            values are the edge-pushed stack values
        c                 ^    i | ]*}|j         t          |j        |j         d                    +S r5   )rY   r.  rp  r   )r  r   s     r&   
<dictcomp>z2_State.get_outgoing_edgepushed.<locals>.<dictcomp>  sC     , , , tz4:+,,788 , , ,r%   r@  r>   s    r&   get_outgoing_edgepushedz_State.get_outgoing_edgepushed	  s%    , , N, , , 	,r%   )r$   )rM  )TN)r   r   N),r   r   r    rM   r:   rL   r7  r?   rH   rJ   propertyr^   r>  rq   rB  rD  r   rG  rl   r   r   r  rg   r  rV  r  r   rp  r	  r  r   r  r   r   rj  r   rL  intr^  r  r   rp   rs   r|  r$   r%   r&   r)  r)    s        ! ! ! !F
 
 

8 8 8) ) ): : :; ; ;     X    X   X # # X# ( ( X(
     X        ( ( (     $D D D
    
! ! !! ! !( ( (
( ( (       2 2 2    5 5 5
1 1 1
1 1 1 1 1
     
# # # #J  
  "
, 
, 
, 
, 
,r%   r)  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )
StatePy311c                 H     t                      j        |i | d | _        d S r5   )superr:   	_kw_namesr8   r8  r   	__class__s      r&   r:   zStatePy311.__init__  s*    $)&)))r%   c                 "    | j         }d | _         |S r5   r  )r8   outs     r&   r:  zStatePy311.pop_kw_names  s    n
r%   c                 &    | j         J || _         d S r5   r  )r8   r*  s     r&   rB  zStatePy311.set_kw_names   s    ~%%%r%   c                 H    | j         }|                    | j                  d uS r5   rU   r  r   r8   rS  s     r&   r   zStatePy311.is_in_exception$  s$    ^&&tx00<<r%   c                 D    | j         }|                    | j                  S r5   r  r  s     r&   r   zStatePy311.get_exception(  s    ^&&tx000r%   c                 R    | j         D ]}|d         t          d          k    r dS d S )Nr   r0   T)r/  r-   )r8   ents     r&   r   zStatePy311.in_with,  sA    + 	 	C6{i////tt 0	 	r%   c                 .    |                      d          S )Nr+  r  r  r>   s    r&   r	  zStatePy311.make_null1  s    ~~W~---r%   )r   r   r    r:   r:  rB  r   r   r   r	  __classcell__r  s   @r&   r  r    s              
  = = =1 1 1  
. . . . . . .r%   r  c                   *     e Zd Z fdZd Zd Z xZS )
StatePy313c                 l     t                      j        |i | t          t                    | _        d S r5   )r  r:   r   r   _make_func_attrsr  s      r&   r:   zStatePy313.__init__6  s5    $)&))) +D 1 1r%   c                 F    | j         |                             |           d S r5   )r  r   )r8   make_func_resr   s      r&   r  z!StatePy313.set_function_attribute:  s$    m,33F;;;;;r%   c                     | j         |         S r5   )r  )r8   r  s     r&   get_function_attributesz"StatePy313.get_function_attributes=  s    $]33r%   )r   r   r    r:   r  r  r  r  s   @r&   r  r  5  sV        2 2 2 2 2< < <4 4 4 4 4 4 4r%   r  r  r3  r*   rr  )rY   rp  r[   r   c                   .    e Zd ZdZd Zed             ZdS )AdaptDFAz<Adapt Flow to the old DFA class expected by Interpreter
    c                     || _         d S r5   )_flow)r8   flows     r&   r:   zAdaptDFA.__init__Q  s    


r%   c                     | j         j        S r5   )r  rV   r>   s    r&   infoszAdaptDFA.infosT  s    z%%r%   N)r   r   r    rM   r:   r}  r  r$   r%   r&   r  r  N  sH            & & X& & &r%   r  AdaptBlockInfoinstsrB  r[   active_try_blockoutgoing_edgepushedc                 N     fd}t           dv r#t          t          | j                            }n2t           dv rt           j                  }nt	          t                     t          | j         j                                          	                                          S )Nc                     | \  }}j         |         }|j        dk    r.|                                        |d                              ||fS )NMAKE_FUNCTIONr  )rU   r   r   r  )	inst_pairr   r  r   r|   s       r&   process_function_attributesz6adapt_state_infos.<locals>.process_function_attributesa  sS     v&;/))KK55d5kBBCCCt|r%   r  ro  r  )
r   r.  mapr>  r   r  rB  rD  rG  r|  )r|   r  r  s   `  r&   rx   rx   `  s         Kc5u7IJJKK	1	1	1e())!),,,)+5577!99;;   r%   c              #      K   | D ]N}t          |t                    r|V  t          |t          t          f          rt	          |          D ]}|V  OdS )z<Flatten an iterable of registers used in an instruction
    N)rC   strr.  r   rR  )r  rH  r_   s      r&   rR  rR  v  sw         dC   	JJJJudm,, 	'--   r%   c                   f    e Zd ZdZd Zed             Zed             Zed             Zd Z	d Z
dS )	AdaptCFAz<Adapt Flow to the old CFA class expected by Interpreter
    c                    || _         i | _        |j                                        D ]\  }}t	          ||          | j        |<   | j         j                                        }|j        }|                                }t                      }| j        	                                D ],}|
                    |          r|                    |           -||z
  | _        d S r5   )r  _blocksrV   r   AdaptCFBlockr   backboner   blocksr  in_loopsrr   	_backbone)r8   r  r   	blockinfor  r   inloopblocksr   s           r&   r:   zAdaptCFA.__init__  s    
!%!1!7!7!9!9 	C 	CFI#/	6#B#BDL  :%..00>>## uu!!## 	$ 	$A~~a   $  ###!L0r%   c                     | j         j        S r5   )r  r   r>   s    r&   r   zAdaptCFA.graph  s    z!!r%   c                     | j         S r5   )r  r>   s    r&   r  zAdaptCFA.backbone  s
    ~r%   c                     | j         S r5   )r  r>   s    r&   r  zAdaptCFA.blocks  s
    |r%   c              #   V   K   t          | j                  D ]}| j        |         V  d S r5   )rw   r  ra  s     r&   iterliveblockszAdaptCFA.iterliveblocks  s>      $$ 	! 	!A+a.    	! 	!r%   c                 B    | j         j                                         d S r5   )r  r   rT   r>   s    r&   rT   zAdaptCFA.dump  s    
!!!!!r%   N)r   r   r    rM   r:   r}  r   r  r  r  rT   r$   r%   r&   r  r    s         1 1 1& " " X"   X   X! ! !" " " " "r%   r  c                       e Zd Zd ZdS )r  c                 Z    || _         t          d |j        D                       | _        d S )Nc              3       K   | ]	\  }}|V  
d S r5   r$   )r  r  r  s      r&   r  z(AdaptCFBlock.__init__.<locals>.<genexpr>  s&      881!888888r%   )r   r.  r  body)r8   r  r   s      r&   r:   zAdaptCFBlock.__init__  s-    88	88888			r%   N)r   r   r    r:   r$   r%   r&   r  r    s#        9 9 9 9 9r%   r  )1rM   r  loggingcollectionsr   r   r   	functoolsr   numba.core.utilsr   r   r	   r
   numba.core.controlflowr   r   numba.core.irr   numba.core.errorsr   	getLoggerr   rR   r   r   rN   r   enumr   r   rb  r   objectr-   rP   r   rc   r)  r  r  rb   rr  r  r  rx   rR  r  r  r$   r%   r&   <module>r     s    


  6 6 6 6 6 6 6 6 6 6 $ $ $ $ $ $- - - - - - - - - - - - 8 8 8 8 8 8 8 8       6 6 6 6 6 6 '
H
%
% #	      """$ $ $ $ $4 $ $ $ %EE$$$

i
(
(( 3 3 3 3 3 3 3 3@g4 g4 g4 g4 g46 g4 g4 g4T$ $ $]+ ]+ ]+ ]+ ]+& ]+ ]+ ]+@- y, y, y, y, y,V y, y, y,x	. . . . . . . .>	4 	4 	4 	4 	4 	4 	4 	4 EE$$$EEEE

i
(
(( z&@@@AA& & & & &v & & &      ,  '" '" '" '" '"v '" '" '"T9 9 9 9 96 9 9 9 9 9r%   