
    xKg                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZmZmZ d dlmZmZ d dlmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZ ed	v rd d
lmZ nedv rn e e       G d de!      Z" ejF                  e$      Z% G d de!      Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1 G d de!      Z2ed	v r G d de3      Z4yedv ry e e      )    N)errorsirconfig)NotDefinedErrorUnsupportedErrorerror_extras)get_definitionguard)	PYVERSIONBINOPS_TO_OPERATORSINPLACE_BINOPS_TO_OPERATORS)FlowAdaptDFAAdaptCFA	BlockKind)eh)unpack_single_tuple      )CALL_INTRINSIC_1_Operandr   	   r   
   r      c                       e Zd ZdZd Zd Zy)_UNKNOWN_VALUEzNRepresents an unknown value, this is for ease of debugging purposes only.
    c                     || _         y N)_varname)selfvarnames     Z/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/core/interpreter.py__init__z_UNKNOWN_VALUE.__init__   s	        c                 8    dj                  | j                        S )Nz_UNKNOWN_VALUE({}))formatr$   r%   s    r'   __repr__z_UNKNOWN_VALUE.__repr__"   s    #**4==99r)   N)__name__
__module____qualname____doc__r(   r-    r)   r'   r!   r!      s     :r)   r!   c                   "    e Zd ZdZd Zd Zd Zy)Assignera  
    This object keeps track of potential assignment simplifications
    inside a code block.
    For example `$O.1 = x` followed by `y = $0.1` can be simplified
    into `y = x`, but it's not possible anymore if we have `x = z`
    in-between those two instructions.

    NOTE: this is not only an optimization, but is actually necessary
    due to certain limitations of Numba - such as only accepting the
    returning of an array passed as function argument.
    c                 l    i | _         t        j                  t              | _        t               | _        y r#   )dest_to_srccollectionsdefaultdictlistsrc_invalidatesetunused_destsr,   s    r'   r(   zAssigner.__init__6   s)     *55d;Er)   c                    |j                   }|j                   }|| j                  v r;| j                  j                  |      D ]  }| j                  j                  |        || j                  v r| j                  |   }|j                  rH|| j                  |<   | j                  |   j                  |       | j                  j                  |       |S )z
        Assign *srcvar* to *destvar*. Return either *srcvar* or a possible
        simplified assignment source (earlier assigned to *srcvar*).
        )namer:   popr6   is_tempappendr<   add)r%   srcvardestvarsrcnamedestnameds         r'   assignzAssigner.assign>   s    
 ++<<t*** ((,,X6  $$Q' 7d&&&%%g.F??)/DX&(//9!!(+r)   c                 t    || j                   v r| j                   |   S | j                  j                  |       y)zu
        Get a possible assignment source (a ir.Var instance) to replace
        *destname*, otherwise None.
        N)r6   r<   discard)r%   rF   s     r'   get_assignment_sourcezAssigner.get_assignment_sourceR   s:    
 t'''##H--!!(+r)   N)r.   r/   r0   r1   r(   rH   rK   r2   r)   r'   r4   r4   )   s    
"(r)   r4   c                     | |   j                   j                  }| |   j                  }||j                  |   v r3|j                  |   j	                  |       ||   j                  |       y|||   vrt        d      y)a  
    Deletes the definition defined for old_body at index idx
    from func_ir. We assume this stmt will be deleted from
    new_body.

    In some optimizations we may update the same variable multiple times.
    In this situation, we only need to delete a particular definition once,
    this is tracked in already_deleted_def, which is a map from
    assignment name to the set of values that have already been
    deleted.
    zInconsistency found in the definitions while executing a peephole optimization. This suggests an internal error or inconsistency elsewhere in the compiler.N)targetr>   value_definitionsremoverB   r   )old_bodyidxfunc_iralready_deleted_defslhsrhss         r'   _remove_assignment_definitionrW   ]   s     3-


#
#C
3-

C
g""3''S!((-S!%%c*	(-	-A
 	
 
.r)   c                     |j                   j                         }|j                  }|j                         D ]  \  }}	|||	   d   f||	<    d||<   t        | |||       |S )a  
    Extracts the kws args passed as varkwarg
    for CALL_FUNCTION_EX. This pass is taken when
    n_kws <= 15 and the bytecode looks like:

        # Start for each argument
        LOAD_FAST  # Load each argument.
        # End for each argument
        ...
        BUILD_CONST_KEY_MAP # Build a map

    In the generated IR, the varkwarg refers
    to a single build_map that contains all of the
    kws. In addition to returning the kws, this
    function updates new_body to remove all usage
    of the map.
       N)itemscopyvalue_indexesrW   )
rQ   keyword_exprnew_bodybuildmap_idxrS   rT   kwsr\   keyindexs
             r'   #_call_function_ex_replace_kws_smallrc   v   sw    2 


!
!
#C !..M#))+
U3u:a=)E
 , "H\!,)= Jr)   c                 d   d||<   t        | |||       g }|dz   }	|	|k  r| |	   }
t        |
t        j                        r$t        |
j                  t        j
                        st        |      |
j                  j                  }|
j                  j                  }|	dz  }	d}|	|k  r|s| |	   }t        |t        j                        r|t        |j                  t        j                        rX|j                  j                  dk(  r?|j                  j                  j                  |k(  r|j                  j                  dk(  rd}n|	dz  }	|	|k  r|s|r|	|k(  rt        |      | |	dz      }t        |t        j                        rt        |j                  t        j                        r|j                  j                  dk(  r|j                  j                  j                  j                  j                  k(  rHt        |j                  j                        dk(  r&|j                  j                  d	   j                  |k(  st        |      |j                  j                  d   }|j                  ||f       d||	<   d||	dz   <   t        | |	||       t        | |	dz   ||       |	dz  }	|	|k  r|S )
a  
    Extracts the kws args passed as varkwarg
    for CALL_FUNCTION_EX. This pass is taken when
    n_kws > 15 and the bytecode looks like:

        BUILD_MAP # Construct the map
        # Start for each argument
        LOAD_CONST # Load a constant for the name of the argument
        LOAD_FAST  # Load each argument.
        MAP_ADD # Append the (key, value) pair to the map
        # End for each argument

    In the IR generated, the initial build map is empty and a series
    of setitems are applied afterwards. THE IR looks like:

        $build_map_var = build_map(items=[])
        $constvar = const(str, ...) # create the const key
        # CREATE THE ARGUMENT, This may take multiple lines.
        $created_arg = ...
        $var = getattr(
            value=$build_map_var,
            attr=__setitem__,
        )
        $unused_var = call $var($constvar, $created_arg)

    We iterate through the IR, deleting all usages of the buildmap
    from the new_body, and adds the kws to a new kws list.
    NrY   Fgetattr__setitem__Tcall   r   )rW   
isinstancer   AssignrN   Constr   rM   r>   ExpropattrfunclenargsrA   )rQ   buildmap_namer_   
search_endr^   rS   errmsgrT   r`   search_start
const_stmtkey_var_namekey_valfound_getattrgetattr_stmtsetitem_stmtarg_vars                    r'   #_call_function_ex_replace_kws_larger}      s   N "H\!,)= C!#L
*
$l+
z299-:++RXX6 #6**!((--""((J&!#L1L<3|11277; &&))Y6 &&,,11$% !&&++}< $$ !A J&!B z) #6**q 01|RYY/<--rww7""%%/""'',,&&++, L&&++,1""''*//  #6**$$))!,

GW%&!%%)!"%lG-A	
 	&lQ&1E	
 	s *
$t Jr)   c                 @    d||<   t        | |||       |j                  S )a  
    Extracts the args passed as vararg
    for CALL_FUNCTION_EX. This pass is taken when
    n_args <= 30 and the bytecode looks like:

        # Start for each argument
        LOAD_FAST  # Load each argument.
        # End for each argument
        ...
        BUILD_TUPLE # Create a tuple of the arguments

    In the IR generated, the vararg refer
    to a single build_tuple that contains all of the
    args. In addition to returning the args, this
    function updates new_body to remove all usage
    of the tuple.
    N)rW   rZ   )rQ   
tuple_exprr^   buildtuple_idxrS   rT   s         r'   $_call_function_ex_replace_args_smallr   *  s.    4  $H^!.'+? r)   c                 T   d}g }t        |t        j                        rSt        |j                  t        j                        r/|j                  j
                  }	d||<   t        | |||       |dz  }nt        d      ||k\  r| |   }
t        |
t        j                        r|
j                  j
                  |	k(  rht        |
j                  t        j                        rD|
j                  j                  dk(  r+|
j                  j                  sd||<   t        | |||       no||k(  st        |
t        j                        r}|
j                  j
                  |	k(  rdt        |
j                  t        j                        r@|
j                  j                  dk(  r'|
j                  j                  t        j                  k(  st        |      |
j                  j                   j
                  }|
j                  j"                  j
                  }| |dz
     }t        |t        j                        r_t        |j                  t        j                        r;|j                  j                  dk(  r"t%        |j                  j                        dk(  st        |      |j                  j
                  |k(  rt        d      |j                  j
                  |k(  r|}	nt        |      |j'                  |j                  j                  d          d||<   d||dz
  <   t        | |||       t        | |dz
  ||       |dz  }d}||k\  rJ|rH| |   }t        |t        j                        r|j                  j
                  |	k(  rd	}n|dz  }||k\  r|rH||k\  r||k(  rt        |      |ddd
   S )a  
    Extracts the args passed as vararg
    for CALL_FUNCTION_EX. This pass is taken when
    n_args > 30 and the bytecode looks like:

        BUILD_TUPLE # Create a list to append to
        # Start for each argument
        LOAD_FAST  # Load each argument.
        LIST_APPEND # Add the argument to the list
        # End for each argument
        ...
        LIST_TO_TUPLE # Convert the args to a tuple.

    In the IR generated, the tuple is created by concatenating
    together several 1 element tuples to an initial empty tuple.
    We traverse backwards in the IR, collecting args, until we
    find the original empty tuple. For example, the IR might
    look like:

        $orig_tuple = build_tuple(items=[])
        $first_var = build_tuple(items=[Var(arg0, test.py:6)])
        $next_tuple = $orig_tuple + $first_var
        ...
        $final_var = build_tuple(items=[Var(argn, test.py:6)])
        $final_tuple = $prev_tuple + $final_var
        $varargs_var = $final_tuple
    r   NrY   unreachablebuild_tuplebinoprh   TF)ri   r   rj   rN   Varr>   rW   AssertionErrorrM   rl   rm   rZ   fnoperatorrB   r   rU   rV   rp   rA   )rQ   vararg_stmtr^   rs   rS   rt   rT   ru   
total_argstarget_nameconcat_stmtlhs_namerhs_namearg_tuple_stmtkeep_looking	next_stmts                   r'   $_call_function_ex_replace_args_larger   M  so   L LJ;		*{(("&&1!'',,#%j'+?	
 	a

 ]++ 
$z*{BII.""'';6;,,bgg6!!$$5%%++#'HZ )*g/C  l*;		2&&++"# %%rww  %%((G3%%((HLL8 'v.."((,,11H"((,,11H &j1n5N>2995"(("'' #((++$% ,,223q8 'v..$$))X5$]33&&++x7& 'v..$$**1- $(HZ '+HZ!^$)*g/C **q.'3G !OJL,$Z0	y"))4!((--&' $)L( !OJ; ,U 
$P \! v&&ddr)   c                 J   t        j                  d      }t        j                  t              }| j
                  j                         D ]Q  }d}g }t        |j                        D ]  \  }}t        |t        j                        rt        |j                  t        j                        r|j                  j                  dk(  rx|j                  j                  ad}|j                  }|j                   }	|j"                  }
|j$                  }|j                  }|dz
  }|}d}d}|dk\  r^|s\|j                  |   }t        |t        j                        r&|j&                  j(                  |j(                  k(  rd}n|dz  }|dk\  r|s\|
s?|r=t        |j                  t        j                        r|j                  j                  dk(  st+        |      |j                  j,                  r%t/        |j                  |j                  ||| |      }
n)t1        |j                  |j(                  ||dz
  || ||      }
|}|H|	rt+        |      |}d}d}|dk\  r^|s\|j                  |   }t        |t        j                        r&|j&                  j(                  |j(                  k(  rd}n|dz  }|dk\  r|s\|st+        |      t        |j                  t        j                        r>|j                  j                  d	k(  r%t3        |j                  |j                  ||| |      }	nct        |j                  t        j                        r$|j                  j                  d
k(  rt+        |      t5        |j                  |||| ||      }	t        j                  j7                  |j8                  |	|
|j:                  |j&                        }t=        |j                  || |       t        j                  ||j&                  |j:                        }| j>                  |j&                  j(                     jA                  |       nt        |t        j                        rt        |j                  t        j                        r|j                  j                  dk(  r|j                  j$                  |j                  }|j$                  j(                  }|| j>                  v ratC        | j>                  |         dk(  rF| j>                  |   d   }t        |t        j                        r|j                  d
k(  rt+        |      |jA                  |        |s|j                  jE                          |j                  jG                  |D cg c]  }||	 c}       T | S c c}w )a_  
    This peephole rewrites a bytecode sequence unique to Python 3.10
    where CALL_FUNCTION_EX is used instead of CALL_FUNCTION_KW because of
    stack limitations set by CPython. This limitation is imposed whenever
    a function call has too many arguments or keyword arguments.

    https://github.com/python/cpython/blob/a58ebcc701dd6c43630df941481475ff0f615a81/Python/compile.c#L55
    https://github.com/python/cpython/blob/a58ebcc701dd6c43630df941481475ff0f615a81/Python/compile.c#L4442

    In particular, this change is imposed whenever (n_args / 2) + n_kws > 15.

    Different bytecode is generated for args depending on if n_args > 30
    or n_args <= 30 and similarly if n_kws > 15 or n_kws <= 15.

    This function unwraps the *args and **kwargs in the function call
    and places these values directly into the args and kwargs of the call.
    a  
        CALL_FUNCTION_EX with **kwargs not supported.
        If you are not using **kwargs this may indicate that
        you have a large number of kwargs and are using inlined control
        flow. You can resolve this issue by moving the control flow out of
        the function call. For example, if you have

            f(a=1 if flag else 0, ...)

        Replace that with:

            a_val = 1 if flag else 0
            f(a=a_val, ...)Frg   NTrY   r   	build_mapr   list_to_tuple)rM   )$textwrapdedentr7   r8   r;   blocksvalues	enumeratebodyri   r   rj   rN   rl   rm   varkwargrq   r`   varargrM   r>   r   rZ   rc   r}   r   r   rg   ro   locrW   rO   rA   rp   clearextend)rS   rt   rT   blkblk_changedr^   istmtrg   rq   r`   r   r   start_searchvarkwarg_lockeyword_deffound
vararg_locargs_defnew_callvararg_nameexprxs                          r'   .peep_hole_call_function_ex_to_call_function_kwr     s   ( __   F '2237~~$$& *GAt4+tzz2773JJMMV+JJ''3"zzyyhh == 1u+""a'"%((<"8K";		:'..33x}}D $$) #a'  ";#4#4bgg>'--00K? +622$$** >#)) $,C* > $A ,	C  ,% /v66!-J#H!E$/%#&88J#7&x; ( 4 4 C$(E&!OJ %/% ! /v66"8>>277;$NN-->  DHH$NN$&#0  #8>>277;$NN--@
 /v660  DHH$$&#"0  77<<IItS$((4;; (  .HHa*> yy4;;A$$T[[%5%56==hG4+tzz2773JJMMV+JJ%%1
 zz"kk..7#7#77G00=>!C #//<Q?D!$0TWW5O.v66OOD!a +d HHNNHHOOB1AMQBCo 'p N Cs   V 
V 
c           	          d} j                   j                         D ]H  \  }	 fd} |       }|0j                  |d   d   |d   d    }|r(t        d       |D ]  }t        |        t        d       g }g }|d   d   }	|	j                  j
                  }
|D ]  }t        |t        j                        st        |j                  t        j                        sC|j                  }|j                  dk(  s_|j                  j
                  |
k(  sy|j                  d	k(  r&|j                  |j                  j
                         |j                  d
k(  r&|j                  |j                  j
                         J  g  fd}|	j                  }|rt        d       j                          |d   d   }|}|D ]  }t        |t        j                        rt        |j                  t        j                        r\|j                  }|j                  dk(  rr|j                  j
                  |v s|j                  j
                  |v r0 j                  j!                  |j                  j
                         j                  |       |j                  dk(  r|j"                  j
                  }||v s||v r|j$                  d   }t        |t        j&                        rC|d|j
                  }||v r,t        j                  j)                  |g|j*                        }nt        j,                  dt.        |j*                        }|j0                  j3                  d|j*                        }j                  t        j                  |||j*                               t        j                  j5                  ||fd|j*                        }t        j&                  |j0                  ||j*                        }t        j                  |||j*                        } ||       |}t        j                  j7                  t8        j:                  |||j*                        }t        j                  ||j                  |j*                        } ||       |j                  }j                  |       |j                  dk(  r|j                  j
                  |
k(  rit        j                  j)                  |j                  |j*                        }t        j                  ||j                  |j*                        } ||       j                  |       j                  |       j                  |         |t        j                  ||j                  |j*                               |rt        d       D ]  }t        |        j                  dd }|d|d   d    }j                  |d   d   dz   d }|z   |z   }j                  j=                          j                  j?                  |       |rt        d       j                          nIC  S )a  
    This peephole rewrites a bytecode sequence new to Python 3.9 that looks
    like e.g.:

    def foo(a):
        return (*a,)

    41          0 BUILD_LIST               0
                2 LOAD_FAST                0 (a)
                4 LIST_EXTEND              1
                6 LIST_TO_TUPLE
                8 RETURN_VAL

    essentially, the unpacking of tuples is written as a list which is appended
    to/extended and then "magicked" into a tuple by the new LIST_TO_TUPLE
    opcode.

    This peephole repeatedly analyses the bytecode in a block looking for a
    window between a `LIST_TO_TUPLE` and `BUILD_LIST` and...

    1. Turns the BUILD_LIST into a BUILD_TUPLE
    2. Sets an accumulator's initial value as the target of the BUILD_TUPLE
    3. Searches for 'extend' on the original list and turns these into binary
       additions on the accumulator.
    4. Searches for 'append' on the original list and turns these into a
       `BUILD_TUPLE` which is then appended via binary addition to the
       accumulator.
    5. Assigns the accumulator to the variable that exits the peephole and the
       rest of the block/code refers to as the result of the unpack operation.
    6. Patches up
    Fc                     d} t        t        t        j                                    D ]  }j                  |   }t	        |t
        j                        rJ|j                  }t	        |t
        j                        r$|j                  dk(  r|j                  d   }d} ||f}| syt	        |t
        j                        s|j                  j                  k(  s||ff}|c S  y )NFr   r   T)reversedrangerp   r   ri   r   rj   rN   rl   rm   inforM   r>   )r   rR   r   rN   target_listbtregionr   s          r'   find_postive_regionz4peep_hole_list_to_tuple.<locals>.find_postive_region   s    #E#chh-$89C88C=D!$		2 $

&ubgg6 %O ;*/**Q-K$(E"%tB%dBII6#{{//;>*,sDk):'- :r)   NrY   r   z
WINDOW: re   r   rA   c                    j                  |        | j                  j                  j                  v rbt	        j                  | j                  j                           dk(  sJ j                  | j                  j                     j                          j                  | j                  j                     j                  | j                         y)z. Adds to the new_hole and fixes up definitionsrY   N)rA   rM   r>   rO   rp   r   rN   )r   rS   new_holes    r'   append_and_fixz/peep_hole_list_to_tuple.<locals>.append_and_fixS  s    OOA&xx}}(<(<<  #7#7#7#FG1LLL,,QXX]];AAC((7>>qwwGr)   z
BLOCK:rg   _var_tupler>   rN   r   $_list_extend_gv_tupler   )rM   rN   r   r2   r   rU   rV   r   
build_listz

NEW HOLE:z
DUMP post hole:) r   rZ   r   printrM   r>   ri   r   rj   rN   rl   rm   rn   rA   dumprO   r?   ro   rq   r   r   r   Globalr   scoperedefinerg   r   r   rB   r   r   )rS   _DEBUGoffsetr   r   	peep_holer   appendsextendsinit
const_listr   r   the_build_listt2l_agnaccfnameargtmp_namer   gv_tuple	tuple_varvarasgnnewcpyheadtailtmpr   r   s   `                            @@r'   peep_hole_list_to_tupler     s%   @ F ~~++-." )*F!HHVAYq\F1IaLA	+&&a '"Iay|![[--
 #A!!RYY/%aggrww7#$77D $9 4$(JJOOz$A $(99#8$+NN188==$A%)YY(%:$+NN188==$A$,1 #  	H "& *%HHJ !)A,$"A!!RYY/%aggrww7#$77D#ww)3$%HHMMW$<()(@ %,$8$8$<$<QXX]]$K$, %-OOA$6!%F!2(,		#(G#3u7G*.))A,C'1#rvv'>BGBE((4L+0G+;131D1DcVEIXX2OB 8:yy5<E48HH8.H 9<		8J8J0H48HH 9K 9.I -5OO02		;D:B8<12-. 2409C6248HH 2> 2.B /1ffSYY59XX/?/1yyS$((/K(6t(<.1 +-''--8<<<?<?<=EE +8 +CC ,.99S!((DHH+MD$24$8*.++C %-OOA$6"&''\"9$%HHMMZ$?&(gg&9&9$**dhh&O')yyahh'I .t 4 ( 2$OOA. !*[ #` ryygnn)7);); = >-(%a & hhqk=F1IaL)xxq	!q 0 12Xo, $-.HHJ i  .p Nr)   c                 |   t               }| j                  j                         D ]  }|j                  D ]  }t        |j	                               }|D ]/  }|j
                  j                  d      s|j                  |       1 ||z  sVt        |t        j                        sq|j                  |j                          g }|j                  D ]0  }t        |j	                               |z  r |j                  |       2 |j                  j                          |j                  j                  |        | S )zh
    This rewrite removes variables used to store the `__exit__` function
    loaded by SETUP_WITH.
    z$setup_with_exitfn)r;   r   r   r   	list_varsr>   
startswithrB   ri   r   rj   rM   rA   r   r   )rS   	dead_varsr   r   usedvr^   s          r'   peep_hole_delete_with_exitr     s    
 I~~$$&HHD t~~'(D66$$%9:MM!$ 
 idBII.MM$++.  HHD()I5%  	!) ', Nr)   c           
      \
   t        j                  d      }t        j                  t              }| j
                  j                         D ]  }g }i }t        j                  t              }i }d}t        |j                        D ]S  \  }	}
|
}d}t        |
t        j                        r1t        |
j                  t        j                        r|
j                  j                  dk(  r|
j                   j"                  }|	||
j                   j"                  <   ||
j                   j"                     j%                  |	       |
j                  j&                  j)                         ||
j                   j"                  <   n_|
j                  j                  dk(  rE|	dkD  r?|
j                  j*                  j"                  }|j                  |	dz
     }|
j                  j,                  }t        |t        j                        r|j                   j"                  |k(  rt        |j                  t        j                        r|j                  j                  dk(  r|j                  j.                  d	v rj|j                  j                  j"                  }|j                  j.                  }|d
k(  r2||v r.||   j%                  |       ||   j1                  |	dz
  |	g       n|dk(  r|d   j"                  }||v r||v r||   j1                  ||          ||   j1                  ||          ||   j%                  |	dz
         ||   D ]  }t3        |j                  || |       d||<   ! ||= ||= ||= t3        |j                  |	| |       t5        | ||j                  ||   ||         }||   j7                          ||   j%                  |	       d}nt9        |      t        |
t        j                        rwt        |
j                  t        j                        rS|
j                  j                  dk(  r:|
j                  j                  j"                  |v r|
j                  j.                  d	v s[|
j;                         D ]H  }|j"                  |v s|j"                  |k7  s"||j"                  = ||j"                  = ||j"                  = J |j%                  |       V |s|j                  j7                          |j                  j1                  |D cg c]  }||	 c}        | S c c}w )a  
    This rewrite removes d1._update_from_bytecode(d2)
    calls that are between two dictionaries, d1 and d2,
    in the same basic block. This pattern can appear as a
    result of Python 3.10 bytecode emission changes, which
    prevent large constant literal dictionaries
    (> 15 elements) from being constant. If both dictionaries
    are constant dictionaries defined in the same block and
    neither is used between the update call, then we replace d1
    with a new definition that combines the two dictionaries. At
    the bytecode translation stage we convert DICT_UPDATE into
    _update_from_bytecode, so we know that _update_from_bytecode
    always comes from the bytecode change and not user code.

    Python 3.10 may also rewrite the individual dictionaries
    as an empty build_map + many map_add. Here we again look
    for an _update_from_bytecode, and if so we replace these
    with a single constant dictionary.

    When running this algorithm we can always safely remove d2.

    This is the relevant section of the CPython 3.10 that causes
    this bytecode change:
    https://github.com/python/cpython/blob/3.10/Python/compile.c#L4048
    a  
        A DICT_UPDATE op-code was encountered that could not be replaced.
        If you have created a large constant dictionary, this may
        be an an indication that you are using inlined control
        flow. You can resolve this issue by moving the control flow out of
        the dicitonary constructor. For example, if you have

            d = {a: 1 if flag else 0, ...)

        Replace that with:

            a_val = 1 if flag else 0
            d = {a: a_val, ...)FNr   rg   r   rY   re   )rf   _update_from_bytecoderf   r   T)r   r   r7   r8   r;   r   r   r9   r   r   ri   r   rj   rN   rl   rm   rM   r>   rA   rZ   r[   ro   rq   rn   r   rW   _build_new_build_mapr   r   r   )rS   rt   rT   r   r^   lit_map_def_idxlit_map_use_idxmap_updatesr   r   r   new_inststmt_build_map_out	func_namerz   rq   update_map_namern   d2_map_namelinenumr   r   s                         r'   peep_hole_fuse_dict_add_updatesr     s~   D __ # $F '2237~~$$&
 &11$7 *GAtH "&$		*z$**bgg/N::==K/)-)9)9& 9:ODKK$4$45#DKK$4$45<<Q?48JJ4D4D4I4I4KK 0 01ZZ]]f,Q !%

 4 4I $'88AE?L::??D"<;(//44	A&|'9'9277C(..11Y>(..33 8  +7*<*<*B*B*G*G+1166 M1./A'8??E ,O<CCQUAJO!%<<*.q',,K /? B#./#A !,O < C C$/$<!" !0 @ G G$3K$@!" !0 @ G GA N/>/OG$A(+(/(/(<	%& 9=HW$5 0P %4K$@$3K$@$/$< !>$'HHa:N!" ,@$+$3$'HH$3O$D$/$@," !0 @ F F H / @ G G J.2 '7v&> > 4+tzz2773JJMMY.JJ$$))_<JJOO'OO>>+C
 O3HH(::+CHH5+CHH5'1 , OOH%m +p HHNNHHOOB1AMQBCQ 'T N Cs   T)
T)
c                    i }t        | j                  j                               }t        |      D ]	  \  }\  }}g }t        |j                        D ]1  \  }}t        |t        j                        s!|j                  |       3 |sXg }	|D ]  }t        j                  |j                  |j                        }
|
j                  j                  |j                  d|        |	j                  |
       t        j                  |j                  |j                        }|j                  j                  |j                  |          |	j                  |        |}|	D ]H  }|||<   |dz   }|j                  j                  t        j                  ||j                               |}J |dz   t        |      k  r#|||dz      d   k\  rt        j                   d      t        j                  |j                  |j                        }|j                  j                  |j                  |d   dz   d        |||<    | j                  j#                  |       | S )z
    Split blocks that contain ir.PopBlock.

    This rewrite restores the IR structure to pre 3.11 so that withlifting
    can work correctly.
    r   NrY   r   zPOP_BLOCK peephole failedr   )sortedr   rZ   r   r   ri   r   PopBlockrA   Blockr   r   r   Jumprp   r   InternalErrorupdate)rS   new_block_mapsorted_blocksblk_idxlabelr   pop_block_locsr   inst
new_blocks
before_blk
popblk_blk
prev_labelnewblk
next_labeltail_blks                   r'   peep_hole_split_at_pop_blockr
    s    M7>>//12M!*=!9% *GAt$,%%a( + J#XXciiSWW=
&&sxx|4!!*-XXciiSWW=
&&sxx{3!!*- $ J$,2j)'!^
""277:377#CD'
	 % {S//w{!;A!>> !../JKKxx		sww7HMM  .*<q*@*A!BC(0M*%E ":H NN-(Nr)   c                 *   ||   }|j                   }|j                  }g }g }	|D ]  }
|
\  }}t        t        | |      }t	        |t
        j                  t
        j                  t
        j                  f      r|j                  |j                         t        t        | |      }t	        |t
        j                  t
        j                  t
        j                  f      r|	j                  |j                         |	j                  t        |j                                i }t        |      t        |      k(  r8t        ||	      D ci c]  \  }}||
 }}}t        |      D ]
  \  }}|||<    nd}t
        j                  j!                  |t        |      |||j"                        }| j$                  |   j                  |       t        j&                  |t        j(                  |j*                  ||j"                        |j"                        S c c}}w )zg
    Create a new build_map with a new set of key/value items
    but all the other info the same.
    NrZ   sizeliteral_valuer\   r   )rM   rN   r
   r	   ri   r   rk   r   FreeVarrA   r!   r>   rp   zipr   rl   r   r   rO   rj   r   r   )rS   r>   rQ   
old_lineno	new_items
old_assign
old_targetold_bmliteral_keysr   pairkr   key_def	value_defr\   r   yr  r   new_bms                        r'   r   r     s   
 *%J""JFL F13g"))RZZ@A..'15	i"((BIIrzz!BCMM)//* MM.01  M
<C	N**-lF*CD*C$!QA*CDl+DAq M! ,  WW^##JJ  F %%f- 99z''z~~>

 ) Es   H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ddZd Zd Zd Z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ddZ d Z!dd 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. Z0ne/d/v rn e1e/      e/d-v rd0 Z2ne/d/v rn e1e/      d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?e/d-v re?Z@d> ZAne/d/v rn e1e/      d? ZBd@ ZCdA ZDeDZEeDZFdB ZGdC ZHdD ZIdE ZJe/dFv rdG ZKne/dHv rdI ZKn e1e/      dJ ZLe/dFv rdK ZMne/dHv rdL ZMn e1e/      e/dFv rdM ZNe/dFv rdN ZOne/dHv rdO ZOn e1e/      dP ZPddQZQdR ZRdS ZSdT ZTdU ZUdV ZVdW ZWdX ZXdY ZYdZ ZZd[ Z[d\ Z\d] Z]d^ Z^d_ Z_d` Z`da Zadb Zbdc Zcdd Zdde Zedf Zfdg Zgdh Zhdi Zidj Zjdk Zkdl Zldm Zmdn Zndo Zodp Zpdq Zqdr Zrds Zsdt Ztdu Zudv Zvdw Zwdx Zxdy Zydz Zzd{ Z{d| Z|d} Z}d~ Z~d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Ze/d-v rd Zne/d/v rn e1e/      d Zd Zd ZddZd Zd Zd Zd Zd Zd Ze/d-v rd Zd Zne/d/v rn e1e/      d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Ze/dFv rd Zne/dHv rd Zn e1e/      d Zd Zd Zd Zd Zd Ze/d-v rd Zye/d/v ry e1e/      )Interpreterz2A bytecode interpreter that builds up the IR.
    Fc                 x   || _         | j                  rt        |j                         |j                  | _        |j
                  | _        t        j                  j                  |      x| _	        | _
        |j                  | _        i | _        t        j                  t              | _        t#               | _        y r#   )func_id_DEBUG_PRINTr   ro   	arg_count	arg_namesr   Locfrom_function_idr   	first_locis_generatorr   r7   r8   r9   definitionsr;   _exception_vars)r%   r   s     r'   r(   zInterpreter.__init__@  s    ',, ** **$&FF$;$;G$DD4>#00 &2248  #ur)   c           	         || _         g | _        t        j                  d| j                        }| j                  j                  |       t        |      }|j                          t        |      | _	        t        |      | _        t        j                  r| j                  j                          d| _        d| _        d}| j                  j"                  j%                         D ]1  \  }}|j&                  st)        |t)        |j&                              }3 || _        t,        dv rLt/        | j                   j0                  D cg c]  }|j2                  | j*                  k  r| c}      | _        nt,        dv rnt7        t,              g | _        d| _        | j                  j                  t        j                  | j<                  | j                               | j?                         D ]  \  }}	| jA                  ||	        t,        dv r| jC                          nt,        dv rnt7        t,              | jE                          t        jF                  | j"                  | jH                  | jJ                  | jL                  | jN                  | jP                  | jR                        }
tT        jW                  |
jY                                g }t,        dv r|j                  tZ               t,        dv r|j                  t\               |j                  t^               t,        d	v r*|j                  t`               |j                  tb               | je                  ||
      }|S c c}w )
z0
        Generate IR for this bytecode.
        N)parentr   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   )3bytecodescopesr   Scoper   rA   r   runr   dfar   cfar   DUMP_CFGr   current_blockcurrent_block_offsetr   rZ   r   maxlast_active_offsetr   r   exception_entriesstartactive_exception_entriesNotImplementedErrorsyntax_blocksdfainfocurrent_scope
_iter_inst	_dispatch_end_try_blocks_legalize_exception_vars
FunctionIRr'  r   r&  r(  r"  r#  _loggerdebugdump_to_stringr
  r   r   r   r   post_process)r%   r.  global_scopeflowr8  _inst_blocksentryr  r`   rS   	peepholespost_processed_irs                r'   	interpretzInterpreter.interpretQ  s    !xxt:<(H~
D>D>??HHMMO "$(!"hhoo335NA{%();),[-=-=)>&@" 6 #5#,1$(MM$C$C ;$C5KK$"9"99 $C ;-<D) 44%i002884+=+=488LM *ID#NN4% +**  "++%i00%%'--T->-> $0@0@ $@ 	g,,./ 	**9:;;453433
 KL<= --iA  ];s   "M#c                 $    |D ]
  } ||      } |S r#   r2   )r%   rN  rS   peeps       r'   rH  zInterpreter.post_process  s    D7mG r)   c           	          t         dv sJ  j                  j                  } j                  j	                         D ]  \  } j
                  j                  |   j                  }|j                  |      D ]  \  }} j
                  j                  |   j                  }t        t        ||            D ]  \  }\  }}	||	k7  s n t        t        |      t        |            } fd}
 |
t        ||d             s   y)a=  Closes all try blocks by inserting the required marker at the
        exception handler

        This is only needed for py3.11 because of the changes in exception
        handling. This merely maps the new py3.11 semantics back to the old way.

        What the code does:

        - For each block, compute the difference of blockstack to its incoming
          blocks' blockstack.
        - If the incoming blockstack has an extra TRY, the current block must
          be the EXCEPT block and we need to insert a marker.

        See also: _insert_try_block_end
        r,  c                    | r| j                         }|d   t        d      k(  rb_        t        j                        }j                  j                          j                          j                  j                  |       y| ry y )NkindTRYT)r?   r   r5  r9   r   r   _insert_try_block_endr   )remainentoldbodyblockr%   s      r'   	do_changez.Interpreter._end_try_blocks.<locals>.do_change  sn     $jjlv;)E*::16D.&*5::&6G!JJ,,. 668!JJ--g6#' !r)   N)r   r3  graphr   rZ   r2  infos
blockstackpredecessorsr   r  minrp   r9   )r%   r]  r   cur_bsincrK  inc_bsr   r   r  r\  r[  s   `          @r'   rB  zInterpreter._end_try_blocks  s      ....![[..0MFEXX^^F+66F,,V4Q,77 "+3vv+>!?IAv1Av "@ CKV5A
( T&*-./ 5	 1r)   c                    | j                   j                         }| j                  j                         D ]I  \  }}|D ]?  }t	        |t
        j                        s|j                  }||v s/|j                  |       A K t        t        d |            }|rR|d   }| j                  j                  |      j                  }d}	t        j                  |	j!                  |      |      y)zsSearch for unsupported use of exception variables.
        Note, they cannot be stored into user variable.
        c                 &    | j                  d       S )N$)r   )r   s    r'   <lambda>z6Interpreter._legalize_exception_vars.<locals>.<lambda>  s    ALL,=(=r)   r   z5Exception object cannot be stored into variable ({}).r   N)r)  r[   r(  rZ   ri   r   r   r>   rB   r9   filterr?  getr   r   r   r+   )
r%   excvarsr&   defnvarsr   r  uservarfirstr   msgs
             r'   rC  z$Interpreter._legalize_exception_vars  s    
 &&++-!%!1!1!7!7!9GXa(AG|G,	  ": v=wGHAJE$$((/33CIC))#**U*;EE r)   c                     t        | j                        D ]9  \  }}t        j                  ||| j                        }| j                  ||       ; y )N)rb   r>   r   )r   r#  r   Argr   store)r%   rb   r>   vals       r'   init_first_blockzInterpreter.init_first_block  s=    $T^^4KE4&&u4TXX>CJJsD! 5r)   c              #   v  K   t        | j                  j                               D ]  \  }}| j                  |j                     }|j
                  dk(  r| j                  |j                     }| j                  j                  |j                        | _        | j                  |j                         |dk(  r| j                          | j                  j                  D ]D  \  }}| j                  |   }| j                  j                  |j                        | _        ||f F | j                           y w)NEND_FORr   )r   r3  iterliveblocksr.  r   opnamenextr   with_linenolineno_start_new_blockrt  r>  insts_end_current_block)r%   blkctr[  	firstinstr   r`   r  s          r'   r@  zInterpreter._iter_inst  s     %dhh&=&=&?@LE5ell3I
 9, MM)..9	xx++I,<,<=DH!!%,,/z%%'#||11}}V,88//<Ci  2 ##%# As   D7D9c                    | j                   }| j                  |       | j                  r| j                  j                  nd }||j                  s|p|d   | j
                  j                  j                         v rGt        j                  | j                  d      |d   || j                        }|j                  |       n2t        j                  || j                        }|j                  |       | j                  j                  | j                      | _        t#               | _        t&        dv r| j(                  r|| j(                  d   j*                  k\  rm| j(                  j-                         }t/        |t        j0                        r:| j                   j                  t        j2                  | j                               nn| j(                  r| j                  j                  }|||ur| j5                          y y y t&        dv rS| j(                  rF|| j(                  d   j*                  k\  r| j(                  j-                          ny | j(                  rEy y t7        t&              )Nend$exception_checkcondtruebrfalsebrr   r   r,  r   r-  )r5  insert_blockr>  active_try_blockis_terminatedr3  r]  nodesr   Branchrj  r   rA   r   r2  r^  r6  r4   assignerr   r=  exitr?   ri   Withr   _insert_try_block_beginr<  )r%   r   oldblocktryblkbranchjmpsynblk	newtryblks           r'   r|  zInterpreter._start_new_block  s   %%&!26,,..D(>(> !fUmtxx~~7K7K7M&M "45!%="	 ' ggf$((3$ xx~~d&?&?@ 
**$$T//3888!//335F!&"''2**11"++dhh2GH $$ 55I$F*002 + % ++$$T//3888&&**,	 $$ &i00r)   c                     | j                   j                  s(| j                  j                  }|| j	                          | j                          | j                          y r#   )r5  r  r>  r  _insert_exception_check_remove_unused_temporaries_insert_outgoing_phis)r%   r  s     r'   r~  zInterpreter._end_current_block6  sJ    !!//\\22F!,,.'')""$r)   Nc                 :   t        j                  ||| j                        }| j                  ||d       t         j                  j                  | j                  |      dd| j                        }|xs dj                  |      }| j                  ||d       y)a  A helper function to inject a call to *func* which is a python
        function.
        Parameters
        ----------
        func : callable
            The function object to be called.
        gv_name : str
            The variable name to be used to store the function object.
        res_name : str; optional
            The variable name to be used to store the call result.
            If ``None``, a name is created automatically.
        r   TrN   r>   r   r2   z$callres_{}N)r   r   r   rr  rl   rg   rj  r+   )r%   ro   gv_nameres_namegv_fncallress         r'   _inject_callzInterpreter._inject_call@  sz     		'4TXX6

Wt
<'',,txx0"bdhh,G<}33G<

x$
?r)   c                 D    | j                  t        j                  d       y)z<Insert IR-nodes to mark the start of a `try` block.
        mark_try_blockN)r  r   r  r,   s    r'   r  z#Interpreter._insert_try_block_beginS  s     	"++-=>r)   c                 D    | j                  t        j                  d       y)z:Insert IR-nodes to mark the end of a `try` block.
        end_try_blockN)r  r   r  r,   s    r'   rW  z!Interpreter._insert_try_block_endX  s     	"**O<r)   c                 h   | j                   j                  }|d   }| j                   j                  j                  |      }|rpt	        j
                  d| j                        }|D ]I  }|| j                  v rt        d      | j                  ||       | j                  j                  |       K yy)z?Insert IR-nodes to initialize the exception variables.
        r  NrN   r   z2exception variable CANNOT be defined by other coderN   r>   )r>  r  outgoing_edgepushedrj  r   rk   r   r(  r   rr  r)  rB   )r%   r  endblk
edgepushed
const_noner   s         r'   _insert_exception_variablesz'Interpreter._insert_exception_variables]  s     ..\\5599&A
 $((;J!$***(L  

#
6$$((- " r)   c                 f    | j                          | j                  t        j                  dd       y)zECalled before the end of a block to inject checks if raised.
        exception_checkr  N)r  r  r   r  r,   s    r'   r  z#Interpreter._insert_exception_checkq  s,     	((*",,.?,	.r)   c                 N   g }i }| j                   j                  D ]v  }t        |t        j                  t        j
                  f      r8|j                  j                  |v r ||j                  j                     |_        n t        |t        j                        r|j                  j                  r-|j                  j                  | j                  j                  v rt        |j                  t        j                        rI|j                  j                  |v r1||j                  j                     |_        |j                  |       1t        |j                  t        j                        r|j                  j                   dk(  rg|j                  j                  j                  |v rE||j                  j                  j                     |j                  _        |j                  |       t        |j                  t        j                        rl|j                  j                  rU|rRt        |d   t        j                        r4|d   }|j                  j                  |j                  j                  k(  r| j#                  |j                  j                  |j                        s|j                  ||j                  j                  <   |j                  |_	        | j$                  |j                  j                     j'                  |j                         | j$                  |j                  j                     j)                  | j$                  j+                  |j                  j                               f|j                  |       y || j                   _        y)zb
        Remove assignments to unused temporary variables from the
        current block.
        exhaust_iterr   N)r5  r   ri   r   SetItemSetAttrrN   r>   rj   rM   r@   r  r<   r   rA   rl   rm   _var_used_in_binopr(  rP   r   r?   )r%   r^   replaced_varr  prev_assigns        r'   r  z&Interpreter._remove_unused_temporariesy  sx   
 &&++D 4"**bjj!9:

<7)$**//:
D")),KK'' KK,,0J0JJ tzz2662 JJOO|;!-djjoo!>DJOOD) tzz2773 JJMM^; JJ,,11\A'3DJJ4D4D4I4I'JDJJ$OOD) tzz2662tzz7I7I$HRL")))L"*2,K $**//4::??B$($;$; $ 0 0+2C2C%E8<TZZ__5-1[[*(()9)9:AA$**M(()9)9:AA ,,00A !OOD!e ,h #+r)   c                     t        |t        j                        xrD |j                  dv xr4 ||j                  j
                  k(  xs ||j                  j
                  k(  S )zhreturn True if 'expr' is a binary expression and 'varname' is used
        in it as an argument
        )r   inplace_binop)ri   r   rl   rm   rU   r>   rV   )r%   r&   r   s      r'   r  zInterpreter._var_used_in_binop  sS     4) KGG99K-IDHHMM1I	Lr)   c                    | j                   j                  j                         D ]  \  }}| j                  j	                  || j
                        }	 | j                  |      }t        j                  ||| j
                        }| j                  |j                     j                  |j                         | j                   j"                  s| j                   j                  |       | j                   j%                  |        y# t        j                  $ r3 t        dv sJ d       t        j                  d| j
                        }Y w xY w)zd
        Add assignments to forward requested outgoing values
        to subsequent blocks.
        r   r,  zunexpected missing definitionNr  rN   rM   r   )r>  outgoing_phisrZ   r?  get_or_definer   rj  r   r   r   rk   rj   r(  r>   rA   rN   r5  r  insert_before_terminator)r%   phinamer&   rM   rs  r   s         r'   r  z!Interpreter._insert_outgoing_phis  s   
 !% : : @ @ BGW''55g:>(( 6 DF9hhw' 993v!%+DV[[)00<%%33""))$/"";;DA! !C
 %% 9 $66 7676hhTtxx8	9s   DAEEc                     	 | j                   j                  j                  |   S # t        $ r" t	        t
        |t        j                        cY S w xY w)z
        Get a global value from the func_global (first) or
        as a builtins (second).  If both failed, return a ir.UNDEFINED.
        )r   ro   __globals__KeyErrorre   builtinsr   	UNDEFINED)r%   r>   s     r'   get_global_valuezInterpreter.get_global_value  sD    
	9<<$$0066 	98T2<<88	9s   "% (AAc                     | j                   j                  j                  |   }	 |j                  S # t        $ r t
        j                  cY S w xY w)z|
        Get a value from the cell contained in this function's closure.
        If not set, return a ir.UNDEFINED.
        )r   ro   __closure__cell_contents
ValueErrorr   r  )r%   rb   cells      r'   get_closure_valuezInterpreter.get_closure_value  sH    
 ||  ,,U3	 %%% 	 <<	 s   1 AAc                      | j                   d   S )Nr   )r/  r,   s    r'   r?  zInterpreter.current_scope  s    {{2r)   c                 .    | j                   j                  S r#   )r.  	co_constsr,   s    r'   code_constszInterpreter.code_consts  s    }}&&&r)   c                 .    | j                   j                  S r#   )r.  co_varnamesr,   s    r'   code_localszInterpreter.code_locals      }}(((r)   c                 .    | j                   j                  S r#   )r.  co_namesr,   s    r'   
code_nameszInterpreter.code_names  s    }}%%%r)   c                 .    | j                   j                  S r#   )r.  co_cellvarsr,   s    r'   code_cellvarszInterpreter.code_cellvars  r  r)   c                 .    | j                   j                  S r#   )r.  co_freevarsr,   s    r'   code_freevarszInterpreter.code_freevars  r  r)   c                 X   | j                   rt        |       | j                  J t        dv r| j                  r| j                  d   }t        |t        j                        r|j                  |j                  k\  rl| j                  j                  t        j                  | j                               | j                  j                          nt        dv rnt        t              d|j                  j!                  dd      z  }	 t#        | |      }	  ||fi |S # t$        j&                  $ r`}|j                  | j                  }n|j                  }t%        j&                  |j(                  |      }t*        j,                  s|d |d }~ww xY w# t.        $ r t        |      w xY w)Nr,  r   r   r-  zop_%s+rK  )r!  r   r5  r   r=  ri   r   r  r   r  rA   r   r   r?   r<  rx  replacere   r   r   r>   r   FULL_TRACEBACKSAttributeError)	r%   r  r`   topr   r   er   errs	            r'   rA  zInterpreter._dispatch  se   $K!!---**!!((,c277+{{chh.**11"++$((2KL**..0++%i00$++--c377	u%B$#&)) 
55=((C%%C,,QVV=--4'I
  	,%d++	,s%   F D F1AFFF)c                 @   |s"| j                   | j                  j                  v r7|| j                  v}| j                  j                  || j                  |      }n'| j                  j                  || j                        }t        |t        j                        r| j                  j                  ||      }t        j                  ||| j                        }| j                  j                  |       | j                   |j"                     j                  |       |S )z
        Store *value* (a Expr or Var instance) into the variable named *name*
        (a str object). Returns the target variable.
        )r   renamer   r  )r6  r3  backboner  r?  r   r   r  ri   r   r   r  rH   rj   r5  rA   r(  r>   )r%   rN   r>   r   r  rM   r   s          r'   rr  zInterpreter.store(  s    
 t00DHH4E4EE$"4"44F''004888> 1 @F ''55d5IFeRVV$MM((7EyyuVB!!$'%,,U3r)   c                     |d   dk(  r'|dd j                         rdj                  |dd       }| j                  j                  |      }|| j                  j                  |      }|S )zJ
        Get the variable (a Var instance) with the given *name*.
        r   .rY   Nz
implicit{})isdigitr+   r  rK   r?  rj  )r%   r>   r   s      r'   rj  zInterpreter.get:  sl     7c>d12h..0&&tABx0D mm11$7;$$((.C
r)   c                     |xs | j                   }|xs | j                  }t        j                  ||      }|| j                  |<   || _        || _        |S )N)r   r   )r?  r   r   r   r   r5  r6  )r%   r   r   r   r   s        r'   r  zInterpreter.insert_blockL  sR    +++oTXXhhU,!F $*!
r)   c                      y r#   r2   r%   r  s     r'   op_NOPzInterpreter.op_NOPW      r)   c                      y r#   r2   r  s     r'   	op_RESUMEzInterpreter.op_RESUMEZ  r  r)   c                      y r#   r2   r  s     r'   op_CACHEzInterpreter.op_CACHE]  r  r)   c                      y r#   r2   r  s     r'   
op_PRECALLzInterpreter.op_PRECALL`  r  r)   c                      y r#   r2   r  s     r'   op_PUSH_NULLzInterpreter.op_PUSH_NULLc  r  r)   c                      y r#   r2   r  s     r'   op_RETURN_GENERATORzInterpreter.op_RETURN_GENERATORf  r  r)   c                 8   | j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  j                  | j                  |      |fd| j                        }| j                  ||       y Nr   r   r  r2   )rj  r   r   r   r   rr  rl   rg   )r%   r  itemprintvarresprintgvrg   s          r'   op_PRINT_ITEMzInterpreter.op_PRINT_ITEMi  sn    xx~))GU9

x
0ww||DHHX.|J

C
(r)   c                    t        j                  dt        | j                        }| j	                  ||       t         j
                  j                  | j                  |      dd| j                        }| j	                  ||       y r  )r   r   r   r   rr  rl   rg   rj  )r%   r  r  r  r  rg   s         r'   op_PRINT_NEWLINEzInterpreter.op_PRINT_NEWLINEp  s_    ))GU9

x
0ww||DHHX.BDHH|E

C
(r)   c                 x   t        |      }t        j                  j                  | j	                  |      | j
                  |      }| j                  ||       t        |      D ]S  \  }}t        j                  j                  | j	                  |      |d | j
                        }	| j                  |	|       U y )N)rN   r   count)r>   rN   )rb   	index_varr   )	rp   r   rl   r  rj  r   rr  r   static_getitem)
r%   r  iterablestorestupleobjr  tupr   str   s
             r'   op_UNPACK_SEQUENCEzInterpreter.op_UNPACK_SEQUENCEv  s    Fgg""();). # 0


, v&EAr77))$((8*<01T.2hh * 8D JJtR 	 'r)   c                 8   | j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  j                  | j                  |      |fd| j                        }| j                  ||       y)z
        FORMAT_VALUE(flags): flags argument specifies format spec which is not
        supported yet. Currently, str() is simply called on the value.
        https://docs.python.org/3/library/dis.html#opcode-FORMAT_VALUE
        strr   r  r2   N)rj  r   r   r  r   rr  rl   rg   )r%   r  rN   r  strvarstrgvrg   s          r'   op_FORMAT_VALUEzInterpreter.op_FORMAT_VALUE  sp     		%$((3

V
,ww||DHHV,uh|I

C
(r)   c                    |j                   }|dk(  r7t        j                  d| j                        }| j	                  ||d          y| j                  |d         }t        |dd |      D ]t  \  }}| j                  |      }t        j                  j                  t        j                  ||| j                        }	| j	                  |	|       | j                  |      }v y)z
        BUILD_STRING(count): Concatenates count strings.
        Required for supporting f-strings.
        https://docs.python.org/3/library/dis.html#opcode-BUILD_STRING
        r   r   r   r   NrY   rU   rV   r   )r   r   rk   r   rr  rj  r  rl   r   r   rB   )
r%   r  stringstmpsr  constprevotherr   r   s
             r'   op_BUILD_STRINGzInterpreter.op_BUILD_STRING  s     A:HHRTXX.EJJud2h'xx
#gabk40JE3HHUOE77==$Etxx ! D JJtS!88C=D 1r)   c                    | j                  |      }| j                  |      }t        j                  dt        | j                        }| j                  ||       |?t        j                  j                  | j                  |      ||fd| j                        }nP| j                  |      }t        j                  j                  | j                  |      |||fd| j                        }| j                  ||       y Nslicer   r  r2   )rj  r   r   r  r   rr  rl   rg   )	r%   r  r:  stopstepr  slicevarslicegv	sliceinsts	            r'   op_BUILD_SLICEzInterpreter.op_BUILD_SLICE  s    xx~))GU9

x
0<TXXh%7%)- % 3I 88D>DTXXh%7%t9L%'TXX % 7I


-r)   r   c                    | j                  |      }| j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  j                  | j                  |      ||fd| j                        }	| j                  |	|       | j                  |      }
| j                  |      }t        j                  j                  ||
| j                        }| j                  ||       y )Nr  r   r  r2   rb   r   	rj  r   r   r  r   rr  rl   rg   getitem)r%   r  r:  r  	containerr  r  temp_resr  r   rb   rM   r   s                r'   op_BINARY_SLICEzInterpreter.op_BINARY_SLICE  s    HHUOE((3-CiiDHH=GJJW8J4TXXh%7%r)- % 3IJJYXJ6HHX&EXXi(F77??6DHH?EDJJtS!r)   r   c                 >   | j                  |      }| j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  j                  | j                  |      ||fd| j                        }	| j                  |	|       | j                  |      }
| j                  |      }| j                  |      }t        j                  ||
|| j                        }| j                  j                  |       y )Nr  r   r  r2   rM   rb   rN   r   rj  r   r   r  r   rr  rl   rg   r  r5  rA   )r%   r  r:  r  r&  rN   r  r  r  r   rb   rM   r   s                r'   op_STORE_SLICEzInterpreter.op_STORE_SLICE  s    HHUOE((3-CiiDHH=GJJW8J4TXXh%7%r)- % 3IJJYSJ1HHSMEXXi(FHHUOE::V5"&((,D%%d+r)   c                 `   | j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  d | j                        }| j                  ||       | j                  |      }	t        j                  j                  | j                  |      |	|	fd| j                        }
| j                  |
|       t        j                  j                  || j                  |      | j                        }| j                  ||       y r  )
rj  r   r   r  r   rr  rk   rl   rg   r%  )r%   r  baser  r  indexvarnonevarr  nonegvnonerb   r   s               r'   
op_SLICE_0zInterpreter.op_SLICE_0  s    xx~))GU9

x
0$DHH-

g
.xx TXXh/$rtxxP

X
.wwtTXXh%7TXXF

C
(r)   c                    | j                  |      }| j                  |      }t        j                  d | j                        }| j	                  ||       | j                  |      }	t        j
                  dt        | j                        }
| j	                  |
|       t        j                  j                  | j                  |      ||	fd| j                        }| j	                  ||       t        j                  j                  || j                  |      | j                        }| j	                  ||       y Nr   r  r  r2   
rj  r   rk   r   rr  r   r  rl   rg   r%  )r%   r  r.  r:  r0  r  r  r/  r1  r2  r  rb   r   s                r'   
op_SLICE_1zInterpreter.op_SLICE_1  s    xx~$DHH-

g
.xx ))GU9

x
0TXXh/%!%  +

X
.wwtTXXh%7TXXF

C
(r)   c                    | j                  |      }| j                  |      }t        j                  d | j                        }| j	                  ||       | j                  |      }	t        j
                  dt        | j                        }
| j	                  |
|       t        j                  j                  | j                  |      |	|fd| j                        }| j	                  ||       t        j                  j                  || j                  |      | j                        }| j	                  ||       y r5  r6  )r%   r  r.  r0  r  r  r  r/  r1  r2  r  rb   r   s                r'   
op_SLICE_2zInterpreter.op_SLICE_2  s    xx~xx~$DHH-

g
.xx ))GU9

x
0TXXh/$!%  +

X
.wwtTXXh%7TXXF

C
(r)   c                    | j                  |      }| j                  |      }| j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  j                  | j                  |      ||fd| j                        }	| j                  |	|       t        j                  j                  || j                  |      | j                        }
| j                  |
|       y r  r$  )r%   r  r.  r:  r  r  r  r/  r  rb   r   s              r'   
op_SLICE_3zInterpreter.op_SLICE_3  s    xx~xx~))GU9

x
0TXXh/%!%  +

X
.wwtTXXh%7TXXF

C
(r)   c                 |   | j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  d | j                        }| j                  ||       | j                  |      }	t        j                  j                  | j                  |      |	|	fd| j                        }
| j                  |
|       t        j                  || j                  |      | j                  |      | j                        }| j                  j                  |       y r  )rj  r   r   r  r   rr  rk   rl   rg   r  r5  rA   )r%   r  r.  rN   r  r/  r0  r  r1  r2  rb   r   s               r'   op_STORE_SLICE_0zInterpreter.op_STORE_SLICE_0"  s    xx~))GU9

x
0$DHH-

g
.xx TXXh/$rtxxP

X
.zz$ 2DHHUO"hh(!!$'r)   c                    | j                  |      }| j                  |      }t        j                  d | j                        }| j	                  ||       | j                  |      }	t        j
                  dt        | j                        }
| j	                  |
|       t        j                  j                  | j                  |      ||	fd| j                        }| j	                  ||       t        j                  || j                  |      | j                  |      | j                        }| j                  j                  |       y r5  rj  r   rk   r   rr  r   r  rl   rg   r  r5  rA   )r%   r  r.  r:  r0  rN   r  r/  r1  r2  r  rb   r   s                r'   op_STORE_SLICE_1zInterpreter.op_STORE_SLICE_13  s    xx~$DHH-

g
.xx ))GU9

x
0TXXh/%!%  +

X
.zz$ 2DHHUO"hh(!!$'r)   c                    | j                  |      }| j                  |      }t        j                  d | j                        }| j	                  ||       | j                  |      }	t        j
                  dt        | j                        }
| j	                  |
|       t        j                  j                  | j                  |      |	|fd| j                        }| j	                  ||       t        j                  || j                  |      | j                  |      | j                        }| j                  j                  |       y r5  r?  )r%   r  r.  r0  r  rN   r  r/  r1  r2  r  rb   r   s                r'   op_STORE_SLICE_2zInterpreter.op_STORE_SLICE_2G  s    xx~xx~$DHH-

g
.xx ))GU9

x
0TXXh/$!%  +

X
.zz$ 2DHHUO"hh(!!$'r)   c                 6   | j                  |      }| j                  |      }| j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  j                  | j                  |      ||fd| j                        }	| j                  |	|       t        j                  || j                  |      | j                  |      | j                        }
| j                  j                  |
       y r  r+  )r%   r  r.  r:  r  rN   r  r/  r  rb   r   s              r'   op_STORE_SLICE_3zInterpreter.op_STORE_SLICE_3[  s    xx~xx~))GU9

x
0TXXh/%!%  +

X
.zz$ 2DHHUO"hh(!!$'r)   c                 \   | j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  d | j                        }| j                  ||       | j                  |      }t        j                  j                  | j                  |      ||fd| j                        }	| j                  |	|       t        j                  || j                  |      | j                        }
| j                  j                  |
       y r  )rj  r   r   r  r   rr  rk   rl   rg   DelItemr5  rA   )r%   r  r.  r  r/  r0  r  r1  r2  rb   r   s              r'   op_DELETE_SLICE_0zInterpreter.op_DELETE_SLICE_0k  s    xx~))GU9

x
0$DHH-

g
.xx TXXh/$rtxxP

X
.zz$ 2A!!$'r)   c                 ~   | j                  |      }| j                  |      }t        j                  d | j                        }| j	                  ||       | j                  |      }t        j
                  dt        | j                        }	| j	                  |	|       t        j                  j                  | j                  |      ||fd| j                        }
| j	                  |
|       t        j                  || j                  |      | j                        }| j                  j                  |       y r5  rj  r   rk   r   rr  r   r  rl   rg   rF  r5  rA   )r%   r  r.  r:  r0  r  r/  r1  r2  r  rb   r   s               r'   op_DELETE_SLICE_1zInterpreter.op_DELETE_SLICE_1{  s    xx~$DHH-

g
.xx ))GU9

x
0TXXh/%!%  +

X
.zz$ 2A!!$'r)   c                 ~   | j                  |      }| j                  |      }t        j                  d | j                        }| j	                  ||       | j                  |      }t        j
                  dt        | j                        }	| j	                  |	|       t        j                  j                  | j                  |      ||fd| j                        }
| j	                  |
|       t        j                  || j                  |      | j                        }| j                  j                  |       y r5  rI  )r%   r  r.  r0  r  r  r/  r1  r2  r  rb   r   s               r'   op_DELETE_SLICE_2zInterpreter.op_DELETE_SLICE_2  s    xx~xx~$DHH-

g
.xx ))GU9

x
0TXXh/$!%  +

X
.zz$ 2A!!$'r)   c                    | j                  |      }| j                  |      }| j                  |      }t        j                  dt        | j                        }| j                  ||       t        j                  j                  | j                  |      ||fd| j                        }| j                  ||       t        j                  || j                  |      | j                        }	| j                  j                  |	       y r  )rj  r   r   r  r   rr  rl   rg   rF  r5  rA   )
r%   r  r.  r:  r  r  r/  r  rb   r   s
             r'   op_DELETE_SLICE_3zInterpreter.op_DELETE_SLICE_3  s    xx~xx~))GU9

x
0TXXh/%!%  +

X
.zz$ 2A!!$'r)   c                 z    | j                   |j                     }| j                  | j                  |      |       y Nr  )r  r   rr  rj  )r%   r  r  rE   s       r'   op_LOAD_FASTzInterpreter.op_LOAD_FAST  s/    ""488,

'*
5r)   c                    	 | j                   |j                     }| j                  | j                  |      |       y # t        $ r@ t
        j                  j                  | j                        }| j                  ||       Y y w xY w)Nr  r   r>   )	r  r   rr  rj  r   r   rl   undefr   )r%   r  r  rE   rT  s        r'   op_LOAD_FAST_AND_CLEARz"Interpreter.op_LOAD_FAST_AND_CLEAR  sk    ,**4884

'!2
=" ,$((3

5s
+,s   ;> ABBc                 ~    | j                   |j                     }| j                  |      }| j                  ||       y rP  )r  r   rj  rr  )r%   r  rN   dstnames       r'   op_STORE_FASTzInterpreter.op_STORE_FAST  s3    ""488,

W
-r)   c                     | j                   |j                     }| j                  j                  t	        j
                  || j                               y Nr   )r  r   r5  rA   r   Delr   )r%   r  rW  s      r'   op_DELETE_FASTzInterpreter.op_DELETE_FAST  s9    ""488,!!"&&dhh"?@r)   c                 p    t        ||      D ]'  \  }}| j                  | j                  |      |       ) y rP  )r  rr  rj  )r%   r  origdupedsrcdsts         r'   op_DUP_TOPXzInterpreter.op_DUP_TOPX  s/    D%(HCJJTXXc]J5 )r)   c                     | j                   |j                     }t        j                  | j	                  |      | j	                  |      || j
                        }| j                  j                  |       y )N)rM   rN   rn   r   )r  r   r   r  rj  r   r5  rA   )r%   r  rM   rN   rn   sas         r'   op_STORE_ATTRzInterpreter.op_STORE_ATTR  sT    txx(ZZtxx/txx!txx1!!"%r)   c                     | j                   |j                     }t        j                  | j	                  |      || j
                        }| j                  j                  |       y )N)rM   rn   r   )r  r   r   DelAttrrj  r   r5  rA   )r%   r  rM   rn   rd  s        r'   op_DELETE_ATTRzInterpreter.op_DELETE_ATTR  sG    txx(ZZtxx/dI!!"%r)   c                 N   | j                  |      }t        dv r| j                  |j                  dz	     }n1t        dv r| j                  |j                     }nt	        t              t
        j                  j                  ||| j                        }| j                  ||       y )Nr   rY   r   r   )
rj  r   r  r   r<  r   rl   re   r   rr  )r%   r  r  r  rn   re   s         r'   op_LOAD_ATTRzInterpreter.op_LOAD_ATTR  s}    xx~#??488q=1D44??488,D%i00''//$$((/;

7C r)   c                     | j                   |j                     }t        |t              rg }|D ]V  }dt	        |      z  }t        j                  || j                        }| j                  ||d      }|j                  |       X t
        j                  j                  || j                        }	nt        |t              rg }|D ]V  }dt	        |      z  }t        j                  || j                        }| j                  ||d      }|j                  |       X t
        j                  j                  || j                        }	n!t        j                  || j                        }	| j                  |	|       y )Nz	$const_%sr   T)r>   r   )r  r   ri   r   r  r   rk   r   rr  rA   rl   r   	frozenset	build_set)
r%   r  r  rN   r
  r   nm	val_constrM   r  s
             r'   op_LOAD_CONSTzInterpreter.op_LOAD_CONST  s,     *eU#B 3q6)HHQDHH5	IBF		&!	 
 GG'''9Ey)B 3q6)HHQDHH5	IBF		&!	 
 GG%%bdhh%7EHHU1E

5#r)   r,  c                     | j                   |   }| j                  |      }t        j                  ||| j                        }| j                  ||       y rZ  )r  r  r   r   r   rr  )r%   r  rR   r  r>   rN   gls          r'   op_LOAD_GLOBALzInterpreter.op_LOAD_GLOBAL 	  sD    ??3'D))$/E4DHH5BJJr3r)   r-  c                     | j                   |j                     }| j                  |      }t        j                  ||| j
                        }| j                  ||       y rZ  )r  r   r  r   r   r   rr  )r%   r  r  r>   rN   rr  s         r'   rs  zInterpreter.op_LOAD_GLOBAL	  sH    ??488,D))$/E4DHH5BJJr3r)   c                      y r#   r2   r  s     r'   op_COPY_FREE_VARSzInterpreter.op_COPY_FREE_VARS	  r  r)   c                    | j                   j                  j                  j                  |j                        }|| j
                  v r| j                  |      }n]|| j                  v rO| j                  j                  |      }| j                  |      }t        j                  |||| j                        }| j                  |       y rZ  )r   ro   __code___varname_from_opargr   r  rj  r  rb   r  r   r  r   rr  )r%   r  r  r>   rr  rR   rN   s          r'   op_LOAD_DEREFzInterpreter.op_LOAD_DEREF	  s    <<$$--AA$((KDt)))XXd^+++((..t4..s3ZZT5dhh?JJr3r)   c                 j   t        | j                        }|j                  |k  r+| j                  |j                     }| j                  |      }nR|j                  |z
  }| j                  |   }| j                  |      }t        j                  |||| j                        }| j                  ||       y rZ  )
rp   r  r   rj  r  r  r   r  r   rr  )r%   r  r  
n_cellvarsr>   rr  rR   rN   s           r'   rz  zInterpreter.op_LOAD_DEREF	  s    T//0Jxx*$))$((3XXd^hh+))#...s3ZZT5dhh?JJr3r)   c                      y r#   r2   r  s     r'   op_MAKE_CELLzInterpreter.op_MAKE_CELL+	  s    r)   c                     | j                   j                  j                  j                  |j                        }| j                  |      }| j                  ||       y rP  )r   ro   rx  ry  r   rj  rr  )r%   r  rN   r>   s       r'   op_STORE_DEREFzInterpreter.op_STORE_DEREF/	  sC    <<$$--AA$((KDHHUOEJJUJ.r)   c                     t        | j                        }|j                  |k  r| j                  |j                     }n| j                  |j                  |z
     }| j	                  |      }| j                  ||       y rP  )rp   r  r   r  rj  rr  )r%   r  rN   r|  rW  s        r'   r  zInterpreter.op_STORE_DEREF4	  sh    T//0Jxx*$,,TXX6,,TXX
-BCHHUOEJJUJ1r)   c                     | j                   |j                     | j                  u sJ t        j                  |j                  |j
                  |j                  z         }| j                  j                  |       y )Nr  )	r   r   r5  r   Loopry  r   r=  rA   )r%   r  loops      r'   op_SETUP_LOOPzInterpreter.op_SETUP_LOOP?	  sX    {{4;;'4+=+====wwt{{$))dhh*>@!!$'r)   c                    | j                   |j                     | j                  u sJ |j                  |j                  z   }t        j                  |j                  |      }| j                  j                  |       | j                  |      }| j                  j                  t        j                  ||j                  || j                               t        j                  d | j                        }| j                  ||       y )Nr  contextmanagerbeginr  r   r   r  )r   r   r5  ry  r   r   r  r=  rA   rj  	EnterWithr   rk   rr  )r%   r  r  exitfnexitptwthctxmgrexit_fn_objs           r'   op_SETUP_WITHzInterpreter.op_SETUP_WITHD	  s    {{4;;'4+=+====TXX%ggdkk/!!#&.)!!",,f59[[39txx#J 	K
 hht2

6
2r)   c                    | j                   |j                     | j                  u sJ t        dv rL|| j                  kD  rUt        | j                  D cg c]  }|j                  |k(  r|j                   c}      }nt        dv rnt        t              t        j                  |j                  |      }| j                  j                  |       | j                  |      }| j                  j                  t        j                  ||j                  || j                                t        j"                  d | j                         }| j%                  ||       y c c}w )Nr   r   r  r  r   r  )r   r   r5  r   r8  r7  r;  rM   r  r<  r   r  r=  rA   rj  r  r   rk   rr  )	r%   r  r  r  r  exr  r  r  s	            r'   op_BEFORE_WITHzInterpreter.op_BEFORE_WITHT	  s   {{4;;'4+=+====#T,,,D,I,I 0,Ib ii3. 66,I 0 144%i00ggdkk,!!#&.)!!",,f59[[36DHH#G 	H
 hht2

6
2!0s   "Ec                 $    | j                          y r#   )r  r  s     r'   op_SETUP_FINALLYzInterpreter.op_SETUP_FINALLYl	  s    $$&r)   c                      yzno-opNr2   r  s     r'   op_WITH_CLEANUPzInterpreter.op_WITH_CLEANUPp	      r)   c                      yr  r2   r  s     r'   op_WITH_CLEANUP_STARTz!Interpreter.op_WITH_CLEANUP_STARTs	  r  r)   c                      yr  r2   r  s     r'   op_WITH_CLEANUP_FINISHz"Interpreter.op_WITH_CLEANUP_FINISHv	  r  r)   c                      yr  r2   r  s     r'   op_END_FINALLYzInterpreter.op_END_FINALLYy	  r  r)   c                     t        j                  d | j                        }|D ]0  }| j                  ||       | j                  j                  |       2 y )Nr   rS  )r   rk   r   rr  r)  rB   )r%   r  tempsr  r   s        r'   op_BEGIN_FINALLYzInterpreter.op_BEGIN_FINALLY|	  sD    XXd1
CJJzJ,  $$S) r)   c           	      t   | j                  |      }|D cg c]  }| j                  |       }}|A| j                  |   }t        t        ||t	        |       d              }|d t	        |        }nd}t
        j                  j                  |||| j                        }	| j                  |	|       y c c}w Nr2   r   )
rj  r  r9   r  rp   r   rl   rg   r   rr  )
r%   r  ro   rq   kw_namesr  r   nameskwargsr   s
             r'   op_CALLzInterpreter.op_CALL	  s    xx~%)*TT*$$X.E#eT3u:+,%789F#e*%DFww||D$DHH|=

4 +s   B5c                     | j                  |      }|D cg c]  }| j                  |       }}t        j                  j                  ||d| j                        }| j                  ||       y c c}w r  rj  r   rl   rg   r   rr  )r%   r  ro   rq   r  r   r   s          r'   op_CALL_FUNCTIONzInterpreter.op_CALL_FUNCTION	  s\    xx~%)*TT*ww||D$|9

4 +s   A0c                 H   | j                  |      }|D cg c]  }| j                  |       }}| j                  |      }| j                  j                  D ]  }t        |t        j
                        s|j                  |u s-| j                  j                  |       g }|j                  j                  D ]t  }| j                  j                  d d d   D ]S  }||j                  k(  s| j                  j                  |       |j                  |j                  j                          t v |}	 n t        	      }
|d |
  }||
 d  }t        t        |	|            }t        j                  j                  |||| j                         }| j#                  ||       y c c}w )Nr   r   )rj  r5  r   ri   r   rj   rM   rP   rN   rZ   rA   rp   r9   r  rl   rg   r   rr  )r%   r  ro   rq   r  r  r   named_itemsr  keysnkeysposvalskwvals	keyvaluesr   s                  r'   op_CALL_FUNCTION_KWzInterpreter.op_CALL_FUNCTION_KW	  s^   xx~%)*TT*&&++D$		*t{{e/C""))$/ !))A!//44TrT:= ..55a8'..qww}}=!	 ; * # , D	w-ufgT6*+	ww||D'9$((|C

41 +s   Fc                     | j                  |      }| j                  |      }|| j                  |      }t        j                  j                  |g g | j                  ||      }| j                  ||       y )N)r   r   r   r  )r%   r  ro   r   r   r  r   s          r'   op_CALL_FUNCTION_EXzInterpreter.op_CALL_FUNCTION_EX	  si    xx~&!xx)Hww||"bdhhv  
 	

4r)   c                 z   | j                  |d         }|rd}t        j                  |t        | j                        }| j                  ||d       t        j                  j                  | j                  |      |fd| j                        }| j                  ||d          y | j                  }	t        t        | j                   |dd        |      D ]  \  }
}t        j                  d	t        |	
      }| j                  |dd      }t        j                  j                  ||
fd|	      }| j                  |dd      }t        j                  j                  t        j                  || j                  |j                        | j                        }| j                  ||       | j                  |      } y )Nr   r   r   Tr  r2   rq   r`   r   rY   r   r   r   )r   z	$_tuplifyr   )rj  r   r   r   r   rr  rl   rg   r  mapr   r   r   rB   r>   )r%   r  tuplesr  	is_assignrn  r  r  excr   r  r   r   r   tuplify_valtuplify_varouts                    r'   _build_tuple_unpackzInterpreter._build_tuple_unpack	  s   # ,GIIg':JEJJU4J@'',,txx0xR#'88  .CJJsE!H%((C!#dhhqr
";UC
s99  !JJ6 ' 	 !ggllx +  #jjk26 ) 8ggmm||DHH[=M=M4N $  

3$) Dr)   c                 ,    | j                  ||||       y r#   r  r%   r  r  r  r  s        r'   op_BUILD_TUPLE_UNPACK_WITH_CALLz+Interpreter.op_BUILD_TUPLE_UNPACK_WITH_CALL	  s      vui@r)   c                 ,    | j                  ||||       y r#   r  r  s        r'   op_BUILD_TUPLE_UNPACKz!Interpreter.op_BUILD_TUPLE_UNPACK	  s      vui@r)   c                     t         j                  j                  d|f| j                        }| j	                  ||       y )Nr   r   )r   rl   dummyr   rr  )r%   r  r   r  r   s        r'   op_LIST_TO_TUPLEzInterpreter.op_LIST_TO_TUPLE	  s.    ww}}_zm}J

4r)   c           	           j                  |      } j                  j                  D ]  }t        |t        j
                        s|j                  |u s- j                  j                  |       g }|j                  j                  D ]t  } j                  j                  d d d   D ]S  }	||	j                  k(  s j                  j                  |	       |j                  |	j                  j                          t v |}
 n t        
      t        |      k(  sJ |
D cg c]#  }t	        j                  | j                        % }}t        ||      D ]  \  }} j                  ||        t!        t        t#         j                   |      t#         j                   |                  }g }|D ]]  } j$                  |   }t        |      dk7  r n>|d   }t        |t        j                        s n|j                  |j                         _  fd}t        |      t        |      k7  r&t        |
|      D 	ci c]  \  }}	| ||	       }}}	nt        |
|      D 	ci c]  \  }}	||	
 }}}	i }t'        |
      D ]
  \  }}|||<    t        j(                  j+                  |d|| j                        } j                  ||       y c c}w c c}	}w c c}	}w )Nr   r  rY   r   c                 $   j                   |    }t        |      dk7  r$t        j                  |       j                        S |d   }t        |t        j                        s$t        j                  |       j                        S |j                  S NrY   r   )	r(  rp   r!   rj  r>   ri   r   rk   rN   )r   defnsdefnr%   s      r'   resolve_constz9Interpreter.op_BUILD_CONST_KEY_MAP.<locals>.resolve_const
  sq    $$Q'E5zQ%dhhqk&6&6778DdBHH-%dhhqk&6&677::r)   rh   r  )rj  r5  r   ri   r   rj   rM   rP   rN   rZ   rA   rp   rk   r   r  rr  r9   r  r(  r   rl   r   )r%   r  r  keytmpsr   r  keyvarr  r   r  keytup	keyconstskvalr   rZ   literal_itemsr   r  r  r  literal_dictr\   r   r  r   s   `                        r'   op_BUILD_CONST_KEY_MAPz"Interpreter.op_BUILD_CONST_KEY_MAP	  s    $&&++D$		*t{{f/D""))$/ !))A!//44TrT:= ..55a8'..qww}}=!	 ; * % , 6{c&k)))>DEfRXXA4884f	EY0ID#JJtS! 1STXXw/TXXv1FGH A$$Q'E5zQ8DdBHH-  , 	 }V,/1/ 59AqA}Q///  1 -0,FG,FDAqAaC,FLG f%DAq M! & ww  u&'/;/<%)XX	 ! / 	

4[ F41 Hs   "(K>K$Kc                     t         j                  j                  | j                  |      | j                        }| j                  ||       y )Nr  )r   rl   getiterrj  r   rr  r%   r  rN   r  r   s        r'   op_GET_ITERzInterpreter.op_GET_ITER.
  s2    wwTXXe_$((C

4r)   c                    |j                   | j                  v sJ d       | j                  |      }t        j                  j                  || j                        }| j                  ||       t        j                  j                  | j                  |      | j                        }| j                  ||       t        j                  j                  | j                  |      | j                        }	| j                  |	|       t        j                  | j                  |      |j                  |j                         | j                        }
| j                  j                  |
       y)z:
        Assign new block other this instruction.
        zFOR_ITER must be block headr  r  N)r   r   rj  r   rl   iternextr   rr  
pair_firstpair_secondr  ry  get_jump_targetr5  rA   )r%   r  iteratorr  indvalpredrs  pairvalr  isvalidbrs              r'   op_FOR_ITERzInterpreter.op_FOR_ITER2
  s
    {{dkk)H+HH) hhx ''""$((";

7D!77%%DHHTN%I

8V$''%%DHHTN%I

7D! YYDHHTN499#33588% 	!!"%r)   c                     | j                  |      }| j                  |      }t        j                  j                  ||| j                        }| j                  ||       y )Nr#  )rj  r   rl   r%  r   rr  )r%   r  rM   rb   r  r   s         r'   op_BINARY_SUBSCRzInterpreter.op_BINARY_SUBSCRJ
  sG    &!wwvUA

4r)   c                     | j                  |      }| j                  |      }| j                  |      }t        j                  |||| j                        }| j                  j                  |       y )Nr*  )rj  r   r  r   r5  rA   )r%   r  rM   rb   rN   r   s         r'   op_STORE_SUBSCRzInterpreter.op_STORE_SUBSCRP
  sY    &!zzuE"hh(!!$'r)   c                     | j                  |      }| j                  |      }t        j                  ||| j                        }| j                  j                  |       y )N)rM   rb   r   )rj  r   rF  r   r5  rA   )r%   r  rM   rb   r   s        r'   op_DELETE_SUBSCRzInterpreter.op_DELETE_SUBSCRX
  sG    &!zzu$((C!!$'r)   c                     t         j                  j                  |D cg c]  }| j                  |       c}| j                        }| j                  ||       y c c}w N)rZ   r   )r   rl   r   rj  r   rr  r%   r  rZ   r  r   r   s         r'   op_BUILD_TUPLEzInterpreter.op_BUILD_TUPLE^
  sO    ww""u)Eu!$((1+u)E'+xx # 1

4 *F   Ac                     t         j                  j                  |D cg c]  }| j                  |       c}| j                        }| j                  ||       y c c}w r  )r   rl   r   rj  r   rr  r  s         r'   op_BUILD_LISTzInterpreter.op_BUILD_LISTc
  sO    ww!!e(De!e(D&*hh " 0

4 )Er  c                     t         j                  j                  |D cg c]  }| j                  |       c}| j                        }| j                  ||       y c c}w r  )r   rl   rm  rj  r   rr  r  s         r'   op_BUILD_SETzInterpreter.op_BUILD_SETh
  sO    ww  U'CUU'C%)XX ! /

4 (Dr  c                 f   | j                  |      }| j                  |      }t        j                  j                  |d| j                        }| j                  ||       t        j                  j                  | j                  |      |fd| j                        }| j                  ||       y )Nr   r   r  r2   rj  r   rl   re   r   rr  rg   r%   r  rM   rN   	updatevarr  
updateattr
updateinsts           r'   op_SET_UPDATEzInterpreter.op_SET_UPDATEm
      &!WW__VX488_D


)
4WW\\$((9"5x&*hh " 0


#
.r)   c                 f   | j                  |      }| j                  |      }t        j                  j                  |d| j                        }| j                  ||       t        j                  j                  | j                  |      |fd| j                        }| j                  ||       y )Nr   r   r  r2   r  r  s           r'   op_DICT_UPDATEzInterpreter.op_DICT_UPDATEv
  s    &! WW__+ % 

 	

)
4WW\\$((9"5x&*hh " 0


#
.r)   c           	          |D cg c]'  \  }} j                  |       j                  |      f) }}} fd} |d |D              }	 |d |D              }
t        |	      t        |      k(  }t        |
      t        |      k(  }i }|s|sd }n|rF|sDt        |	|      D ci c]  \  }}|t        |d          }}}t	        |	      D ]
  \  }}|||<    n7t        |	|
      D ci c]  \  }}||
 }}}t	        |	      D ]
  \  }}|||<    t
        j                  j                  |||| j                        } j                  ||       y c c}}w c c}}w c c}}w )Nc                 B   g }| D cg c]  }j                  |j                         }}|D ]i  }j                  |j                     }t        |      dk7  r |S |d   }t	        |t
        j                        s |S |j                  |j                         k |S c c}w r  )	rj  r>   r(  rp   ri   r   rk   rA   rN   )rM   r  r   r   r  r  r%   s         r'   get_literalsz.Interpreter.op_BUILD_MAP.<locals>.get_literals
  s    M0671dhhqvv&F7((0u:?
 ! 	 Qx!$1   $$TZZ0  !  8s   "Bc              3   &   K   | ]	  }|d      yw)r   Nr2   .0r   s     r'   	<genexpr>z+Interpreter.op_BUILD_MAP.<locals>.<genexpr>
  s     #<)QAaD)   c              3   &   K   | ]	  }|d      yw)rY   Nr2   r  s     r'   r  z+Interpreter.op_BUILD_MAP.<locals>.<genexpr>
  s     %>IqadIr  rY   r  )
rj  rp   r  r!   r   r   rl   r   r   rr  )r%   r  rZ   r  r  r  r   	got_itemsr  r  literal_valueshas_literal_keyshas_literal_valuesr\   r  r   r  r   r   s   `                  r'   op_BUILD_MAPzInterpreter.op_BUILD_MAP
  s}   <ABEDAqdhhqk488A;/E	B
	! $#<)#<<%%>I%>>|,I> 0C	NB(:L&8i8:8 9=1A~ad338  :!,/1#$a  0 .1~-NO-NTQAqD-NLO!,/1#$a  0 ww  yt/;/<%)XX ! / 	

4S C8:
 Ps   ,E#E'Ec                     t        j                  | j                  |      | j                  |      | j                  |      | j                        }| j                  j                  |       y )N)dctra   rN   r   )r   StoreMaprj  r   r5  rA   )r%   r  r  ra   rN   r   s         r'   op_STORE_MAPzInterpreter.op_STORE_MAP
  sJ    {{txx}$((3-!%%dhh@!!$'r)   c                     | j                  |      }t        j                  j                  d|| j                        }| j                  ||      S )N-r  rj  r   rl   unaryr   rr  r  s        r'   op_UNARY_NEGATIVEzInterpreter.op_UNARY_NEGATIVE
  <    ww}}S488}<zz$$$r)   c                     | j                  |      }t        j                  j                  d|| j                        }| j                  ||      S )Nr  r  r  r  s        r'   op_UNARY_POSITIVEzInterpreter.op_UNARY_POSITIVE
  r  r)   c                     | j                  |      }t        j                  j                  d|| j                        }| j                  ||      S )N~r  r  r  s        r'   op_UNARY_INVERTzInterpreter.op_UNARY_INVERT
  r  r)   c                     | j                  |      }t        j                  j                  d|| j                        }| j                  ||      S )Nnotr  r  r  s        r'   op_UNARY_NOTzInterpreter.op_UNARY_NOT
  s<    ww}}U%TXX}>zz$$$r)   c                     t         |   }| j                  |      }| j                  |      }t        j                  j	                  |||| j
                        }| j                  ||       y )Nr  )r   rj  r   rl   r   r   rr  )r%   rm   rU   rV   r  r   s         r'   _binopzInterpreter._binop
  sR     $hhsmhhsmww}}RSctxx}@

4r)   c                     t         |   }t        |dz      }| j                  |      }| j                  |      }t        j                  j                  ||||| j                        }| j                  ||       y )N=r  )r   r   rj  r   rl   r  r   rr  )r%   rm   rU   rV   r  immuopr   s          r'   _inplace_binopzInterpreter._inplace_binop
  sj    $R((c2hhsmhhsmww$$RSc)- % 3

4r)   c                 d    d|v r| j                  |d d |||       y | j                  ||||       y )Nr$  r   )r&  r"  )r%   r  rm   rU   rV   r  s         r'   op_BINARY_OPzInterpreter.op_BINARY_OP
  s5    "93Bc37KKCc*r)   c                 ,    | j                  d|||       y Nr  r"  r%   r  rU   rV   r  s        r'   op_BINARY_ADDzInterpreter.op_BINARY_ADD
      Cc3'r)   c                 ,    | j                  d|||       y Nr  r+  r,  s        r'   op_BINARY_SUBTRACTzInterpreter.op_BINARY_SUBTRACT
  r.  r)   c                 ,    | j                  d|||       y N*r+  r,  s        r'   op_BINARY_MULTIPLYzInterpreter.op_BINARY_MULTIPLY
  r.  r)   c                 ,    | j                  d|||       y Nz/?r+  r,  s        r'   op_BINARY_DIVIDEzInterpreter.op_BINARY_DIVIDE
      D#sC(r)   c                 ,    | j                  d|||       y N/r+  r,  s        r'   op_BINARY_TRUE_DIVIDEz!Interpreter.op_BINARY_TRUE_DIVIDE
  r.  r)   c                 ,    | j                  d|||       y Nz//r+  r,  s        r'   op_BINARY_FLOOR_DIVIDEz"Interpreter.op_BINARY_FLOOR_DIVIDE
  r9  r)   c                 ,    | j                  d|||       y N%r+  r,  s        r'   op_BINARY_MODULOzInterpreter.op_BINARY_MODULO
  r.  r)   c                 ,    | j                  d|||       y Nz**r+  r,  s        r'   op_BINARY_POWERzInterpreter.op_BINARY_POWER
  r9  r)   c                 ,    | j                  d|||       y N@r+  r,  s        r'   op_BINARY_MATRIX_MULTIPLYz%Interpreter.op_BINARY_MATRIX_MULTIPLY
  r.  r)   c                 ,    | j                  d|||       y Nz<<r+  r,  s        r'   op_BINARY_LSHIFTzInterpreter.op_BINARY_LSHIFT
  r9  r)   c                 ,    | j                  d|||       y Nz>>r+  r,  s        r'   op_BINARY_RSHIFTzInterpreter.op_BINARY_RSHIFT
  r9  r)   c                 ,    | j                  d|||       y N&r+  r,  s        r'   op_BINARY_ANDzInterpreter.op_BINARY_AND  r.  r)   c                 ,    | j                  d|||       y N|r+  r,  s        r'   op_BINARY_ORzInterpreter.op_BINARY_OR  r.  r)   c                 ,    | j                  d|||       y N^r+  r,  s        r'   op_BINARY_XORzInterpreter.op_BINARY_XOR  r.  r)   c                 ,    | j                  d|||       y r*  r&  r,  s        r'   op_INPLACE_ADDzInterpreter.op_INPLACE_ADD      Cc3/r)   c                 ,    | j                  d|||       y r0  r_  r,  s        r'   op_INPLACE_SUBTRACTzInterpreter.op_INPLACE_SUBTRACT  ra  r)   c                 ,    | j                  d|||       y r3  r_  r,  s        r'   op_INPLACE_MULTIPLYzInterpreter.op_INPLACE_MULTIPLY  ra  r)   c                 ,    | j                  d|||       y r7  r_  r,  s        r'   op_INPLACE_DIVIDEzInterpreter.op_INPLACE_DIVIDE      D#sC0r)   c                 ,    | j                  d|||       y r;  r_  r,  s        r'   op_INPLACE_TRUE_DIVIDEz"Interpreter.op_INPLACE_TRUE_DIVIDE  ra  r)   c                 ,    | j                  d|||       y r?  r_  r,  s        r'   op_INPLACE_FLOOR_DIVIDEz#Interpreter.op_INPLACE_FLOOR_DIVIDE  rh  r)   c                 ,    | j                  d|||       y rB  r_  r,  s        r'   op_INPLACE_MODULOzInterpreter.op_INPLACE_MODULO  ra  r)   c                 ,    | j                  d|||       y rF  r_  r,  s        r'   op_INPLACE_POWERzInterpreter.op_INPLACE_POWER   rh  r)   c                 ,    | j                  d|||       y rI  r_  r,  s        r'   op_INPLACE_MATRIX_MULTIPLYz&Interpreter.op_INPLACE_MATRIX_MULTIPLY#  ra  r)   c                 ,    | j                  d|||       y rM  r_  r,  s        r'   op_INPLACE_LSHIFTzInterpreter.op_INPLACE_LSHIFT&  rh  r)   c                 ,    | j                  d|||       y rP  r_  r,  s        r'   op_INPLACE_RSHIFTzInterpreter.op_INPLACE_RSHIFT)  rh  r)   c                 ,    | j                  d|||       y rS  r_  r,  s        r'   op_INPLACE_ANDzInterpreter.op_INPLACE_AND,  ra  r)   c                 ,    | j                  d|||       y rW  r_  r,  s        r'   op_INPLACE_ORzInterpreter.op_INPLACE_OR/  ra  r)   c                 ,    | j                  d|||       y r[  r_  r,  s        r'   op_INPLACE_XORzInterpreter.op_INPLACE_XOR2  ra  r)   c                     t        j                  |j                         | j                        }| j                  j                  |       y rZ  r   r   r  r   r5  rA   r%   r  r  s      r'   op_JUMP_ABSOLUTEzInterpreter.op_JUMP_ABSOLUTE5  3    ggd**,$((;!!#&r)   c                     t        j                  |j                         | j                        }| j                  j                  |       y rZ  r~  r  s      r'   op_JUMP_FORWARDzInterpreter.op_JUMP_FORWARD9  r  r)   c                     t        j                  |j                         | j                        }| j                  j                  |       y rZ  r~  r  s      r'   op_JUMP_BACKWARDzInterpreter.op_JUMP_BACKWARD=  r  r)   c                     || j                   j                          y |dk(  r<t        j                  | j                        }| j
                  j                  |       y |dk(  r| j                          y y )Nwithr   try)r=  r?   r   r   r   r5  rA   rW  )r%   r  rU  rG   s       r'   op_POP_BLOCKzInterpreter.op_POP_BLOCKA  s^    <""$V^)A%%a(U]&&( r)   c                 .   | j                  t        j                  j                  | j	                  |      | j
                        |       t        j                  | j	                  |      | j
                        }| j                  j                  |       y rZ  )	rr  r   rl   castrj  r   Returnr5  rA   )r%   r  retvalcastvalrets        r'   op_RETURN_VALUEzInterpreter.op_RETURN_VALUEJ  s_    

277<< 0dhh<?Iii)txx8!!#&r)   c                    | j                   |j                     }t        j                  || j                        }| j                  ||       | j                  t        j                  j                  | j                  |      | j                        |       t        j                  | j                  |      | j                        }| j                  j                  |       y rZ  )r  r   r   rk   r   rr  rl   r  rj  r  r5  rA   )r%   r  r  r  rN   r  r  s          r'   op_RETURN_CONSTzInterpreter.op_RETURN_CONSTP  s    $$TXX.EHHU1EJJuf%JJrww||DHHV$4$((|CWM))DHHW-488<C%%c*r)   c                 R   t         dv r!t        j                  |j                  dz	     }n5t         dv rt        j                  |j                     }nt	        t               |dk(  s|dk(  r||}}|dk(  rd| j                  d|||       | j                  |      }t        j                  j                  d|| j                        }| j                  ||       y |dk(  rt        j                  d	t        j                  | j                  
      }d}	| j                  ||	d       | j                  |      }| j                  |      }t        j                  j                  | j                  |	      ||fd| j                        }
| j                  |
|       y | j                  ||||       y )Nr      r   inznot inr  r  zexception matchexception_matchr   
$exc_matchTr  r2   r  )r   discmp_opr   r<  r"  rj  r   rl   r  r   rr  r   r   r  rg   )r%   r  rU   rV   r  rm   r   r  r  exc_match_namer  s              r'   op_COMPARE_OPzInterpreter.op_COMPARE_OP\  sZ   #DHHM*B44DHH%B%i00:xCC>KKc3,((3-C''--Sdhh-?CJJsC $$II!2#5#5488E *NJJU$JG((3-C((3-C'',,(Szrtxx  C JJsC KKCc*r)   c                 R    |j                   dk(  rdnd}| j                  ||||       y )NrY   is notis)r   r"  )r%   r  rU   rV   r  rm   s         r'   op_IS_OPzInterpreter.op_IS_OPz  s%    QXDBS#&r)   c                     ||}}| j                  d|||       |j                  dk(  rP| j                  |      }t        j                  j                  d|| j                        }| j                  ||       y y )Nr  rY   r  r  )r"  r   rj  r   rl   r  r   rr  )r%   r  rU   rV   r  r   r  s          r'   op_CONTAINS_OPzInterpreter.op_CONTAINS_OP  sd    SD#sC(88q=((3-C''--Sdhh-?CJJsC  r)   c                     |7| j                   d   }t        |t        j                        sJ |j                  }t        j
                  || j                        }| j                  j                  |       y )Nr   )rM   r   )	r=  ri   r   r  r  r   r   r5  rA   )r%   r  r  r  r  s        r'   op_BREAK_LOOPzInterpreter.op_BREAK_LOOP  s\    ;%%b)DdBGG,,,))CggSdhh/!!#&r)   c                 <   |j                         |j                  d}||   }||    }d|j                  z  }t        j                  dt
        | j                        }| j                  ||       t        j                  j                  | j                  |      | j                  |      fd| j                        }	d|j                  z  }
| j                  |	|
      }t        j                  |||| j                        }| j                  j                  |       y )	N)TFzbool%sboolr   r  r2   z$%spredr  )r  ry  r   r   r   r  r   rr  rl   rg   rj  r  r5  rA   )r%   r  r  iftruebrsr  r  r>   r  r  pname	predicatebras                r'   _op_JUMP_IFzInterpreter._op_JUMP_IF  s    &&(99
 V&j/4;;'		&$DHH5

T
*'',,txx~/@"#'88  - T[[)JJW5J9	iiYvw HH&!!#&r)   c                 ,    | j                  ||d       y NFr  r  r  r%   r  r  s      r'   op_JUMP_IF_FALSEzInterpreter.op_JUMP_IF_FALSE      D7r)   c                 ,    | j                  ||d       y NTr  r  r  s      r'   op_JUMP_IF_TRUEzInterpreter.op_JUMP_IF_TRUE      D6r)   c                    |j                   }|j                         }|s
t        d   }n	t        d   }| j                  t	        j
                  d | j                        d|j                         }| j                  |      }t        j                  j                  |||| j                        }	d|j                   }
| j                  |	|
       d|j                   }t	        j                  d	t        | j                        }| j                  ||       t        j                  j                  | j                  |      | j                  |
      fd
| j                        }d|j                   }| j                  ||      }t	        j                  |||| j                        }| j                  j!                  |       y )Nr  r  r   z
$constNoner  r  z
$maybeNonez$boolr  r2   z$predr  )ry  r  r   rr  r   rk   r   r   rj  rl   r   r   r  rg   r  r5  rA   )r%   r  r  r  r  r  rm   rV   rU   isnone	maybeNoner>   r  r  r  r  r  s                    r'   _jump_if_nonezInterpreter._jump_if_none  st   &&( $T*B$X.Bjjrxx$((; *4;;-8  :hhtnrsB .	

i
0t{{m$		&$DHH5

T
*'',,txx~0C/Er#'88  - }%JJW5J9		"(#*#xx) 	!!&)r)   c                 *    | j                  ||d       y NTr  r  s      r'   op_POP_JUMP_FORWARD_IF_NONEz'Interpreter.op_POP_JUMP_FORWARD_IF_NONE      4t,r)   c                 *    | j                  ||d       y NFr  r  s      r'   op_POP_JUMP_FORWARD_IF_NOT_NONEz+Interpreter.op_POP_JUMP_FORWARD_IF_NOT_NONE      4u-r)   c                 *    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_IF_NONEzInterpreter.op_POP_JUMP_IF_NONE  s    tT40r)   c                 *    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_IF_NOT_NONEz#Interpreter.op_POP_JUMP_IF_NOT_NONE  s    tT51r)   c                 *    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_BACKWARD_IF_NONEz(Interpreter.op_POP_JUMP_BACKWARD_IF_NONE  r  r)   c                 *    | j                  ||d       y r  r  r  s      r'    op_POP_JUMP_BACKWARD_IF_NOT_NONEz,Interpreter.op_POP_JUMP_BACKWARD_IF_NOT_NONE  r  r)   c                 ,    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_FORWARD_IF_FALSEz(Interpreter.op_POP_JUMP_FORWARD_IF_FALSE  r  r)   c                 ,    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_FORWARD_IF_TRUEz'Interpreter.op_POP_JUMP_FORWARD_IF_TRUE  r  r)   c                 ,    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_BACKWARD_IF_FALSEz)Interpreter.op_POP_JUMP_BACKWARD_IF_FALSE  r  r)   c                 ,    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_BACKWARD_IF_TRUEz(Interpreter.op_POP_JUMP_BACKWARD_IF_TRUE  r  r)   c                 ,    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_IF_FALSEz Interpreter.op_POP_JUMP_IF_FALSE  r  r)   c                 ,    | j                  ||d       y r  r  r  s      r'   op_POP_JUMP_IF_TRUEzInterpreter.op_POP_JUMP_IF_TRUE  r  r)   c                 ,    | j                  ||d       y r  r  r  s      r'   op_JUMP_IF_FALSE_OR_POPz#Interpreter.op_JUMP_IF_FALSE_OR_POP  r  r)   c                 ,    | j                  ||d       y r  r  r  s      r'   op_JUMP_IF_TRUE_OR_POPz"Interpreter.op_JUMP_IF_TRUE_OR_POP  r  r)   c                 t   t        j                  dt        j                  | j                        }d}| j                  ||d       | j                  |      }| j                  |      }t         j                  j                  | j                  |      ||fd| j                        }	| j                  |	|       y )Nr  r   r  Tr  r2   r  )	r   r   r   r  r   rr  rj  rl   rg   )
r%   r  r  tostos1r  r  rU   rV   r  s
             r'   op_CHECK_EXC_MATCHzInterpreter.op_CHECK_EXC_MATCH  s    		r11txx
 &

^d
ChhtnhhsmggllHH^$C:2488  
 	

3r)   c                 (   |j                   }|j                         }t        j                  dt        j
                  | j                        }d}| j                  ||d       | j                  |      }	| j                  |      }
t        j                  j                  | j                  |      |	|
fd| j                        }| j                  ||      }t        j                  |||| j                        }| j                  j                  |       y )	Nr  r   r  Tr  r2   r  r  )ry  r  r   r   r   r  r   rr  rj  rl   rg   r  r5  rA   )r%   r  r  r  r  r  r  r  r  rU   rV   r  r  r  s                 r'   op_JUMP_IF_NOT_EXC_MATCHz$Interpreter.op_JUMP_IF_NOT_EXC_MATCH	  s    &&(		r11txx
 &

^d
ChhtnhhsmggllHH^$C:2488  
 JJsD)	iiYvw HH&!!#&r)   c                    | j                   j                  }|t        j                  d | j                        }| j
                  j                  |       | j                          | j
                  j                  t        j                  |d   | j                               y dt        d    }t        j                  t        |f| j                        }| j
                  j                  |       y )N	exceptionr   r  r   z8Unreachable condition reached (op code RERAISE executed)
reportable)r>  r  r   TryRaiser   r5  rA   rW  r   r   StaticRaiser   )r%   r  r  r  r   ro  s         r'   
op_RERAISEzInterpreter.op_RERAISE  s    ..;;488<D%%d+&&(%%bggfUm&JK N"<013C>>.3&$((CD%%d+r)   c                    || j                  |      }| j                  j                  }|t        j                  || j
                        }| j                  j                  |       | j                          | j                  j                  t        j                  |d   | j
                               y t        j                  || j
                        }| j                  j                  |       y )Nr  r  r   )rj  r>  r  r   r  r   r5  rA   rW  r   Raise)r%   r  r  r  r   s        r'   op_RAISE_VARARGSzInterpreter.op_RAISE_VARARGS*  s    ?((3-C..;;$((;D%%d+&&(%%bggfUm&JK 88ctxx8D%%d+r)   c                     d }t        j                  | j                  |      || j                        }| j	                  ||      S )N)rN   rb   r   )r   Yieldrj  r   rr  )r%   r  rN   r  rb   s        r'   op_YIELD_VALUEzInterpreter.op_YIELD_VALUE9  s6    xxdhhuoUIzz$$$r)   c	                 D   |d}	t        |	      |rJt        |t              r)t        |D cg c]  }| j                  |       c}      }n| j                  |      }| j                  |   d   }
t        |
t
        j                        s#d}	t        j                  |	| j                        |
j                  }r| j                  |      }|r| j                  |      }t
        j                  j                  ||||| j                        }| j                  ||       y c c}w )Nz3op_MAKE_FUNCTION with kwdefaults is not implementedr   z_Unsupported use of closure. Probably caused by complex control-flow constructs; e.g. try-exceptr   )r<  ri   r   rj  r(  r   rk   r   r   r   rN   rl   make_functionrr  )r%   r  r>   codeclosureannotations
kwdefaultsdefaultsr  ro  assume_code_constfcoder   s                r'   op_MAKE_FUNCTIONzInterpreter.op_MAKE_FUNCTION?  s     !GC%c**(E* X!FXT$((4.X!FG88H- ,,T215+RXX6" 
 ))#488<<!''88D>Dhhw'Gww$$T5'8TXXN

4% "Gs   Dc	           
      4    | j                  ||||||||       y r#   )r  )	r%   r  r>   r  r  r  r  r  r  s	            r'   op_MAKE_CLOSUREzInterpreter.op_MAKE_CLOSURE\  s!    dD$((C	9r)   c                    | j                   j                  j                  j                  |j                        }|| j
                  v r	 | j                  |      }ne|| j                  v rP| j                  j                  |      }| j                  |      }t        j                  |||| j                        }nJ d       | j                  ||       y # t        $ r d}t        |      w xY w)N.Unsupported use of op_LOAD_CLOSURE encounteredr   r   )r   ro   rx  ry  r   r  rj  r   r<  r  rb   r  r   r  r   rr  )r%   r  r  r>   rr  ro  rR   rN   s           r'   op_LOAD_CLOSUREzInterpreter.op_LOAD_CLOSUREb  s    <<$$--AA$((KDt)))3$B +++((..t4..s3ZZT5dhh?'-'qJJr3 ' 3JC-c223s   	C C*c                    t        | j                        }|j                  |k  r,| j                  |j                     }	 | j                  |      }nR|j                  |z
  }| j                  |   }| j                  |      }t        j                  |||| j                        }| j                  ||       y # t        $ r d}t        |      w xY w)Nr  r   )rp   r  r   rj  r   r<  r  r  r   r  r   rr  )	r%   r  r  r|  r>   rr  ro  rR   rN   s	            r'   r  zInterpreter.op_LOAD_CLOSUREs  s    T//0Jxx*$))$((33$B
 hh+))#...s3ZZT5dhh?JJr3 ' 3JC-c223s   B6 6Cc                 f   | j                  |      }| j                  |      }t        j                  j                  |d| j                        }| j                  ||       t        j                  j                  | j                  |      |fd| j                        }| j                  ||       y )NrA   r   r  r2   r  )r%   r  rM   rN   	appendvarr  
appendattr
appendinsts           r'   op_LIST_APPENDzInterpreter.op_LIST_APPEND  r  r)   c                 4   | j                  |      }| j                  |      }d}| j                  j                  st        j                  |      | j                  j                  d   }t        |j                  t        j                        xr |j                  j                  dk(  }d }	|rt        | j                  j                  d d       D ]  }t        |t        j                        sd} nxt        |j                  t        j                        rFt        |j                  t        j                        r*|j                  |k(  r|}	|j                  j                   } nd} n |r|	t        j                  |      |r| j                  j                  }
| j                  j                  d   }|
j                  |
j!                  |
j#                  |	                   |j                  }|	j                  }|j                  |_        y t        j                  j%                  |d| j&                        }| j)                  ||       t        j                  j+                  | j                  |      |fd| j&                        }| j)                  ||       y )	NzAn unsupported bytecode sequence has been encountered: op_LIST_EXTEND at the start of a block.

This could be due to the use of a branch in a tuple unpacking statement.r   r   Fr   r   r  r2   )rj  r5  r   r   r   ri   rN   r   rl   rm   r   rj   rk   rM   rZ   rA   r?   rb   re   r   rr  rg   )r%   r  rM   rN   	extendvarr  ro  r   okbuild_empty_liststmtsbuild_tuple_asgnr   r   
extendattr
extendinsts                   r'   op_LIST_EXTENDzInterpreter.op_LIST_EXTEND  s   &!L !!&&))#.. !!&&r*

BGG,O-1O   !3!3!8!8"!=>!$		2B djj"((3  

BGG49N'+$ "ZZ---BB' ?( "*))#..&&++E#1166r:LL5;;/?#@AB*00K)//J*00J txxHJJJZiJ8dhhy&9E8R*.(( & 4JJJZcJ2r)   c                    | j                  |      }| j                  |      }| j                  |      }t        j                  j                  |d| j                        }| j                  ||       t        j                  j                  | j                  |      ||fd| j                        }| j                  ||       y )Nrf   r   r  r2   r  )	r%   r  rM   ra   rN   
setitemvarr  setitemattrr  s	            r'   
op_MAP_ADDzInterpreter.op_MAP_ADD  s    &!hhsmggoofmoJ

:
6WW\\$((:"6er&*hh " 0


#
.r)   c                 v    t        j                  dt        | j                        }| j	                  ||       y )Nr   r   r  )r   r   r   r   rr  )r%   r  r  r  s       r'   op_LOAD_ASSERTION_ERRORz#Interpreter.op_LOAD_ASSERTION_ERROR  s)    		*NI

S
)r)   c                 (     | j                   |i | y r#   )rj  r%   rq   r`   s      r'   op_LOAD_METHODzInterpreter.op_LOAD_METHOD  s    4'3'r)   c                 (     | j                   |i | y r#   )r  r  s      r'   op_CALL_METHODzInterpreter.op_CALL_METHOD  s    t+s+r)   c                 \   |t         j                  k(  rAt        j                  t        d| j                        }| j
                  j                  |       y |t         j                  k(  r | j                  |fi | y |t         j                  k(  r | j                  |fi | y t        |      )Nr2   )ci1opINTRINSIC_STOPITERATION_ERRORr   r  r   r5  rA   UNARY_POSITIVEr  INTRINSIC_LIST_TO_TUPLEr  r<  )r%   r  operandr  r   s        r'   op_CALL_INTRINSIC_1zInterpreter.op_CALL_INTRINSIC_1  s    %===~~&CR&*hh0""))$/E000&&&t6v6E999%%%d5f5)'22r)   r#   )F)NN)r.   r/   r0   r1   r!  r(   rP  rH  rB  rC  rt  r@  r|  r~  r  r  rW  r  r  r  r  r  r  r  propertyr?  r  r  r  r  r  rA  rr  rj  r  r  r  r  r  r  r  r  r  r  r  r  r!  r   r(  r<  r,  r3  r7  r9  r;  r=  r@  rB  rD  rG  rJ  rL  rN  rQ  op_LOAD_FAST_CHECKrU  rX  r\  rb  
op_DUP_TOPop_DUP_TOP_TWOre  rh  rj  rp  rs  rv  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r   r"  r&  r(  r-  r1  r5  r8  r=  r@  rD  rG  rK  rN  rQ  rU  rY  r]  r`  rc  re  rg  rj  rl  rn  rp  rr  rt  rv  rx  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2   r)   r'   r  r  :  sy    L%"K!Z
-^F,"&(21h%@&?
=
.(.;+zLB.9	    ' ' ) ) & & ) ) ) )"L$$))!
)!,.  K	" 
0	0!),,K	,  
0	0!),,) )$)$)("((((( ( ($($(6 K)	, 
0	0!),,.
A6 J N&&
	!, &&	 
 
'	'	  "),, &&	  
'	'
	  "),,&&	 &&	/ 
'	'	2 "),,(
3 30'*
8"&HAAAF&0((


// *X(
%
%
%
%
+((()()()())(((00010101011000''')'
 K	+ 
0	0!),,+<'
!''*87 *D-. K	1	2	0	0!),,-.87878787'$,,%:9
 &&	   
'	'	   "),,/?3B/*(, K	3 
0	0!),,r)   r  c                       e Zd Zy)r  N)r.   r/   r0   r2   r)   r'   r  r    s    r)   r  )5r  r7   r  r   loggingr   
numba.corer   r   r   numba.core.errorsr   r   r   numba.core.ir_utilsr	   r
   numba.core.utilsr   r   r   numba.core.byteflowr   r   r   r   numba.core.unsafer   numba.cpython.unsafe.tupler   r   r  r<  objectr!   	getLoggerr.   rE  r4   rW   rc   r}   r   r   r   r   r   r   r
  r   r  r   r  r2   r)   r'   <module>r.     s     
    ) ) M M 5< < C C   : E,,
i
((:V : '

H
%1v 1h
2&RHV FiX|~[|@[|.b2jC-& C-L>  ,,
i
((r)   