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

    Simulate execution to recover dataflow and controlflow information.
    c                     t                               d|                                           || _        t	                      | _        d S )Nzbytecode dump:
%s)_loggerdebugdump	_bytecoder   block_infos)r8   bytecodes     r$   r:   zFlow.__init__Y   s8    *HMMOO<<<!%<<r#   c                    t          | j        ddd          }t          | j        j        j                  }|j                            |           t                      }|j        rzt          	                    d|j                   |j        
                                }||j        vr/t          	                    d|j                   t          	                    d|           |||j        <   	 |                    |           |                                rnW|                     ||          rn@|                     |          r*|                     |           |                                 nt          	                    d	|j                   |j                            |           |                                }|j                            |           |j        z|                     |j                   |                     |           t5          |j        d
           D ]<}t7          |          x| j        |j        <   }t          	                    d||           =dS )a  Run a trace over the bytecode over all reachable path.

        The trace starts at bytecode offset 0 and gathers stack and control-
        flow information by partially interpreting each bytecode.
        Each ``State`` instance in the trace corresponds to a basic-block.
        The State instances forks when a jump instruction is encountered.
        A newly forked state is then added to the list of pending states.
        The trace ends when there are no more pending states.
        r   r"   )r^   pcnstack
blockstack)debug_filenamezpending: %sz	stack: %szstate.pc_initial: %sTzend state. edges=%sc                     | j         S r5   )
pc_initial)xs    r$   <lambda>zFlow.run.<locals>.<lambda>   s    1< r#   )keyzblock_infos %s:
%sN)Stater\   TraceRunnerfunc_idfilenamependingappendr   rY   rZ   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]   )r8   
firststaterunnerfirst_encounterstate
out_statessis          r$   runzFlow.run^   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   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=%sr.   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_exceptionrY   rZ   get_exception_pcget_top_blocktarget
make_blockr   depthlasti)r8   r   r   eheh_topeh_blocks         r$   rt   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&   r(   c                 D   |                                 r|                                j        t          vr|                    |                                j                   |                    d          }|                    |           |j        }i }||d         k    r||d         z
  |d<   |d         }t          d          t          t          d          t          i|d                  |d	<   ||d
<    |j        dd|d         i| dS |                                 d S )Nr   r.   entry_stacknpophandlerr1   r2   kindnpushr   r`   r   Tr"   )r   r   r   r   r   r   r   pop_block_and_abover   r-   _EXCEPT_STACK_OFFSET_FINALLY_POPr   )r8   r   r   tryblkra   rS   r   s          r$   rt   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_noderx   add_edger`   set_entry_pointprocesscfgraph)r8   
all_statesgraphr   bedges         r$   r|   zFlow._build_cfg   s    		 	 	E ANN1 	= 	=E, = =u/!<<<<=a   r#   c                   	 t                               d                    dd                     fd}	fd}	fd}fd} |            \  }	t                               dt          |                      |            \  }} ||            |||           t                               d	                    dd                     d S )
Nz
Prune PHIs<   -c                      t          t                    } t                      }j        D ]B}t          |j                  }t          |j                  }| |xx         ||z  z  cc<   ||z  }C| |fS r5   )r   setrp   
_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   rp   _outgoing_phisitemsry   rY   rZ   rP   )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   ry   rY   rZ   rP   )	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   rY   rZ   rP   r   dictrp   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)rY   rZ   centerrP   )
r8   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   r8   r   insts      r$   ru   zFlow._is_implicit_new_block&  s?    ~~;$.///4[L((45r#   c                     |                                 }|j        dv r.| j        |j                 j        }|dk    rd}t	          |          dS dS )zChecks if the next instruction after a SETUP_WITH is something other
        than a POP_TOP, if it is something else it'll be some sort of store
        which is not supported (this corresponds to `with CTXMGR as VAR(S)`).>   
SETUP_WITHBEFORE_WITHPOP_TOPzGThe 'with (context manager) as (variable):' construct is not supported.N)r   r   r\   r   r   )r8   r   current_instnext_opmsgs        r$   rv   zFlow._guard_with_as0  se     ~~''"???n\%67>G)##$ 's+++ @?##r#   N)r   r   r   rM   r:   r   r	   rt   NotImplementedErrorr|   r}   ru   rv   r"   r#   r$   rW   rW   T   s         ( ( (
8< 8< 8<t &&&	$ 	$ 	$ 	$6 
'	'	'	# 	# 	# 	#, "!),,,
 
 
K9 K9 K9Z  , , , , ,r#   rW   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d Z	d Z
d	 Zd
 Zd Zd Zd Zd Zedv rd Znedv rd Zn ee          d Zd Zd Zd Zd Zd Zedv reZeZnedv rn ee          d Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,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n ee          d. Z/e/Z0e/Z1edv re/Z2e/Z3nedv rn ee          d/ Z4e4Z5e4Z6d0 Z7d1 Z8d2 Z9d3 Z:d4 Z;d5 Z<d6 Z=d7 Z>d8 Z?d9 Z@d: ZAd; ZBd< ZCedv rd= ZDnedv rn ee          d> ZEedv rd? ZFnedv rd@ ZFn ee          dA ZGdB ZHedv rdC ZInedv rn ee          dD ZJdE ZKdF ZLdG ZMdH ZNdI ZOdJ ZPdK ZQdL ZRdM ZSdN ZTedv rdO ZUnedv rdP ZUn ee          dQ ZVdR ZWdS ZXdT ZYdU ZZdV Z[dW Z\dX Z]dY Z^dZ Z_edv rd[ Z`nedv rn ee          d\ Zad] Zbd^ Zcd_ Zdd` Zeda Zfdb Zgdc Zhdd Zide Zjdf Zkdg Zldh Zmdi Zndj Zodk Zpdl Zqdm Zrdn Zsdo Ztdp Zudq Zvdr Zwds Zxdt Zydu Zzdv Z{dw Z|e|Z}e|Z~e|Ze|Zdx ZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZddzZd{ Zd| Zd} Zd~ Zd Zedv rd Znedv rd Zn ee          edv rnedv rd Znedv rd Zn ee          d ZdS )rj   zLTrace runner contains the states for the trace and the opcode dispatch.
    c                 `    || _         t                      | _        t                      | _        d S r5   )rc   r   rm   r   rp   )r8   rc   s     r$   r:   zTraceRunner.__init__E  s$    ,wwr#   c                 ,    t          | j        |          S r5   )r   rc   )r8   linenos     r$   get_debug_loczTraceRunner.get_debug_locJ  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   rY   rZ   r   rq   getattrrE   r   r   r   )r8   r   topblkblk_endr   fnr   s          r$   rr   zTraceRunner.dispatchM  sF   ***  ' ".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"3D,>,>t{,K,KLLLLr#   c                     |                     d          }|                    |           |j        }i }|d         }||k    r||z
  |d<   d}|d         r|dz  }||d<    |j        d
d|d         i| d	S )zo
        Adjust stack when entering an exception handler to match expectation
        by the bytecode.
        r.   r   r      r   r   r`   r   Nr"   )r   r   r   r   )r8   r   r   ra   rS   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 r5   rn   r   s      r$   op_NOPzTraceRunner.op_NOP{      Tr#   c                 0    |                     |           d S r5   r  r   s      r$   	op_RESUMEzTraceRunner.op_RESUME~  r  r#   c                 0    |                     |           d S r5   r  r   s      r$   op_CACHEzTraceRunner.op_CACHE  r  r#   c                 0    |                     |           d S r5   r  r   s      r$   
op_PRECALLzTraceRunner.op_PRECALL  r  r#   c                 ~    |                     |                                           |                    |           d S r5   )push	make_nullrn   r   s      r$   op_PUSH_NULLzTraceRunner.op_PUSH_NULL  s6    

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

5??$$%%%T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   )r9   resstrvarN)argr   r   r   r   r  rn   r  )r8   r   r   r   r9   r  r  s          r$   op_FORMAT_VALUEzTraceRunner.op_FORMAT_VALUE  s     8q==>C"3D,>,>t{,K,KLLLL		""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  rn   r  )r8   r   r   countr"  r#  s    `    r$   op_BUILD_STRINGzTraceRunner.op_BUILD_STRING  s     x C C C CeEll C C CDDEEA::OO%%&DD@@@@uUQY/?/?@@@DT7666

48r#   c                 .    |                                  d S r5   r  r   s      r$   
op_POP_TOPzTraceRunner.op_POP_TOP  s    		r#   r   c                     |                                 }|j        dz	  }|                    |||           |j        dz  r'|                    |                                           |                    |           d S )Nr   )idxr  )r  r  rn   r  r  )r8   r   r   r  r,  s        r$   op_LOAD_GLOBALzTraceRunner.op_LOAD_GLOBAL  sq    //##C(a-CLL3CL000x!| .

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

3r#   c                     |                     d          }|                    |           |                    ||           d S )Nconstr0  )r  r  rn   r2  s       r$   op_LOAD_CONSTzTraceRunner.op_LOAD_CONST  s>    oog&&

3Ts#####r#   c                 b   |                                 }t          dv r2|j        dz  r'|                    |                                           nt          dv rnt          t                    |                                }|                    |||           |                    |           d S )Nr   r   r%   itemr  )r   r	   r  r  r  r   r  rn   )r8   r   r   r?  r  s        r$   op_LOAD_ATTRzTraceRunner.op_LOAD_ATTR  s    yy{{##x!| .

5??,,---444%i000ooT#...

3r#   c                     |                     |          }|                    |          }|                    ||           |                    |           d S r/  )get_varnamer  rn   r  )r8   r   r   namer  s        r$   op_LOAD_FASTzTraceRunner.op_LOAD_FAST  sO      &&ood##Ts###

3r#   r   r%   c                 0    |                     |           d S r5   r  r   s      r$   op_DELETE_FASTzTraceRunner.op_DELETE_FAST  r  r#   c                 \    |                                 }|                    ||           d S )N)r   r   rn   )r8   r   r   r   s       r$   op_DELETE_ATTRzTraceRunner.op_DELETE_ATTR  s+    T&)))))r#   c                     |                                 }|                                 }|                    |||           d S )N)r   r9   rH  )r8   r   r   r   r9   s        r$   op_STORE_ATTRzTraceRunner.op_STORE_ATTR   s:    		T&66666r#   c                 \    |                                 }|                    ||           d S N)r9   rH  r8   r   r   r9   s       r$   op_STORE_DEREFzTraceRunner.op_STORE_DEREF  +    		T'''''r#   c                 \    |                                 }|                    ||           d S rM  rH  rN  s       r$   op_STORE_FASTzTraceRunner.op_STORE_FAST	  rP  r#   c           	      X   |                                 }|                                 }|                                }|                                }|                                }|                                }|                    |||||||           |                    |           dS )z"
        TOS = TOS1[TOS:]
        )basestartr  slicevarindexvarnonevarNr   r  rn   r  	r8   r   r   tostos1r  rV  rW  rX  s	            r$   
op_SLICE_1zTraceRunner.op_SLICE_1  s     iikkyy{{oo??$$??$$//## 	 	
 	
 	
 	

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

3r#   c           	      X   |                                 }|                                 }|                                 }|                                }|                                }|                                }|                    |||||||           |                    |           dS )z&
        TOS = TOS2[TOS1:TOS]
        )rT  rU  r_  r  rV  rW  NrY  )	r8   r   r   r[  r\  tos2r  rV  rW  s	            r$   
op_SLICE_3zTraceRunner.op_SLICE_37  s     iikkyy{{yy{{oo??$$??$$ 	 	
 	
 	
 	

3r#   c                    |                                 }|                                 }|                                }|                                }|                                }|                    ||||||           dS )z
        TOS[:] = TOS1
        )rT  r9   rV  rW  rX  Nr   r  rn   )r8   r   r   r[  r9   rV  rW  rX  s           r$   op_STORE_SLICE_0zTraceRunner.op_STORE_SLICE_0L  s     iikk		??$$??$$//## 	 	
 	
 	
 	
 	
r#   c           	      .   |                                 }|                                 }|                                 }|                                }|                                }|                                }|                    |||||||           dS )z#
        TOS1[TOS:] = TOS2
        )rT  rU  rV  r9   rW  rX  Nre  	r8   r   r   r[  r\  r9   rV  rW  rX  s	            r$   op_STORE_SLICE_1zTraceRunner.op_STORE_SLICE_1^  s     iikkyy{{		??$$??$$//## 	 	
 	
 	
 	
 	
r#   c           	      .   |                                 }|                                 }|                                 }|                                }|                                }|                                }|                    |||||||           dS )z#
        TOS1[:TOS] = TOS2
        )rT  r_  r9   rV  rW  rX  Nre  rh  s	            r$   op_STORE_SLICE_2zTraceRunner.op_STORE_SLICE_2r  s     iikkyy{{		??$$??$$//## 	 	
 	
 	
 	
 	
r#   c           	      .   |                                 }|                                 }|                                 }|                                 }|                                }|                                }|                    |||||||           dS )z'
        TOS2[TOS1:TOS] = TOS3
        )rT  rU  r_  r9   rV  rW  Nre  )	r8   r   r   r[  r\  rb  r9   rV  rW  s	            r$   op_STORE_SLICE_3zTraceRunner.op_STORE_SLICE_3  s     iikkyy{{yy{{		??$$??$$ 	 	
 	
 	
 	
 	
r#   c                     |                                 }|                                }|                                }|                                }|                    |||||           dS )z
        del TOS[:]
        )rT  rV  rW  rX  Nre  )r8   r   r   r[  rV  rW  rX  s          r$   op_DELETE_SLICE_0zTraceRunner.op_DELETE_SLICE_0  so     iikk??$$??$$//##sX 	 	
 	
 	
 	
 	
r#   c                    |                                 }|                                 }|                                }|                                }|                                }|                    ||||||           dS )z 
        del TOS1[TOS:]
        )rT  rU  rV  rW  rX  Nre  r8   r   r   r[  r\  rV  rW  rX  s           r$   op_DELETE_SLICE_1zTraceRunner.op_DELETE_SLICE_1  s     iikkyy{{??$$??$$//## 	 	
 	
 	
 	
 	
r#   c                    |                                 }|                                 }|                                }|                                }|                                }|                    ||||||           dS )z 
        del TOS1[:TOS]
        )rT  r_  rV  rW  rX  Nre  rq  s           r$   op_DELETE_SLICE_2zTraceRunner.op_DELETE_SLICE_2  s     iikkyy{{??$$??$$//## 	 	
 	
 	
 	
 	
r#   c                    |                                 }|                                 }|                                 }|                                }|                                }|                    ||||||           dS )z$
        del TOS2[TOS1:TOS]
        )rT  rU  r_  rV  rW  Nre  )r8   r   r   r[  r\  rb  rV  rW  s           r$   op_DELETE_SLICE_3zTraceRunner.op_DELETE_SLICE_3  s|     iikkyy{{yy{{??$$??$$t4cH 	 	
 	
 	
 	
 	
r#   c                    |j         }|dk    r/|                                }|                                }|}|}d}nX|dk    rC|                                }|                                }|                                }	|	}|}|}nt          d          |                                }
|                                }|                    ||||||
           |                    |           dS )z<
        slice(TOS1, TOS) or slice(TOS2, TOS1, TOS)
           Nr   unreachable)rU  r_  stepr  rV  )r  r   	Exceptionr  rn   r  )r8   r   r   argcr[  r\  rU  r_  rz  rb  rV  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)rU  r   	containerr  rV  temp_resrY  )	r8   r   r   r   rU  r  r  r  rV  s	            r$   op_BINARY_SLICEzTraceRunner.op_BINARY_SLICE  s    ))++CIIKKE		I((H//##C((HLLEsiS!H     JJsOOOOOr#   c           	      .   |                                 }|                                 }|                                 }|                                 }|                                }|                                }|                    |||||||           d S )N)rU  r   r  r9   r  rV  re  )	r8   r   r   r   rU  r  r9   rV  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   rn   get_jump_targetr   r   )r8   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_tosrn   r   r   r  )r8   r   r   r  s       r$   _op_JUMP_IF_OR_POPzTraceRunner._op_JUMP_IF_OR_POP/  sc    }}T%%%

dia
(((

d**,,
-----r#   c                 2    |                      ||           d S r5   r  r   s      r$   op_POP_JUMP_FORWARD_IF_NONEz'TraceRunner.op_POP_JUMP_FORWARD_IF_NONE8      UD)))))r#   c                 2    |                      ||           d S r5   r  r   s      r$   op_POP_JUMP_FORWARD_IF_NOT_NONEz+TraceRunner.op_POP_JUMP_FORWARD_IF_NOT_NONE;  r  r#   c                 2    |                      ||           d S r5   r  r   s      r$   op_POP_JUMP_BACKWARD_IF_NONEz(TraceRunner.op_POP_JUMP_BACKWARD_IF_NONE>  r  r#   c                 2    |                      ||           d S r5   r  r   s      r$    op_POP_JUMP_BACKWARD_IF_NOT_NONEz,TraceRunner.op_POP_JUMP_BACKWARD_IF_NOT_NONEA  r  r#   c                 2    |                      ||           d S r5   r  r   s      r$   op_POP_JUMP_FORWARD_IF_FALSEz(TraceRunner.op_POP_JUMP_FORWARD_IF_FALSED  r  r#   c                 2    |                      ||           d S r5   r  r   s      r$   op_POP_JUMP_FORWARD_IF_TRUEz'TraceRunner.op_POP_JUMP_FORWARD_IF_TRUEG  r  r#   c                 2    |                      ||           d S r5   r  r   s      r$   op_POP_JUMP_BACKWARD_IF_FALSEz)TraceRunner.op_POP_JUMP_BACKWARD_IF_FALSEJ  r  r#   c                 2    |                      ||           d S r5   r  r   s      r$   op_POP_JUMP_BACKWARD_IF_TRUEz(TraceRunner.op_POP_JUMP_BACKWARD_IF_TRUEM  r  r#   c                     |                     |           |                    |                                           d S Nr   rn   r   r  r   s      r$   op_JUMP_FORWARDzTraceRunner.op_JUMP_FORWARDP  :    T

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

c
r#   c                     |                     ||                                |                                           |                                 d S )Nretvalcastval)rn   r   r  	terminater   s      r$   op_RETURN_VALUEzTraceRunner.op_RETURN_VALUEc  sB    T%))++u7H7HIIIr#   c                     |                     d          }|                    |||                                            |                                 d S )Nr;  r  )r  rn   r  r2  s       r$   op_RETURN_CONSTzTraceRunner.op_RETURN_CONSTh  sK    //'**CLLc5??3D3DLEEEOOr#   c                     |                                 }|                                }|                    |||           |                    |           d S N)r9   r  rY  r8   r   r   valr  s        r$   op_YIELD_VALUEzTraceRunner.op_YIELD_VALUEq  I    iikkooT#...

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

6

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

di
     r#   c                 B   |                                 }|                                }|                    d          }|                    |||           t          dk     r<|                    |                    d|                                                     |                    |           |                    |           |                    |                    d|                                                     |                    |j	                   d S )	Nr  r  )r  r  r&   r3   r  r0   r   )
r   r  rn   r	   r  r   r  r  r   r   )r8   r   r   r  r  r  s         r$   op_SETUP_WITHzTraceRunner.op_SETUP_WITH  s   YY[[//##(;<<T"V<<< v  ',,.. !     	

6

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

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

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

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

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

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

3r#   c                     |                                 }|                                 }|                                 }|                    ||||           d S )N)r   r  r9   rH  )r8   r   r   r  r   r9   s         r$   op_STORE_SUBSCRzTraceRunner.op_STORE_SUBSCRR  sI    				T&UCCCCCr#   c                     |                                 }|                                 }|                    |||           d S )N)r   r  rH  )r8   r   r   r  r   s        r$   op_DELETE_SUBSCRzTraceRunner.op_DELETE_SUBSCRX  s:    		T&66666r#   c                    |j         }t          t          fdt          |          D                                 }                                }                                }t          |          r|}n|}|g|}                                }                                }	                    ||||	|           	                    |           d S )Nc                 8    g | ]}                                 S r"   r  r  s     r$   r  z'TraceRunner.op_CALL.<locals>.<listcomp>_  !    ???aeiikk???r#   )funcrR   kw_namesr  )
r  r   r%  r&  r   r   r  pop_kw_namesrn   r  )
r8   r   r   nargrR   callable_or_firstargnull_or_callablecallabler  r  s
    `        r$   op_CALLzTraceRunner.op_CALL]  s    xH????5;;???@@AA$yy{{ 99;;-.. 	1+HH'H(040Doo%%''TthCPPP

3r#   c                 :    |                     |j                   d S r5   )set_kw_namesr  r   s      r$   op_KW_NAMESzTraceRunner.op_KW_NAMESm  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>r  r  r#   )r  rR   r  )r  r   r%  r&  r   r  rn   r  )r8   r   r   r  rR   r  r  s    `     r$   op_CALL_FUNCTIONzTraceRunner.op_CALL_FUNCTIONp  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>|  r  r#   )r  rR   namesr  )r  r   r   r%  r&  r  rn   r  )r8   r   r   r  r  rR   r  r  s    `      r$   op_CALL_FUNCTION_KWzTraceRunner.op_CALL_FUNCTION_KWy  s    x		H????5;;???@@AAyy{{ooT4u#FFF

3r#   c                 &   |j         dz  rt          dk     rd}t          |          |j         dz  r|                                }nd }|                                }|                                }t          dv r7t	          |                    d                    r|                                 nt          dv rnt          t                    |                                }|                    |||||           |	                    |           d S )Nr   r(   z,CALL_FUNCTION_EX with **kwargs not supportedr   r   )r  varargvarkwargr  )
r  r	   r   r   r   peekr   r  rn   r  )r8   r   r   errmsgr!  r   r  r  s           r$   op_CALL_FUNCTION_EXzTraceRunner.op_CALL_FUNCTION_EX  s    8a< 	+I//CF"6***8a< 	yy{{HHHyy{{*** A// 		+++%i000ooTVhCPPP

3r#   c                 4   fdt          |          D             }|                                 fdt          |          D             }                    |||           |D ]}                    |           |D ]}                    |           d S )Nc                 8    g | ]}                                 S r"   r  r  s     r$   r  z)TraceRunner._dup_topx.<locals>.<listcomp>  s!    222		222r#   c                 8    g | ]}                                 S r"   r!  r  s     r$   r  z)TraceRunner._dup_topx.<locals>.<listcomp>  s#    999q""999r#   )origduped)r&  reversern   r  )r8   r   r   r'  r(  r)  r  s    `     r$   	_dup_topxzTraceRunner._dup_topx  s    2222U5\\222 :999E%LL999TE222 	 	CJJsOOOO 	 	CJJsOOOO	 	r#   c                    	 t          |j                  }n&# t          $ r t          d|j         d          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())operand)r.  r9   r  )r.  
const_listr  )r   r  rD   r   ci1opr   rn   r  r    r   r  r  r!   )r8   r   r   r.  r  r  r[  s          r$   op_CALL_INTRINSIC_1zTraceRunner.op_CALL_INTRINSIC_1  s_   N248<< N N N)*L*L*L*LMMMN%===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    #:c                 t    |j         }d|cxk    rdk    sn J d            |                     |||           d S )Nr   r   zInvalid DUP_TOPX count)r  r+  )r8   r   r   r'  s       r$   op_DUP_TOPXzTraceRunner.op_DUP_TOPX  sG    EQ 8udE*****r#   c                 6    |                      ||d           d S )Nr   r'  r+  r   s      r$   
op_DUP_TOPzTraceRunner.op_DUP_TOP       ud!,,,,,r#   c                 6    |                      ||d           d S )Nrx  r5  r6  r   s      r$   op_DUP_TOP_TWOzTraceRunner.op_DUP_TOP_TWO  r8  r#   c                 `    |                     |                    |j                             d S r5   )r  r"  r  r   s      r$   op_COPYzTraceRunner.op_COPY  s(    

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

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

5

6r#   c                     |                                 }|                                 }|                                 }|                    |           |                    |           |                    |           d S r5   rA  )r8   r   r   rB  rC  thirds         r$   op_ROT_THREEzTraceRunner.op_ROT_THREE  se    				

5

5

6r#   c                 N   |                                 }|                                 }|                                 }|                                 }|                    |           |                    |           |                    |           |                    |           d S r5   rA  )r8   r   r   rB  rC  rF  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  rn   r%  r  )r8   r   r   r'  rM  rN  rO  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$  )r8   r   r   r'  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  lenr  rn   r  )r8   r   r   r\  r  r]  s    `    r$   _build_tuple_unpackzTraceRunner._build_tuple_unpack  s    hEEEEU48__EEEFFGGCCCCE#f++/,B,BCCC KK1$	 	)__&&(ET&KKK

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

3r#   c                 j                                    }t          t          fdt          |j                  D                                 }fdt          |j                  D             }                                }                    |||||                               |           d S )Nc                 8    g | ]}                                 S r"   r  r  s     r$   r  z6TraceRunner.op_BUILD_CONST_KEY_MAP.<locals>.<listcomp>!  s!    CCCaeiikkCCCr#   c                 8    g | ]}                                 S r"   r!  r  s     r$   r  z6TraceRunner.op_BUILD_CONST_KEY_MAP.<locals>.<listcomp>"  s#    >>>5??$$>>>r#   )keyskeytmpsvaluesr  )r   r   r%  r&  r  r  rn   r  )r8   r   r   rj  valsrk  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>)  rT  r#   rU  r$  )r8   r   r   r'  r   lsts    `    r$   op_BUILD_LISTzTraceRunner.op_BUILD_LIST'  rX  r#   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S )N)r   r9   	appendvarr  r   r  r"  r  rn   )r8   r   r   r9   r  r   rt  r  s           r$   op_LIST_APPENDzTraceRunner.op_LIST_APPEND.  u    		E""OO%%	ooT& 	 	 	 	 	 	r#   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S )N)r   r9   	extendvarr  ru  )r8   r   r   r9   r  r   ry  r  s           r$   op_LIST_EXTENDzTraceRunner.op_LIST_EXTEND7  rw  r#   c                 P   |                                 }|j        }g }t          |          D ]A}|                                |                                }}|                    ||f           B|                    ||d d d         ||           |                    |           d S )Nr   )r   sizer  )r  r  r&  r   rn   r  )	r8   r   r   dctr'  r   r  vks	            r$   op_BUILD_MAPzTraceRunner.op_BUILD_MAP@  s    oou 	! 	!A99;;		qALL!Q    Tttt5cBBB

3r#   c                    |                                 }|                                 }||}}|j        }|                    |          }|                                }	|                                }
|                    |||||	|
           d S )N)r   rh   r9   
setitemvarr  ru  )r8   r   r   TOSTOS1rh   r9   r  r   r  r  s              r$   
op_MAP_ADDzTraceRunner.op_MAP_ADDK  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>Y  rT  r#   rU  r$  )r8   r   r   r'  r   r  s    `    r$   op_BUILD_SETzTraceRunner.op_BUILD_SETV  st    XAAAAE%LLAAABBCCooTC000

3r#   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S N)r   r9   	updatevarr  ru  r8   r   r   r9   r  r   r  r  s           r$   op_SET_UPDATEzTraceRunner.op_SET_UPDATE^  rw  r#   c                     |                                 }|j        }|                    |          }|                                }|                                }|                    |||||           d S r  ru  r  s           r$   op_DICT_UPDATEzTraceRunner.op_DICT_UPDATEg  rw  r#   c                     |                                 }|                                }|                    |||           |                    |           d S r  rY  )r8   r   r   r9   r  s        r$   op_GET_ITERzTraceRunner.op_GET_ITERp  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%   rx  r  )	r  r  rn   r  r  r	   r   r   r   )r8   r   r   r  r  r  r  r   s           r$   op_FOR_ITERzTraceRunner.op_FOR_ITERv  s    ==??  ""  TH4 	 	  	  	 

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

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

        New in version 3.10.
        Nr"   r   s      r$   op_GEN_STARTzTraceRunner.op_GEN_START  s	     	r#   c                 D   t           j        |j                 d         }|                                }|                                }t          |         j        }|                    d|           }|                    |||||           |                    |           d S )Nr   binop_r  )oplhsr   r  )	dis_nb_opsr  r   r
   r   r  rn   r  )r8   r   r   r  r   r  op_namer  s           r$   op_BINARY_OPzTraceRunner.op_BINARY_OP  s    ["1%iikkiikk)"-6oo%7g%7%7o88Tbcs<<<

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

3r#   Fc           
      6   t           dv rd }n2t           dv r|                                }nt          t                     |                                }d x}x}x}}	|j        dz  r|                                }|j        dz  r|                                }|j        dz  r|                                }|j        dz  r|                                }	|                                }
|                    |||||||	|
           |                    |
           d S )Nr   r         rx  r   )rC  codeclosureannotations
kwdefaultsdefaultsr  )r	   r   r   r  r  rn   r  )r8   r   r   MAKE_CLOSURErC  r  r  r  r  r  r  s              r$   op_MAKE_FUNCTIONzTraceRunner.op_MAKE_FUNCTION  s$   *** DD+++99;;DD%i000yy{{8<<<+<
X8c> 	"iikkG8c> 	&))++K8c> 	%J8c> 	#yy{{Hoo#! 	 		
 		
 		
 	

3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 r/  r1  r2  s       r$   op_LOAD_CLOSUREzTraceRunner.op_LOAD_CLOSURE  r9  r#   c                     |                     d          }|                    ||           |                    |           d S )Nassertion_errorr0  r1  r2  s       r$   op_LOAD_ASSERTION_ERRORz#TraceRunner.op_LOAD_ASSERTION_ERROR  s=    oo/00Ts###

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

4r#   c                 8   |                     d          }|                                }|                                }|                    ||||           |                    |j                   |                    |                                           d S )Nr  r  r   )r  r   rn   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  rn   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   rn   r  r  s       r$   r  zTraceRunner.op_RERAISE   s;    ))++CLL3L'''OOr#   )r*   c                    |                                 }|                                }|                    |           |                                }|                    |||           |                    |           d S )Nr>  )r   r  r  r  rn   )r8   r   r   r?  extrar  s         r$   op_LOAD_METHODzTraceRunner.op_LOAD_METHOD/  sj    99;;DOO%%EJJu//##CLLDcL222JJsOOOOOr#   c                 2    |                      ||           d S r5   )r@  r   s      r$   r  zTraceRunner.op_LOAD_METHOD7  s    eT*****r#   c                 2    |                      ||           d S r5   )r  r   s      r$   op_CALL_METHODzTraceRunner.op_CALL_METHOD<  s    eT*****r#   N)F)r   r   r   rM   r:   r   rr   r   r  r  r
  r  r  r  r  r(  r*  r	   r-  r   r4  r6  r8  r<  r@  rD  op_LOAD_FAST_CHECKop_LOAD_FAST_AND_CLEARrF  rI  rK  rO  rR  r]  r`  rc  rf  ri  rk  rm  ro  rr  rt  rv  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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r$  r+  r1  r3  r7  r:  r<  r?  rD  rG  rJ  rQ  rW  r_  rb  rd  rf  rn  rr  rv  rz  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$   rj   rj   B  s          
0 0 0M M M4/ / /(              "  "   &&&	 	 	 	 
'	'	'	 	 	 	
 "!),,,      
$ $ $
     K)!-	0	0	0!!),,,  * * *7 7 7
( ( (( ( (  *  *  *
 
 
$
 
 
(
 
 
(
 
 
(
 
 

 
 
$
 
 
$
 
 
  6 K	 	 	 	 
0	0	0!!),,,K	 	 	 	 
0	0	0!!),,,
' 
' 
' **K-"1	0	0	0!!),,,. . . 1/* * ** * ** * ** * ** * ** * ** * ** * *. . .. . .. . .     K	 	 	 	 
0	0	0!!),,,   &&&	" 	" 	" 	"* 
'	'	'	 	 	 	& "!),,,( ( (. . . K	 	 	 	 
0	0	0!!),,,M M M        
 
 
! ! !<! ! !8
 
 
(  

 
 
 &&&	 	 	 	 
'	'	'	% 	% 	% 	% "!),,,! ! !  D D D7 7 7
   % % %      .
 
 
 K	3 	3 	3 	38 
0	0	0!!),,,+ + +
- - -- - -) ) )              . . .. . .          	 	 		5 	5 	5        ! ! !(	 	 	     ! LO   MHNN##!&'! !*!!NMNM"" %& O )  MLM   @> > >  
  
  . . . &&&
	" 
	" 
	" 
	" 
'	'	'	 	 	 	 "!),,,
 K	k	!	!	 	 	 	 
'	'	'	+ 	+ 	+ 	+ "!),,,+ + + + +r#   rj   c                   X   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d.dZd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d/d(Z&d) Z'd* Z(d+ Z)dS )0_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_initialrq   tuple_blockstack_initialr   r   _temp_registers_insts	_outedges_terminatedr   r   r   r   r   r&  r  r  )r8   r^   r`   ra   rb   nullvalsr  r   s           r$   r:   z_State.__init__D  s     "%#(#4#4 
++! 
(ll%%v 	 	AH}}nnW--nnU++DJsOIIcNNNN	 	r#   c                 B    d                     | j        | j                  S )Nz&State(pc_initial={} nstack_initial={}))rE   r  r  r>   s    r$   rL   z_State.__repr__g  s%    7>>d2
 
 	
r#   c                     | j         | j        fS r5   )r  r  r>   s    r$   get_identityz_State.get_identityl  s     $"677r#   c                 D    t          |                                           S r5   )r<   r   r>   s    r$   r?   z_State.__hash__o  s    D%%''(((r#   c                 V    |                                  |                                 k     S r5   r   rF   s     r$   rH   z_State.__lt__r  s%      ""U%7%7%9%999r#   c                 V    |                                  |                                 k    S r5   r  rF   s     r$   rJ   z_State.__eq__u  s%      ""e&8&8&:&:::r#   c                     | j         S )z]The starting bytecode offset of this State.
        The PC given to the constructor.
        )r  r>   s    r$   re   z_State.pc_initialx  s    
 r#   c                     | j         S )ziThe list of instructions information as a 2-tuple of
        ``(pc : int, register_map : Dict)``
        )r  r>   s    r$   instructionsz_State.instructions  s    
 {r#   c                     | j         S )zaThe list of outgoing edges.

        Returns
        -------
        edges : List[State]
        r  r>   s    r$   rx   z_State.outgoing_edges  s     ~r#   c                     | j         S )zThe dictionary of outgoing phi nodes.

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

        Returns
        -------
        res : int
        )r^  rq   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   r.   N)r%  r  r-   )r8   r  s     r$   find_initial_try_blockz_State.find_initial_try_block  sM     D455 	 	C6{i....


 /	 	r#   c                     | j         S r5   r  r>   s    r$   rs   z_State.has_terminated  s    r#   c                 &    | j         | j                 S r5   )r\   r   r>   s    r$   r   z_State.get_inst  s    ~dh''r#   c                 F    |                                  }|j        | _        d S r5   )r   r   r   r8   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   r  )rE   r   r   r   lowerr^  r  rn   )r8   r  rC  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)r  rn   r   r   r   _flatten_inst_regsrl  )r8   r   rS   s      r$   rn   z_State.append  sL    DK011131&--//BBCCCr#   c                 ,    |                      d          S )Nr   )r"  r>   s    r$   r  z_State.get_tos  s    yy||r#   c                     | j         |          S )z-Return the k'th element on the stack
        rq   )r8   r  s     r$   r"  z_State.peek  s     {A2r#   c                 :    | j                             |           dS )zPush to stackN)rq   rn   )r8   r?  s     r$   r  z_State.push  s    4     r#   c                 4    | j                                         S )zPop the stack)rq   r   r>   s    r$   r   z
_State.pop  s    {   r#   c                 F    | j         }||          |d         c|d<   || <   dS )zSwap stack[idx] with the tosr   Nr  )r8   r,  ss      r$   r>  z_State.swap  s,    KC4!B%"q#wwwr#   c                 F    d|v sJ | j                             |           dS )z#Push a block to blockstack
        r   N)r   rn   )r8   synblks     r$   r  z_State.push_block  s2     &&&&'''''r#   c                 N    | j         d|         | j         |d         c| _         }|S )zVReset the stack to the given stack depth.
        Returning the popped items.
        Nr  )r8   r   poppeds      r$   r  z_State.reset_stack  s-     #k&5&14;uvv3FVr#   TNc                     t          |          |t          | j                  d}|rt          | j                  |d<   nd|d<   ||d<   |S )zMake a new block
        )r   r   r   r   Nr   )r-   r^  rq   )r8   r   r   r  r   ds         r$   r   z_State.make_block  sb     dOOt{++
 

  	$"4;//Am#Am)r#   c                 n    | j                                         }|                     |d                    |S )z)Pop a block and unwind the stack
        r   )r   r   r  r8   r   s     r$   r  z_State.pop_block  s6       ""=)***r#   c                     | j                             |          }d|cxk    rt          | j                   k     sn J | j         d|         | _         dS )zcFind *blk* in the blockstack and remove it and all blocks above it
        from the stack.
        r   N)r   r  r^  )r8   r  r,  s      r$   r   z_State.pop_block_and_above	  sd     $$S))C////#d.////////+DSD1r#   c                 r    t          |          }t          | j                  D ]}|d         |k    r|c S dS )1Find the first block that matches *kind*
        r   N)r-   r%  r   )r8   r   bss      r$   r   z_State.get_top_block  sP     4+,, 	 	B&zT!!			 "	 	r#   c                 h    d |D             }t          | j                  D ]}|d         |v r|c S dS )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   )r8   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
        r.   N)r   r>   s    r$   r   z_State.has_active_try!  s     !!%((44r#   c                 0    | j         j        |j                 S )z4Get referenced variable name from the oparg
        )r\   co_varnamesr  r  s     r$   rB  z_State.get_varname&  s     ~)$(33r#   c                     d| _         dS )z!Mark block as terminated
        TNr  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   rq   r^  r&  rn   r  r   r	   getr   r   r  Edger  r  )r8   r`   r   r   r   r9  ra   r  rb   topr   s              r$   r   z_State.fork0  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$   rw   z_State.split_new_blockU  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>c  s8     $= $= $=$!Q'8';';$=A $= $= $=r#   )r^   r`   ra   rb   r  )r   r  ri   r\   r`   r^  r9  rb   	enumeratern   r   r   )r8   retr   r   r   r  s         r$   rz   z_State.get_outgoing_statesZ  s     &&&&N 	9 	9D4>dg!$TZT_$= $=)DJ2G2G $= $= $=> > >E JJu+++-- 9 9Q+/:a=#C((9
r#   c                 $    d | j         D             S )z
        Returns
        -------
        Dict[int, int]
            where keys are the PC
            values are the edge-pushed stack values
        c                 ^    i | ]*}|j         t          |j        |j         d                    +S r5   )r`   r  r9  r   )r  r   s     r$   
<dictcomp>z2_State.get_outgoing_edgepushed.<locals>.<dictcomp>t  sC     , , , tz4:+,,788 , , ,r#   r	  r>   s    r$   get_outgoing_edgepushedz_State.get_outgoing_edgepushedk  s%    , , N, , , 	,r#   )r"   )r  )TN)r   r   N)*r   r   r   rM   r:   rL   r   r?   rH   rJ   propertyre   r  rx   r  r  r   r  rs   r   r   r  rn   r  r"  r  r   r>  r  r  r   r  r   r   r3  r   rB  r  r   rw   rz   rE  r"   r#   r$   r  r  @  s        ! ! ! !F
 
 

8 8 8) ) ): : :; ; ;     X    X   X # # X# ( ( X(
     X        ( ( (     $D D D
    
! ! !! ! !( ( (
( ( (       2 2 2    5 5 5
4 4 4
     
# # # #J  
  "
, 
, 
, 
, 
,r#   r  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )
StatePy311c                 H     t                      j        |i | d | _        d S r5   )superr:   	_kw_names)r8   rR   rS   	__class__s      r$   r:   zStatePy311.__init__y  s*    $)&)))r#   c                 "    | j         }d | _         |S r5   rK  )r8   outs     r$   r  zStatePy311.pop_kw_names}  s    n
r#   c                 &    | j         J || _         d S r5   rN  )r8   r  s     r$   r  zStatePy311.set_kw_names  s    ~%%%r#   c                 H    | j         }|                    | j                  d uS r5   r\   r  r   r8   r  s     r$   r   zStatePy311.is_in_exception  s$    ^&&tx00<<r#   c                 D    | j         }|                    | j                  S r5   rR  rS  s     r$   r   zStatePy311.get_exception  s    ^&&tx000r#   c                 R    | j         D ]}|d         t          d          k    r dS d S )Nr   r0   T)r  r-   )r8   ents     r$   r   zStatePy311.in_with  sA    + 	 	C6{i////tt 0	 	r#   c                 .    |                      d          S )Nr  r  r!  r>   s    r$   r  zStatePy311.make_null  s    ~~W~---r#   )r   r   r   r:   r  r  r   r   r   r  __classcell__)rL  s   @r$   rH  rH  x  s              
  = = =1 1 1  
. . . . . . .r#   rH  r*   r;  )r`   r9  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 r5   )_flow)r8   flows     r$   r:   zAdaptDFA.__init__  s    


r#   c                     | j         j        S r5   )r\  r]   r>   s    r$   infoszAdaptDFA.infos  s    z%%r#   N)r   r   r   rM   r:   rF  r_  r"   r#   r$   rZ  rZ    sH            & & X& & &r#   rZ  AdaptBlockInfoinstsr  rb   active_try_blockoutgoing_edgepushedc                     t          t          | j                  | j        | j        |                                 |                                           S )Nra  )r`  r  r  r  r  r  rE  )r   s    r$   r   r     sQ    E&'')+5577!99;;   r#   c              #      K   | D ]N}t          |t                    r|V  t          |t          t          f          rt	          |          D ]}|V  OdS )z<Flatten an iterable of registers used in an instruction
    N)rC   strr  r   r  )rM  r?  rf   s      r$   r  r    sw         dC   	JJJJudm,, 	'--   r#   c                   f    e Zd ZdZd Zed             Zed             Zed             Zd Z	d Z
dS )	AdaptCFAz<Adapt Flow to the old CFA class expected by Interpreter
    c                    || _         i | _        |j                                        D ]\  }}t	          ||          | j        |<   | j         j                                        }|j        }|                                }t                      }| j        	                                D ],}|
                    |          r|                    |           -||z
  | _        d S r5   )r\  _blocksr]   r   AdaptCFBlockr   backboner   blocksrj  in_loopsry   	_backbone)r8   r]  r   	blockinform  r   inloopblocksr   s           r$   r:   zAdaptCFA.__init__  s    
!%!1!7!7!9!9 	C 	CFI#/	6#B#BDL  :%..00>>## uu!!## 	$ 	$A~~a   $  ###!L0r#   c                     | j         j        S r5   )r\  r   r>   s    r$   r   zAdaptCFA.graph  s    z!!r#   c                     | j         S r5   )rp  r>   s    r$   rm  zAdaptCFA.backbone  s
    ~r#   c                     | j         S r5   )rk  r>   s    r$   rn  zAdaptCFA.blocks  s
    |r#   c              #   V   K   t          | j                  D ]}| j        |         V  d S r5   )r~   rn  r*  s     r$   iterliveblockszAdaptCFA.iterliveblocks  s>      $$ 	! 	!A+a.    	! 	!r#   c                 B    | j         j                                         d S r5   )r\  r   r[   r>   s    r$   r[   zAdaptCFA.dump  s    
!!!!!r#   N)r   r   r   rM   r:   rF  r   rm  rn  rw  r[   r"   r#   r$   ri  ri    s         1 1 1& " " X"   X   X! ! !" " " " "r#   ri  c                       e Zd Zd ZdS )rl  c                 Z    || _         t          d |j        D                       | _        d S )Nc              3       K   | ]	\  }}|V  
d S r5   r"   )r  r  r  s      r$   r  z(AdaptCFBlock.__init__.<locals>.<genexpr>  s&      881!888888r#   )r   r  rb  body)r8   rq  r   s      r$   r:   zAdaptCFBlock.__init__  s-    88	88888			r#   N)r   r   r   r:   r"   r#   r$   rl  rl    s#        9 9 9 9 9r#   rl  )2rM   r  pprintr   loggingcollectionsr   r   r   	functoolsr   numba.core.utilsr   r	   r
   numba.core.controlflowr   r   numba.core.irr   numba.core.errorsr   	getLoggerr   rY   r   r   rN   r   enumr   r   r0  r   objectr-   rP   rW   r   rj   r  rH  ri   r;  rZ  r`  r   r  ri  rl  r"   r#   r$   <module>r     s    


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