
    0;jixB                       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      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     M/root/voice-cloning/.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 r7   )hashtyper9   r:   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/   r9   	TypeErrorformatr?   r:   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          |                              rC   rD   rH   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({}))rG   r9   r@   s    r(   __repr__zBlockKind.__repr__G   s    %%dk222r'   N)r    r!   r"   __doc__	frozensetr8   r<   rA   rJ   rL   rN   r&   r'   r(   r/   r/   *   s         y     H  / / /J J JJ J J3 3 3 3 3r'   r/   c                       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edv rd ZdS edv rd ZdS  ee          )FlowziData+Control Flow analysis.

    Simulate execution to recover dataflow and controlflow information.
    c                     t                               dt          |d                      || _        t	                      | _        d S )Nzbytecode dump:
%sc                 *    |                                  S r7   )dumpxs    r(   <lambda>zFlow.__init__.<locals>.<lambda>R   s    !&&(( r'   )	lazy_func)_loggerdebugr
   	_bytecoder   block_infos)r:   bytecodes     r(   r<   zFlow.__init__P   sK    *#H8J8JKKK	M 	M 	M!%<<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&   )r^   pcnstack
blockstack)debug_filenamezpending: %sz	stack: %szstate.pc_initial: %sTzend state. edges=%sc                     | j         S r7   )
pc_initialrV   s    r(   rX   zFlow.run.<locals>.<lambda>   s    1< r'   )keyzblock_infos %s:
%sN)Stater\   TraceRunnerfunc_idfilenamependingappendr   rZ   r[   popleftfinished_stackre   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_infosr]   )r:   
firststaterunnerfirst_encounterstate
out_statessis          r(   runzFlow.runV   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   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r`   Tz3.11 exception %s PC=%sr0   endr   
end_offsetstack_depth
push_lastir`   extra_block)in_withhas_active_tryget_instopname_NO_RAISE_OPSforknext_adjust_except_stack
advance_pcis_in_exceptionrZ   r[   get_exception_pcget_top_blocktarget
make_blockr   depthlasti)r:   r   r   eheh_topeh_blocks         r(   rr   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   r0   entry_stacknpophandlerr3   r4   kindnpushr   r`   r   Tr&   )r   r   r   r   r   r   r   pop_block_and_abover   r/   _EXCEPT_STACK_OFFSET_FINALLY_POPr   )r:   r   r   tryblkra   kwargsr   s          r(   rr   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   re   add_noderv   add_edger`   set_entry_pointprocesscfgraph)r:   
all_statesgraphr   bedges         r(   rz   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 r7   )r   setrn   
_used_regs_phis)	used_phisphi_setr   usedphisr   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   rn   _outgoing_phisitemsrw   rZ   r[   r
   )defmapphismapr   phirhsr   r   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   r|   listr   rw   rZ   r[   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   rZ   r[   r
   r   dictrn   r   clearupdate)	r   r   keepr   used_setr   new_outr   r   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)rZ   r[   centerr
   )
r:   r   r   r   r   r   r   r   r   r   s
    `       @r(   r{   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   offsetr\   labelsr   r   r:   r   insts      r(   rs   zFlow._is_implicit_new_block  s?    ~~;$.///4[L((45r'   r   c                     d S r7   r&   )r:   r   s     r(   rt   zFlow._guard_with_as)  s    Dr'   r*   r,   r   r   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_TOPGThe 'with (context manager) as (variable):' construct is not supported.N)r   r   r\   r   r   )r:   r   current_instnext_opmsgs        r(   rt   zFlow._guard_with_as-  sc    
 !>>++L"&CCC.):;Bi''9C23777 DC''r'   N)r    r!   r"   rO   r<   r   r   rr   NotImplementedErrorrz   r{   rs   rt   r&   r'   r(   rR   rR   K   s        ( ( (8< 8< 8<t 888	$ 	$ 	$ 	$6 
j	 	 	# 	# 	# 	#, "!),,,
 
 
K9 K9 K9Z   J	 	 	 	 	 
:	:	:	8 	8 	8 	8 	8 "!),,,r'   rR   c                 ,    |                      d          S )Nz$null$)
startswith)regs    r(   _is_null_temp_regr   =  s    >>(###r'   c                      e Zd ZdZd Zd Zd Zd Zd Ze	dv reZ
ne	dv rn ee	          d	 Zd
 Zd Zd Zd Ze	dv rd Zne	dv rn ee	          d Zd Zd Ze	dv reZne	dv rn ee	          e	dv rd Zne	dv rn ee	          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e	dv rd Zne	dv rn ee	          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	          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/d0 Z0d1 Z1d2 Z2d3 Z3d4 Z4d5 Z5d6 Z6e	d$v rd7 Z7ne	d%v rn ee	          e	d$v rd8 Z8ne	d%v rn ee	          d9 Z9e9Z:e9Z;e	d$v re9Z<e9Z=ne	d%v rn ee	          d: Z>e>Z?e>Z@d; ZAd< ZBd= ZCd> ZDd? ZEd@ ZFdA ZGdB ZHdC ZIdD ZJeJZKdE ZLdF ZMdG ZNe	d$v rdH ZOne	d%v rn ee	          dI ZPe	dJv rdK ZQne	dv rdL ZQn ee	          dM ZRdN ZSe	dv rdO ZTne	dPv rdQ ZTne	d%v rn ee	          dR ZUdS ZVdT ZWdU ZXdV ZYdW ZZe	dv rne	dv rdX Z[n ee	          dY Z\dZ Z]d[ Z^d\ Z_e	dJv rd] Z`ne	dv rd^ Z`n ee	          d_ Zae	dv rne	dv rd` Zbn ee	          da Zcdb Zddc Zedd Zfde Zgdf Zhe	dv rdg Zine	dv rn ee	          e	dv rdh Zjne	div rdj Zjne	dv rdk Zjn ee	          dl Zke	d$v rdm Zlne	d%v rn ee	          dn Zmdo Zndp Zodq Zpdr Zqds Zrdt Zsdu Ztdv Zudw Zvdx Zwdy Zxdz Zyd{ Zzd| Z{d} Z|d~ Z}d Z~d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeZeZeZeZd ZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZddZd Zd Zd Ze	dv rne	dv rd Zn ee	          d Zd Ze	dJv 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 Ze	dv rd Zne	dv rn ee	          e	dv rd ZdS e	dv rdS  ee	          )rh   zLTrace runner contains the states for the trace and the opcode dispatch.
    c                 `    || _         t                      | _        t                      | _        d S r7   )rc   r   rk   r   rn   )r:   rc   s     r(   r<   zTraceRunner.__init__D  s$    ,wwr'   c                 ,    t          | j        |          S r7   )r   rc   )r:   linenos     r(   get_debug_loczTraceRunner.get_debug_locI  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   _blockstackre   popr   r   r   rZ   r[   r   ro   getattrrG   r   r   r   )r:   r   topblkblk_endr   fnr   s          r(   rp   zTraceRunner.dispatchL  sR   <<<  ' ".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.
        r0   r   r      r   r   r`   r   Nr&   )r   r   r   r   )r:   r   r   ra   r   expected_depthextra_stacks          r(   r   z TraceRunner._adjust_except_stackg  s    
 $$U++!!&)))".N""#n4F6N, 	1K%w
..fUm.v.....r'   c                 0    |                     |           d S r7   rl   r   s      r(   op_NOPzTraceRunner.op_NOP{      Tr'   r   r   c                 0    |                     |           d S r7   r  r   s      r(   	op_RESUMEzTraceRunner.op_RESUME  r	  r'   c                 0    |                     |           d S r7   r  r   s      r(   op_CACHEzTraceRunner.op_CACHE  r	  r'   c                 0    |                     |           d S r7   r  r   s      r(   
op_PRECALLzTraceRunner.op_PRECALL  r	  r'   c                 ~    |                     |                                           |                    |           d S r7   )push	make_nullrl   r   s      r(   op_PUSH_NULLzTraceRunner.op_PUSH_NULL  s6    

5??$$%%%Tr'   c                 ~    |                     |                                           |                    |           d S r7   )r  	make_temprl   r   s      r(   op_RETURN_GENERATORzTraceRunner.op_RETURN_GENERATOR  s8     	

5??$$%%%Tr'   r   r   c                     |                                 }|                                }|                                }|                    ||||           |                    |           d S )Nr;   resstrvarr   r  rl   r  )r:   r   r   r;   r  r  s         r(   op_FORMAT_SIMPLEzTraceRunner.op_FORMAT_SIMPLE  sZ    IIKKE__&&F//##CLLUFLCCCJJsOOOOOr'   r*   r,   r   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  rl   r  )r:   r   r   r   r;   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  rl   r  )r:   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 r7   r$  r   s      r(   
op_POP_TOPzTraceRunner.op_POP_TOP  s    		r'   c                     |                                 }|                                }|                    |||           |                    |           d S )N)valr  )r  r   rl   r  )r:   r   r   r  toss        r(   
op_TO_BOOLzTraceRunner.op_TO_BOOL  sI    //##C))++CLL3CL000JJsOOOOOr'   c                    |                                 }|j        dz	  }|                    |||           |                    |           |j        dz  r)|                    |                                           d S d S Nr  )idxr  r  r   rl   r  r  r:   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 r9  r;  r<  s        r(   r=  zTraceRunner.op_LOAD_GLOBAL  sq    //##C(a-CLL3CL000x!| .

5??,,---JJsOOOOOr'   r   c                     |                                 }|                    ||           |                    |           d S Nr  r  rl   r  r:   r   r   r  s       r(   r=  zTraceRunner.op_LOAD_GLOBAL  s:    //##CLL3L'''JJsOOOOOr'   c                 0    |                     |           d S r7   r  r   s      r(   op_COPY_FREE_VARSzTraceRunner.op_COPY_FREE_VARS   r	  r'   c                 0    |                     |           d S r7   r  r   s      r(   op_MAKE_CELLzTraceRunner.op_MAKE_CELL  r	  r'   c                     |                                 }|                    ||           |                    |           d S rA  rC  rD  s       r(   op_LOAD_DEREFzTraceRunner.op_LOAD_DEREF  :    ooTs###

3r'   c                     |                     d          d|j         z   }|                    |           |                    ||           d S )Nconst.rB  )r  r   r  rl   rD  s       r(   op_LOAD_CONSTzTraceRunner.op_LOAD_CONST  sK    oog&&TX7

3Ts#####r'   c                     d|j         cxk    rdk     sn J |                    d          d|j          z   }|                    |           |                    ||           d S )Nr      rM  rN  rB  )r   r  r  rl   rD  s       r(   op_LOAD_SMALL_INTzTraceRunner.op_LOAD_SMALL_INT  sr    &&&&3&&&&&&//'**^^^;CJJsOOOLL3L'''''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   rl   )r:   r   r   rV  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                    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t           dv r|                    |          }nt          t                     |	                    |          }	|
                    ||	           |                    |	           d S )Nr  r   T)r  as_load_derefr  rB  )r   get_varname
IndexErrorr\   lenco_varnamesco_freevarsco_cellvarsr   r  rl   r  r   )
r:   r   r   namebcnum_varnamesnum_freevarsnum_cellvarsmax_fast_localr  s
             r(   op_LOAD_FASTzTraceRunner.op_LOAD_FAST.  sW   ***((..    _"2>22"2>22"2>22!-!<DH|3DDDDnDDDDDDoo''Ts$???

3  555$$T**DD%i000ood##Ts###

3s   ! B,CCc                 T   |j         }|dz	  }|dz  }|                    |          }|                    |          }|                    |          }|                    |          }	|                    |||	           |                    |           |                    |	           d S )N      )res1res2)r   get_varname_by_argr  rl   r  )
r:   r   r   opargoparg1oparg2name1name2rj  rk  s
             r(   op_LOAD_FAST_LOAD_FASTz"TraceRunner.op_LOAD_FAST_LOAD_FASTK  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 )Nri  )store_valueload_res)r   r   rl  r  rl   r  )r:   r   r   rm  ro  rt  	load_nameru  s           r(   op_STORE_FAST_LOAD_FASTz#TraceRunner.op_STORE_FAST_LOAD_FASTW  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   rl   )r:   r   r   ry  rz  s        r(   op_STORE_FAST_STORE_FASTz$TraceRunner.op_STORE_FAST_STORE_FASTa  s:    YY[[FYY[[FLLfVL<<<<<r'   r   r)   c                 0    |                     |           d S r7   r  r   s      r(   op_DELETE_FASTzTraceRunner.op_DELETE_FAST|  r	  r'   c                 \    |                                 }|                    ||           d S )N)r   r{  )r:   r   r   r   s       r(   op_DELETE_ATTRzTraceRunner.op_DELETE_ATTR  s+    T&)))))r'   c                     |                                 }|                                 }|                    |||           d S )N)r   r;   r{  )r:   r   r   r   r;   s        r(   op_STORE_ATTRzTraceRunner.op_STORE_ATTR  s:    		T&66666r'   c                 \    |                                 }|                    ||           d S N)r;   r{  r:   r   r   r;   s       r(   op_STORE_DEREFzTraceRunner.op_STORE_DEREF  +    		T'''''r'   c                 \    |                                 }|                    ||           d S r  r{  r  s       r(   op_STORE_FASTzTraceRunner.op_STORE_FAST  r  r'   c           	      X   |                                 }|                                 }|                                }|                                }|                                }|                                }|                    |||||||           |                    |           dS )z"
        TOS = TOS1[TOS:]
        )basestartr  slicevarindexvarnonevarNr  	r:   r   r   r6  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_2  s     iikkyy{{oo??$$??$$//## 	 	
 	
 	
 	

3r'   c           	      X   |                                 }|                                 }|                                 }|                                }|                                }|                                }|                    |||||||           |                    |           dS )z&
        TOS = TOS2[TOS1:TOS]
        )r  r  r  r  r  r  Nr  )	r:   r   r   r6  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  r;   r  r  r  Nr   r  rl   )r:   r   r   r6  r;   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  r;   r  r  Nr  	r:   r   r   r6  r  r;   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  r;   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  r;   r  r  Nr  )	r:   r   r   r6  r  r  r;   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  )r:   r   r   r6  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  r:   r   r   r6  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  )r:   r   r   r6  r  r  r  r  s           r(   op_DELETE_SLICE_3zTraceRunner.op_DELETE_SLICE_3N  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  rl   r  )r:   r   r   argcr6  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  )	r:   r   r   r   r  r  r  r  r  s	            r(   op_BINARY_SLICEzTraceRunner.op_BINARY_SLICEx  s    ))++CIIKKE		I((H//##C((HLLEsiS!H     JJsOOOOOr'   c           	      .   |                                 }|                                 }|                                 }|                                 }|                                }|                                }|                    |||||||           d S )N)r  r   r  r;   r  r  r  )	r:   r   r   r   r  r  r;   r  r  s	            r(   op_STORE_SLICEzTraceRunner.op_STORE_SLICE  s    ))++CIIKKE		IIIKKE((H//##CLLEsiu(      r'   c                     |                                 }|                    ||           |                                }|j        }|                    |           ||k    r|                    |           d S d S )Npredr   )r   rl   get_jump_targetr   r   )r:   r   r   r  target_inst	next_insts         r(   _op_POP_JUMP_IFzTraceRunner._op_POP_JUMP_IF  s    yy{{T%%%**,,I	 	

i
   )##JJ+J&&&&& $#r'   c                     |                                 }|                    ||           |                    |j        d           |                    |                                           d S )Nr  r  r`   r   r   )get_tosrl   r   r   r  )r:   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 r7   r  r   s      r(   op_POP_JUMP_FORWARD_IF_NONEz'TraceRunner.op_POP_JUMP_FORWARD_IF_NONE      UD)))))r'   c                 2    |                      ||           d S r7   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 r7   r  r   s      r(   op_POP_JUMP_BACKWARD_IF_NONEz(TraceRunner.op_POP_JUMP_BACKWARD_IF_NONE  r  r'   c                 2    |                      ||           d S r7   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 r7   r  r   s      r(   op_POP_JUMP_FORWARD_IF_FALSEz(TraceRunner.op_POP_JUMP_FORWARD_IF_FALSE  r  r'   c                 2    |                      ||           d S r7   r  r   s      r(   op_POP_JUMP_FORWARD_IF_TRUEz'TraceRunner.op_POP_JUMP_FORWARD_IF_TRUE  r  r'   c                 2    |                      ||           d S r7   r  r   s      r(   op_POP_JUMP_BACKWARD_IF_FALSEz)TraceRunner.op_POP_JUMP_BACKWARD_IF_FALSE  r  r'   c                 2    |                      ||           d S r7   r  r   s      r(   op_POP_JUMP_BACKWARD_IF_TRUEz(TraceRunner.op_POP_JUMP_BACKWARD_IF_TRUE  r  r'   c                     |                     |           |                    |                                           d S Nr   rl   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 )Nr1   r   r   r   )r   rl   	pop_blockr   )r:   r   r   r   s       r(   op_BREAK_LOOPzTraceRunner.op_BREAK_LOOP  sZ    !!&))%0Ts###

c
r'   c                     |                     ||                                |                                           |                                 d S )Nretvalcastval)rl   r   r  	terminater   s      r(   op_RETURN_VALUEzTraceRunner.op_RETURN_VALUE  sB    T%))++u7H7HIIIr'   c                     |                     d          }|                    |||                                            |                                 d S )NrM  r  )r  rl   r  rD  s       r(   op_RETURN_CONSTzTraceRunner.op_RETURN_CONST  sK    //'**CLLc5??3D3DLEEEOOr'   c                     |                                 }|                                }|                    |||           |                    |           d S N)r;   r  r  r:   r   r   r5  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   
ValueErrorrl   r   r  r:   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 )	Nr3   r4   r   r  r   r  r  r  )
anyr   r   r   r   r   r   r  rl   r  )r:   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  rl   r  )r:   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r:   r   r   blks       r(   op_END_FINALLYzTraceRunner.op_END_FINALLY0  s0    oo#m,-----r'   c                 .    |                                  d S r7   r$  r   s      r(   
op_END_FORzTraceRunner.op_END_FOR5      IIKKKKKr'   rT  c                 V    |                                  |                                  d S r7   r$  r   s      r(   r  zTraceRunner.op_END_FOR8  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   )r:   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 r7   r&   r   s      r(   op_CALL_FINALLYzTraceRunner.op_CALL_FINALLYH  s    r'   c                 .    |                                  d S r7   )r  r   s      r(   op_WITH_EXCEPT_STARTz TraceRunner.op_WITH_EXCEPT_STARTK  s    r'   c                 0    |                     |           d S r7   r  r   s      r(   op_WITH_CLEANUP_STARTz!TraceRunner.op_WITH_CLEANUP_STARTN      Tr'   c                 0    |                     |           d S r7   r  r   s      r(   op_WITH_CLEANUP_FINISHz"TraceRunner.op_WITH_CLEANUP_FINISHR  r  r'   c                 ~    |                     |                    d|                                                     d S )Nr1   r   r   )
push_blockr   r  r   s      r(   op_SETUP_LOOPzTraceRunner.op_SETUP_LOOPV  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 r7   r   r&  r   s     r(   	<genexpr>z-TraceRunner.op_BEFORE_WITH.<locals>.<genexpr>u  $      11bf111111r'   )contextmanagerexitfnr   r2   r  r   )r   r  r  r\   find_exception_entryr   exception_entriesr   rl   maxr  r   r   )r:   r   r   cmyieldedr   ra  ehhead	ehrelatedr   r   s              r(   op_BEFORE_WITHzTraceRunner.op_BEFORE_WITHb  s=    Boo''G__,?_@@FJJvJJw B,,TY77FI* ) )9--$$R(((11y11111CLLbSLIII   !     JJ$)J$$$$$r'   c                    |                                 }|                                }|                    d          }|                    |||           |                    |           |                    |           |                    |                    d|                                                     |                    |j                   d S )Nr  r  )r  r   r2   r  r   )	r   r  rl   r  r  r   r  r   r   )r:   r   r   r$  r%  r   s         r(   op_SETUP_WITHzTraceRunner.op_SETUP_WITH  s    YY[[//##(;<<T"V<<<

6

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

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

((!%	 )   	 	
 	
 	
 	
 	
r'   c                     |                                 }|                    |                    d                     |                    |           d S )N	exception)r   r  r  )r:   r   r   r6  s       r(   op_PUSH_EXC_INFOzTraceRunner.op_PUSH_EXC_INFO  s@    iikk

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

3r'   c                     |                     |           |                     d||j        |                                           d S )Nr4   )r   r   )rl   r-  r   r  r   s      r(   op_SETUP_FINALLYzTraceRunner.op_SETUP_FINALLY  sP    Tu49$2F2F2H2H 	 	
 	
 	
 	
 	
r'   c                 .    |                                  d S r7   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   r3   r4   z$POP_EXCEPT got an unexpected block: r   r   )r  r/   r   r   r   r   r   r   r  s       r(   r4  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   r0   try)r   r2   withr   )r  r/   rl   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  )r:   r   r   r;  r   r  s         r(   op_BINARY_SUBSCRzTraceRunner.op_BINARY_SUBSCR  sX    IIKKEYY[[F//##CLLU6sLCCCJJsOOOOOr'   c                     |                                 }|                                 }|                                 }|                    ||||           d S )N)r   r;  r;   r{  )r:   r   r   r;  r   r;   s         r(   op_STORE_SUBSCRzTraceRunner.op_STORE_SUBSCR  sI    				T&UCCCCCr'   c                     |                                 }|                                 }|                    |||           d S )N)r   r;  r{  )r:   r   r   r;  r   s        r(   op_DELETE_SUBSCRzTraceRunner.op_DELETE_SUBSCR  s:    		T&66666r'   c                 V   |j         }t          t          fdt          |          D                                 }t          dv 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  r   funcargskw_namesr  )r   r   r.  r/  r   r   r   pop_kw_namesr  rl   r  )r:   r   r   nargrF  null_or_selfcallablerG  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 r7   )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>  rC  r'   )rE  rF  r  )r   r   r.  r/  r   r  rl   r  )r:   r   r   rI  rF  rE  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>  rC  r'   )rE  rF  namesr  )r   r   r   r.  r/  r  rl   r  )r:   r   r   rI  rW  rF  rE  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'   rD  )	r   r   r   r.  r/  r   r  rl   r  )	r:   r   r   rI  rG  rF  null_or_firstargrK  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                 N   |                                 }t          |          rd }|                                 }|                                  |                                 }|                                }|                    |||||           |                    |           d S )NrE  varargvarkwargr  )r   r   r  rl   r  r:   r   r   r`  r_  rE  r  s          r(   op_CALL_FUNCTION_EXzTraceRunner.op_CALL_FUNCTION_EX,  s     yy{{H **  YY[[FIIKKK99;;D//##CLLD(   " " "JJsOOOOOr'   )r   c                 F   |j         dz  r|                                }nd }|                                }|                                 |                                }|                                }|                    |||||           |                    |           d S )Nr  r^  )r   r   r  rl   r  ra  s          r(   rb  z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  r>  r   r^  )	r   r   r   r   peekr   r  rl   r  ra  s          r(   rb  zTraceRunner.op_CALL_FUNCTION_EXL  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>d  s!    222		222r'   c                 8    g | ]}                                 S r&   r*  r%  s     r(   r(  z)TraceRunner._dup_topx.<locals>.<listcomp>h  s#    999q""999r'   )origduped)r/  reverserl   r  )r:   r   r   r0  ri  rj  r5  s    `     r(   	_dup_topxzTraceRunner._dup_topxc  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)ro  r;   r  )ro  
const_listr  )r   r   rF   r   r   r   ci1opr#   rl   r  r$   r   r  r  r%   r   )	r:   r   r   ro  r   r   r5  r  r6  s	            r(   op_CALL_INTRINSIC_1zTraceRunner.op_CALL_INTRINSIC_1p  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   rl  )r:   r   r   r0  s       r(   op_DUP_TOPXzTraceRunner.op_DUP_TOPX  sG    EQ 8udE*****r'   c                 6    |                      ||d           d S )Nr  r0  rl  r   s      r(   
op_DUP_TOPzTraceRunner.op_DUP_TOP       ud!,,,,,r'   c                 6    |                      ||d           d S )Nr  rv  rw  r   s      r(   op_DUP_TOP_TWOzTraceRunner.op_DUP_TOP_TWO  ry  r'   c                 `    |                     |                    |j                             d S r7   )r  re  r   r   s      r(   op_COPYzTraceRunner.op_COPY  s(    

5::dh''(((((r'   c                 :    |                     |j                   d S r7   )swapr   r   s      r(   op_SWAPzTraceRunner.op_SWAP  s    

48r'   c                     |                                 }|                                 }|                    |           |                    |           d S r7   r   r  )r:   r   r   firstseconds        r(   
op_ROT_TWOzTraceRunner.op_ROT_TWO  sF    		

5

6r'   c                     |                                 }|                                 }|                                 }|                    |           |                    |           |                    |           d S r7   r  )r:   r   r   r  r  thirds         r(   op_ROT_THREEzTraceRunner.op_ROT_THREE  se    				

5

5

6r'   c                 N   |                                 }|                                 }|                                 }|                                 }|                    |           |                    |           |                    |           |                    |           d S r7   r  )r:   r   r   r  r  r  forths          r(   op_ROT_FOURzTraceRunner.op_ROT_FOUR  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#    :::%//##:::r'   )iterablestorestupleobj)r   r   r/  r  rl   r.  r  )r:   r   r   r0  r  r  r  sts    `      r(   op_UNPACK_SEQUENCEzTraceRunner.op_UNPACK_SEQUENCE  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-  )r:   r   r   r0  r   tups    `    r(   op_BUILD_TUPLEzTraceRunner.op_BUILD_TUPLE  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   r\  r  rl   r  )r:   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 r7   r  r   s      r(   op_BUILD_TUPLE_UNPACK_WITH_CALLz+TraceRunner.op_BUILD_TUPLE_UNPACK_WITH_CALL  s      -----r'   c                 2    |                      ||           d S r7   r  r   s      r(   op_BUILD_TUPLE_UNPACKz!TraceRunner.op_BUILD_TUPLE_UNPACK  s      -----r'   c                     |                                 }|                                }|                    |||           |                    |           d S )N)rp  r  r  )r:   r   r   r6  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  rl   r  )r:   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-  )r:   r   r   r0  r   lsts    `    r(   op_BUILD_LISTzTraceRunner.op_BUILD_LIST  r  r'   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S )N)r   r;   	appendvarr  r   r   re  r  rl   )r:   r   r   r;   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   r;   	extendvarr  r  )r:   r   r   r;   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   rl   r  )	r:   r   r   dctr0  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   rf   r;   
setitemvarr  r  )r:   r   r   TOSTOS1rf   r;   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-  )r:   r   r   r0  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                     |                                 }|                                }|                                }|                                }|                    |||||           d S )N)r;   r   addvarr  )r   r  r  rl   )r:   r   r   r;   r   r  r  s          r(   
op_SET_ADDzTraceRunner.op_SET_ADD)  s\    		""ooTvf#NNNNNr'   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S N)r   r;   	updatevarr  r  r:   r   r   r;   r;  r   r  r  s           r(   op_SET_UPDATEzTraceRunner.op_SET_UPDATE0  r  r'   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S r  r  r  s           r(   op_DICT_UPDATEzTraceRunner.op_DICT_UPDATE9  r  r'   c                     |                                 }|                                }|                    |||           |                    |           d S r  r  )r:   r   r   r;   r  s        r(   op_GET_ITERzTraceRunner.op_GET_ITERB  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  rl   r  r  r   r   r   r   )r:   r   r   r  r  r  r  r   s           r(   op_FOR_ITERzTraceRunner.op_FOR_ITERH  s    ==??  ""  TH4 	 	  	  	 

6""$$333 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                    t           j        |j                 d         }|                                }|                                }|dk    rRt          dk    sJ |                                }|                    |||||           |                    |           d S t          |         j	        }|                    d|           }|                    |||||           |                    |           d S )Nr  z[]r   )oplhsr   r  binop_r  )
dis_nb_opsr   r   r   r  rl   r  r	   r    )r:   r   r   r  r   r  r  op_names           r(   op_BINARY_OPzTraceRunner.op_BINARY_OPg  s    ["1%iikkiikk::''''//##CLL"#3CL@@@JJsOOOOO-b1:G//);'););/<<CLL"#3CL@@@JJsOOOOOr'   c                     |                                 }|                                }|                    |||           |                    |           d S r  r  r  s        r(   _unaryopzTraceRunner._unaryopw  r  r'   c                     |                                 }|                                 }|                                }|                    ||||           |                    |           d S )N)r  r   r  r  )r:   r   r   r   r  r  s         r(   	_binaryopzTraceRunner._binaryop  sX    iikkiikkooTs555

3r'   Fc                 b   t           dv rd }n2t           dv r|                                }nt          t                     |                                }d x}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     rh  r  r  )r`  codeclosureannotationsannotate
kwdefaultsdefaultsr  )r   r   r   r   r  rl   r  )r:   r   r   MAKE_CLOSUREr`  r  r  r  r  r  r  r  s               r(   op_MAKE_FUNCTIONzTraceRunner.op_MAKE_FUNCTION  sJ   <<< DD*$$99;;DD%i000yy{{CGGG+GG:***8#### x#~ &))++x#~ *#iikkx#~ )"YY[[
x#~ ' 99;;oo#! 	 
	
 
	
 
	
 	

3r'   c                    t           dv sJ |                                }|                                }|j        dz  r|                    ||           n|j        dz  r|                    ||           nu|j        dz  r|                    ||           nS|j        dz  r|                    ||	           n1|j        d
z  r|                    ||           nt	          d          |                    |           d S )Nr  r  )r  r  )r  rh  )r  r  )r     )r  r  )r   r   r   set_function_attributeAssertionErrorr  )r:   r   r   make_func_stackdatas        r(   op_SET_FUNCTION_ATTRIBUTEz%TraceRunner.op_SET_FUNCTION_ATTRIBUTE  s*   .....))++yy{{8d? 	0 ((4(HHHHX_ 	0((T(JJJJX_ 	0((d(KKKKX_ 	0(($(GGGGX_ 	0 ((4(HHHH ///

?#####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 rA  rC  rD  s       r(   op_LOAD_CLOSUREzTraceRunner.op_LOAD_CLOSURE  rK  r'   c                     |                     d          }|                    ||           |                    |           d S )Nassertion_errorrB  rC  rD  s       r(   op_LOAD_ASSERTION_ERRORz#TraceRunner.op_LOAD_ASSERTION_ERROR  s=    //"344CLL3L'''JJsOOOOOr'   c                     |                     d          }|                                }|                                }|                    ||||           |                    |           d S )N	predicater  r6  r  )r  r   r  rl   r  r:   r   r   r  r6  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   rl   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   rl   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   rl   r  r  s       r(   r  zTraceRunner.op_RERAISE  s;    ))++CLL3L'''OOr'   )r,   c                    |                                 }|                                }|                    |           |                                }|                    |||           |                    |           d S )NrU  )r   r  r  r  rl   )r:   r   r   rV  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 r7   )rW  r   s      r(   r  zTraceRunner.op_LOAD_METHOD5  s    eT*****r'   c                 2    |                      ||           d S r7   )rT  r   s      r(   op_CALL_METHODzTraceRunner.op_CALL_METHOD:  s    eT*****r'   c                    t           j        |j                 dvrt          d          |                                }|                                }|                    d          }|}dD ]R\  }}|                                 |                                }|j        |k    s|j        |k    rt          d          S|                                 |                                }|j        dk    rd}	t          |	          |j        J |j
        }
|
                    |j                  }|g}|
j        D ]'}|j        |j        k    r|                    |           (t!          d	 |D                       }|                    |           |                    |           |                    ||||
           |                    |                    d|                     |                    |j                   d S )N)	__enter____exit__z#async special methods not supportedr  r  ))SWAPr  )r  r   )LOAD_SPECIALr   )CALLr   z0Unsupported bytecode pattern for 'LOAD_SPECIAL'.r   r   c              3   $   K   | ]}|j         V  d S r7   r   r  s     r(   r  z.TraceRunner.op_LOAD_SPECIAL.<locals>.<genexpr>  r  r'   )r  exit_method	block_endr2   r  r   )r  _special_method_namesr   r   r   r  r   r   r   r   r\   r!  r   r"  r   rl   r#  r  r  r   r   r   )r:   r   r   r6  r'  methodold_instr  ar   ra  r&  r'  r   r   s                  r(   op_LOAD_SPECIALzTraceRunner.op_LOAD_SPECIAL?  sC    )$(345 5)9; ; ;> ))++C		A __,?_@@FH 	L 	L!
   """~~''K1$$A2JL L L )6
 >>##D
 {i''$ /s3338### B,,T[99FI* ) )9--$$R(((11y11111C JJvJJsOOOLL#6#&  ( ( (    !     JJ$)J$$$$$r'   c                     |j         }t          j        |         t          k    rd}nt          |                    |          }|                    |||           |                    |           d S )Nr  )r  r:  )r   r  _common_constantsr  r   r  rl   r  )r:   r   r   rm  r`  r  s         r(   op_LOAD_COMMON_CONSTANTz#TraceRunner.op_LOAD_COMMON_CONSTANT  se    HE$U+~==())//$''CLL3EL222JJsOOOOOr'   N)F)r    r!   r"   rO   r<   r   rp   r   r  r   op_NOT_TAKENr   r  r  r  r  r  r  r!  r1  r3  op_POP_ITERr7  r=  rF  rH  rJ  rO  rR  rW  rf  rr  rw  r|  op_LOAD_FAST_CHECKop_LOAD_FAST_AND_CLEARop_LOAD_FAST_BORROW$op_LOAD_FAST_BORROW_LOAD_FAST_BORROWr~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  op_POP_JUMP_IF_TRUEop_POP_JUMP_IF_FALSEop_POP_JUMP_IF_NONEop_POP_JUMP_IF_NOT_NONEr  op_JUMP_IF_FALSE_OR_POPop_JUMP_IF_TRUE_OR_POPr  r  r  r  r  r  r  r  r  r  op_JUMP_BACKWARD_NO_INTERRUPTr  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r(  r*  r-  r0  r2  r4  r9  r<  r>  r@  rN  rQ  rT  rX  r\  rb  rl  rr  rt  rx  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  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&   r'   r(   rh   rh   A  s          
0 0 0P P P6/ / /(   J	:	:	:!!),,,           &&&	 	 	 	 
1	1	1!!),,,  $  "   K 	:	:	:!!),,,%%%	 	 	 	
 
1	1	1!!),,,&&&	. 	. 	. 	. 
(	(	(	 	 	 	 
j	 	 	 	 	 	
 "!),,,      
$ $ $ K	( 	( 	( 	(
 
:	:	:!!),,,/ / /"  8 &&&
	 
	 
		! 	! 	!	= 	= 	= 	=
 
1	1	1!!),,,///)!-	(	(	(!!),,,J*/E,,	:	:	:!!),,,  * * *7 7 7
( ( (( ( (  *  *  *
 
 
$
 
 
(
 
 
(
 
 
(
 
 

 
 
$
 
 
$
 
 
  6 ///	 	 	 	 
(	(	(!!),,,///	 	 	 	 
(	(	(!!),,,
' 
' 
' **///-"1	(	(	(!!),,,. . . 1/* * ** * ** * ** * ** * ** * ** * ** * *. . .. . . %5!. . .     ///	 	 	 	 
(	(	(!!),,,   888	" 	" 	" 	"* 
j	 	 	 	 	 	& "!),,,( ( (. . . &&&	 	 	 		j	 	 	 	 	 	 
(	(	(!!),,,P P P        
 
 
 K	:	:	:	% 	% 	% 	%> "!),,,! ! !&
 
 
(  

 
 
 888	 	 	 	 
j	 	 	% 	% 	% 	% "!),,,! ! ! J	:	:	:	 	 	 	 "!),,,D D D7 7 7
  0% % %     &&&	 	 	 	 
1	1	1!!),,,K	 	 	 	 
k	!	!	 	 	 	 
1	1	1	 	 	 	* "!),,,
 
 
 ///	3 	3 	3 	3< 
(	(	(!!),,,+ + +
- - -- - -) ) )              . . .. . .          	 	 		5 	5 	5  O O O      ! ! !(	 	 	      ! LO   MHNN##!&'! !*!!NMNM"" %& O )  MLM$ $ $ $L$ $ $2> > >  
 K	:	:	:	 	 	 	
 "!),,,  . . . 777
	" 
	" 
	" 
	" 
j	 	 	 	 	 	 "!),,,
 ///	k	!	!	 	 	 	 
j	 	 	+ 	+ 	+ 	+ "!),,,+ + + Ko	% o	% o	% o	%b 
:	:	:!!),,,K	 	 	 	 	 
:	:	:!!),,,r'   rh   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)r\   _pc_initialr   _nstack_initialro   tuple_blockstack_initialr   r   _temp_registers_insts	_outedges_terminatedr   r   r   r   r   r/  r  r  )r:   r^   r`   ra   rb   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={}))rG   rU  rV  r@   s    r(   rN   z_State.__repr__  s%    7>>d2
 
 	
r'   c                     | j         | j        fS r7   )rU  rV  r@   s    r(   get_identityz_State.get_identity  s     $"677r'   c                 D    t          |                                           S r7   )r>   r`  r@   s    r(   rA   z_State.__hash__  s    D%%''(((r'   c                 V    |                                  |                                 k     S r7   r`  rH   s     r(   rJ   z_State.__lt__  s%      ""U%7%7%9%999r'   c                 V    |                                  |                                 k    S r7   rc  rH   s     r(   rL   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.
        )rU  r@   s    r(   re   z_State.pc_initial  s    
 r'   c                     | j         S )ziThe list of instructions information as a 2-tuple of
        ``(pc : int, register_map : Dict)``
        )rZ  r@   s    r(   instructionsz_State.instructions  s    
 {r'   c                     | j         S )zaThe list of outgoing edges.

        Returns
        -------
        edges : List[State]
        r[  r@   s    r(   rv   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
        )rX  r@   s    r(   blockstack_initialz_State.blockstack_initial  s     ''r'   c                 *    t          | j                  S )zYThe current size of the stack

        Returns
        -------
        res : int
        )r\  ro   r@   s    r(   r   z_State.stack_depth$  s     4;r'   c                 n    t          | j                  D ]}|d         t          d          k    r|c S  dS )z&Find the initial *try* block.
        r   r0   N)r.  rX  r/   )r:   r  s     r(   find_initial_try_blockz_State.find_initial_try_block.  sM     D455 	 	C6{i....


 /	 	r'   c                     | j         S r7   r\  r@   s    r(   rq   z_State.has_terminated5  s    r'   c                 &    | j         | j                 S r7   )r\   r   r@   s    r(   r   z_State.get_inst8  s    ~dh''r'   c                 F    |                                  }|j        | _        d S r7   )r   r   r   r:   r   s     r(   r   z_State.advance_pc;  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   rx  )rG   r   r   r   lowerr\  rY  rl   )r:   r  r`  s      r(   r  z_State.make_temp?  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)rZ  rl   r   r   r   _flatten_inst_regsr  )r:   r   r   s      r(   rl   z_State.appendQ  sL    DK011131&--//BBCCCr'   c                 ,    |                      d          S )Nr  )re  r@   s    r(   r  z_State.get_tosV  s    yy||r'   c                     | j         |          S )z-Return the k'th element on the stack
        ro   )r:   r  s     r(   re  z_State.peekY  s     {A2r'   c                 :    | j                             |           dS )zPush to stackN)ro   rl   )r:   rV  s     r(   r  z_State.push^  s    4     r'   c                 4    | j                                         S )zPop the stack)ro   r   r@   s    r(   r   z
_State.popb  s    {   r'   c                 F    | j         }||          |d         c|d<   || <   dS )zSwap stack[idx] with the tosr   Nr~  )r:   r:  ss      r(   r  z_State.swapf  s,    KC4!B%"q#wwwr'   c                 F    d|v sJ | j                             |           dS )z#Push a block to blockstack
        r   N)r   rl   )r:   synblks     r(   r  z_State.push_blockk  s2     &&&&'''''r'   c                 N    | j         d|         | j         |d         c| _         }|S )zVReset the stack to the given stack depth.
        Returning the popped items.
        Nr~  )r:   r   poppeds      r(   r   z_State.reset_stackq  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/   r\  ro   )r:   r   r   r   r   ds         r(   r   z_State.make_blockx  sb     dOOt{++
 

  	$"4;//Am#Am)r'   c                 n    | j                                         }|                     |d                    |S )z)Pop a block and unwind the stack
        r   )r   r   r   r:   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;  r\  )r:   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   )r:   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 )r  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   )r:   kindsr  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
        r0   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
        )rl  r   ru  s     r(   rZ  z_State.get_varname  s     &&tx000r'   rm  c                 &    | j         j        |         S )z4Get referenced variable name from the oparg
        )r\   r]  )r:   rm  s     r(   rl  z_State.get_varname_by_arg  s     ~)%00r'   c                     d| _         dS )z!Mark block as terminated
        TNrr  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   )r`   stackr   rb   )r   ro   r\  r/  rl   r  r   r   getr   r   r[  EdgerW  r  )r:   r`   r   r   r   r  ra   r  rb   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^^--....$*++
<<<  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(   ru   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'   )r^   r`   ra   rb   r]  )r   r[  rg   r\   r`   r\  r  rb   	enumeraterl   r   r   )r:   retr   r   r   r  s         r(   rx   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 r7   )r`   rW  r  r   )r&  r   s     r(   
<dictcomp>z2_State.get_outgoing_edgepushed.<locals>.<dictcomp>  sC     , , , tz4:+,,788 , , ,r'   ri  r@   s    r(   get_outgoing_edgepushedz_State.get_outgoing_edgepushed  s%    , , N, , , 	,r'   )r&   )rv  )TN)r   r   N),r    r!   r"   rO   r<   rN   r`  rA   rJ   rL   propertyre   rg  rv   rk  rm  r   rp  rq   r   r   r  rl   r  re  r  r   r  r  r   r   r  r   r   r  r   rZ  intrl  r  r   ru   rx   r  r&   r'   r(   rR  rR    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'   rR  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 r7   )superr<   	_kw_namesr:   rF  r   	__class__s      r(   r<   zStatePy311.__init__	  s*    $)&)))r'   c                 "    | j         }d | _         |S r7   r  )r:   outs     r(   rH  zStatePy311.pop_kw_names	  s    n
r'   c                 &    | j         J || _         d S r7   r  )r:   r5  s     r(   rP  zStatePy311.set_kw_names	  s    ~%%%r'   c                 H    | j         }|                    | j                  d uS r7   r\   r!  r   r:   ra  s     r(   r   zStatePy311.is_in_exception	  s$    ^&&tx00<<r'   c                 D    | j         }|                    | j                  S r7   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   r2   T)rX  r/   )r:   ents     r(   r   zStatePy311.in_with	  sA    + 	 	C6{i////tt 0	 	r'   c                 .    |                      d          S )NrT  r  r*  r@   s    r(   r  zStatePy311.make_null	  s    ~~W~---r'   )r    r!   r"   r<   rH  rP  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 r7   )r  r<   r   r   _make_func_attrsr  s      r(   r<   zStatePy313.__init__"	  s5    $)&))) +D 1 1r'   c                 F    | j         |                             |           d S r7   )r  r   )r:   make_func_resr   s      r(   r  z!StatePy313.set_function_attribute&	  s$    m,33F;;;;;r'   c                     | j         |         S r7   )r  )r:   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  !	  sV        2 2 2 2 2< < <4 4 4 4 4 4 4r'   r  r  r>  r,   r  )r`   r  rb   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 r7   )_flow)r:   flows     r(   r<   zAdaptDFA.__init__=	  s    


r'   c                     | j         j        S r7   )r  r]   r@   s    r(   infoszAdaptDFA.infos@	  s    z%%r'   N)r    r!   r"   rO   r<   r  r  r&   r'   r(   r  r  :	  sH            & & X& & &r'   r  AdaptBlockInfoinstsrk  rb   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  )r\   r   r   r  )	inst_pairr   r  r   r   s       r(   process_function_attributesz6adapt_state_infos.<locals>.process_function_attributesM	  sS     v&;/))KK55d5kBBCCCt|r'   r  r  r  )
r   rW  maprg  r   r  rk  rm  rp  r  )r   r  r  s   `  r(   r}   r}   L	  s         &&&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)rE   strrW  r   r{  )r  rV  rW   s      r(   r{  r{  b	  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 r7   )r  _blocksr]   r   AdaptCFBlockr   backboner   blocksr  in_loopsrw   	_backbone)r:   r  r   	blockinfor  r   inloopblocksr   s           r(   r<   zAdaptCFA.__init__p	  s    
!%!1!7!7!9!9 	C 	CFI#/	6#B#BDL  :%..00>>## uu!!## 	$ 	$A~~a   $  ###!L0r'   c                     | j         j        S r7   )r  r   r@   s    r(   r   zAdaptCFA.graph	  s    z!!r'   c                     | j         S r7   )r  r@   s    r(   r  zAdaptCFA.backbone	  s
    ~r'   c                     | j         S r7   )r  r@   s    r(   r  zAdaptCFA.blocks	  s
    |r'   c              #   V   K   t          | j                  D ]}| j        |         V  d S r7   )r|   r  r  s     r(   iterliveblockszAdaptCFA.iterliveblocks	  s>      $$ 	! 	!A+a.    	! 	!r'   c                 B    | j         j                                         d S r7   )r  r   rU   r@   s    r(   rU   zAdaptCFA.dump	  s    
!!!!!r'   N)r    r!   r"   rO   r<   r  r   r  r  r  rU   r&   r'   r(   r  r  m	  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 r7   r&   )r&  r  r'  s      r(   r  z(AdaptCFBlock.__init__.<locals>.<genexpr>	  s&      881!888888r'   )r   rW  r  body)r:   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  )1rO   r  loggingcollectionsr   r   r   	functoolsr   numba.core.utilsr   r   r	   r
   numba.core.controlflowr   r   numba.core.irr   numba.core.errorsr   	getLoggerr    rZ   r   r   rP   r   enumr   r   rq  r   objectr/   rR   r   rh   rR  r  r  rg   r  r  r  r}   r{  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@o- o- o- o- o-6 o- o- o-d$ $ $A- A- A- A- A-& A- A- A-H4 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'   