
    %Vji                     b   d 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 ddl	m
Z
 ddlmZmZmZ ddlZddl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m Z  ddl!m"Z"m#Z#m$Z$m%Z% ddlm&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 erddl3m4Z4 ddl5m6Z6 ddl7m8Z8 de9eef         de9eef         de:ddfdZ;de<e         de<e         ddfdZ= G d d          Z>ej?        ddded         fd             Z@ej?        ddded         fd!            ZAej?        ddded         fd"            ZBdS )#a  
Side effect tracking and management for TorchDynamo's compilation system.

This module provides infrastructure for tracking and managing side effects that occur
during symbolic execution, including:

- Tracking mutations to objects, attributes, and variables
- Managing context changes (cell variables, global namespace modifications)
- Handling aliasing and object identity preservation
- Managing stack frame state and local variable changes
- Tracking function calls with side effects

Key classes:
- SideEffects: Main container for tracking all side effects during execution
- MutableSideEffects: Specialization for mutable object tracking
- AttributeMutation/ValueMutation: Track specific types of mutations
- Various specialized side effect classes for different scenarios

The side effect system ensures that mutations performed during symbolic execution
are properly replayed during runtime, maintaining the correctness of compiled code
while enabling optimizations where safe.
    N)	GeneratorMutableMapping)CellType)AnyOptionalTYPE_CHECKINGAutogradFunctionContextVariable   )graph_break_hintsutils	variables)bytecode_from_templatecreate_call_functioncreate_call_methodcreate_instruction)	PyCodegen)SideEffectsErrorunimplemented_v2)GlobalSourceLocalCellSourceLocalSourceSource)is_frozen_dataclassnn_module_new
object_new)AttributeMutationAttributeMutationExistingAttributeMutationNewis_side_effect_safeValueMutationExistingValueMutationNewVariableTracker)FrozenDataClassVariable)OutputGraph)InstructionTranslatorBase)ListVariable	dict_fromdict_to	mro_indexreturnc                     t          |          j        |         }|                    |           |                                 D ]\  }}|                    |||           d S N)type__mro__clearitems__setitem__)r(   r)   r*   
dict_classkvs         T/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/_dynamo/side_effects.py_manual_dict_setitemr7   A   sm     g&y1JW!! . .1w1----. .    	list_fromlist_toc                 p    t                               |           t                               ||            d S r-   )listr0   extend)r9   r:   s     r6   _manual_list_updater>   N   s.    JJwKK#####r8   c                       e Zd ZU dZeeef         ed<   eeeeef         f         ed<   e	e
         ed<   	 	 	 	 	 d\dddeeeef                  deeeeeef         f                  dee	e
                  dee	eee	e         f                           d	eeeed
edef         f                  ddf fdZdeddfdZdeddfdZdedefdZdd dee         fdZd]dZde
defdZde
defdZdefdZdefdZdefdZdedefdZdedededdfdZ	 	 d^deded ed!edef
d"Zd#ededdfd$Zd#edefd%Zd&ededefd'Z d&edededdfd(Z!e"d)e#defd*            Z$dedefd+Z%dedefd,Z&dededefd-Z'dedefd.Z(e)fde
d/ed0e#defd1Z*e*Z+de
d/edefd2Z,d3e-d4e
d5e
d6eee
f         def
d7Z.d4e#de#fd8Z/d9ed:ed;e	e         de
fd<Z0d9ed:ed;e	e         defd=Z1defd>Z2d?ee-         d@e3dAedefdBZ4d?e-de
defdCZ5dDedEe	e         ddfdFZ6	 	 	 	 d_dGZ7d`dJZ8deddfdKZ9defdLZ:de	e         fdMZ;dNe<ddfdOZ=dPd
dQedRddeddf
dSZ>dTeddfdUZ?dNe<ddfdVZ@dadXZAdNe<ddfdYZBdefdZZCdbd[ZD xZES )cSideEffectsah  
    Maintain records of mutations and provide methods to apply them during code generation.

    Handles tracking and applying side effects during PyTorch Dynamo compilation,
    maintaining Python semantics by managing mutations, attribute modifications,
    and other side effects that occur during program execution.

    Key responsibilities:
    - Tracks mutations to Python objects, lists, and dictionaries that need to be
    applied after an FX graph is run.
    - Manages attribute modifications and deletions
    - Handles tensor hooks and backward pass state
    - Tracks cell variable mutations and global variable changes
    - Ensures correct ordering and application of side effects after graph execution

    This ensures that optimized code behaves identically to the original Python code with
    respect to object mutations and other side effects.
    id_to_variablestore_attr_mutations	keepaliveNoutput_graphr%   save_for_backwardtensor_hookszvariables.TensorVariablez!variables.RemovableHandleVariabler+   c                    t                                                       t          j        |          | _        |pi | _        |pi | _        |pg | _        |pg | _        |pi | _	        d| _
        d | _        t                      | _        d S )NF)super__init__weakrefrefoutput_graph_weakrefrA   rB   rC   rE   rF   _has_existing_dict_mutationca_final_callbacks_varset"ignore_mutation_on_these_variables)selfrD   rA   rB   rC   rE   rF   	__class__s          r6   rI   zSideEffects.__init__k   s    . 	$+K$=$=!,2$8$>B!"b!2!8b(.B ,1( ?C# IL///r8   varc                 :    | j                             |           dS )zMutations to this variable will be executed but not not tracked,
        typically used for temporary mutations that are later restored.N)rP   addrQ   rS   s     r6   ignore_mutations_onzSideEffects.ignore_mutations_on   s!     	/33C88888r8   c                 P    || j         v r| j                             |           dS dS )zQRemove a variable from the skip mutation set, restoring normal mutation tracking.N)rP   removerV   s     r6   stop_ignoring_mutations_onz&SideEffects.stop_ignoring_mutations_on   s5    $9993::3????? :9r8   otherc                     t          |t                    sJ | j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r-   )
isinstancer@   rA   rB   rE   rF   )rQ   r[   s     r6   __eq__zSideEffects.__eq__   sh    %----- 5#77 8)U-GG8&%*AA8 !U%77		
r8   c                    | j         |j         k    rB| j                                         }|j                                         }||k    rd| d| S dS | j        |j        k    rB| j                                        }|j                                        }||k    rd| d| S dS | j        |j        k    rdS | j        |j        k    rdS d S )Nzid_to_variable keys: z != zid_to_variable: unknown diffzstore_attr_mutations keys: z"store_attr_mutations: unknown diffrE   rF   )rA   keysrB   rE   rF   )rQ   r[   sk_itvok_itvsk_samok_sams         r6   diffzSideEffects.diff   s    %"666(--//F)..00FCvCC6CCC 21&%*DDD.3355F/4466FIVIIIII77#u'>>>&&%"444!>4r8   c                    |                                  }|J |                     |t          | j                  d | j                                        D             t          | j                  | j        | j	                  S )zCreate a shallow copyNc                 4    i | ]\  }}|t          |          S  )dict).0r4   r5   s      r6   
<dictcomp>z%SideEffects.clone.<locals>.<dictcomp>   s1     " " "#q!477" " "r8   )rD   rA   rB   rC   rE   rF   )
rL   rR   ri   rA   rB   r1   r<   rC   rE   rF   )rQ   rK   s     r6   clonezSideEffects.clone   s    ''))~~ 344" "'+'@'F'F'H'H" " " 4>**"4*  	
 	
 		
r8   itemc                 .    t          |          | j        v S r-   )idrA   rQ   rm   s     r6   __contains__zSideEffects.__contains__   s    $xx4...r8   c                 6    | j         t          |                   S r-   )rA   ro   rp   s     r6   __getitem__zSideEffects.__getitem__   s    "2d88,,r8   c                     |                                  }t          |o+|j        j        j        j        o|j        j        j        j                  S r-   )rL   bool
current_txoutputcurrent_tracerunder_activation_checkpoint#allow_side_effects_under_checkpointrQ   rD   s     r6   *should_allow_side_effects_under_checkpointz6SideEffects.should_allow_side_effects_under_checkpoint   sR    0022 b'.=Yb'.=a
 
 	
r8   c                 t    |                                  }t          |o|j        j        j        j                  S r-   )rL   ru   rv   rw   rx   ,unsafe_allow_externally_visible_side_effectsr{   s     r6   9should_allow_externally_visible_side_effects_in_subtracerzESideEffects.should_allow_externally_visible_side_effects_in_subtracer   s=    0022 k'.=j
 
 	
r8   c                 t    |                                  }t          |o|j        j        j        j                  S r-   )rL   ru   rv   rw   rx   is_reconstructing_generatorr{   s     r6   r   z'SideEffects.is_reconstructing_generator   s=    0022 Z'.=Y
 
 	
r8   c                 "   ddl m} t          ||          rdS |                                 rdS |                                 rdS |                                 rt          d          t          |j                  st          dddg            d	S )
Nr   r	   TzCannot reconstruct a generator with variable mutations. Dynamo needs to fully exhaust the generator, which may cause unintended variable modifications.zOHigherOrderOperator: Mutating a variable not in the current scope (SideEffects) This is not supported.gb_typecontextexplanationhintsF)
torch._dynamo.variables.miscr
   r]   r   r|   r   r   r    mutation_typer   )rQ   rm   r
   s      r6   check_allowed_side_effectz%SideEffects.check_allowed_side_effect   s    PPPPPP d;<< 	4IIKK 	4::<< 	4++-- 	 #5  
 #4#566 	i4	    ur8   namevaluec                     |                      |          sJ |                     |           || j        vr
i | j        |<   || j        |         |<   d S r-   )is_attribute_mutationr   rB   )rQ   rm   r   r   s       r6   
store_attrzSideEffects.store_attr  se     ))$/////&&t,,,t000.0D%d+05!$'---r8   F
deleted_okcheckc                     |r|                      |          sJ | j        |         |         }|s?t          |t          j                  r%t          dd| d| dg t          j                   |S )Nz$Attempted to read a deleted variablezitem: z, name: r   r   )r   rB   r]   r   DeletedVariabler   r   
USER_ERROR)rQ   rm   r   r   r   results         r6   	load_attrzSideEffects.load_attr  s      	4--d33333*406 	j1JKK 	>555t555)45	    r8   cellvarc                    |                                 r%t          dd| d| dg t          j                   t	          |t
          j                  sJ t	          |t
          j                  sJ |                     |d|           d S )NzWrite to immutable cellz	cellvar: z	, value: zFDynamo doesn't support writing to immutable/sourceless cell variables.r   cell_contents)	is_immutabler   r   	DIFFICULTr]   r   CellVariabler#   r   )rQ   r   r   s      r6   
store_cellzSideEffects.store_cell(  s    !! 	1=G==e==d4)34	    '9#9:::::%!:;;;;;%88888r8   c                    t          |t          j                  sJ |                     |d          r|                     |dd          S |j        r|j        S t          dt          |          dg t          j	                   d S )Nr   F)r   zRead uninitialized cellzBAttempted to read a cell variable that has not been populated yet.r   )
r]   r   r   has_pending_mutation_of_attrr   pre_existing_contentsr   strr   r   )rQ   r   s     r6   	load_cellzSideEffects.load_cell4  s    '9#9:::::,,WoFF 	I>>'?%>HHH( 	100-LL\1%01		
 	
 	
 	
 	
 	
r8   gvarc                 f    t          |t          j                  sJ |                     ||          S r-   )r]   r   r#   r   )rQ   r   r   s      r6   load_globalzSideEffects.load_globalA  s/    $	 9:::::~~dD)))r8   c                     t          |t          j                  sJ t          |t          j                  sJ |                     |||           d S r-   )r]   r   r#   r   )rQ   r   r   r   s       r6   store_globalzSideEffects.store_globalE  sR     $	 9:::::%!:;;;;;dE*****r8   clsc           
          t          j        | dd           t          j        t          j        t
          j        t          j        t          j        t          j        t          j        t          j        t          j        f	v S )N__getattribute__)inspectgetattr_staticobjectr   ri   rO   	frozensetintr   r<   tupleBaseException)r   s    r6   "cls_supports_mutation_side_effectsz.SideEffects.cls_supports_mutation_side_effectsL  s[    %c+=tDD#! &  !"*
I
 

 
	
r8   c                 6    t          |j        t                    S r-   )r]   r   r   rp   s     r6   r   z!SideEffects.is_attribute_mutationZ  s    $,.?@@@r8   c                 z    |                      |          o&t          | j                            |                    S r-   )r   ru   rB   getrp   s     r6   has_pending_mutationz SideEffects.has_pending_mutation]  s=    ))$// 
D%))$//5
 5
 	
r8   c                 f    |                      |          o|| j                            |d          v S )Nrh   )r   rB   r   )rQ   rm   r   s      r6   r   z(SideEffects.has_pending_mutation_of_attrb  s=    ))
 
 >d/33D"===	>r8   c                 8   |                                 rdS t          |j        t          t          f          rdS t          |t
          j                  r|| j        v p|                    |           S | 	                    |          r	|| j        v S |j        j
        S )NFT)r   r]   r   r   r"   r   UserDefinedObjectVariablerB   is_underlying_vt_modifiedr   is_modifiedrp   s     r6   r   zSideEffects.is_modifiedg  s     	5d(+?AQ*RSS 	4dI?@@ 	444 8V8V9 9  %%d++ 	54444!--r8   variablemutation_type_clsc           
      &   t          |          | j        v r:t          | d|j         d| j        t          |                   j         d           |            |_        || j        t          |          <   | j                            |           |S )z7Start tracking an existing or new variable for mutationz is already tracked for mutation. This could be because you are not using VariableBuilder to construct the variable tracker. Source of new object: z'. Source of previously tracked object: .)ro   rA   AssertionErrorsourcer   rC   append)rQ   rm   r   r   s       r6   
_track_objzSideEffects._track_objx  s     d88t***  ` ` *2` ` 9=8KBtHH8U8\	` ` `   "3!2!4!4(0BtHH%d###r8   c                 <    |                      ||t                    S )N)r   )r   r   )rQ   rm   r   s      r6   track_object_existingz!SideEffects.track_object_existing  s(    
 7  
 
 	
r8   
cls_sourceuser_clsvariable_clsoptionsc                 ~   |t           j        j        j        u rLt	          j        d          5  t           j                                        }d d d            n# 1 swxY w Y   nt          |          } ||fdt          |          i|}|| j	        t          |          <   | j                            |           |S )NT)recordr   )torchautogradfunctionFunctionCtxwarningscatch_warningsFunctionr   r   rA   ro   rC   r   )rQ   r   r   r   r   objr   s          r6   track_object_newzSideEffects.track_object_new  s    u~.:::(555 0 0n--//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X&&C<
 
.z::
 
 

 (0BsGG$c"""s   AA Ac                 x   ddl m} ddlm} ddlm} ddlm} t          j	        }t          ||          r|                    |          r|}nPt          |d          rt          |d          r ||          s|}n!t          |t          j        j                  rt          j        }nt          |t"          t$          j        f          rt          j        }nt          |t*          t,          f          rt          j        }nt          |t0                    rt          j        }n|t          |t4                    rt          j        }nZt          |t8                    rt          j        }n8t=          |          rt>          }n!t          |t@                    rt          j!        }t          |t          j	                  sJ |S )	Nr   )TorchFunctionModer   )GenericContextWrappingVariable)TorchFunctionModeVariable)is_forbidden_context_manager	__enter____exit__)"torch.overridesr   variables.ctx_managerr   variables.torch_functionr   variables.user_definedr   r   r   
issubclass is_supported_torch_function_modehasattrr   nnModuleUnspecializedNNModuleVariableri   collectionsOrderedDictUserDefinedDictVariablerO   r   UserDefinedSetVariabler   UserDefinedTupleVariabler<   UserDefinedListVariabler   MutableMappingVariabler   r$   r   "UserDefinedExceptionObjectVariable)rQ   r   r   r   r   r   r   s          r6   get_variable_clszSideEffects.get_variable_cls  s   555555IIIIIIGGGGGGHHHHHH / 	 '
 
 	H'HHRR	H 5LLHk**	H*--	H 10::	H
 :LL%(/22 	H$BLL4)@"ABB 	H$<LL3	"233 	H$;LL%(( 		H$=LL$'' 	H$<LL.11 	H$;LL ** 	H2LL-00 	H$GL,	(KLLLLLr8   base_cls_vtcls_vt	init_argsc                    |j         }t          |t          j        j                  rt          |          }nt          |t          j                  r|j	        }n4t          |t          j
                  r|j         }nt          d|           t          j
                            |j                  sJ |                    |          }|S )NzUnexpected base_cls_vt )r   r   r   r   r   r   r]   r   BuiltinVariablefnUserDefinedClassVariableRuntimeErroris_supported_new_method__new__)rQ   r   r   r   r   r   base_clss          r6   get_example_valuezSideEffects.get_example_value  s     <h00 	-))CC+y'@AA L&>K)KLL L&,"#J[#J#JKKK5MM      ""8,,C
r8   c           	          |j         }|j        }|                     |          }|                     |||          } |||j         ||t	          |                    }|| j        t          |          <   | j                            |           |S )aM  
        Creates a UserDefinedObjectVariable (or its subclass) variable tracker
        and mark it for attribute mutation tracking.

        Also records the variable trackers to call __new__ method on
        reconstruction. Roughly, the reconstruction looks like this
            base_cls_vt.__new__(user_cls, *init_args)
        )r   r   r   r   )	r   r   r   r   r   rA   ro   rC   r   )	rQ   r   r   r   r   r   r   r   r   s	            r6   track_new_user_defined_objectz)SideEffects.track_new_user_defined_object  s     ]
<,,X66$$[&)DD<}#.z::
 
 
 (0BsGG$c"""r8   c                     t                      }t          j        t                                }|| j        t          |          <   | j                            |           |S )Nr   )r   r   r   r   rA   ro   rC   r   )rQ   r   r   s      r6   track_cell_newzSideEffects.track_cell_new  s]     hh).00
 
 
 (0BsGG$c"""r8   r   cellcontentsc                     t          j        |d nt                      ||          }|| j        t	          |          <   | j                            |           |S )N)r   r   r   )r   r   r   rA   ro   rC   r   )rQ   r   r  r  r   s        r6   track_cell_existingzSideEffects.track_cell_existing  se     ) #).$$6O6Q6Q"*
 
 
 )1BtHH%d###r8   c                     t          j        t                      |          }|| j        t	          |          <   | j                            |           |S )N)r   r   )r   NewGlobalVariabler   rA   ro   rC   r   )rQ   r   rm   r   s       r6   track_global_existingz!SideEffects.track_global_existing,  sU    .355
 
 
 )1BtHH%d###r8   ctxargsc                 v    t          |t          j                  sJ | j                            ||f           d S r-   )r]   r   r
   rE   r   )rQ   r	  r
  s      r6   track_save_for_backwardz#SideEffects.track_save_for_backward5  s>     #yHIIIII%%sDk22222r8   c                     |j         D ]c}t          |          }|j        |         }|| j        vr<t          |t          j        t          j        f          r|                     ||           dd S r-   )rC   ro   rA   r]   r   TensorVariableSymNodeVariabler   )rQ   r[   
other_itemother_idother_variables        r6   -track_runahead_tensor_and_symvar_side_effectsz9SideEffects.track_runahead_tensor_and_symvar_side_effects;  s      / 	G 	GJ*~~H"1(;Nt222z!99;T U8 82 **:~FFF	G 	Gr8   txr&   c                 8    t                      t                      dt          dd f fddt          dt          ffdd  j                                        D             }g }|}|*|                    |j        |j        g           |j        }|*t          j	        |||j
        j         j        gz              fd j                                        D              _        fd j                                        D              _        d S )NrS   r+   c                     | v rd S                      |            t          | j        t                    r                     |            | j        v r"t          j        j        |                     d S d S r-   )rU   r]   r   r   rB   r#   visit)rS   live_new_objectsrQ   r  visiteds    r6   r  z0SideEffects.prune_dead_object_new.<locals>.visitN  s    g~~KK#+-ABB * $$S))) d///%-c2     0/r8   c                 D    t          | j        t                    r| v S dS NTr]   r   r   )rS   r  s    r6   is_livez2SideEffects.prune_dead_object_new.<locals>.is_live^  s*    #+-ABB /...4r8   c                 F    g | ]}t          |j        t                    |S rh   r  )rj   rS   s     r6   
<listcomp>z5SideEffects.prune_dead_object_new.<locals>.<listcomp>c  s<     
 
 
c/1EFF

 
 
r8   c                 2    i | ]\  }} |          ||S rh   rh   rj   r4   r5   r  s      r6   rk   z5SideEffects.prune_dead_object_new.<locals>.<dictcomp>  s<     
 
 
QGGAJJ
q
 
 
r8   c                 2    i | ]\  }} |          ||S rh   rh   r!  s      r6   rk   z5SideEffects.prune_dead_object_new.<locals>.<dictcomp>  s<     %
 %
 %
Q''!**%
q%
 %
 %
r8   )rO   r#   ru   rA   valuesr=   stacksymbolic_localsparentr  rw   backward_staterF   r1   rB   )	rQ   r  pre_existing_varsinit_live_varscur_txr  r  r  r  s	   `    @@@@r6   prune_dead_object_newz!SideEffects.prune_dead_object_newI  s   (+14	 	4 	 	 	 	 	 	 	 	 	 	 	T 	 	 	 	 	 	

 
*1133
 
 
 68 !!6<1G"HIII]F   	!	(!		
 		
 		
 
 
 
 
!06688
 
 
%
 %
 %
 %
!6<<>>%
 %
 %
!!!r8   c                 "   || j         v rd S |                     |           t          |j        t                    rd|j        _        |j        r=t          |t          j                  r%t          |t          j	                  sd| _
        d S d S d S d S r  )rP   r   r]   r   r!   r   r   r   ConstDictVariableSetVariablerM   rV   s     r6   mutationzSideEffects.mutation  s    $999F&&s+++c')>?? 	1,0C)J	43	 ;<<	4 sI$9::	4
 04D,,,	4 	4 	4 	4 	4 	4r8   c                     | j         S r-   )rM   rQ   s    r6   has_existing_dict_mutationz&SideEffects.has_existing_dict_mutation  s    //r8   c                 N      fd j                                         D             S )Nc                 >    g | ]}                     |          |S rh   )r   )rj   rS   rQ   s     r6   r  z2SideEffects._get_modified_vars.<locals>.<listcomp>  s-    UUUt?O?OPS?T?TUUUUr8   )rA   r#  r1  s   `r6   _get_modified_varszSideEffects._get_modified_vars  s,    UUUUt299;;UUUUr8   cgc           	      P   |                                  D ]t          j        t                    s
j        J 't          t
          j                  rj        p                    fd           	                    t          dd                                                    t          j                           _        j        t          j                  _        t          t
          j                  rvt          t
          j        j                  rU d                                                                           t          j                           _        it          t
          j                  rt)          dddg            t          t
          j                  rdfd
}                    |           n                    fd           j        j        J  j        j                   j        D ]} |           	                    t          dt1          j                  z   d                                                    t          j                           _        | j        D ]z\  }} |j                                       d           |D ]} |           	                    g t7          t1          |                    t9          d                     {d S )Nc                  D                          t          j        d          S )N	make_cellload_import_fromr   __name__r6  s   r6   <lambda>z3SideEffects.codegen_save_tempvars.<locals>.<lambda>       3 3ENK P P r8   r   Fallow_cachez<AutogradFunctionContextVariable escaped Dynamo-traced regionr   zAWe cannot reconstruct a torch.autograd.Function's context object.r   r+   c                      j         J   j                                                              d          g           d S )Nr   )r   extend_outputcreate_load_attrr6  rS   s   r6   load_new_methodz:SideEffects.codegen_save_tempvars.<locals>.load_new_method  sN    ":::3?+++(("*=*=i*H*H)IJJJJJr8   c                  D                          t          j        d          S )Nr   r:  r=  s   r6   r>  z3SideEffects.codegen_save_tempvars.<locals>.<lambda>  s     3 3ENL Q Q r8   r   rE   POP_TOPr+   N)r5  r]   r   r   r   r   r   
local_nameadd_push_nullrC  r   	add_cacher   tempvarsr   r  torch_functionTensorWithTFOverrideVariable	clear_tosr
   r   r   r   r   lenrE   load_methodr   r   )rQ   r6  rF  argr	  r
  rS   s    `    @r6   codegen_save_tempvarsz!SideEffects.codegen_save_tempvars  s    **,, J	; J	;Cc/1EFF z---#y566 E;
 >)$$PPPP   $$%9!U%C%CDDDLL%%%!,R[-=!>!>CJJZ'!0!@!@CJC!9:: 7; 1N  	? Bs....LL%%% LLNNN!,R[-=!>!>CJC!JKK !; Z c	     c9#FGG K K K K K K K
 $$_5555$$QQQQ   (3???3$/000 =  CBsGGGG   !5a#cm:L:L6Le!T!TUUUS!!!(S)9::

/ 
	 
	ICBszNNNNN.///  3'D		22&y11   
	 
	r8   tensorhookhandlec                    t          |t          j                  sJ t          |t          j                  sJ t          |t          j                  r|                                sJ t          t          j        |          sJ t          | j
                                                  }|| j
        v r|dz  }|| j
        v ||||f| j
        |<   |j        rJ ||_        d S )Nr   )r]   r   r  r#   RemovableHandleVariable
is_mutabler   r   TensorrQ  rF   r`   idx)rQ   rU  rV  rW  r   r\  s         r6   register_hookzSideEffects.register_hook  s     &)":;;;;;$	 9:::::vy@AA	
!!##	
 	
$ u|T*****$#((**++T&&&1HC T&&&"($!=#:~


r8   r\  c                     | j         |= d S r-   )rF   )rQ   r\  s     r6   remove_hookzSideEffects.remove_hook  s    c"""r8   c                 0   | j                                         D ]x\  }}j        s
J d            dfd}                    |            |                               t          dd                                         |           yd S )Nz4Hooks on non input tensors NYI - should not get herer+   c                  p                                                                      g           d S r-   )rC  rD  )r6  r   rU  s   r6   gen_fnz)SideEffects.codegen_hooks.<locals>.gen_fnD  s;    6


  ""5"5d";";!<=====r8   r   FrI  )rF   r#  r   rK  rC  r   rL  )rQ   r6  rV  rW  rb  r   rU  s    `   @@r6   codegen_hookszSideEffects.codegen_hooks  s     %%''3	! 3	! 
F =XX"XXX=> > > > > > > > V$$$BtHHH1!U;;<<< LL    g3	! 3	!r8   variables.ListVariablec                 p    ddl m} | j        #t          j        g  |                      | _        | j        S )Nr   )r"   r   )variables.baser"   rN   r   r'   )rQ   r"   s     r6   get_ca_final_callbacks_varz&SideEffects.get_ca_final_callbacks_varP  sQ    444444&.*3*@"2"2"4"4+ + +D' **r8   c           	         g }|                                  D ]t          t          j                  r d            j                                                           d                               d           t          dd          g           |                    t          d          g           t          t          j	        j
                  rt          j        t          j                  rj        j        t          ddd	d
g            j                                       d            d           |                    g t!          d          t          d                      j                                       d           |                    g t!          d          t          d                     t          t          j                  r                                r j                                       d            d           j        r% j                                       d           |                    g t!          d          t          d                     j        r3|                    g t!          d          t          d                     t          t          j        j                  r(                    fd                               dd           t          j                                        }j        dxx         |fz  cc<                       t          d|                                         fd                               j                                       t          dt;          j                                                           dd                               t          d                     t          t          j                  r`j        Y| j         v rN| !                              } |           |                    "                    j                  g           | #                              r?t          t          j$                  r| %                    j&                  ri }tN          j(        j)        D ]#}j*        j+        ,                                ||<   $	 t[          j                  j.        /                    t`          j1                  }nA# td          $ r4 t[          j                  j.        /                    tf                    }Y nw xY w                    t          d|          t          d|d                   g            j                                       t          d|d                   g            j&        d                               t          d|d                   g           ti          tN          |          }|                    g |t          d                     n t          t          j5                  r| %                    j6                  ri }tn          j(        j)        D ]#}j*        j+        ,                                ||<   $ j                                       t          d|d                   g            j6        d                               t          d|d                   g           ti          tn          |          }|                    g |t          d                     tq          | j         9                    i           :                                          D ]
\  }}	t          t          j;                  rlj*        j+        <                    |            |	           t          j        tz                    sJ |                    t          d|          g           t          |	t          j>                  rt          j?        t                    rst          t          d d           |          rTj*        j+        <                    |            j                   |                    t          d!|          g           5t          t          jC                  rD                    |          r                    fd"            j                    t          j        |                      |	           |                    g t          d#d          t          d                     t          t          jC                  rF                                rG                    d$d%                               d&            j                    t          j        |                      |	           |                    g t!          d#          t          d                     j*        j+        <                    |            |	                       |                    t          d'|          g           
t          t          jH                  rkt          j/                  D ]T}
                    fd(            j                                       dd           J                                 U_t          t          jK                  rd+fd*}                    |            L                    jM        N                                                     |                    g t          dd          t          d                      t          t[                              tq          |          D ]}                    |           d S ),NFr@  BUILD_SLICE   )rS  STORE_SUBSCRz1Side effect on existing deque with limited maxlenr   r   z*Don't use a deque with `maxlen` specified.r   r=   r   rH  r0   r   updatec                  D                          t          j        d          S )Nget_torch_function_mode_stackr:  r=  s   r6   r>  z4SideEffects.codegen_update_mutated.<locals>.<lambda>      B//(G  r8   co_varnames
STORE_FAST)argvalc                  D                          t          j        d          S )Nset_torch_function_mode_stackr:  r=  s   r6   r>  z4SideEffects.codegen_update_mutated.<locals>.<lambda>  ro  r8   
BUILD_LIST
LOAD_CONSTr*   r)   r(   )varname_mapr:   r9   STORE_GLOBALr   DELETE_ATTRc                  D                          t          j        d          S )N object_setattr_ignore_descriptorr:  r=  s   r6   r>  z4SideEffects.codegen_update_mutated.<locals>.<lambda>V  s    B$7$7 %0R% % r8      builtinsr   __setattr__
STORE_ATTRc                  D                          t          j        d          S )N	iter_nextr:  r=  s   r6   r>  z4SideEffects.codegen_update_mutated.<locals>.<lambda>x  r?  r8   r+   c                  R      j                                         d           d S )Nsetstate)r   r   rE  s   r6   rb  z2SideEffects.codegen_update_mutated.<locals>.gen_fn  s*    BszNNNLL,,,,,r8   rI  )Pr5  r]   r   r'   r   rC  create_load_constr   r   listsDequeVariablemaxlenConstantVariabler   r   rR  r   r-  has_new_itemsshould_reconstruct_allrN  TorchFunctionModeStackVariablerK  call_functionget_prev_stack_var_namecode_optionsappend_outputforeachsymbolic_stackrQ  r   rJ  rB   r   create_store_derefr   r   r   _dict_vtr7   __code__rp  r  rw   new_varr.   r/   indexr   r   
ValueErrorri   r   r   _list_vtr>   reversedr   r1   r  update_co_namesr   r   r   r   r   getattrr   should_skip_descriptor_setterr   needs_slow_setattrr;  ListIteratorVariablerangepop_topRandomVariable
wrap_staterandomgetstater   )rQ   r6  suffixesr   contents_varrw  r*   dict_update_instslist_update_instsr   _rb  suffixrS   s    `           @r6   codegen_update_mutatedz"SideEffects.codegen_update_mutatedZ  s   **,, q	0 q	0C#y566 p03E****3:  ,,T22,,T22*=a@@@   !3N!C!C DEEEEC!>?? d0 sz9+EFF
(0$ S "$<H	    3:x(((3E****+A..*955   3:w'''+A..*955    C!<== 0 $$&& BszNNNNN8,,,Bs....1 03:w///OO/22.y99   1  !!3A!6!6 29 = =   Y-L  \0        
   E*** /GGII...4'9...  !3L!N!N!NOOO        

3-...  &|S=O9P9PQQQ     E***  !3I!>!>????C!788 B0S^=W $333#'>>##6#6LB|$$$OOR%:%:3>%J%J$KLLL++C00 z0:  Y&&s|44Y
 #%K 4 = I C C,.EL,@,@,B,BD))H$(OO$;$A$A'3% %		 & H H H$(OO$;$A$A$$G$G			H $$.|INNN. ,[5M     BszNNN$$. ,[5K     Bs|7777$$. ,[5M     )?,+) ) )% OO..y99     :  $&&s|44$
 #%K 3 < H C C,.EL,@,@,B,BD))BszNNN$$. ,[5K     Bs|7777$$. ,[5M     )?+) ) )% OO..y99  . $,-11#r::@@BB$ $ 5Y 5YKD% "#y'BCC 2Y44T:::5			)#*lCCCCC /tLLLM    $E9+DEE +Y%-/H  %gc7D&A&A4HH EL88>>>BszNNN$OO!3M$!O!O!O P   $Y@  "Y;;DAA"Y ((     
 3:95d;;<<<5			 !5a!?!? 29 = =    #3	(KLLY2244Y
 ++JAAA}5553:95d;;<<<5			 S033S5G	5R5RS    44T:::5			3 );LQU)V)V)V(WXXXXk5Yl C!?@@ 0sy)) ! !A$$PPPP   BszNNN$$Q...JJLLLL! C!9:: 0- - - - - - -   (((3>>#*"5"5"7"788999-a77*955    %T#YY/// x(( 	% 	%FV$$$$	% 	%s   "6U;VVc                     t          t          | j        | j                                                            p| j        p| j        p| j         S r-   )anymapr   rA   r#  rF   rE   r1  s    r6   is_emptyzSideEffects.is_empty  sV    D$d&9&@&@&B&BCCDD ! !%!  	
 	
r8   c                 j    | j                                          | j                                         d S r-   )rC   r0   rA   r1  s    r6   r0   zSideEffects.clear  s1    !!#####r8   )NNNNN)r+   r@   )FF)r[   r@   r+   N)r  r&   r+   N)r+   rd  rI  )Fr<  
__module____qualname____doc__ri   r   r#   __annotations__r   r<   r   r   r   r
   rI   rW   rZ   r   ru   r^   re   rl   rq   rs   r|   r   r   r   r   r   r   r   r   r   staticmethodr.   r   r   r   r   r   r!   r   track_mutabler   r   r   r   r   r   r  r   r  r  r  r  r+  r/  r2  r5  r   rT  r]  r_  rc  rg  r  r  r0   __classcell__)rR   s   @r6   r@   r@   S   s         & o-....S/5I0JJKKKKCy
 @D )-  +,N ,N#,N !c?&:!;<,N '$sO';"<<=
	,N DI&,N $6_8MMNO
,N .#7

,N, 
-,N ,N ,N ,N ,N ,N\9 94 9 9 9 9
@o @$ @ @ @ @

F 
t 
 
 
 
- HSM    ,
 
 
 
/ / / / / /- - - - - -
D 
 
 
 

4 
 
 
 

T 
 
 
 
o $    :6#6+.67F6	6 6 6 6 !   	
  
   &
9/ 
9/ 
9d 
9 
9 
9 
9
 
_ 
 
 
 
* *s * * * * *+#++.+7F+	+ + + + 
 
 
 
 
 \
A/ Ad A A A A
 
T 
 
 
 

> > >PT > > > >
. .D . . . .* #8	  "  	
 
   * M	
	
 "	
 
		
 	
 	
 	
  	
 c3h 
   *% %$ % % % %N$   (	
 
   >$   (	
 
   <			 	 	 	v&.6BQ	   F # /    3"3*.*?3	3 3 3 3G"G	G G G GC
 C
 C
 C
J4O 4 4 4 4 40D 0 0 0 0VD$9 V V V V]	 ]d ] ] ] ]~*  4	
  
   ,#s #t # # # #4!	 4!d 4! 4! 4! 4!l+ + + +w% w%t w% w% w% w%r	
$ 
 
 
 
$ $ $ $ $ $ $ $r8   r@   r  r&   )NNNc              #      K   | j         j        j        sJ | j         j        j        }	 d| j         j        _        d V  || j         j        _        d S # || j         j        _        w xY wr  )rw   rx   ry   rz   r  orig_vals     r6   rz   rz     sq       9#????y'KHPGK	 DGO	 DDDx	 DOOOOs   A A#c              #      K   | j         j        j        }	 d| j         j        _        d V  || j         j        _        d S # || j         j        _        w xY wr  )rw   rx   r~   r  s     r6   2allow_externally_visible_side_effects_in_subtracerr    s^       y'THYPT	 MPX	 MMMPX	 MXXXX	   = Ac              #      K   | j         j        j        }	 d| j         j        _        d V  || j         j        _        d S # || j         j        _        w xY wr  )rw   rx   r   r  s     r6   "disallow_side_effects_in_generatorr    s]       y'CHH?C	 <?G	 <<<x	 <GGGGr  )Cr  r   
contextlibr   r   rJ   collections.abcr   r   typesr   typingr   r   r   torch.nnr   r   r
   r   r   r   r   bytecode_transformationr   r   r   r   codegenr   excr   r   r   r   r   r   r   r   r   r   rf  r   r   r   r    r!   r"   r#   r   r$   torch._dynamo.output_graphr%   torch._dynamo.symbolic_convertr&   torch._dynamo.variables.listsr'   ri   r   r7   r<   r>   r@   contextmanagerrz   r  r  rh   r8   r6   <module>r     s   .            5 5 5 5 5 5 5 5       / / / / / / / / / /  H H H H H H 1 1 1 1 1 1 1 1 1 1                  3 3 3 3 3 3 3 3 F F F F F F F F F F F F A A A A A A A A A A                  < ; ; ; ; ;  ;666666HHHHHH::::::
.CH~
.(,S#X
.CF
.	
. 
. 
. 
.$49 $tCy $T $ $ $ $
J$ J$ J$ J$ J$ J$ J$ J$Z" 	P#	P 	P 	P 	P 	P Y#Y Y Y Y Y H#H H H H H H Hr8   