§
    ž²ÅjN  ã                   óð   — d dl Z d dlZd dlmZmZmZ d dlZd dlmZ ddl	m
Z
 ddlmZmZ ej        j        j        Z G d„ d¦  «        Zd	ed
eddfd„Zdeddfd„Z G d„ d¦  «        Zd	ededefd„Zdd„ZdS )é    N)ÚAnyÚListÚType)ÚModuleé   )Úconfig)ÚExactWeakKeyDictionaryÚnn_module_has_global_hooksc                   óV   — e Zd ZU  e¦   «         Zeed<   d	d„Zdeddfd„Zde	ddfd„Z
dS )
ÚMutationTrackerÚdbÚreturnNc                 ó"   — d| _         g | _        d S ©Nr   )Úmutation_countÚwatchers)Úselfs    úMC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/mutation_guard.pyÚ__init__zMutationTracker.__init__   s   € Ø#$ˆÔØ:<ˆŒˆˆó    Únamec                 óŽ   — | xj         dz  c_         | j        }g | _        |D ]#} |¦   «         }|�|                     |¦  «         Œ$d S )Nr   )r   r   Ú
invalidate)r   r   ÚtmpÚrefÚguardeds        r   Úon_mutationzMutationTracker.on_mutation   sc   € ØÐÔ˜qÑ ÐÔØŒmˆØˆŒØð 	(ð 	(ˆCØ�c‘e”eˆGØÐ"Ø×"Ò" 3Ñ'Ô'Ð'øð	(ð 	(r   Úguarded_codec                 ó^   — | j                              t          j        |¦  «        ¦  «         d S ©N)r   ÚappendÚweakrefr   )r   r   s     r   ÚtrackzMutationTracker.track   s(   € ØŒ×Ò�Wœ[¨Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7r   ©r   N)Ú__name__Ú
__module__Ú__qualname__r	   r   Ú__annotations__r   Ústrr   r   r#   © r   r   r   r      sˆ   € € € € € € Ø!7Ð!7Ñ!9Ô!9€BÐÐ9Ð9Ñ9ð=ð =ð =ð =ð( ð (¨ð (ð (ð (ð (ð8 #ð 8¨$ð 8ð 8ð 8ð 8ð 8ð 8r   r   Úobjr   r   c                 óÞ   — t          t          | ¦  «        ¦  «         | t          j        vrt          ¦   «         t          j        | <   t          j        |          }|                     |¦  «         dS )z+invalidate guarded_code when obj is mutatedN)Úensure_patchedÚtyper   r   r#   )r+   r   Útrackers      r   Úwatchr0   #   s\   € å•4˜‘9”9ÑÔÐà
•/Ô$Ð$Ð$Ý"1Ñ"3Ô"3�Ô˜3ÑÝÔ  Ô%€GØ‡M‚M�,ÑÔÐÐÐr   Úclsc           	      óÆ   ‡— t          | dd¦  «        rNd| _        | j        Št          j        ‰¦  «        dt
          dt          dt
          dd fˆfd„¦   «         }|| _        d S d S )	NÚ___needs_mutation_patchTFr   ÚkeyÚvaluer   c                 óŒ   •— 	 t           j        |                               |¦  «         n# t          $ r Y nw xY w ‰| ||¦  «        S r    )r   r   r   ÚKeyError)r   r4   r5   Úoriginal_setattrs      €r   Úcustom_setattrz&ensure_patched.<locals>.custom_setattr2   s\   ø€ ðÝÔ" 4Ô(×4Ò4°SÑ9Ô9Ð9Ð9øÝð ð ð Ø�ðøøøà#Ð# D¨#¨uÑ5Ô5Ð5s   ƒ%) ©
6µ6)Úgetattrr3   Ú__setattr__Ú	functoolsÚwrapsr   r)   )r1   r9   r8   s     @r   r-   r-   -   s�   ø€ ÝˆsÐ-¨tÑ4Ô4ð )Ø&+ˆÔ#Øœ?Ðå	ŒÐ)Ñ	*Ô	*ð	6¥ð 	6­3ð 	6µsð 	6¸tð 	6ð 	6ð 	6ð 	6ð 	6ñ 
+Ô	*ð	6ð )ˆŒˆˆð)ð )r   c                   ó  — e Zd ZU dZeed<    e¦   «         Zeed<    e¦   «         Zeed<   e	de
ddfd„¦   «         Zed	eej        j                 ddfd
„¦   «         Ze	de
defd„¦   «         Ze	de
defd„¦   «         Ze	dd„¦   «         ZdS )ÚGenerationTrackerr   Ú
generationÚdynamic_classesÚgeneration_valuesr+   r   Nc                 ó$   — | j         | j        |<   d S r    )r@   rB   ©r1   r+   s     r   ÚtagzGenerationTracker.tagB   s   € à%(¤^ˆÔ˜cÑ"Ð"Ð"r   r1   c                 óf   — t          | t          j        j        ¦  «        sJ ‚dt          j        | <   d S )NT)Ú
issubclassÚtorchÚnnr   r?   rA   ©r1   s    r   Úmark_class_dynamicz$GenerationTracker.mark_class_dynamicF   s0   € å˜#�uœxœÑ/Ô/Ð/Ð/Ð/Ø15ÕÔ)¨#Ñ.Ð.Ð.r   c                 ó2   — || j         vrdS | j         |         S )Néÿÿÿÿ)rB   rD   s     r   Úget_generation_valuez&GenerationTracker.get_generation_valueK   s#   € à�cÔ+Ð+Ð+Ø�2ØÔ$ SÔ)Ð)r   c                 ó@   — || j         v o| j         |         | j        k    S r    )rB   r@   rD   s     r   ÚcheckzGenerationTracker.checkQ   s+   € ð �3Ô(Ð(ð =ØÔ% cÔ*¨c¬nÒ<ð	
r   c                 ó`   — d| _         t          ¦   «         | _        t          ¦   «         | _        d S r   )r@   r	   rA   rB   rJ   s    r   ÚclearzGenerationTracker.clearX   s+   € àˆŒÝ4Ñ6Ô6ˆÔÝ 6Ñ 8Ô 8ˆÔÐÐr   r$   )r%   r&   r'   r@   Úintr(   r	   rA   rB   Úclassmethodr   rE   Ústaticmethodr   rH   rI   r   rK   rN   ÚboolrP   rR   r*   r   r   r?   r?   =   s:  € € € € € € Ø€J�ÐÐÑØ.DÐ.DÑ.FÔ.F€OÐ+ÐFÐFÑFØ0FÐ0FÑ0HÔ0HÐÐ-ÐHÐHÑHàð4�cð 4˜dð 4ð 4ð 4ñ „[ð4ð ð6  U¤X¤_Ô 5ð 6¸$ð 6ð 6ð 6ñ „\ð6ð ð* sð *¨sð *ð *ð *ñ „[ð*ð
 ð
˜ð 
 ð 
ð 
ð 
ñ „[ð
ð ð9ð 9ð 9ñ „[ð9ð 9ð 9r   r?   Ú	is_exportc                 óÐ  — t          | t          j        j        ¦  «        rd| j        v rdS t          | d¦  «        r| j        S t          | t          j        j        ¦  «        rt          j        r|sdS t          | t          j        j        ¦  «        rt          ¦   «         rdS t          j                             t          | ¦  «        ¦  «        pt                               | ¦  «        }|S )z5Check for nn.Modules() created dynamically or mutatedÚforwardTÚtorchdynamo_force_dynamic)Ú
isinstancerH   rI   r   Ú__dict__ÚhasattrrZ   r   Úinline_inbuilt_nn_modulesr
   r?   rA   Úgetr.   rP   )r+   rW   Údyns      r   Úis_dynamic_nn_modulera   _   sà   € å�#•u”x”Ñ'Ô'ð ¨I¸¼Ð,EÐ,EàˆtÝˆsÐ/Ñ0Ô0ð -ØÔ,Ð,õ 	�3�œœÑ(Ô(ðåÔ,ðð ðð
 ˆtå�#•u”x”Ñ'Ô'ð Õ,FÑ,HÔ,Hð ØˆtÝ
Ô
+×
/Ò
/µ°S±	´	Ñ
:Ô
:ð Õ>O×>UÒ>UØñ?ô ?€Cð €Jr   c                  ó>  ‡‡— t          t          dd¦  «        rot          j        Šdt          dt          dt          ddfˆfd„} | t          _        t          j        Šdt          d	t          ddfˆfd
„}|t          _        dt          _        t          xj        dz  c_        dS )z¥
    Monkey patch torch.nn.Module.__init__ and torch.nn.Module.__setstate__
    so we can detect nn.Module instances created dynamically inside forward methods.
    Ú___needs_generation_tag_patchTr   ÚargsÚkwargsr   Nc                 óT   •—  ‰| g|¢R i |¤Ž t                                | ¦  «         d S r    ©r?   rE   )r   rd   re   Úinits      €r   Úpatched_initz5install_generation_tagging_init.<locals>.patched_init‚   s=   ø€ ØˆD�Ð'˜Ð'Ð'Ð' Ð'Ð'Ð'Ý×!Ò! $Ñ'Ô'Ð'Ð'Ð'r   Ústatec                 óT   •—  ‰| |¦  «         t                                | ¦  «         d S r    rg   )r   rj   Úsetstates     €r   Úpatched_setstatez9install_generation_tagging_init.<locals>.patched_setstateŠ   s/   ø€ ØˆH�T˜5Ñ!Ô!Ð!Ý×!Ò! $Ñ'Ô'Ð'Ð'Ð'r   Fr   )r:   r   r   r   Ú__setstate__rc   r?   r@   )ri   rm   rh   rl   s     @@r   Úinstall_generation_tagging_initro   y   sÌ   øø€ õ �vÐ6¸Ñ=Ô=ð 5ÝŒˆð	(�vð 	(­cð 	(½Sð 	(ÀTð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð '�ŒåÔ&ˆð	(¥6ð 	(µ#ð 	(¸$ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð /�Ôà/4�Ô,åÐ Ô  AÑ%Ð Ô Ð Ð r   r$   )r<   r"   Útypingr   r   r   Útorch.nnrH   r   Ú r   Úutilsr	   r
   rI   r   Úunpatched_nn_module_initr   r0   r-   r?   rV   ra   ro   r*   r   r   ú<module>ru      so  ðØ Ð Ð Ð Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eð !œ8œ?Ô3Ð ð8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ð( ˆsð   #ð  ¨$ð  ð  ð  ð  ð)˜ð ) ð )ð )ð )ð )ð 9ð 9ð 9ð 9ð 9ñ 9ô 9ð 9ðD˜cð ¨dð °tð ð ð ð ð4&ð &ð &ð &ð &ð &r   