
    9i                     P   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Jr  SSK	J
r
  SSKJrJrJr  SSKrSSKJr  SSKJrJrJr  SS	KJrJrJrJr  SS
K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'J(r(  SSK)J*r*J+r+J,r,J-r-J.r.J/r/J0r0  SSK1J2r2  \(       a  SSK3J4r4  SSK5J6r6  SSK7J8r8  S\9\\4   S\9\\4   S\:SS4S jr;S\<\   S\<\   SS4S jr= " S S5      r>\R~                  SSS\S   4S  j5       r@\R~                  SSS\S   4S! j5       rA\R~                  SSS\S   4S" j5       rBg)#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                     [        U5      R                  U   nUR                  U5        U R                  5        H  u  pEUR	                  XU5        M     g N)type__mro__clearitems__setitem__)r(   r)   r*   
dict_classkvs         Z/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/_dynamo/side_effects.py_manual_dict_setitemr7   A   sI     g&&y1JW!w1- "    	list_fromlist_toc                 X    [         R                  U5        [         R                  X5        g r-   )listr0   extend)r9   r:   s     r6   _manual_list_updater>   N   s    JJwKK#r8   c                     ^  \ rS rSr% Sr\\\4   \S'   \\\\	\4   4   \S'   \
\   \S'        SZSSS\\\\4      S\\\\\	\4   4      S\\
\      S	\\
\\\
\   4         S
\\\\S\S\	4   4      SS4U 4S jjjrS\SS4S jrS\SS4S jrS\S\4S jrSS S\\	   4S jrS[S jrS\S\4S jrS\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rS\S\	S\SS4S jr  S\S\S\	S \S!\S\4
S" jjrS#\S\SS4S$ jrS#\S\4S% jr S&\S\	S\4S' jr!S&\S\	S\SS4S( jr"\#S)\$S\4S* j5       r%S\S\4S+ jr&S\S\4S, jr'S\S\	S\4S- jr(S\S\4S. jr)\*4S\S/\S0\$S\4S1 jjr+\+r,S\S/\S\4S2 jr-S3\.S4\S5\S6\\	\4   S\4
S7 jr/S4\$S\$4S8 jr0S9\S:\S;\
\   S\4S< jr1S9\S:\S;\
\   S\4S= jr2S\4S> jr3S?\\.   S@\4SA\S\4SB jr5S?\.S\S\4SC jr6SD\SE\
\   SS4SF jr7    S]SG jr8S^SH jr9S\SS4SI jr:S\4SJ jr;S\
\   4SK jr<SL\=SS4SM jr>SNSSO\SPSS\	SS4
SQ jr?SR\SS4SS jr@SL\=SS4ST jrAS_SU jrBSL\=SS4SV jrCS\4SW jrDS`SX jrESYrFU =rG$ )aSideEffectsS   a0  
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                 2  > [         TU ]  5         [        R                  " U5      U l        U=(       d    0 U l        U=(       d    0 U l        U=(       d    / U l        U=(       d    / U l        U=(       d    0 U l	        SU l
        S U l        [        5       U l        g )NF)super__init__weakrefrefoutput_graph_weakrefrB   rC   rD   rF   rG   _has_existing_dict_mutationca_final_callbacks_varset"ignore_mutation_on_these_variables)selfrE   rB   rC   rD   rF   rG   	__class__s          r6   rJ   SideEffects.__init__k   s    . 	$+KK$=!,2$8$>B!"b!2!8b(.B ,1( ?C# IL/r8   varc                 :    U R                   R                  U5        g)zMutations to this variable will be executed but not not tracked,
typically used for temporary mutations that are later restored.N)rQ   addrR   rU   s     r6   ignore_mutations_onSideEffects.ignore_mutations_on   s     	//33C8r8   c                 Z    XR                   ;   a  U R                   R                  U5        gg)zQRemove a variable from the skip mutation set, restoring normal mutation tracking.N)rQ   removerX   s     r6   stop_ignoring_mutations_on&SideEffects.stop_ignoring_mutations_on   s'    99933::3? :r8   otherc                 "   [        U[        5      (       d   eU R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R
                  UR
                  :H  $ r-   )
isinstancer@   rB   rC   rF   rG   )rR   r_   s     r6   __eq__SideEffects.__eq__   s}    %---- 5#7#77 8))U-G-GG8&&%*A*AA8 !!U%7%77		
r8   c                    U R                   UR                   :w  aB  U R                   R                  5       nUR                   R                  5       nX#:w  a  SU SU 3$ gU R                  UR                  :w  aB  U R                  R                  5       nUR                  R                  5       nXE:w  a  SU SU 3$ gU R                  UR                  :w  a  gU R                  UR                  :w  a  gg )Nzid_to_variable keys: z != zid_to_variable: unknown diffzstore_attr_mutations keys: z"store_attr_mutations: unknown diffrF   rG   )rB   keysrC   rF   rG   )rR   r_   sk_itvok_itvsk_samok_sams         r6   diffSideEffects.diff   s    %"6"66((--/F))..0F.vhd6(CC 2&&%*D*DD..335F//446F4VHDII7##u'>'>>&%"4"44!r8   c                 B   U R                  5       nUc   eU R                  U[        U R                  5      U R                  R                  5        VVs0 s H  u  p#U[        U5      _M     snn[        U R                  5      U R                  U R                  S9$ s  snnf )zCreate a shallow copy)rE   rB   rC   rD   rF   rG   )
rM   rS   dictrB   rC   r1   r<   rD   rF   rG   )rR   rL   r4   r5   s       r6   cloneSideEffects.clone   s    '')~~ 3 34'+'@'@'F'F'H"'Htq47
'H" 4>>*"44**  	
 		
"s   Bitemc                 2    [        U5      U R                  ;   $ r-   )idrB   rR   rp   s     r6   __contains__SideEffects.__contains__   s    $x4....r8   c                 2    U R                   [        U5         $ r-   )rB   rr   rs   s     r6   __getitem__SideEffects.__getitem__   s    ""2d8,,r8   c                     U R                  5       n[        U=(       a[    UR                  R                  R                  R
                  =(       a*    UR                  R                  R                  R                  5      $ r-   )rM   bool
current_txoutputcurrent_tracerunder_activation_checkpoint#allow_side_effects_under_checkpointrR   rE   s     r6   *should_allow_side_effects_under_checkpoint6SideEffects.should_allow_side_effects_under_checkpoint   sb    002 b''..==YYb''..==aa
 	
r8   c                     U R                  5       n[        U=(       a*    UR                  R                  R                  R
                  5      $ r-   )rM   rz   r{   r|   r}   ,unsafe_allow_externally_visible_side_effectsr   s     r6   9should_allow_externally_visible_side_effects_in_subtracerESideEffects.should_allow_externally_visible_side_effects_in_subtracer   sA    002 k''..==jj
 	
r8   c                     U R                  5       n[        U=(       a*    UR                  R                  R                  R
                  5      $ r-   )rM   rz   r{   r|   r}   is_reconstructing_generatorr   s     r6   r   'SideEffects.is_reconstructing_generator   sA    002 Z''..==YY
 	
r8   c                    SSK Jn  [        X5      (       a  gU R                  5       (       a  gU R	                  5       (       a  gU R                  5       (       a  [        S5      e[        UR                  5      (       d  [        SSS/ S9  g	)
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
   ra   r   r   r   r   r    mutation_typer   )rR   rp   r
   s      r6   check_allowed_side_effect%SideEffects.check_allowed_side_effect   s    P d<<IIKK::<<++-- #5 
 #4#5#566i4	 r8   namevaluec                     U R                  U5      (       d   eU R                  U5        XR                  ;  a  0 U R                  U'   X0R                  U   U'   g r-   )is_attribute_mutationr   rC   )rR   rp   r   r   s       r6   
store_attrSideEffects.store_attr  sX     ))$////&&t,000.0D%%d+05!!$'-r8   
deleted_okcheckc                     U(       a  U R                  U5      (       d   eU R                  U   U   nU(       dA  [        U[        R                  5      (       a"  [        SSU SU 3S/ [        R                  QS9  U$ )Nz$Attempted to read a deleted variablezitem: z, name: r   r   )r   rC   ra   r   DeletedVariabler   r   
USER_ERROR)rR   rp   r   r   r   results         r6   	load_attrSideEffects.load_attr  s|     --d3333**406j1J1JKK> htf55)445	 r8   cellvarc                    UR                  5       (       a"  [        SSU SU 3S/ [        R                  QS9  [	        U[
        R                  5      (       d   e[	        U[
        R                  5      (       d   eU R                  USU5        g )NzWrite to immutable cellz	cellvar: z	, value: zFDynamo doesn't support writing to immutable/sourceless cell variables.r   cell_contents)	is_immutabler   r   	DIFFICULTra   r   CellVariabler#   r   )rR   r   r   s      r6   
store_cellSideEffects.store_cell(  s    !!1#G9IeW=d4)334	 '9#9#9::::%!:!:;;;;%8r8   c                    [        U[        R                  5      (       d   eU R                  US5      (       a  U R	                  USSS9$ UR
                  (       a  UR
                  $ [        S[        U5      S/ [        R                  QS9  g )Nr   F)r   zRead uninitialized cellzBAttempted to read a cell variable that has not been populated yet.r   )
ra   r   r   has_pending_mutation_of_attrr   pre_existing_contentsr   strr   r   )rR   r   s     r6   	load_cellSideEffects.load_cell4  s|    '9#9#9::::,,WoFF>>'?%>HH((000-L\1%001		
r8   gvarc                 f    [        U[        R                  5      (       d   eU R                  X5      $ r-   )ra   r   r#   r   )rR   r   r   s      r6   load_globalSideEffects.load_globalA  s*    $	 9 9::::~~d))r8   c                     [        U[        R                  5      (       d   e[        U[        R                  5      (       d   eU R                  XU5        g r-   )ra   r   r#   r   )rR   r   r   r   s       r6   store_globalSideEffects.store_globalE  sD     $	 9 9::::%!:!:;;;;E*r8   clsc           
      F   [         R                  " U SS 5      [        R                  [        R                  [
        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  4	;   $ )N__getattribute__)inspectgetattr_staticobjectr   rm   rP   	frozensetintr   r<   tupleBaseException)r   s    r6   "cls_supports_mutation_side_effects.SideEffects.cls_supports_mutation_side_effectsL  sv    %%c+=tD##!!  &&    !!""**
I
 

 
	
r8   c                 6    [        UR                  [        5      $ r-   )ra   r   r   rs   s     r6   r   !SideEffects.is_attribute_mutationZ  s    $,,.?@@r8   c                 z    U R                  U5      =(       a$    [        U R                  R                  U5      5      $ r-   )r   rz   rC   getrs   s     r6   has_pending_mutation SideEffects.has_pending_mutation]  s5    ))$/ 
D%%))$/5
 	
r8   c                 n    U R                  U5      =(       a    X R                  R                  US5      ;   $ )N )r   rC   r   )rR   rp   r   s      r6   r   (SideEffects.has_pending_mutation_of_attrb  s6    ))
 >//33D"==	>r8   c                 x   UR                  5       (       a  g[        UR                  [        [        45      (       a  g[        U[
        R                  5      (       a&  XR                  ;   =(       d    UR                  U 5      $ U R                  U5      (       a  XR                  ;   $ UR                  R                  $ )NFT)r   ra   r   r   r"   r   UserDefinedObjectVariablerC   is_underlying_vt_modifiedr   is_modifiedrs   s     r6   r   SideEffects.is_modifiedg  s    d((+?AQ*RSSdI??@@444 8V8V9  %%d++4444!!---r8   variablemutation_type_clsc           
      0   [        U5      U R                  ;   a>  [        U SUR                   SU R                  [        U5         R                   S35      eU" 5       Ul        X R                  [        U5      '   U R
                  R                  U5        U$ )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: .)rr   rB   AssertionErrorsourcer   rD   append)rR   rp   r   r   s       r6   
_track_objSideEffects._track_objx  s     d8t*** * ) *2(9 :88<8K8KBtH8U8\8\7]]^	`  "3!4(0BtH%d#r8   c                 ,    U R                  UU[        S9$ )N)r   )r   r   )rR   rp   r   s      r6   track_object_existing!SideEffects.track_object_existing  s#    
 7  
 	
r8   
cls_sourceuser_clsvariable_clsoptionsc                    U[         R                  R                  R                  L a<  [        R
                  " SS9   [         R                  R                  5       nS S S 5        O[        U5      nU" W4S[        U5      0UD6nX`R                  [        U5      '   U R                  R                  U5        U$ ! , (       d  f       NV= f)NT)recordr   )torchautogradfunctionFunctionCtxwarningscatch_warningsFunctionr   r   rB   rr   rD   r   )rR   r   r   r   r   objr   s          r6   track_object_newSideEffects.track_object_new  s     u~~..:::((5nn--/ 65 X&C
.z:
 

 (0BsG$c" 65s   B77
Cc                    SSK Jn  SSKJn  SSKJn  SSKJn  [        R                  n[        X5      (       a  UR                  U5      (       a  UnGO~[        US5      (       a"  [        US5      (       a  U" U5      (       d  UnGOK[        U[        R                  R                  5      (       a  [        R                   nGO[        U["        [$        R&                  45      (       a  [        R(                  nO[        U[*        [,        45      (       a  [        R.                  nO[        U[0        5      (       a  [        R2                  nO[        U[4        5      (       a  [        R6                  nOb[        U[8        5      (       a  [        R:                  nO<[=        U5      (       a  [>        nO%[        U[@        5      (       a  [        RB                  n[        U[        R                  5      (       d   eU$ )	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UnspecializedNNModuleVariablerm   collectionsOrderedDictUserDefinedDictVariablerP   r   UserDefinedSetVariabler   UserDefinedTupleVariabler<   UserDefinedListVariabler   MutableMappingVariabler   r$   r   "UserDefinedExceptionObjectVariable)rR   r   r   r   r   r   r   s          r6   get_variable_clsSideEffects.get_variable_cls  s_   5IGH // 	 
 
'HHRR4LHk***--0::9L%((//22$BBL4)@)@"ABB$<<L3	"233$;;L%(($==L$''$<<L.11$;;L **2L-00$GGL,	(K(KLLLLr8   base_cls_vtcls_vt	init_argsc                    UR                   n[        U[        R                  R                  5      (       a  [        U5      nU$ [        U[        R                  5      (       a  UR                  nO:[        U[        R                  5      (       a  UR                   nO[        SU 35      e[        R                  R                  UR                  5      (       d   eUR                  U5      nU$ )NzUnexpected base_cls_vt )r   r   r   r   r   r   ra   r   BuiltinVariablefnUserDefinedClassVariableRuntimeErroris_supported_new_method__new__)rR   r
  r  r  r   r   base_clss          r6   get_example_valueSideEffects.get_example_value  s     <<h00)C( 
% +y'@'@AA&>>K)K)KLL&,,"%<[M#JKK55MM      ""8,C
r8   c           	         UR                   nUR                  nU R                  U5      nU R                  XU5      nU" UUR                   UU[	        U5      S9nXR
                  [        U5      '   U R                  R                  U5        U$ )a  
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   rB   rr   rD   r   )	rR   r
  r  r  r   r   r   r   r   s	            r6   track_new_user_defined_object)SideEffects.track_new_user_defined_object  s     ]]
<<,,X6$$[)D}}#.z:
 (0BsG$c"r8   c                     [        5       n[        R                  " [        5       S9nX R                  [        U5      '   U R                  R                  U5        U$ )Nr   )r   r   r   r   rB   rr   rD   r   )rR   r   r   s      r6   track_cell_newSideEffects.track_cell_new  sL     h)).0
 (0BsG$c"r8   r   cellcontentsc                     [         R                  " Uc  S O	[        5       UUS9nX@R                  [	        U5      '   U R
                  R                  U5        U$ )N)r   r   r   )r   r   r   rB   rr   rD   r   )rR   r   r  r  r   s        r6   track_cell_existingSideEffects.track_cell_existing  sT     )) #).$6O6Q"*
 )1BtH%d#r8   c                     [         R                  " [        5       US9nX0R                  [	        U5      '   U R
                  R                  U5        U$ )N)r   r   )r   NewGlobalVariabler   rB   rr   rD   r   )rR   r   rp   r   s       r6   track_global_existing!SideEffects.track_global_existing,  sF    ..35
 )1BtH%d#r8   ctxargsc                 ~    [        U[        R                  5      (       d   eU R                  R	                  X45        g r-   )ra   r   r
   rF   r   )rR   r'  r(  s      r6   track_save_for_backward#SideEffects.track_save_for_backward5  s3     #yHHIIII%%sk2r8   c                    UR                    Hp  n[        U5      nUR                  U   nX0R                  ;  d  M.  [        U[        R
                  [        R                  45      (       d  M_  U R                  X$5        Mr     g r-   )rD   rr   rB   ra   r   TensorVariableSymNodeVariabler   )rR   r_   
other_itemother_idother_variables        r6   -track_runahead_tensor_and_symvar_side_effects9SideEffects.track_runahead_tensor_and_symvar_side_effects;  si      //J*~H"11(;N222z!9!99;T;T U8 8 **:F *r8   c                 <  ^ ^	^
^ [        5       m[        5       m	S[        SS 4U	U U
U4S jjm
S[        S[        4U	4S jjnT R                  R	                  5        Vs/ s H&  n[        UR                  [        5      (       a  M$  UPM(     nn/ nUnUb8  UR                  UR                  UR                  /5        UR                  nUb  M8  [        R                  " T
UUUR                  R                  T R                  /-   5        @
T R                  R!                  5        VVs0 s H  u  pxU" U5      (       d  M  Xx_M     snnT l        T R"                  R!                  5        VVs0 s H  u  pxU" U5      (       d  M  Xx_M     snnT l        g s  snf s  snnf s  snnf )NrU   r+   c                    > U T;   a  g TR                  U 5        [        U R                  [        5      (       a  TR                  U 5        U TR                  ;   a%  [
        R                  " TTR                  U    5        g g r-   )rW   ra   r   r   rC   r#   visit)rU   live_new_objectsrR   r6  visiteds    r6   r6  0SideEffects.prune_dead_object_new.<locals>.visitN  so    g~KK#++-ABB $$S) d///%%--c2 0r8   c                 N   > [        U R                  [        5      (       a  U T;   $ gNT)ra   r   r   )rU   r7  s    r6   is_live2SideEffects.prune_dead_object_new.<locals>.is_live^  s&    #++-ABB...r8   )rP   r#   rz   rB   valuesra   r   r   r=   stacksymbolic_localsparentr6  r|   backward_staterG   r1   rC   )rR   txr<  rU   pre_existing_varsinit_live_varscur_txr4   r5   r7  r6  r8  s   `        @@@r6   prune_dead_object_new!SideEffects.prune_dead_object_newI  s   (+14	 	4 	 	 	 	T 	 **113
3c//1EF 3 	 
 68 !!6<<1G1G"HI]]F   	!		((!!		
  "00668
8TQGAJDAD8
 "66<<>%
>TQ'!*DAD>%
!O
H
%
s$   #FF#F:F&F=Fc                 X   XR                   ;   a  g U R                  U5        [        UR                  [        5      (       a  SUR                  l        UR                  (       aH  [        U[        R                  5      (       a(  [        U[        R                  5      (       d  SU l
        g g g g r;  )rQ   r   ra   r   r!   r   r   r   ConstDictVariableSetVariablerN   rX   s     r6   mutationSideEffects.mutation  s    999&&s+c'')>??,0C)JJ3	 ; ;<<sI$9$9::/3D, ; = r8   c                     U R                   $ r-   )rN   rR   s    r6   has_existing_dict_mutation&SideEffects.has_existing_dict_mutation  s    ///r8   c                     U R                   R                  5        Vs/ s H  oR                  U5      (       d  M  UPM     sn$ s  snf r-   )rB   r>  r   rX   s     r6   _get_modified_varsSideEffects._get_modified_vars  s7    #2299;U;?O?OPS?T;UUUs
   AAcgc           	      x  ^^ U R                  5        GH  m[        TR                  [        5      (       d  TR                  c   eM4  [        T[
        R                  5      (       a  TR                  c`  TR                  U4S j5        TR                  [        SS5      5        TR                  T5        [        TR                  T   5      Tl        M  TR                  c  [        TR                  5      Tl        M  M  [        T[
        R                  5      (       at  [        T[
        R                   R"                  5      (       aH  T" TSS9  TR                  T5        TR%                  5         [        TR                  T   5      Tl        GM{  GM~  [        T[
        R&                  5      (       a  [)        SSS/ S9  GM  [        T[
        R*                  5      (       a  SUU4S	 jjnTR                  U5        OTR                  U4S
 j5        TR                  R,                  c   eT" TR                  R,                  5        TR.                   H  nT" U5        M     TR                  [        S[1        TR.                  5      -   S5      5        TR                  T5        [        TR                  T   5      Tl        GM     U R2                   Hi  u  pET" UR                  5        TR5                  S5        U H  nT" U5        M     TR                  / [7        [1        U5      5      Q[9        S5      P5        Mk     g )Nc                  D   > T R                  [        R                  S5      $ )N	make_cellload_import_fromr   __name__rU  s   r6   <lambda>3SideEffects.codegen_save_tempvars.<locals>.<lambda>       3 3ENNK Pr8   r   Fallow_cachez<AutogradFunctionContextVariable escaped Dynamo-traced regionr   zAWe cannot reconstruct a torch.autograd.Function's context object.r   c                     > TR                   c   eT " TR                   5        T R                  T R                  S5      /5        g )Nr  )r
  extend_outputcreate_load_attrrU  rU   s   r6   load_new_method:SideEffects.codegen_save_tempvars.<locals>.load_new_method  s;    ":::3??+(("*=*=i*H)IJr8   c                  D   > T R                  [        R                  S5      $ )Nr   rY  r\  s   r6   r]  r^    s     3 3ENNL Qr8   r   rF   POP_TOPr+   N)rS  ra   r   r   r   r   r   
local_nameadd_push_nullrc  r   	add_cacher   tempvarsr   r-  torch_functionTensorWithTFOverrideVariable	clear_tosr
   r   r   r   r  lenrF   load_methodr   r   )rR   rU  rf  argr'  r(  rU   s    `    @r6   codegen_save_tempvars!SideEffects.codegen_save_tempvars  s    **,Cc//1EFFzz---#y5566
 >>)$$P $$%9!U%CDLL%!,R[[-=!>CJZZ'!0!@CJ (C!9!9:: 11NN  s.LL% LLN!,R[[-=!>CJ C!J!JKK Z c	 c9#F#FGGK K
 $$_5$$Q ((33???3$$//0 ==CsG )   !5a#cmm:L6Le!TUS!(S)9:
U -X //ICszzNNN./3 'D	2&y1 0r8   tensorhookhandlec                    [        U[        R                  5      (       d   e[        U[        R                  5      (       d   e[        U[        R                  5      (       a  UR                  5       (       d   e[        [        R                  U5      (       d   e[        U R                  R                  5       5      nXPR                  ;   a  US-  nXPR                  ;   a  M  XX44U R                  U'   UR                  (       a   eXSl        g )Nr   )ra   r   r-  r#   RemovableHandleVariable
is_mutabler   r   Tensorrr  rG   re   idx)rR   rw  rx  ry  r   r~  s         r6   register_hookSideEffects.register_hook  s     &)":":;;;;$	 9 9::::vy@@AA!!##	
$ u||T****$##((*+&&&1HC &&&"(!=#::~
r8   r~  c                     U R                   U	 g r-   )rG   )rR   r~  s     r6   remove_hookSideEffects.remove_hook  s    c"r8   c                 $  ^^^ U R                   R                  5        Ho  u  mnnmTR                  (       d   S5       eSUUU4S jjnTR                  U5        T" U5        TR	                  [        SS5      5        TR                  U5        Mq     g )Nz4Hooks on non input tensors NYI - should not get herec                  X   > T " T5        T R                  T R                  T5      /5        g r-   )rc  rd  )rU  r   rw  s   r6   gen_fn)SideEffects.codegen_hooks.<locals>.gen_fnD  s&    6
  ""5"5d";!<=r8   r   Frj  )rG   r>  r   rl  rc  r   rm  )rR   rU  rx  ry  r  r   rw  s    `   @@r6   codegen_hooksSideEffects.codegen_hooks  s     %%'
F ==X"XX=> > V$tH1!U;< LL ] (r8   c                 ~    SSK Jn  U R                  c  [        R                  " / U" 5       S9U l        U R                  $ )Nr   )r"   r  )variables.baser"   rO   r   r'   )rR   r"   s     r6   get_ca_final_callbacks_var&SideEffects.get_ca_final_callbacks_varP  s;    4&&.*3*@*@"2"4+D' ***r8   c           
        ^^ / nU R                  5        GHL  m[        T[        R                  5      (       ap  T" TSS9  T" TR                  5        TR                  TR                  S 5      TR                  S 5      [        SSS9/5        UR                  [        S5      /5        M  [        T[        R                  R                  5      (       a  [        TR                  [        R                  5      (       a  TR                  R                  b  [        SSS	S
/S9  T" TR                  5        TR                  S5        T" TSS9  UR                  / [!        S5      Q[        S5      P5        T" TR                  5        TR                  S5        UR                  / [!        S5      Q[        S5      P5        GM  [        T[        R"                  5      (       a  TR%                  5       (       a  T" TR                  5        TR                  S5        T" TSS9  TR&                  (       a#  T" TR                  5        TR                  S5        UR                  / [!        S5      Q[        S5      P5        TR&                  (       a*  UR                  / [!        S5      Q[        S5      P5        GM  GM  GM  [        T[        R(                  R*                  5      (       Ga  TR-                  U4S j5        TR/                  SS5        [        R(                  R1                  5       nTR2                  S==   U4-  ss'   TR5                  [        SUS95        TR-                  U4S j5        TR7                  TR8                  5        TR5                  [        S[;        TR8                  5      S95        TR/                  SS5        TR5                  [        S5      5        GM  [        T[        R<                  5      (       ag  TR>                  bZ  TU R@                  ;   aG  U RC                  T5      nT" U5        UR                  TRE                  TR>                  5      /5        GMO  GMR  U RG                  T5      (       Ga  [        T[        RH                  5      (       GaX  U RK                  TRL                  5      (       Ga7  0 n[N        RP                  RR                   H)  nTRT                  RV                  RY                  5       XS'   M+      [[        TR                  5      R\                  R_                  [`        Rb                  5      nTR                  [        SUS9[        SUS   S9/5        T" TR                  5        TR                  [        SUS   S9/5        T" TRL                  SS9  TR                  [        SUS   S9/5        [i        [N        US9nUR                  / UQ[        S5      P5        GO[        T[        Rj                  5      (       a  U RK                  TRl                  5      (       a  0 n[n        RP                  RR                   H)  nTRT                  RV                  RY                  5       XS'   M+     T" TR                  5        TR                  [        SUS   S9/5        T" TRl                  SS9  TR                  [        SUS   S9/5        [i        [n        US9nUR                  / UQ[        S5      P5        [q        U R@                  Rs                  T0 5      Ru                  5       5       GH  u  p9[        T[        Rv                  5      (       aj  TRT                  RV                  Ry                  U5        T" U	5        [        TR                  [z        5      (       d   eUR                  [        SUS9/5        M  [        U	[        R|                  5      (       a  [        TR~                  [        5      (       as  [        [        TS S 5      U5      (       aT  TRT                  RV                  Ry                  U5        T" TR                  5        UR                  [        S!US9/5        GM=  GM@  GMC  [        T[        R                  5      (       a  TR                  U5      (       av  TR-                  U4S" j5        T" TR                  5        T" [        R                  " U5      5        T" U	5        UR                  / [        S#S5      Q[        S5      P5        GM  [        T[        R                  5      (       a  TR                  5       (       a  TR                  S$S%5        TR                  S&5        T" TR                  5        T" [        R                  " U5      5        T" U	5        UR                  / [!        S#5      Q[        S5      P5        GM  TRT                  RV                  Ry                  U5        T" U	5        T" T5        UR                  [        S'US9/5        GM     G
M!  [        T[        R                  5      (       ah  [        TR^                  5       HL  n
TR-                  U4S( j5        T" TR                  5        TR/                  SS5        TR                  5         MN     G
M  [        T[        R                  5      (       at  S*UU4S) jjnTR-                  U5        T" TR                  TR                  R                  5       5      5        UR                  / [        SS5      Q[        S5      P5        GM;  [        [[        T5      5      e   [q        U5       H  nTR                  U5        M     g ! [d         a6    [[        TR                  5      R\                  R_                  [f        5      n GNf = f)+NFr`  BUILD_SLICE   )rt  STORE_SUBSCRz1Side effect on existing deque with limited maxlenr   r   z*Don't use a deque with `maxlen` specified.r   r=   r   ri  r0   r   updatec                  D   > T R                  [        R                  S5      $ )Nget_torch_function_mode_stackrY  r\  s   r6   r]  4SideEffects.codegen_update_mutated.<locals>.<lambda>      B//(Gr8   co_varnames
STORE_FAST)argvalc                  D   > T R                  [        R                  S5      $ )Nset_torch_function_mode_stackrY  r\  s   r6   r]  r    r  r8   
BUILD_LIST
LOAD_CONSTr*   r)   r(   )varname_mapr:   r9   STORE_GLOBALr   DELETE_ATTRc                  D   > T R                  [        R                  S5      $ )N object_setattr_ignore_descriptorrY  r\  s   r6   r]  r  V  s    B$7$7 %0R%r8      builtinsr   __setattr__
STORE_ATTRc                  D   > T R                  [        R                  S5      $ )N	iter_nextrY  r\  s   r6   r]  r  x  r_  r8   c                  L   > T " TR                   5        T R                  S5        g )Nsetstate)r   r   re  s   r6   r  2SideEffects.codegen_update_mutated.<locals>.gen_fn  s    szzNLL,r8   rj  )PrS  ra   r   r'   r   rc  create_load_constr   r   listsDequeVariablemaxlenConstantVariabler   r   rs  r   rJ  has_new_itemsshould_reconstruct_allro  TorchFunctionModeStackVariablerl  call_functionget_prev_stack_var_namecode_optionsappend_outputforeachsymbolic_stackrr  r   rk  rC   r   create_store_derefr   r  r   _dict_vtr7   __code__r  rC  r|   new_varr.   r/   indexr   r  
ValueErrorrm   r   r  _list_vtr>   reversedr   r1   r$  update_co_namesr   r   r   r   r   getattrr   should_skip_descriptor_setterr   needs_slow_setattrrZ  ListIteratorVariablerangepop_topRandomVariable
wrap_staterandomgetstater   )rR   rU  suffixesr   contents_varr  r*   dict_update_instslist_update_instsr   _r  suffixrU   s    `           @r6   codegen_update_mutated"SideEffects.codegen_update_mutatedZ  s	   **,C#y55663E*3::  ,,T2,,T2*=a@ !3N!C DEC!>!>?? szz9+E+EFF

((0$ S "$<H	 3::x(3E*+A.*95 3::w'+A.*95 C!<!<== $$&&szzNNN8,s.113::w/OO/2.y9 11 !!3A!6 29 = 2! '4 Y--LL    
   E* //GGI.4'9.  !3L!NO   

3--.  &|S=O=O9PQ   E*  !3I!>?C!7!788S^^=W $333#'>>##6L|$OOR%:%:3>>%J$KL 4
 ++C00:: &&s||44 #%K 4 = = I I,.EELL,@,@,B) !JH$(O$;$;$A$A'33%	 $$.|IN. ,[5M szzN$$. ,[5K s||7$$. ,[5M )?,+)% OO..y9  :: &&s||44 #%K 3 < < H H,.EELL,@,@,B) !I szzN$$. ,[5K s||7$$. ,[5M )?+)% OO..y9. $,--11#r:@@B$KD "#y'B'BCC44T:5	)#**lCCCC /tLM $E9+D+DEE%--/H %gc7D&A4HHEELL88>szzN$OO!3M$!O P I $Y@@ ;;DAA((
 3::955d;<5	 !5a!? 29 = #3	(K(KLL2244 ++JA}53::955d;<5	 S03S5G	5RS 44T:5	3 );LQU)V(WXk$l C!?!?@@syy)A$$P szzN$$Q.JJL * C!9!9::- -   (3>>#**"5"5"789-a7*95 %T#Y//c	 -h	 x(FV$ )_ & H$(O$;$;$A$A$$G	Hs   	<n

<o
	o
c                     [        [        U R                  U R                  R	                  5       5      5      =(       d2    U R
                  =(       d    U R                  =(       d    U R
                  (       + $ r-   )anymapr   rB   r>  rG   rF   rO  s    r6   is_emptySideEffects.is_empty  s\    D$$d&9&9&@&@&BCD !  !%%!   	
 	
r8   c                 l    U R                   R                  5         U R                  R                  5         g r-   )rD   r0   rB   rO  s    r6   r0   SideEffects.clear  s$    !!#r8   )	rN   rO   rB   rQ   rD   rM   rF   rC   rG   )NNNNN)r+   r@   )FF)r_   r@   r+   N)rC  r&   r+   N)r+   zvariables.ListVariablerj  )Hr[  
__module____qualname____firstlineno____doc__rm   r   r#   __annotations__r   r<   r   r   r   r
   rJ   rY   r]   r   rz   rb   rj   rn   rt   rw   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*  r2  rG  rL  rP  rS  r   ru  r  r  r  r  r  r  r0   __static_attributes____classcell__)rS   s   @r6   r@   r@   S   s   & o-..S/5I0JJKKCy
 @D )-  +,N#,N !c?&:!;<,N '$sO';"<<=
	,N DI&,N $6_8MMNO
,N .#7

,N, 
-,N ,N\9 94 9
@o @$ @

F 
t 
- HSM ,
/ / /- - -
D 

4 

T 
o $ :6#6+.67F6	6 !  	
  
&
9/ 
9/ 
9d 
9
 
_ 
* *s * *+#++.+7F+	+ 
 
 
 
A/ Ad A
 
T 

> > >PT >
. .D .* #8	 "  	
 
* M	
	
 "	
 
		
  	
 c3h 
*% %$ %N$   (	
 
>$   (	
 
<			v&.6BQ	F # / 3"3*.*?3	3G"G	GC
J4O 4 40D 0VD$9 V]	 ]d ]~*  4	
  
,#s #t #4!	 4!d 4!l+w% w%t w%r	
$ 
$ $r8   r@   rC  r&   )NNNc              #   L  #    U R                   R                  R                  (       d   eU R                   R                  R                  n SU R                   R                  l        S v   XR                   R                  l        g ! XR                   R                  l        f = f7fr;  )r|   r}   r~   r   rC  orig_vals     r6   r   r     sp      99##????yy''KKHPGK		  DGO		  Dx		  Ds   AB$B *B$B!!B$c              #      #    U R                   R                  R                  n SU R                   R                  l        S v   XR                   R                  l        g ! XR                   R                  l        f = f7fr;  )r|   r}   r   r  s     r6   2allow_externally_visible_side_effects_in_subtracerr    sX      yy''TTHYPT		  MPX		  MPX		  M   !A=A A=A::A=c              #      #    U R                   R                  R                  n SU R                   R                  l        S v   XR                   R                  l        g ! XR                   R                  l        f = f7fr;  )r|   r}   r   r  s     r6   "disallow_side_effects_in_generatorr    sW      yy''CCHH?C		  <?G		  <x		  <r  )Cr  r   
contextlibr   r   rK   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   r  r   r   r   r    r!   r"   r#   r   r$   torch._dynamo.output_graphr%   torch._dynamo.symbolic_convertr&   torch._dynamo.variables.listsr'   rm   r   r7   r<   r>   r@   contextmanagerr   r  r  r   r8   r6   <module>r     ss  .      5  / /  H 1 1   3 F F A A   < 6H:
.CH~
.(,S#X
.CF
.	
.$49 $tCy $T $
J$ J$Z" 	P#	P 	P 	P Y#Y Y Y H#H H Hr8   