
    [Thj                     n   S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJrJ	r	  SSK
rSSKJr  SSKJrJr  SSKJrJrJrJrJrJrJrJrJrJr  SS	KJrJr  SS
KJ r J!r!J"r"J#r#  SSKJ$r$J%r%  SSK&J'r'J(r(  SSK)J*r*J+r+  SSK,J-r-  SSK.J/r/J0r0J1r1J2r2  SSK3J4r4  \Rj                   " S S5      5       r6 " S S5      r7g)a  
This module provides utilities for generating Python bytecode in PyTorch's Dynamo system.
It includes functionality for:
- Constructing bytecode sequences for Python operations
- Managing stack operations and variable tracking
- Handling graph outputs and their conversions
- Supporting different Python versions (3.11+, 3.12+, 3.13+)
- Converting high-level operations to low-level bytecode instructions
- Managing constant loading and attribute access
- Supporting function creation and closure handling
    N)Counter)OptionalUnion)
OrderedSet   )graph_break_hintsutils)
add_push_nulladd_push_null_call_function_excreate_call_functioncreate_call_methodcreate_dup_topcreate_instructioncreate_load_constcreate_load_methodcreate_rot_nInstruction)IncorrectUsageunimplemented_v2)
AttrSourceChainedSourceDictGetItemSourceSource)is_safe_constantrot_n_helper)ValueMutationExistingVariableTracker)4ContextlibContextManagerLocalGeneratorObjectVariableLocalGeneratorObjectVariable)NNModuleVariable)NumpyNdarrayVariableSymNodeVariableTensorVariableUnspecializedPythonVariable)TensorWithTFOverrideVariablec                   *    \ rS rSr% \\S'   \\S'   Srg)GraphOutputEntry9   indexvariable N)__name__
__module____qualname____firstlineno__int__annotations__r   __static_attributes__r+       M/var/www/auris/envauris/lib/python3.13/site-packages/torch/_dynamo/codegen.pyr'   r'   9   s    Jr3   r'   c                   l   \ rS rSrSr     S=S\\R                  R                     S\\	   SS4S jjr
SS	.S
 jrS rS rS>S jrS?S jrS rS rS rS rS\4S jrS rS rS rS rS\\   4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jr S>S\4S jjr!S\4S jr"S\4S  jr#S! r$S" r%S\4S# jr&S$ r'S% r(S\4S& jr)S' r*S@S( jr+S) r,S* r-S+ r.S,\/S-\04S. jr1S/ r2S0 r3S1 r4 S@S2\	S3\5Rl                  S-\04S4 jjr7S\4S5 jr8S6\9SS4S7 jr:S2\	SS4S8 jr;SAS9 jr<S\\   4S: jr=S\4S; jr>S<r?g)B	PyCodegen?   z4
Helper class uses for constructing Python bytecode
Nrootgraph_output_varreturnc                    X l         S U l        [        R                  " 5       U l        0 U l        / U l        U=(       d    0 U l        Xl        X0l	        U R                  R                  R                  U l        U R                  R                  U l        U R                  R                  R                  U l        SU l        U=(       d    0 U l        g )NT)r8   top_of_stackcollectionsr   usesgraph_outputs_outputtempvarstxr9   outputcode_optionscell_and_freevarsnew_varvalue_from_sourceoverridden_sources)selfrB   r8   r9   rA   rH   s         r4   __init__PyCodegen.__init__D   s     	FJ.9.A.A.C	:<*,
 !B 0 GGNN77!%!:!:ww~~--'+ 9K8Pbr3   T)rG   c                    U R                   nU =R                   U-  sl          U R                  U5        X0l         g ! X0l         f = fN)rG   foreach)rI   stack_valuesrG   prevs       r4   restore_stackPyCodegen.restore_stacka   s=    %%"33	*LL&%)"T"s	   ; Ac                 t    U R                   R                  5        Vs/ s H  oR                  PM     sn$ s  snf rM   )r?   valuesr*   )rI   xs     r4   graph_output_varsPyCodegen.graph_output_varsi   s-    $($6$6$=$=$?@$?q

$?@@@s   5c                 @    UR                  U 5      nUb
   SU 35       eg )Nzreconstruct!=None )reconstruct)rI   valueress      r4   call_reconstructPyCodegen.call_reconstructl   s)    %{8088{r3   c                    [        U R                  5      n[        R                  S:  a  U R	                  5         U" 5         U R                  US nU R                  US2	 U(       a%  U R                  R                  [        U5      5        O$U R                  R                  [        U5      5        [        R                  S:  a  U R	                  5         gg)a`  
`gen_fn` generates instructions via PyCodegen methods
that push a single callable to the stack.

`add_push_null` pushes a NULL to the stack before or after the
instructions generated by `gen_fn`, depending on Python version.

Will attempt to use the NULL push bit for instructions
with such bits (LOAD_GLOBAL 3.11+, LOAD_ATTR 3.12+, LOAD_SUPER_ATTR).
      N)lenr@   sysversion_info	clear_tosextendr   r
   )rI   gen_fncall_function_exold_lenadded_instss        r4   r
   PyCodegen.add_push_nullp   s     dll#g% NNll78,LL"LL >{ KLLLk :;w&NN 'r3   c           
      h  ^ ^^^	 [        U[        5      (       Ga  T R                  R                  X5      nUSL d   S5       eT R                  UL a$  T R
                  R                  [        5       5        gT R                  R                  U5      b?  T R
                  R                  T R                  T R                  U   5      5        UT l        g T R                  U5        T R
                  R                  [        5       5        T R#                  U5        UT l        g[        U[$        5      (       d   eT R
                  m	T R&                  mU(       az  T R                  UL a  T	R                  [        5       5        gT R                  R                  U5      b5  T	R                  T R                  T R                  U   5      5        UT l        gUR)                  5       (       a   [        U[*        5      (       a  [-        S	5      eUR.                  bs  U(       al  UR)                  5       (       a  [        U[0        5      (       dB  [        UR2                  [4        5      (       d  T R6                  (       a  T " UR.                  5      $ UR9                  5       (       aN  [;        UR=                  5       5      (       a0  T	R                  T R?                  UR=                  5       5      5        GO[        U[@        5      (       a  T RC                  U5      mT RE                  U 4S
 j5        T RG                  TT   RH                  5        T	R                  T RK                  URM                  T RN                  5      SS95        T	RQ                  [S        SS5      5        GO[        U[T        5      (       a  URW                  5       [X        :X  a  T RN                  RZ                  (       dp  T RC                  UR]                  T RN                  [^        R`                  5      5      mUUU	U 4S jnT RE                  U5        T	RQ                  [S        SS5      5        GO^[        U[b        [T        [d        [f        45      (       a  T RC                  U5      m[        U[f        5      (       aP  T RE                  U 4S j5        T RG                  TT   RH                  5        T	RQ                  [S        SS5      5        GO[        U[d        5      (       aH  URh                  (       a7  UUU	U 4S jnT RE                  U5        T	RQ                  [S        SS5      5        GOfT RG                  TT   RH                  5        GOF[        U[j        5      (       a  URl                  Ro                  S5      nUS   T Rp                  S   ;   a)  T	R                  T R                  US   5      5        USS nO9T Rr                  c   eT	R                  T Ru                  T Rr                  5      5        U H#  nT	R                  T Rw                  U5      5        M%     OtT Rx                  U==   S-  ss'    T R                  U5        U(       aD  UT R                  ;   a4  T R
                  R                  [        5       5        T R#                  U5        UT l        g! [         a9    [        S[        U5      S[        U5       SU S3/ [        R                   QS9   GNf = f! [         a/    [        S[        U5      SU S3S/[        Rz                  QSPS9   Nf = f)a  
Generate code such that top-of-stack (TOS) is set to value.

`allow_cache` controls the behavior in the following manner. `value` can
either be a VariableTracker or a Source.

If `value` is a `Source`, `allow_cache` must be True (invariant asserted
below). If the source was reconstructed earlier, we will reuse the
generated code by loading from top of stack or tempvars.

If `value` is a `VariableTracker`, we have the following cases:

1) `allow_cache=True`
    a) If the value.source is not None, we will emit the code based on
    `value.source` to handle aliasing.
    b) If value.source is None (example reconstructing a local list
    returned by the compiled function), we will reconstruct the variable
    tracker (w/o any source) to emit bytecode that generates a new
    python object.

    In both cases of value.source being None or not, if the value was
    reconstructed earlier, we will reuse the generated code by loading from
    top of stack or tempvars.

2) `allow_cache=False` - This is a special case (allow_cache defaults to
True).
    a) If the value.source is not None, we reconstruct the variable
    tracker and emit a new python object. You might wonder what about
    aliasing? The place where we use this config also has the followup
    code where the original python object is assigned to this new python
    value to handle aliasing (check side_effects.py and search for
    allow_cache=False).

    b) If value.source is None, this is not allowed. TODO - assert this.

Notable effects:
1. `self.top_of_stack` will be set to `value`, if we don't codegen
   `value` based on source.
2. `self.uses[value]` will increment, if we don't codegen `value` based
   on source or cache/top-of-stack reuse; in other words, if we codegen
   as if `value` is modelling some brand new python value.
Tz#allow_cache must be True for SourceNz:Reconstruction failure: source.reconstruct not implementedz6Dynamo has no bytecode reconstruction implemented for z
 variable .)gb_typecontextexplanationhintszENYI: Returning a @contextmanager object from a torch.compile functionc                  D   > T R                  [        R                  S5      $ )Nto_subclassload_import_fromr	   r,   rI   s   r4   <lambda>$PyCodegen.__call__.<locals>.<lambda>  s    --ennmLr3   add   Fc                     > TR                  T T   R                  5        TR                  TR                  S5      5        g Nitemload_graph_outputr)   appendcreate_load_attrr?   graph_outputs_keyrC   rI   s   r4   rg   "PyCodegen.__call__.<locals>.gen_fn'  s4    &&}5F'G'M'MNd33F;<r3   r   c                  D   > T R                  [        R                  S5      $ )Nto_numpy_helperrt   rv   s   r4   rw   rx   :  s    D11%..BSTr3   r   c                     > TR                  T T   R                  5        TR                  TR                  S5      5        g r}   r   r   s   r4   rg   r   @  s4    **=9J+K+Q+QRMM$"7"7"?@r3   co_varnameszReconstruction failurezJDynamo has no bytecode reconstruction implemented for sourceless variable zIf Dynamo attempting to trace a return statement and your code is attempting to return a variable that Dynamo cannot reconstruct, then remove it from the return statement.zReport an issue to PyTorch if you need reconstrtuction support. Note that objects that don't havereconstruction rules may be fundamentally unreconstructable.)>
isinstancer   rH   getr<   r@   r   r   rA   create_loadr\   NotImplementedErrorr   strtyper   
DYNAMO_BUG	add_cacher   r?   is_realizedr   r   sourcer   mutation_typer   rG   is_python_constantr   as_python_constantr   r%   add_graph_outputr
   r   r)   create_load_globalglobal_mangled_class_namerB   rf   r   r"   python_typefloatexport	as_tensortorchfloat64r#   r$   r!   need_unwrapr    
module_keysplitrD   r8   create_load_const_uncheckedr   r>   CAUSED_BY_EARLIER_GRAPH_BREAK)
rI   rZ   allow_cacher   rg   partspartr?   r   rC   s
   `      @@@r4   __call__PyCodegen.__call__   s   V eV$$,,00>F$&M(MM&  E)##N$45}}  (4##D$4$4T]]65J$KL$*!%%f- LL 01NN6" &D%1111**  E)n./}}  '3d..t}}U/CDE$)!:G$
 $
 !W  LL$!!##
5:V(W(W( 5..0EFF))ELL))##%%*:5;S;S;U*V*VMM$001I1I1KLM;<< $ 5 5e <L ""=1B#C#I#IJMM''33DGG<$ ( 
 MM.q%89uo..!!#u,GGNN !% 5 57!= = v&MM.q%89+$	
 
 !% 5 5e <%!566""T &&}5F'G'M'MN21e<=E#>??EDUDUA A ""6*21e<=&&}5F'G'M'MN/00$$**3/EQx4,,];;d..uQx89ab	yy,,,d>>tyyIJd33D9:  IIe!%%e, u5##N$45u%!A '  XK"XY]^dYeXffpqwpxxy z9-889	^ '  4J"lmrlsst ud +HHW		s$   Z2 [8 2?[54[586\10\1c                     [        UR                  5       5      nX R                  ;  a,  [        [	        U R                  5      U5      U R                  U'   U$ rM   )idas_proxyr?   r'   rb   )rI   rZ   r   s      r4   r   PyCodegen.add_graph_outputi  sN    u~~/0$6$664DD&&'5D01 ! r3   c                     U R                   nUR                  U R                  U R                  5      5        UR                  U R	                  U5      5        UR                  U R                  5       5        g rM   )r@   r   r   r9   r   create_binary_subscr)rI   r)   rC   s      r4   r   PyCodegen.load_graph_outputq  sT    d&&t'<'<=>d,,U34d//12r3   c                     U R                  5       nX R                  U'   U R                  R                  U R	                  U5      5        g rM   )rF   rA   r@   r   create_store)rI   rZ   vars      r4   r   PyCodegen.add_cachew  s6    lln"eD--c23r3   c                 &    U H  nU " U5        M     g rM   r+   )rI   itemsis      r4   rN   PyCodegen.foreach|  s    AG r3   c                     [        S5      $ )NBINARY_SUBSCRr   rv   s    r4   r   PyCodegen.create_binary_subscr  s    !/22r3   c                     [         R                  " SSU5      nU R                  R                  nX;   a  [	        X1   5      [	        U5      :X  d   eOX#U'   U R                  USS9/$ )zStore value in a new globalz[^a-zA-Z0-9_]+_Try   )resubrB   	f_globalsr   r   )rI   namerZ   r   s       r4   setup_globally_cachedPyCodegen.setup_globally_cached  sc    vv'd3GG%%	io&"U)333#dO''$'788r3   c                     S U l         g rM   )r<   rv   s    r4   re   PyCodegen.clear_tos  s
     r3   c                     [        U[        5      (       d   eU R                  R                  U5        U R	                  5         g rM   )r   r   r@   r   re   )rI   insts     r4   append_outputPyCodegen.append_output  s1    $,,,,D!r3   c                     [        S U 5       5      (       d   eU R                  R                  U5        U R                  5         g )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7frM   )r   r   ).0rU   s     r4   	<genexpr>*PyCodegen.extend_output.<locals>.<genexpr>  s     =u!:a--us   )allr@   rf   re   )rI   instss     r4   extend_outputPyCodegen.extend_output  s5    =u=====E"r3   c                     U R                   $ rM   )r@   rv   s    r4   get_instructionsPyCodegen.get_instructions  s    ||r3   c                 N    XR                   S   ;   d
   U S35       e[        SUS9$ )Nr    missing	LOAD_FASTargvalrD   r   rI   r   s     r4   r   PyCodegen.create_load  s2    ((77JD69JJ7!+d;;r3   c                 n    XR                  5       ;   d   e[        R                  S:  a  SOSn[        X!S9$ )Nr_   r   LOAD_CLOSUREr   )rE   rc   rd   r   )rI   r   	inst_names      r4   create_load_closurePyCodegen.create_load_closure  s6    --////#&#3#3w#>KN	!)99r3   c                 @    XR                  5       ;   d   e[        SUS9$ )N
LOAD_DEREFr   rE   r   r   s     r4   create_load_derefPyCodegen.create_load_deref  s$    --////!,t<<r3   c                 N    XR                   S   ;   d
   U S35       e[        SUS9$ )Nr   r   
STORE_FASTr   r   r   s     r4   r   PyCodegen.create_store  s2    ((77JD69JJ7!,t<<r3   c                 @    XR                  5       ;   d   e[        SUS9$ )NSTORE_DEREFr   r   r   s     r4   create_store_derefPyCodegen.create_store_deref  s$    --////!-==r3   c                     U(       a%  U R                   R                  R                  U5        XR                  S   ;   d
   U S35       e[	        SUS9$ )Nco_namesz not in co_namesLOAD_GLOBALr   )rB   rC   update_co_namesrD   r   )rI   r   rz   s      r4   r   PyCodegen.create_load_global  sL    GGNN**40((44O>N6OO4!-==r3   c                     [        U5      $ rM   r   rI   rZ   s     r4   r   PyCodegen.create_load_const  s     ''r3   c                     [        USS9$ )NF)checkedr   r   s     r4   r   %PyCodegen.create_load_const_unchecked  s     66r3   c                     U R                   R                  R                  U5        U R                  [	        U5      5        g rM   )rB   rC   r   r   r   r   s     r4   load_methodPyCodegen.load_method  s,    &&t,-d34r3   c                 8    U R                  [        U5      5        g rM   )r   r   )rI   nargss     r4   call_methodPyCodegen.call_method  s    -e45r3   c                 j    XR                   S   ;  a  U R                   S==   U4-  ss'   [        SUS9$ )Nr   	LOAD_ATTRr   r   r   s     r4   r   PyCodegen.create_load_attr  s8    ((44j)dW4)!+d;;r3   c                 D    U R                  U R                  U5      5        g rM   )r   r   r   s     r4   	load_attrPyCodegen.load_attr  s    40067r3   c                 l    UR                  S5       Vs/ s H  o R                  U5      PM     sn$ s  snf )Nrm   )r   r   )rI   namesr   s      r4   create_load_attrsPyCodegen.create_load_attrs  s.    8=C8HI8H%%d+8HIIIs   1c                 j    XR                   S   ;  a  U R                   S==   U4-  ss'   [        SUS9$ )Nr   
STORE_ATTRr   r   r   s     r4   create_store_attrPyCodegen.create_store_attr  s8    ((44j)dW4)!,t<<r3   c                 D    U R                  U R                  U5      5        g rM   )r   r  r   s     r4   
store_attrPyCodegen.store_attr  s    411$78r3   c           	      z   / nU(       a}  [         R                  S:  ai  UR                  [        U R	                  USS95      5        US:  a9  UR                  / U R                  US-   5      QU R                  US-   5      Q5        U$ UR                  U R	                  USS9/U R                  US-   5      Q5        U$ )z6Load the global fn_name on the stack num_on_stack downr`      Try   r   r{   r   )rc   rd   rf   r
   r   rot_n)rI   fn_name	push_nullnum_on_stackrC   s        r4   load_function_namePyCodegen.load_function_name  s    ))W4MM-(?(?T(?(RSTaL1$45L1$45  MM++G+>ZZq 01 r3   c                      [        U5      $ ! [         aF    [        SUS9U R                  [	        U5      5      /[        S5      Q[        SSS9P[        SUS9Ps $ f = f)NBUILD_TUPLEargr{   CALL_FUNCTION_EXr   UNPACK_SEQUENCE)r   AttributeErrorr   r   r   )rI   ns     r4   r  PyCodegen.rot_n  sz    
	?" 	 #=a800aA a ##51=	
 ##4!< 	s   
 AAAc                     [         R                  S:  d   eU R                  S 5      /[         R                  S:  a  [        SSS94OSQ[	        SS	5      Q[        S
5      P$ )Nr  c                      g rM   r+   r+   r3   r4   rw   $PyCodegen.pop_null.<locals>.<lambda>  s    Tr3   r_   SWAPr{   r  r+   r   FPOP_TOP)rc   rd   r   r   r   rv   s    r4   pop_nullPyCodegen.pop_null  sw     7***,,\:


 ##w. $F24

 "!U+

 y)

 
	
r3   c                 8    U R                  [        S5      5        g )Nr*  )r   r   rv   s    r4   pop_topPyCodegen.pop_top
  s    -i89r3   r   r  c                 4    U R                  [        XS95        g )N)r  )r   r   )rI   r   r  s      r4   call_functionPyCodegen.call_function  s    /KLr3   c                 6    U R                  [        5       5        g rM   )r   r   rv   s    r4   dup_topPyCodegen.dup_top  s    >+,r3   c                 D    U R                  U R                  U5      5        g rM   )r   r   rI   varnames     r4   storePyCodegen.store  s    4,,W56r3   c                 D    U R                  U R                  U5      5        g rM   )r   r   r7  s     r4   
load_derefPyCodegen.load_deref  s    411':;r3   r  codec                   ^ ^^^^ TR                   mT(       d   eT R                  mUUUUU 4S jnU(       al  [        R                  S:  aX  T R	                  U5        TR                  T R                  US-   5      5        TR                  T R                  US-   5      5        O*U" 5         TR                  T R                  US-   5      5        T R                  5         g )Nc                    > T H9  n U TR                  5       ;   d   eTR                  TR                  U 5      5        M;     TR                  [        S[	        T5      S95        TR                  TR                  T5      5        [        R                  S:  a   TR                  TR                  T5      5        [        R                  S:  a%  TR                  [        S5      [        SSS9/5        g TR                  [        SSS95        g )Nr  r  r  r_   MAKE_FUNCTIONSET_FUNCTION_ATTRIBUTE   )	rE   r   r   r   rb   r   rc   rd   rf   )r   r>  r  freevarsrC   rI   s    r4   rg   4PyCodegen.make_function_with_closure.<locals>.gen_fn   s    
  d446666d66s;<   MM,]HNOMM$0067')d44W=>7**?;*+CN 0dKLr3   r  r{   r   )co_freevarsr@   rc   rd   r
   rf   r  re   )rI   r  r>  r  r  rg   rD  rC   s   ```   @@r4   make_function_with_closure$PyCodegen.make_function_with_closure  s     ##x	M 	M, ))W4v&MM$**\A%567MM$**\A%567HMM$**\A%567r3   c                 H   U R                   R                  nUR                  n[        R                  " SSUR
                  5      nUR                  US5      UL a  U R                  USS9$ SU 3nU R                   R                  R                  XQ5      nU R                  USS9$ )zD
Generate a LOAD_GLOBAL instruction to fetch a given python module.
z^.*[.] NTry   
___module_)	rB   rC   global_scoper   r   r,   r   r   install_global_by_id)rI   modrC   rL  r   prefixglobal_names          r4   create_load_python_module#PyCodegen.create_load_python_module?  s     **vviS\\2D$'3.**4T*::dV$ggnn99&F&&{&==r3   r   c                 B    XR                   ;  a  SU R                   U'   gg)z=
Mark a source as a temp variable, so that it can be reused.
N)rA   )rI   r   s     r4   mark_source_tempPyCodegen.mark_source_tempL  s!     &$(DMM&! 'r3   c                 (  ^ ^^ T R                  T R                  US5      5        T R                  R                  R                  n[        5       mUUU 4S jmU H$  nUR                  c  M  T" UR                  5        M&     U Hh  nUR                  (       aC  T R                  U 4S j5        T R                  U5        T R                  [        SS5      5        MW  T R                  U5        Mj     T R                  [        [        U5      S5      5        g)z2Call the generated code function stored in fn_nameTc                 6  > U T;   a  TR                  U 5        g TR                  U 5        [        U [        5      (       a  T" U R                  5        [        U [
        5      (       a3  [        U R                  [        5      (       a  T" U R                  5        g g g rM   )rT  rz   r   r   baser   r)   r   )r   collect_temp_sourceseen_sourcesrI   s    r4   rY  ?PyCodegen.make_call_generated_code.<locals>.collect_temp_source[  s~    %%%f- V$&-00#FKK0&"344f: : $FLL1:4r3   Nc                  n   > T R                  T R                  [        5      T R                  S5      /5      $ )N_as_tensor_fullprec)r   rQ  r   r   rv   s   r4   rw   4PyCodegen.make_call_generated_code.<locals>.<lambda>w  s2    D.. ::5A 112GHr3   r   F)r   r  rB   rC   	graphargsr   r   pass_arg_as_tensorr
   r\   r   rb   )rI   r  r_  r   rY  rZ  s   `   @@r4   make_call_generated_code"PyCodegen.make_call_generated_codeS  s    4227DABGGNN,,	+5<	2* Czz%#CJJ/  C%%"" %%c*""#75#AB%%c*  	/IFGr3   c                     [        U R                  R                  U5      U5      nU R                  U5        U " U5        g rM   )r   rB   import_sourcerT  )rI   module_nameobject_namer   s       r4   ru   PyCodegen.load_import_from  s4    DGG11+>L
 	f%Vr3   c                    [         R                  S:  aP  [        X5      nUS   R                  S:X  d   eUR	                  SU R                  U5      5        [        SUS9US'   U$ [         R                  S:  aY  [        X5      n[         R                  S:  a  SnSnOSnS	nXE   R                  U:X  d   e[        S
US9nUR	                  XW5        U$ U R                  U5      [        SUS9/$ )Nr_   CALLCALL_KWr  r  )r`      PRECALLKW_NAMESr   CALL_FUNCTION_KW)rc   rd   r   opnameinsertr   r   )rI   r   kw_namesr  rC   idxexpected_instkw_names_insts           r4   create_call_function_kw!PyCodegen.create_call_function_kw  s    w&)%;F":$$...MM"d44X>?+I5AF2JM()%;F7* & );%%666.z(KMMM#-M""8,1u=
 	
r3   c                     [        SUS9$ )NDELETE_FASTr   r   r   s     r4   create_deletePyCodegen.create_delete  s    !->>r3   )r@   rE   rD   r9   r?   rF   rH   r8   rA   r<   rB   r>   rG   )NNNNN)F)T)r   )r:   N)@r,   r-   r.   r/   __doc__r   r   nnModuler   rJ   rQ   rV   r\   r
   r   r   r   r   rN   r   r   r   re   r   r   listr   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r  r  r  r+  r.  r0   boolr1  r4  r9  r<  typesCodeTyperG  rQ  r   rT  ra  ru   rw  r{  r2   r+   r3   r4   r6   r6   ?   s    *.*.Q uxx'Q #3-	Q 
Q: @D *A9:Z"x!34
3k 39!

${"3 <; <:; :
= ==K =>+ >>[ >(+ (7K 756< <
8J= =
9*
 :M3 M4 M-7< QR$$"'..$=A$L> >)v )$ )0H 0H 0Hd
T+EV 
0?k ?r3   r6   )8r}  r=   dataclassesr   rc   r  r   typingr   r   torch.nnr   torch.utils._ordered_setr   rJ  r   r	   bytecode_transformationr
   r   r   r   r   r   r   r   r   r   excr   r   r   r   r   r   r   r   r   variables.baser   r   variables.functionsr   r   variables.nn_moduler    variables.tensorr!   r"   r#   r$   variables.torch_functionr%   	dataclassr'   r6   r+   r3   r4   <module>r     s   
   	 
   "  / &   2 H H 1 B 2  C   
h	? h	?r3   