Ë
    P/æj�r  ã                   óN  — d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlZddl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 dd	lmZmZmZ dd
lmZmZm Z  ddl!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'  G d„ de#«      Z( G d„ de#«      Z) G d„ de)«      Z* G d„ de)«      Z+d„ Z, G d„ d«      Z-y)é    N)ÚMutableMapping)ÚAnyÚDictÚListÚOptionalÚTypeÚUnioné   )ÚutilsÚ	variables)Úbytecode_from_templateÚcreate_call_functionÚcreate_call_methodÚcreate_instruction)Ú	PyCodegen)Úunimplemented)ÚGlobalSourceÚLocalSourceÚSource)Úis_frozen_dataclassÚnn_module_newÚ
object_new)Úis_side_effect_safeÚMutableLocalBaseÚMutableLocalSourceÚVariableTracker)ÚFrozenDataClassVariablec                   ó.   ‡ — e Zd ZdZddedefˆ fd„Zˆ xZS )ÚMutableSideEffectsz¨
    VariableTracker.mutable_local marker to indicate a list passed as
    an input that if we mutate we need to re-apply those mutations after
    the graph runs.
    ÚsourceÚis_modifiedc                 ó\   •— t         ‰| �  t        j                  «       || _        || _        y ©N)ÚsuperÚ__init__r   ÚExistingr    r!   )Úselfr    r!   Ú	__class__s      €ú]/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/side_effects.pyr%   zMutableSideEffects.__init__%   s&   ø€ Ü‰ÑÔ+×4Ñ4Ô5ØˆŒØ&ˆÕó    ©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úboolr%   Ú__classcell__©r(   s   @r)   r   r      s    ø„ ññ'˜vð '°D÷ 'ñ 'r*   r   c                   ó2   ‡ — e Zd ZdZdedee   fˆ fd„Zˆ xZS )ÚAttributeMutationzM
    VariableTracker.mutable_local marker to track changes to attributes
    Útypr    c                 ó2   •— t         ‰| �  |«       || _        y r#   )r$   r%   r    )r'   r5   r    r(   s      €r)   r%   zAttributeMutation.__init__0   s   ø€ Ü‰Ñ˜ÔØˆ�r*   )	r,   r-   r.   r/   r   r   r   r%   r1   r2   s   @r)   r4   r4   +   s&   ø„ ñðÐ.ð ¸ÀÑ8H÷ ñ r*   r4   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚAttributeMutationExistingr    c                 óP   •— t         ‰| �  t        j                  |«       || _        y r#   )r$   r%   r   r&   r    )r'   r    r(   s     €r)   r%   z"AttributeMutationExisting.__init__6   s    ø€ Ü‰ÑÔ+×4Ñ4°fÔ=Øˆ�r*   )r,   r-   r.   r   r%   r1   r2   s   @r)   r8   r8   5   s   ø„ ð˜v÷ ñ r*   r8   c                   ó4   ‡ — e Zd Zdee   dee   fˆ fd„Zˆ xZS )ÚAttributeMutationNewr    Ú
cls_sourcec                 óP   •— t         ‰| �  t        j                  |«       || _        y r#   )r$   r%   r   ÚLocalr<   )r'   r    r<   r(   s      €r)   r%   zAttributeMutationNew.__init__<   s    ø€ Ü‰ÑÔ+×1Ñ1°6Ô:Ø$ˆ�r*   )r,   r-   r.   r   r   r%   r1   r2   s   @r)   r;   r;   ;   s%   ø„ ð%˜x¨Ñ/ð %¸XÀfÑ=M÷ %ñ %r*   r;   c                 ó>   — | j                  «       D ]
  \  }}|||<   Œ y r#   )Úitems)Ú	dict_fromÚdict_toÚkÚvs       r)   Ú_manual_update_dictrE   A   s%   € Ø—‘Ó!ò ‰ˆˆ1Øˆ�Š
ñr*   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<   	 	 	 	 	 d7ˆ fd„	Zdedefd„Zdd dee	   fd	„Zd
„ Zd„ Zd„ Zd„ Zdede	defd„Zd8d„Zd„ Zd„ Zdede	fd„Zdede	defd„Zed„ «       Zd„ Zd„ Zd„ Z d„ Z!e"fdedefd„Z#e#Z$dedefd„Z%d e&d!ed"efd#„Z'	 	 d9d$„Z(d%„ Z)d&e&defd'„Z*d&e&defd(„Z+d)„ Z,d*„ Z-d+„ Z.d,„ Z/d-„ Z0d.e1fd/„Z2d0„ Z3d1„ Z4d2„ Z5d3„ Z6d.e1fd4„Z7d5„ Z8d6„ Z9ˆ xZ:S ):ÚSideEffectszp
    Track side effects (list mutation, setattr, etc) that need to be
    applied after an FX graph is run.
    Úid_to_variableÚstore_attr_mutationsÚ	keepalivec                 óž   •— t         ‰| �  «        |xs i | _        |xs i | _        |xs g | _        |xs g | _        |xs i | _        d | _        y r#   )r$   r%   rH   rI   rJ   Úsave_for_backwardÚtensor_hooksÚca_final_callbacks_var)r'   rH   rI   rJ   rL   rM   r(   s         €r)   r%   zSideEffects.__init__P   sY   ø€ ô 	‰ÑÔØ,Ò2°ˆÔØ$8Ò$>¸BˆÔ!Ø"š bˆŒØ!2Ò!8°bˆÔØ(Ò.¨BˆÔð '+ˆÕ#r*   ÚotherÚreturnc                 óú   — t        |t        «      sJ ‚| j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r#   )Ú
isinstancerG   rH   rI   rL   rM   )r'   rO   s     r)   Ú__eq__zSideEffects.__eq__b   sz   € Ü˜%¤Ô-Ð-Ð-ð ×Ñ 5×#7Ñ#7Ñ7ò 8Ø×)Ñ)¨U×-GÑ-GÑGò8à×&Ñ&¨%×*AÑ*AÑAò8ð ×!Ñ! U×%7Ñ%7Ñ7ð		
r*   c                 óØ  — | j                   |j                   k7  rB| j                   j                  «       }|j                   j                  «       }||k7  rd|› d|› �S y| j                  |j                  k7  rB| j                  j                  «       }|j                  j                  «       }||k7  rd|› d|› �S y| j                  |j                  k7  ry| j                  |j                  k7  ryy )Nzid_to_variable keys: z != zid_to_variable: unknown diffzstore_attr_mutations keys: z"store_attr_mutations: unknown diffrL   rM   )rH   ÚkeysrI   rL   rM   )r'   rO   Úsk_itvÚok_itvÚsk_samÚok_sams         r)   ÚdiffzSideEffects.diffl   sé   € Ø×Ñ %×"6Ñ"6Ò6Ø×(Ñ(×-Ñ-Ó/ˆFØ×)Ñ)×.Ñ.Ó0ˆFØ˜ÒØ.¨v¨h°d¸6¸(ÐCÐCð 2Ø×&Ñ&¨%×*DÑ*DÒDØ×.Ñ.×3Ñ3Ó5ˆFØ×/Ñ/×4Ñ4Ó6ˆFØ˜ÒØ4°V°H¸DÀÀÐIÐIØ7Ø×#Ñ# u×'>Ñ'>Ò>Ø&Ø×Ñ %×"4Ñ"4Ò4Ø!àr*   c                 ó  — | j                  t        | j                  «      | j                  j	                  «       D ��ci c]  \  }}|t        |«      “Œ c}}t        | j                  «      | j                  | j                  ¬«      S c c}}w )zCreate a shallow copy)rH   rI   rJ   rL   rM   )	r(   ÚdictrH   rI   r@   ÚlistrJ   rL   rM   )r'   rC   rD   s      r)   ÚclonezSideEffects.clone‚   sy   € à�~‰~Ü × 3Ñ 3Ó4à'+×'@Ñ'@×'FÑ'FÓ'H÷"Ù#˜q !�”4˜“7‘
ó"ô ˜4Ÿ>™>Ó*Ø"×4Ñ4Ø×*Ñ*ð ó 
ð 	
ùó"s   ½Bc                 ó0   — t        |«      | j                  v S r#   )ÚidrH   ©r'   Úitems     r)   Ú__contains__zSideEffects.__contains__Ž   s   € Ü�$‹x˜4×.Ñ.Ð.Ð.r*   c                 ó2   — | j                   t        |«         S r#   )rH   r`   ra   s     r)   Ú__getitem__zSideEffects.__getitem__‘   s   € Ø×"Ñ"¤2 d£8Ñ,Ð,r*   c                 ól   — ddl m} t        ||«      ryt        |j                  «      st        d«       y y )Nr   )ÚAutogradFunctionContextVariableTzOHigherOrderOperator: Mutating a variable not in the current scope (SideEffects))Útorch._dynamo.variables.miscrg   rR   r   Úmutable_localr   )r'   rb   rg   s      r)   Úcheck_allowed_side_effectz%SideEffects.check_allowed_side_effect”   s3   € ÝPô �dÐ;Ô<ØÜ" 4×#5Ñ#5Ô6ÜØaõð 7r*   rb   ÚnameÚvaluec                 óæ   — | j                  |«      sJ ‚| j                  |«       |j                  | j                  vri | j                  |j                  <   || j                  |j                     |<   y r#   )Úis_attribute_mutationrj   ri   rI   )r'   rb   rk   rl   s       r)   Ú
store_attrzSideEffects.store_attr    si   € Ø×)Ñ)¨$Ô/Ð/Ð/Ø×&Ñ& tÔ,Ø×Ñ T×%>Ñ%>Ñ>Ø<>ˆD×%Ñ% d×&8Ñ&8Ñ9Ø>Cˆ×!Ñ! $×"4Ñ"4Ñ5°dÒ;r*   c                 ó²   — | j                  |«      sJ ‚| j                  |j                     |   }|s%t        |t        j
                  «      rt        d«       |S )Nzread deleted attribute)rn   rI   ri   rR   r   ÚDeletedVariabler   )r'   rb   rk   Ú
deleted_okÚresults        r)   Ú	load_attrzSideEffects.load_attr§   sQ   € Ø×)Ñ)¨$Ô/Ð/Ð/Ø×*Ñ*¨4×+=Ñ+=Ñ>¸tÑDˆÙœj¨´×1JÑ1JÔKÜÐ2Ô3Øˆr*   c                 óš   — t        |t        j                  «      sJ ‚t        |t        j                  «      sJ ‚| j	                  |d|«       y ©NÚcell_contents)rR   r   ÚNewCellVariabler   ro   )r'   Úcellvarrl   s      r)   Ú
store_cellzSideEffects.store_cell®   s>   € Ü˜'¤9×#<Ñ#<Ô=Ð=Ð=Ü˜%¤×!:Ñ!:Ô;Ð;Ð;Ø�‰˜ °%Õ8r*   c                 ó^   — t        |t        j                  «      sJ ‚| j                  |d«      S rv   )rR   r   rx   rt   )r'   ry   s     r)   Ú	load_cellzSideEffects.load_cell³   s)   € Ü˜'¤9×#<Ñ#<Ô=Ð=Ð=Ø�~‰~˜g Ó7Ð7r*   Úgvarc                 ó^   — t        |t        j                  «      sJ ‚| j                  ||«      S r#   )rR   r   r   rt   )r'   r}   rk   s      r)   Úload_globalzSideEffects.load_global·   s)   € Ü˜$¤	× 9Ñ 9Ô:Ð:Ð:Ø�~‰~˜d DÓ)Ð)r*   c                 óš   — t        |t        j                  «      sJ ‚t        |t        j                  «      sJ ‚| j                  |||«       y r#   )rR   r   r   ro   )r'   r}   rk   rl   s       r)   Ústore_globalzSideEffects.store_global»   s>   € Ü˜$¤	× 9Ñ 9Ô:Ð:Ð:Ü˜%¤×!:Ñ!:Ô;Ð;Ð;Ø�‰˜˜d EÕ*r*   c                 óP   — t        j                  | dd «      t        j                  u S )NÚ__getattribute__)ÚinspectÚgetattr_staticÚobjectrƒ   )Úclss    r)   Ú"cls_supports_mutation_side_effectsz.SideEffects.cls_supports_mutation_side_effectsÀ   s*   € ô ×"Ñ" 3Ð(:¸DÓAÜ×&Ñ&ð'ð	
r*   c                 ó6   — t        |j                  t        «      S r#   )rR   ri   r4   ra   s     r)   rn   z!SideEffects.is_attribute_mutationÇ   s   € Ü˜$×,Ñ,Ô.?Ó@Ð@r*   c                 ó„   — | j                  |«      xr. t        | j                  j                  |j                  «      «      S r#   )rn   r0   rI   Úgetri   ra   s     r)   Úhas_pending_mutationz SideEffects.has_pending_mutationÊ   s;   € Ø×)Ñ)¨$Ó/ò 
´DØ×%Ñ%×)Ñ)¨$×*<Ñ*<Ó=ó5
ð 	
r*   c                 óx   — | j                  |«      xr( || j                  j                  |j                  d«      v S )N© )rn   rI   r‹   ri   )r'   rb   rk   s      r)   Úhas_pending_mutation_of_attrz(SideEffects.has_pending_mutation_of_attrÏ   s@   € Ø×)Ñ)Øó
ò Là�d×/Ñ/×3Ñ3°D×4FÑ4FÈÓKÐKð	Lr*   c                 ó¶   — t        |j                  t        «      ry| j                  |«      r|j                  | j                  v S |j                  j
                  S ©NT)rR   ri   r;   rn   rI   r!   ra   s     r)   r!   zSideEffects.is_modifiedÔ   sM   € Ü�d×(Ñ(Ô*>Ô?ØØ×%Ñ% dÔ+Ø×%Ñ%¨×)BÑ)BÐBÐBØ×!Ñ!×-Ñ-Ð-r*   Úvariablec           
      ó`  — |j                   €J ‚t        |«      | j                  v r>t        |› d|j                   › d| j                  t        |«         j                   › d�«      ‚ ||j                   «      |_        || j                  t        |«      <   | j
                  j                  |«       |S )z*Start tracking a 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: ú.)r    r`   rH   ÚAssertionErrorri   rJ   Úappend)r'   rb   r’   Úmutable_clss       r)   Ú
_track_objzSideEffects._track_objÛ   s°   € ð �‰Ð*Ð*Ð*äˆd‹8�t×*Ñ*Ñ*Ü Ø�*ð )ð *2¯©Ð(9ð :8Ø8<×8KÑ8KÌBÈtËHÑ8U×8\Ñ8\Ð7]Ð]^ð	`óð ñ "-¨X¯_©_Ó!=ˆÔØ(0ˆ×ÑœB˜t›HÑ%Ø�‰×Ñ˜dÔ#Øˆr*   c                 ó2   — | j                  ||t        ¬«      S )N)r—   )r˜   r8   )r'   rb   r’   s      r)   Útrack_object_existingz!SideEffects.track_object_existingô   s   € ð
 �‰˜t XÔ;TˆÓUÐUr*   r<   Úuser_clsÚvariable_clsc                 óì  — |t         j                  j                  j                  u r>t	        j
                  d¬«      5  t         j                  j                  «       }d d d «       n;t        |t         j                  j                  «      rt        |«      }nt        |«      } |fdt        d |«      i|¤Ž}|| j                  t        |«      <   | j                  j!                  |«       |S # 1 sw Y   ŒSxY w)NT)Úrecordri   )ÚtorchÚautogradÚfunctionÚFunctionCtxÚwarningsÚcatch_warningsÚFunctionÚ
issubclassÚnnÚModuler   r   r;   rH   r`   rJ   r–   )r'   r<   r›   rœ   ÚoptionsÚobjr’   s          r)   Útrack_object_newzSideEffects.track_object_newû   sÏ   € ð ”u—~‘~×.Ñ.×:Ñ:Ñ:Ü×(Ñ(°Ô5ñ 0Ü—n‘n×-Ñ-Ó/�÷0ð 0ä˜¤%§(¡(§/¡/Ô2Ü Ó)‰Cä˜XÓ&ˆCÙØñ
ä.¨t°ZÓ@ð
ð ñ
ˆð
 (0ˆ×ÑœB˜s›GÑ$Ø�‰×Ñ˜cÔ"Øˆ÷0ð 0ús   ½C*Ã*C3c                 óÐ  — |j                   }|j                  }t        j                  }t	        |t
        j                  j                  «      rt        j                  }nCt	        |t        «      rt        j                  }n"t        |«      rt        }nt        j                  }t	        |t        j                  «      sJ ‚t        j                  ||¬«      }| j                  |||i «      S )N)r<   )r    rl   r   ÚUserDefinedObjectVariabler¦   rŸ   r§   r¨   ÚUnspecializedNNModuleVariabler   ÚMutableMappingVariabler   r   Ú	functoolsÚpartialr«   )r'   Úcls_variabler<   r›   rœ   s        r)   Ú(track_object_new_from_user_defined_classz4SideEffects.track_object_new_from_user_defined_class  sµ   € ð "×(Ñ(ˆ
Ø×%Ñ%ˆô
 ×/Ñ/ð 	ô �h¤§¡§¡Ô0Ü$×BÑB‰LÜ˜¤.Ô1Ü$×;Ñ;‰LÜ  Ô*Ü2‰Lä$×>Ñ>ˆLä˜,¬	×(KÑ(KÔLÐLÐLä ×(Ñ(¨À*ÔMˆà×$Ñ$ Z°¸<ÈÓLÐLr*   c                 óÀ   — t        «       }t        j                  t        d d «      ¬«      }|| j                  t        |«      <   | j                  j                  |«       |S ©N©ri   )r†   r   rx   r;   rH   r`   rJ   r–   )r'   rª   r’   s      r)   Útrack_cell_newzSideEffects.track_cell_new,  sR   € ô ‹hˆÜ×,Ñ,Ü.¨t°TÓ:ô
ˆð (0ˆ×ÑœB˜s›GÑ$Ø�‰×Ñ˜cÔ"Øˆr*   r    c                 óª   — t        j                  t        |«      ¬«      }|| j                  t	        |«      <   | j
                  j                  |«       |S rµ   )r   rx   r8   rH   r`   rJ   r–   ©r'   r    rb   r’   s       r)   Útrack_cell_existingzSideEffects.track_cell_existing7  sG   € Ü×,Ñ,Ü3°FÓ;ô
ˆð )1ˆ×ÑœB˜t›HÑ%Ø�‰×Ñ˜dÔ#Øˆr*   c                 óª   — t        j                  t        |«      ¬«      }|| j                  t	        |«      <   | j
                  j                  |«       |S rµ   )r   ÚNewGlobalVariabler8   rH   r`   rJ   r–   r¹   s       r)   Útrack_global_existingz!SideEffects.track_global_existing?  sG   € Ü×.Ñ.Ü3°FÓ;ô
ˆð )1ˆ×ÑœB˜t›HÑ%Ø�‰×Ñ˜dÔ#Øˆr*   c                 óv   — t        |t        j                  «      sJ ‚| j                  j	                  ||f«       y r#   )rR   r   rg   rL   r–   )r'   ÚctxÚargss      r)   Útrack_save_for_backwardz#SideEffects.track_save_for_backwardG  s0   € Ü˜#œy×HÑHÔIÐIÐIØ×Ñ×%Ñ% s¨D kÕ2r*   c                 óÒ   — |j                   D ]X  }t        |«      }|j                  |   }|| j                  vsŒ,t        |t        j
                  «      sŒG| j                  ||«       ŒZ y r#   )rJ   r`   rH   rR   r   ÚTensorVariablerš   )r'   rO   Ú
other_itemÚother_idÚother_variables        r)   Ú1track_tensor_variables_from_runahead_side_effectsz=SideEffects.track_tensor_variables_from_runahead_side_effectsK  sd   € ð  Ÿ/™/ò 	GˆJÜ˜*“~ˆHØ"×1Ñ1°(Ñ;ˆNØ˜t×2Ñ2Ò2´zØ¤	× 8Ñ 8õ8ð ×*Ñ*¨:°~ÕFñ	Gr*   c                 óx  ‡ ‡‡‡‡	— t        «       Št        i «      Š	dt        fˆˆ ˆˆ	fd„Šdt        t        t        f   fˆˆfd„Š‰ j                  j                  «       D �cg c]  }t        |j                  t        «      s|‘Œ  }}t        j                  ‰|j                  |j                  |f«       ‰ j                  j                  «       D ��ci c]  \  }} ‰|«      sŒ||“Œ c}}‰ _        ‰ j                  j                  «       D ��ci c]  \  }} ‰|«      sŒ||“Œ c}}‰ _        y c c}w c c}}w c c}}w )NÚvarc                 ó  •— | j                   }|€y |‰v ry ‰j                  |«       t        |t        «      r‰j                  |«       | j                   ‰j                  v r.t        j                  ‰‰j                  | j                      «       y y r#   )ri   ÚaddrR   r;   rI   r   Úvisit)rÉ   ri   Úlive_new_objectsr'   rÌ   Úvisiteds     €€€€r)   rÌ   z0SideEffects.prune_dead_object_new.<locals>.visit^  s†   ø€ Ø×-Ñ-ˆMØÐ$ØØ Ñ'ØØ�K‰K˜Ô&ä˜-Ô)=Ô>Ø ×$Ñ$ ]Ô3ð × Ñ  D×$=Ñ$=Ñ=Ü×%Ñ%Ø˜4×4Ñ4°S×5FÑ5FÑGõð >r*   c                 ór   •— t        | t        «      r| ‰v S t        | t        «      r ‰| j                  «      S yr‘   )rR   r;   r   ri   )rÉ   Úis_liverÍ   s    €€r)   rÐ   z2SideEffects.prune_dead_object_new.<locals>.is_livep  s8   ø€ Ü˜#Ô3Ô4ØÐ.Ð.Ð.Ü˜#œÔ/Ù˜s×0Ñ0Ó1Ð1Ør*   )Úsetr   r	   r   rH   ÚvaluesrR   ri   r;   rÌ   ÚstackÚsymbolic_localsr@   rI   )
r'   ÚtxrÉ   Úpre_existing_varsrC   rD   rÐ   rÍ   rÌ   rÎ   s
   `     @@@@r)   Úprune_dead_object_newz!SideEffects.prune_dead_object_newW  s  ü€ Ü›5Ðô ˜2“wˆð	”÷ 	ð 	ð$	œÔ/´Ð@ÑAö 	ð ×*Ñ*×1Ñ1Ó3ö
àÜ˜c×/Ñ/Ô1EÔFò ð
Ðð 
ô 	×Ñ˜e b§h¡h°×0BÑ0BÐDUÐ%VÔWð "×0Ñ0×6Ñ6Ó8÷
Ù�Q˜¹GÀA½JˆAˆq‰Dó
ˆÔð "×6Ñ6×<Ñ<Ó>÷%
Ù�Q˜Á'È!Å*ˆAˆq‰Dó%
ˆÕ!ùò)
ùó"
ùó%
s   Á #D+ÃD0Ã D0ÄD6ÄD6c                 ó¦   — | j                  |«       t        |j                  t        «      r&t        |j                  j                  d«      |_        y y r‘   )rj   rR   ri   r   r    ©r'   rÉ   s     r)   ÚmutationzSideEffects.mutation�  sA   € Ø×&Ñ& sÔ+Ü�c×'Ñ'Ô);Ô<Ü 2°3×3DÑ3D×3KÑ3KÈTÓ RˆCÕð =r*   c                 ó€   — | j                   j                  «       D �cg c]  }| j                  |«      sŒ|‘Œ c}S c c}w r#   )rH   rÒ   r!   rÙ   s     r)   Ú_get_modified_varszSideEffects._get_modified_vars”  s3   € Ø#×2Ñ2×9Ñ9Ó;ÖU˜¸t×?OÑ?OÐPSÕ?T’ÒUÐUùÒUs   �;´;Úcgc           	      óÖ  ‡— | j                  «       D �]Þ  }t        |j                  t        t        f«      r�t        |t
        j                  «      rƒ‰j                  ˆfd„«       ‰j                  t        dd«      «       ‰j                  |«       t        |j                  t        «      sŒ™t        ‰j                  |   «      |j                  _        ŒÁt        |j                  t        «      rªt        |t
        j                  «      rt        d«       ‰j                  ˆfd„«        ‰|j                  j                   «       ‰j                  t        dd«      «       ‰j                  |«       t        ‰j                  |   «      |j                  _        �Œ…|‰j                  v s�Œ•‰j                  j#                  |«      �J ‚ ‰|j                  j                  «       ‰j                  |«       �Œá | j$                  D ]g  \  }} ‰|j                  «       ‰j'                  d«       |D ]
  } ‰|«       Œ ‰j                  g t)        t+        |«      «      ¢t-        d«      ‘«       Œi y )	Nc                  óD   •— ‰ j                  t        j                  d«      S )NÚ	make_cell©Úload_import_fromr   r,   ©rÝ   s   €r)   ú<lambda>z3SideEffects.codegen_save_tempvars.<locals>.<lambda>�  s   ø€ ˜B×/Ñ/´·±ÀÓL€ r*   r   Fz'AutogradFunctionContextVariable escapedc                  óD   •— ‰ j                  t        j                  d«      S )Nr   rá   rã   s   €r)   rä   z3SideEffects.codegen_save_tempvars.<locals>.<lambda>§  s   ø€ ˜B×/Ñ/´·±ÀÓM€ r*   r
   rL   ÚPOP_TOP)rÜ   rR   ri   r8   r;   r   rx   Úadd_push_nullÚextend_outputr   Ú	add_cacher   Útempvarsr    rg   r   r<   r‹   rL   Úload_methodr   Úlenr   )r'   rÝ   rÉ   r¿   rÀ   Úargs    `    r)   Úcodegen_save_tempvarsz!SideEffects.codegen_save_tempvars—  sõ  ø€ Ø×*Ñ*Ó,ó 	"ˆCÜØ×!Ñ!Ô$=Ô?SÐ#Tôä˜S¤)×";Ñ";Ô<Ø× Ñ ÛLôð × Ñ Ô!5°a¸Ó!?Ô@Ø—‘˜SÔ!Ü˜c×/Ñ/Ô1EÕFÜ/:¸2¿;¹;ÀsÑ;KÓ/L�C×%Ñ%Õ,Ü˜C×-Ñ-Ô/CÔDÜ˜c¤9×#LÑ#LÔMÜ!Ð"KÔLØ× Ñ ÛMôñ �3×$Ñ$×/Ñ/Ô0Ø× Ñ Ô!5°a¸Ó!?Ô@Ø—‘˜SÔ!Ü+6°r·{±{À3Ñ7GÓ+H�×!Ñ!Ö(Ø˜Ÿ™Ó#Ø—{‘{—‘ sÓ+Ð3Ð3Ð3á�3×$Ñ$×+Ñ+Ô,Ø—‘˜SÖ!ð3	"ð6 ×/Ñ/ò 
	‰IˆC�Ùˆs�z‰zŒNØ�N‰NÐ.Ô/Øò �Ù�3•ðà×ÑðÜ'¬¨D«	Ó2ðä& yÓ1ðõñ
	r*   c                 óÖ  — t        |t        j                  «      sJ ‚t        |t        j                  «      sJ ‚t        |t        j                  «      r|j
                  sJ ‚t        t        j                  |«      sJ ‚t        | j                  j                  «       «      }|| j                  v r|dz  }|| j                  v rŒ||||f| j                  |<   |j                  rJ ‚||_        y )Nr
   )rR   r   rÃ   r   ÚRemovableHandleVariableri   ÚhasattrrŸ   ÚTensorrì   rM   rU   Úidx)r'   ÚtensorÚhookÚhandlerk   ró   s         r)   Úregister_hookzSideEffects.register_hook¿  sÓ   € Ü˜&¤)×":Ñ":Ô;Ð;Ð;Ü˜$¤	× 9Ñ 9Ô:Ð:Ð:ä�vœy×@Ñ@ÔAØ×$Ò$ð	
ð%ô ”u—|‘| TÔ*Ð*Ð*Ü�$×#Ñ#×(Ñ(Ó*Ó+ˆà�T×&Ñ&Ñ&Ø�1‰HˆCð �T×&Ñ&Ò&à"(¨$°¸Ð!=ˆ×Ñ˜#ÑØ—:’:Ðˆ~Øˆ�
r*   c                 ó   — | j                   |= y r#   )rM   )r'   ró   s     r)   Úremove_hookzSideEffects.remove_hookÏ  s   € Ø×Ñ˜cÑ"r*   c                 ó  ‡‡‡— | j                   j                  «       D ]f  \  Š}}Š‰j                  sJ d«       ‚ˆˆˆfd„}‰j                  |«        ‰|«       ‰j	                  t        dd«      «       ‰j                  |«       Œh y )Nz4Hooks on non input tensors NYI - should not get herec                  óX   •—  ‰ ‰«       ‰ j                  ‰ j                  ‰«      g«       y r#   )rè   Úcreate_load_attr)rÝ   rk   rô   s   €€€r)   Úgen_fnz)SideEffects.codegen_hooks.<locals>.gen_fnü  s&   ø€ Ù�6”
Ø× Ñ  "×"5Ñ"5°dÓ";Ð!<Õ=r*   r
   F)rM   rÒ   r    rç   rè   r   ré   )r'   rÝ   rõ   rö   rý   rk   rô   s    `   @@r)   Úcodegen_hookszSideEffects.codegen_hooksÒ  sˆ   ú€ ð ×Ñ×%Ñ%Ó'ò3	!ñ 
ØØØØðF —=’=ÐXÐ"XÓX�=ö>ð ×Ñ˜VÔ$ÙˆtŒHØ×ÑÔ1°!°UÓ;Ô<ð �L‰L˜Õ ñg3	!r*   c                 ó€   — ddl m} | j                  €!t        j                  g  |«       ¬«      | _        | j                  S )Nr
   )ÚMutableLocalr¶   )Úvariables.baser   rN   r   ÚListVariable)r'   r   s     r)   Úget_ca_final_callbacks_varz&SideEffects.get_ca_final_callbacks_var  s9   € Ý0à×&Ñ&Ð.Ü*3×*@Ñ*@Ø¡,£.ô+ˆDÔ'ð ×*Ñ*Ð*r*   c           	      ó¦  ‡‡
— g }| j                  «       D �]  Š
t        ‰
t        j                  «      r ‰‰
d¬«        ‰‰
j                  j
                  «       ‰j                  ‰j                  d «      ‰j                  d «      t        dd¬«      g«       |j                  t        d«      g«       Œ�t        ‰
t        j                  «      �r"i }t        j                  j                  D ])  }‰j                  j                  j!                  «       ||<   Œ+  ‰‰
j                  j
                  «       ‰j                  t        d|d   ¬	«      g«        ‰‰
d¬«       ‰j                  t        d|d
   ¬	«      g«        ‰‰
j                  j
                  «       ‰j#                  d«       t%        t        |¬«      }|j                  g t'        d«      ¢t        d«      ‘|¢t        d«      ‘«       �ŒÚt        ‰
t        j(                  «      r£ ‰‰
j                  j
                  «       ‰j#                  d«        ‰‰
d¬«        ‰‰
j                  j
                  «       ‰j#                  d«       |j                  g t'        d«      ¢t        d«      ‘t'        d«      ¢t        d«      ‘«       �Œ—t        ‰
t        j*                  j,                  «      rŒ‰j/                  ˆfd„«       ‰j1                  ‰
j2                  «       ‰j5                  t        dt7        ‰
j2                  «      ¬«      «       ‰j9                  dd«       ‰j5                  t        d«      «       �ŒG| j;                  ‰
«      �rœt=        | j>                  jA                  ‰
j                  i «      jC                  «       «      D �]Y  \  }}t        ‰
t        jD                  «      rq‰j                  j                  jG                  |«        ‰|«       t        ‰
j                  j
                  tH        «      sJ ‚|j                  t        d|¬	«      g«       Œ’t        |t        jJ                  «      r“t        ‰
j                  tL        «      sŒÇtO        tQ        ‰
dd «      |«      sŒß‰j                  j                  jG                  |«        ‰‰
j                  j
                  «       |j                  t        d|¬	«      g«       �Œ?t        ‰
t        jR                  «      r›‰
jU                  «       r‹‰jW                  dd«       ‰j#                  d«        ‰‰
j                  j
                  «        ‰t        jX                  |«      «        ‰|«       |j                  g t'        d«      ¢t        d«      ‘«       �Œô‰j                  j                  jG                  |«        ‰|«        ‰‰
j                  j
                  «       |j                  t        d|¬	«      g«       �Œ\ �Œõt        ‰
t        jZ                  «      rnt]        ‰
j^                  «      D ]T  }‰j/                  ˆfd„«        ‰‰
j                  j
                  «       ‰j9                  dd«       ‰ja                  «        ŒV �Œ}t        ‰
t        jb                  «      rpˆˆ
fd„}‰j/                  |«        ‰‰
je                  ‰
jf                  ji                  «       «      «       |j                  g tk        dd«      ¢t        d«      ‘«       �Œtm        to        ‰
«      «      ‚ t=        |«      D ]  }	‰j                  |	«       Œ y )NF)Úallow_cacheÚBUILD_SLICEé   )rí   ÚSTORE_SUBSCRÚ
STORE_FASTrB   )ÚargvalrA   Úclear)Úvarname_mapr   ræ   Úupdater
   c                  óD   •— ‰ j                  t        j                  d«      S )NÚset_torch_function_mode_stackrá   rã   s   €r)   rä   z4SideEffects.codegen_update_mutated.<locals>.<lambda>U  s   ø€ ˜B×/Ñ/ÜŸ™Ð(Gó€ r*   Ú
BUILD_LISTÚSTORE_GLOBALrl   ÚDELETE_ATTRÚbuiltinsr†   Ú__setattr__é   Ú
STORE_ATTRc                  óD   •— ‰ j                  t        j                  d«      S )NÚ	iter_nextrá   rã   s   €r)   rä   z4SideEffects.codegen_update_mutated.<locals>.<lambda>˜  s   ø€  × 3Ñ 3´E·N±NÀKÓ P€ r*   c                  ó`   •—  ‰ ‰j                   j                  «       ‰ j                  d«       y )NÚsetstate)ri   r    rt   )rÝ   rÉ   s   €€r)   rý   z2SideEffects.codegen_update_mutated.<locals>.gen_fnŸ  s#   ø€ Ù�s×(Ñ(×/Ñ/Ô0Ø—L‘L Õ,r*   )8rÜ   rR   r   r  ri   r    rè   Úcreate_load_constr   r–   ÚCustomizedDictVariablerE   Ú__code__Úco_varnamesrÕ   ÚoutputÚnew_varrë   r   r   ÚConstDictVariableÚtorch_functionÚTorchFunctionModeStackVariablerç   ÚforeachÚsymbolic_stackÚappend_outputrì   Úcall_functionrn   ÚreversedrI   r‹   r@   r¼   Úupdate_co_namesr   rq   r8   rñ   Úgetattrr­   Úneeds_slow_setattrrâ   ÚConstantVariableÚTupleIteratorVariableÚrangeÚindexÚpop_topÚRandomVariableÚ
wrap_stateÚrandomÚgetstater   r•   Útype)r'   rÝ   Úsuffixesr  rk   Údict_update_instsrl   Ú_rý   ÚsuffixrÉ   s    `        @r)   Úcodegen_update_mutatedz"SideEffects.codegen_update_mutated  s  ù€ ØˆØ×*Ñ*Ó,ó Z	0ˆCÜ˜#œy×5Ñ5Ô6á�3 EÕ*Ù�3×$Ñ$×+Ñ+Ô,Ø× Ñ à×,Ñ,¨TÓ2Ø×,Ñ,¨TÓ2Ü*¨=¸aÔ@ðôð —‘Ô!3°NÓ!CÐ DÕEÜ˜C¤×!AÑ!AÕBà �Ü/×8Ñ8×DÑDò ?�DØ(*¯©¯©×(<Ñ(<Ó(>�K Ò%ð?ñ �3×$Ñ$×+Ñ+Ô,Ø× Ñ Ü'¨¸[ÈÑ=SÔTÐUôñ �3 EÕ*Ø× Ñ Ü'¨¸[ÈÑ=UÔVÐWôñ �3×$Ñ$×+Ñ+Ô,Ø—‘˜wÔ'ô %;Ü'°[ô%Ð!ð —‘ðÜ+¨AÓ.ðä*¨9Ó5ðð +ðô +¨9Ó5ð	öô ˜C¤×!<Ñ!<Ô=Ù�3×$Ñ$×+Ñ+Ô,Ø—‘˜xÔ(Ù�3 EÕ*á�3×$Ñ$×+Ñ+Ô,Ø—‘˜wÔ'à—‘ðÜ+¨AÓ.ðä*¨9Ó5ðô ,¨AÓ.ðô +¨9Ó5ð	öô Ø”Y×-Ñ-×LÑLôð × Ñ óôð
 —
‘
˜3×-Ñ-Ô.Ø× Ñ Ü& |¼¸S×=OÑ=OÓ9PÔQôð × Ñ   EÔ*Ø× Ñ Ô!3°IÓ!>Ö?Ø×+Ñ+¨CÕ0ô" $,Ø×-Ñ-×1Ñ1°#×2CÑ2CÀRÓH×NÑNÓPó$ó $Y‘K�D˜%ô " #¤y×'BÑ'BÔCØŸ™Ÿ™×4Ñ4°TÔ:Ù˜5œ	Ü)¨#×*;Ñ*;×*BÑ*BÄLÔQÐQÐQØ Ÿ™Ü/°ÀtÔLÐMõô $ E¬9×+DÑ+DÔEÜ%Ø×-Ñ-Ô/Hõä%¤g¨c°7¸DÓ&AÀ4ÕHØŸE™EŸL™L×8Ñ8¸Ô>Ù˜s×0Ñ0×7Ñ7Ô8Ø$ŸO™OÜ!3°MÈ$Ô!OÐ Pöô # 3¬	×(KÑ(KÔLØ×2Ñ2Ô4ð ×+Ñ+¨J¸ÔAØŸ™ }Ô5Ù˜3×,Ñ,×3Ñ3Ô4Ùœ9×5Ñ5°dÓ;Ô<Ù˜5œ	Ø Ÿ™ØSÔ0°Ó3ÐSÔ5GÈ	Ó5RÐSöð Ÿ™Ÿ™×4Ñ4°TÔ:Ù˜5œ	Ù˜3×,Ñ,×3Ñ3Ô4Ø Ÿ™Ô);¸LÐQUÔ)VÐ(WÖXòI$YôJ ˜C¤×!@Ñ!@ÔAÜ˜sŸy™yÓ)ò !�AØ×$Ñ$ÛPôñ �s×(Ñ(×/Ñ/Ô0Ø×$Ñ$ Q¨Ô.Ø—J‘J•Lò!ô ˜C¤×!9Ñ!9Ô:õ-ð × Ñ  Ô(Ù�3—>‘> #§*¡*×"5Ñ"5Ó"7Ó8Ô9à—‘ðÜ-¨a°Ó7ðä*¨9Ó5ðöô %¤T¨#£YÓ/Ð/ðuZ	0ôz ˜xÓ(ò 	%ˆFØ×Ñ˜VÕ$ñ	%r*   c                 óÆ   — t        t        | j                  | j                  j	                  «       «      «      xs( | j
                  xs | j                  xs | j
                   S r#   )ÚanyÚmapr!   rH   rÒ   rM   rL   ©r'   s    r)   Úis_emptyzSideEffects.is_empty³  s\   € ä”�D×$Ñ$ d×&9Ñ&9×&@Ñ&@Ó&BÓCÓDò !Ø× Ñ ò!à×%Ñ%ò!ð × Ñ ð	
ð 	
r*   c                 ól   — | j                   j                  «        | j                  j                  «        y r#   )rJ   r  rH   r>  s    r)   r  zSideEffects.clear»  s$   € Ø�‰×ÑÔØ×Ñ×!Ñ!Õ#r*   )NNNNNr+   )r²   z"variables.UserDefinedClassVariable);r,   r-   r.   r/   r   Úintr   Ú__annotations__r   Ústrr   r   r%   r†   r0   rS   r   rZ   r^   rc   re   rj   ro   rt   rz   r|   r   r�   Ústaticmethodrˆ   rn   rŒ   r�   r!   r   r˜   Útrack_mutablerš   r   r«   r³   r·   rº   r½   rÁ   rÇ   r×   rÚ   rÜ   r   rî   r÷   rù   rþ   r  r:  r?  r  r1   r2   s   @r)   rG   rG   F   s  ø… ñð
 ˜˜oÐ-Ñ.Ó.ØÐ/°°c¸?Ð6JÑ1KÐKÑLÓLØ�C‰yÓð Ø!ØØØõ+ð$
˜Fð 
 tó 
ð˜-ð ¨H°S©Mó ò,

ò/ò-ò
ðD˜ð D°cð DÀ/ó Dóò9ò
8ð* ð *°só *ð+ ð +¸ð +ÀOó +ð
 ñ
ó ð
òAò
ò
Lò
.ð 'ñ	àðð "óð. €MðVàðVð "óVðàðð ðð ó	ð.Mà:óMò4	ð¨&ð ¸ó ð¨Fð ¸#ó ò3ò
Gò6
òpSò
Vð&¨	ó &òPò #ò4!òl+ð`%¨ó `%òD
ö$r*   rG   ).r°   r„   r£   Úcollections.abcr   Útypingr   r   r   r   r   r	   Útorch.nnrŸ   Ú r   r   Úbytecode_transformationr   r   r   r   Úcodegenr   Úexcr   r    r   r   r   r   r   r   r  r   r   r   r   Úvariables.user_definedr   r   r4   r8   r;   rE   rG   rŽ   r*   r)   ú<module>rN     s�   ðã Û Û Ý *ß 9× 9ã ç ÷ó õ Ý ß 5Ñ 5ß AÑ A÷ó õ <ô
'Ð)ô 
'ôÐ(ô ôÐ 1ô ô%Ð,ô %ò÷
w	$ò w	$r*   