+
    –°³ju  ã                   ó  € R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIt	^ RIH
t
 ^RIHt ^RIHtHt ]	P                   P                  P"                  t ! R R4      tR	 R
 ltR R lt ! R R4      tR R ltR R ltR# )aX  Mutation tracking and dynamic module detection system for Dynamo.

This module provides mechanisms to track and respond to mutations in PyTorch modules
and detect dynamically created or modified modules.

Key components:
- MutationTracker: Tracks mutations to objects and invalidates associated cached code
- GenerationTracker: Tracks module creation timing to identify dynamic instances
- Patching system for nn.Module to detect mutations and dynamic creation

The system ensures that Dynamo's optimizations remain valid by detecting and responding
to runtime changes in module state and structure.
N)ÚMutableMapping©ÚAny)ÚModule)Úconfig)ÚExactWeakKeyDictionaryÚnn_module_has_global_hooksc                   óp   a € ] tR t^t o ]! 4       tV 3R lR ltV 3R lR ltV 3R lR ltV 3R lt	Rt
V tR	# )
ÚMutationTrackerc                ó   <€ V ^8„  d   QhRR/# ©é   ÚreturnN© )ÚformatÚ__classdict__s   "€Ú]/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_dynamo/mutation_guard.pyÚ__annotate__ÚMutationTracker.__annotate__"   s   ø€ ÷ =ñ =˜$ñ =ó    c                ó"   € ^ V n         . V n        R# ©é    N©Úmutation_countÚwatchers)Úselfs   &r   Ú__init__ÚMutationTracker.__init__"   s   € Ø#$ˆÔØ:<ˆŽr   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Únamer   N)Ústr)r   r   s   "€r   r   r   &   s   ø€ ÷ (ñ (¡ð (¨ñ (r   c                ó¬   € V ;P                   ^,          un         V P                  p. V n        V F!  pV! 4       pVf   K  VP                  V4       K#  	  R# )é   N)r   r   Ú
invalidate)r   r    ÚtmpÚrefÚguardeds   &&   r   Úon_mutationÚMutationTracker.on_mutation&   sH   € Ø×Ò˜qÕ ÕØ�m‰mˆØˆŒÛˆCÙ“eˆGØÔ"Ø×"Ñ" 3Ö'ó r   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Úguarded_coder   Nr   )r   r   s   "€r   r   r   /   s   ø€ ÷ 8ñ 8¡#ð 8¨$ñ 8r   c                ód   € V P                   P                  \        P                  ! V4      4       R # ©N)r   ÚappendÚweakrefr&   )r   r+   s   &&r   ÚtrackÚMutationTracker.track/   s   € Ø�‰×ÑœWŸ[š[¨Ó6Ö7r   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )r   Údb)r   )r   r   s   "€r   r   r      s   ø‡ ‚ ÙÑ9ò r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r3   r   r(   r0   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r
   r
      s2   ø‡ € Ù!7Ó!9€B÷=ð =÷(ð (÷8ð 8÷! ƒ r   r
   c                ó4   € V ^8„  d   QhR\         R\         RR/# )r   Úobjr+   r   Nr   )r   s   "r   r   r   3   s!   € ÷  ñ  Œsð  ¤#ð  ¨$ñ  r   c                óÞ   € \        \        V 4      4       V \        P                  9  d   \        4       \        P                  V &   \        P                  V ,          pVP	                  V4       R# )z+invalidate guarded_code when obj is mutatedN)Úensure_patchedÚtyper
   r3   r0   )r=   r+   Útrackers   && r   ÚwatchrB   3   sK   € ä”4˜“9Ôà
”/×$Ñ$Ô$Ü"1Ó"3Œ×Ñ˜3ÑÜ× Ñ  Õ%€GØ‡M�M�,Ör   c                ó(   € V ^8„  d   QhR\         RR/# ©r   Úclsr   Nr   )r   s   "r   r   r   =   s   € ÷ )ñ )œð ) ñ )r   c                 ó¨   a€ \        V R R4      '       d>   RV n        V P                  o\        P                  ! S4      R V3R ll4       pWn        R# R# )Ú___needs_mutation_patchTFc                ó@   € V ^8„  d   QhR\         R\        R\         RR/# )r   r   ÚkeyÚvaluer   N)r   r!   )r   s   "r   r   Ú$ensure_patched.<locals>.__annotate__C   s(   € ÷ 	6ñ 	6¤ð 	6¬3ð 	6´sð 	6¸tñ 	6r   c                 ó†   <€  \         P                  V ,          P                  V4       S! WV4      #   \         d     Li ; ir-   )r
   r3   r(   ÚKeyError)r   rI   rJ   Úoriginal_setattrs   &&&€r   Úcustom_setattrÚ&ensure_patched.<locals>.custom_setattrB   sD   ø€ ðÜ×"Ñ" 4Õ(×4Ñ4°SÔ9ñ $ D¨uÓ5Ð5øô ô Ùðús   ƒ&2 ²A ¿A N)ÚgetattrrG   Ú__setattr__Ú	functoolsÚwraps)rE   rO   rN   s   & @r   r?   r?   =   sM   ø€ ÜˆsÐ-¨t×4Ò4Ø&+ˆÔ#ØŸ?™?Ðä	�ŠÐ)Ó	*÷	6ó 
+ð	6ð )Žñ 5r   c                   óØ   a € ] tR t^Mt o ^ t]! 4       t]! 4       t]V 3R lR l4       t	]
V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R	 lR
 l4       tV 3R ltRtV tR# )ÚGenerationTrackerc                ó$   <€ V ^8„  d   QhRS[ RR/# )r   r=   r   Nr   )r   r   s   "€r   r   ÚGenerationTracker.__annotate__S   s   ø€ ÷ 4ñ 4‘cð 4˜dñ 4r   c                ó8   € V P                   V P                  V&   R # r-   )Ú
generationÚgeneration_values©rE   r=   s   &&r   ÚtagÚGenerationTracker.tagR   s   € à%(§^¡^ˆ×Ñ˜cÓ"r   c                ó\   <€ V ^8„  d   QhRS[ S[P                  P                  ,          RR/# rD   )r@   ÚtorchÚnnr   )r   r   s   "€r   r   rX   W   s(   ø€ ÷ 6ñ 6¡¡U§X¡X§_¡_Õ 5ð 6¸$ñ 6r   c                óœ   € \        V \        P                  P                  4      '       g   \	        R V  24      hR\
        P                  V &   R# )z)Expected a torch.nn.Module subclass, got TN)Ú
issubclassr`   ra   r   ÚAssertionErrorrV   Údynamic_classes©rE   s   &r   Úmark_class_dynamicÚ$GenerationTracker.mark_class_dynamicV   s;   € ä˜#œuŸx™xŸ™×/Ò/Ü Ð#LÈSÈEÐ!RÓSÐSØ15Ô×)Ñ)¨#Ó.r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   r=   r   )r   Úint)r   r   s   "€r   r   rX   ]   s   ø€ ÷ *ñ *¡sð *©sñ *r   c                óL   € WP                   9  d   R# V P                   V,          # )r#   éÿÿÿÿ)r[   r\   s   &&r   Úget_generation_valueÚ&GenerationTracker.get_generation_value\   s$   € à×+Ñ+Ô+ØˆIØ×$Ñ$ SÕ)Ð)r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rj   ©r   Úbool)r   r   s   "€r   r   rX   c   s   ø€ ÷ 
ñ 
™ð 
¡ñ 
r   c                ón   € WP                   9   ;'       d!    V P                   V,          V P                  8H  # r-   )r[   rZ   r\   s   &&r   ÚcheckÚGenerationTracker.checkb   s6   € ð ×(Ñ(Ñ(÷ =ð =Ø×%Ñ% cÕ*¨c¯n©nÑ<ð	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   rX   j   s   ø€ ÷ 9ñ 9�dñ 9r   c                óP   € ^ V n         \        4       V n        \        4       V n        R# r   )rZ   r   re   r[   rf   s   &r   ÚclearÚGenerationTracker.cleari   s   € àˆŒÜ4Ó6ˆÔÜ 6Ó 8ˆÖr   c                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[;R&   # )r   rZ   re   r[   )rk   r   )r   r   s   "€r   r   rX   M   s(   ø‡ ‚ ÙÑñ á+ÑFñ ñ .ÑHò r   r   N)r4   r5   r6   r7   rZ   r   re   r[   Úclassmethodr]   Ústaticmethodrg   rn   rt   rx   r8   r9   r:   r;   s   @r   rV   rV   M   s„   ø‡ € Ø€JÙ.DÓ.F€OÙ0FÓ0HÐà÷4ó ð4ð ÷6ó ð6ð
 ÷*ó ð*ð
 ÷
ó ð
ð ÷9ó ð9÷; ƒ r   rV   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r=   Ú	is_exportr   rq   )r   s   "r   r   r   p   s!   € ÷ ñ œcð ¬dð ´tñ r   c                ó   € \        V \        P                  P                  4      '       d0   RV P                  9   g   \        V \
        \        34      '       d   R#  \        P                  ! V R4      #   \         d     Mi ; i\        T \        P                  P                  4      '       d!   T'       d   \        P                  '       d   R# \        T \        P                  P                  4      '       d   \        4       '       d   R# \        P                  P                  \!        T 4      4      ;'       g    \        P#                  T 4      pT# )z5Check for nn.Modules() created dynamically or mutatedÚforwardTÚtorchdynamo_force_dynamic)Ú
isinstancer`   ra   r   Ú__dict__Údictr   ÚinspectÚgetattr_staticÚAttributeErrorr   Úinstall_free_tensorsr   rV   re   Úgetr@   rt   )r=   r~   Údyns   && r   Úis_dynamic_nn_moduler‹   p   sç   € ä�#”u—x‘x—‘×'Ò'Ø�S—\‘\Ô!¤Z°´d¼NÐ5K×%LÒ%Lñ ðÜ×%Ò% cÐ+FÓGÐGøÜô Ùðúä�#”u—x‘x—‘×'Ò'ßœ×4×4Ð4áä�#”u—x‘x—‘×'Ò'Ô,F×,HÒ,HÙÜ
×
+Ñ
+×
/Ñ
/´°S³	Ó
:÷ ð Ô>O×>UÑ>UØó?€Cð €Js   ÁA2 Á2B Á?B c                ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   ‰   s   € ÷ &ñ &¨ñ &r   c                 ó  aa€ \        \        RR4      '       dT   \        P                  oR V3R llp V \        n        \        P                  oR V3R llpV\        n        R\        n        \
        ;P                  ^,          un        R# )	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_patchTc                ó@   € V ^8„  d   QhR\         R\        R\        RR/# )r   r   ÚargsÚkwargsr   N©r   r   )r   s   "r   r   Ú5install_generation_tagging_init.<locals>.__annotate__’   s(   € ÷ 	(ñ 	(œvð 	(¬cð 	(¼Sð 	(ÀTñ 	(r   c                 óJ   <€ S! V .VO5/ VB  \         P                  V 4       R # r-   ©rV   r]   )r   r�   r‘   Úinits   &*,€r   Úpatched_initÚ5install_generation_tagging_init.<locals>.patched_init’   s#   ø€ Ù�Ð'˜Ò' Ò'Ü×!Ñ! $Ö'r   c                ó4   € V ^8„  d   QhR\         R\        RR/# )r   r   Ústater   Nr’   )r   s   "r   r   r“   š   s!   € ÷ 	(ñ 	(¤6ð 	(´#ð 	(¸$ñ 	(r   c                 óB   <€ S! W4       \         P                  V 4       R # r-   r•   )r   rš   Úsetstates   &&€r   Úpatched_setstateÚ9install_generation_tagging_init.<locals>.patched_setstateš   s   ø€ Ù�TÔ!Ü×!Ñ! $Ö'r   FN)rQ   r   r   Ú__setstate__rŽ   rV   rZ   )r—   r�   r–   rœ   s     @@r   Úinstall_generation_tagging_initr    ‰   si   ù€ ô ŒvÐ6¸×=Ò=Ü�‰ˆ÷	(ð 	(ð 'ŒŒä×&Ñ&ˆ÷	(ð 	(ð /ŒÔà/4ŒÔ,ä× Ò  AÕ%× r   )Ú__doc__rS   r…   r/   Úcollections.abcr   Útypingr   Útorch.nnr`   r   Ú r   Úutilsr   r   ra   r   Úunpatched_nn_module_initr
   rB   r?   rV   r‹   r    r   r   r   Ú<module>r¨      sf   ðñó Û Û Ý *Ý ã Ý å ß Eð !Ÿ8™8Ÿ?™?×3Ñ3Ð ÷8ñ 8õ( õ)÷  9ñ  9õF÷2&r   