Ë
    P/æj€  ã                   óÈ   — d dl Z d dlZd dlZd dlmZ ddlmZ ddlmZm	Z	m
Z
 ej                  j                  j                  Z G d„ d«      Zd„ Zd	„ Z G d
„ d«      Zd„ Zd„ Zy)é    N)ÚModuleé   )Úconfig)ÚExactWeakKeyDictionaryÚis_lazy_moduleÚnn_module_has_global_hooksc                   ó,   — e Zd Z e«       Zd„ Zd„ Zd„ Zy)ÚMutationTrackerc                 ó    — d| _         g | _        y ©Nr   )Úmutation_countÚwatchers)Úselfs    ú_/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/mutation_guard.pyÚ__init__zMutationTracker.__init__   s   € ØˆÔØˆ�ó    c                 ó˜   — | xj                   dz  c_         | j                  }g | _        |D ]  } |«       }|€Œ|j                  |«       Œ y )Nr   )r   r   Ú
invalidate)r   ÚnameÚtmpÚrefÚguardeds        r   Úon_mutationzMutationTracker.on_mutation   sM   € Ø×Ò˜qÑ ÕØ�m‰mˆØˆŒØò 	(ˆCÙ“eˆGØÑ"Ø×"Ñ" 3Õ'ñ	(r   c                 ó`   — | j                   j                  t        j                  |«      «       y ©N)r   ÚappendÚweakrefr   )r   Úguarded_codes     r   ÚtrackzMutationTracker.track!   s   € Ø�‰×ÑœWŸ[™[¨Ó6Õ7r   N)Ú__name__Ú
__module__Ú__qualname__r   Údbr   r   r   © r   r   r
   r
      s   „ Ù	Ó	!€Bòò(ó8r   r
   c                 óÎ   — t        t        | «      «       | t        j                  vrt        «       t        j                  | <   t        j                  |    }|j	                  |«       y)z+invalidate guarded_code when obj is mutatedN)Úensure_patchedÚtyper
   r#   r   )Úobjr   Útrackers      r   Úwatchr*   %   sK   € ä”4˜“9Ôà
”/×$Ñ$Ñ$Ü"1Ó"3Œ×Ñ˜3ÑÜ× Ñ  Ñ%€GØ‡M�M�,Õr   c                 ó�   ‡— t        | dd«      r8d| _        | j                  Št        j                  ‰«      ˆfd„«       }|| _        y y )NÚ___needs_mutation_patchTFc                 ó|   •— 	 t         j                  |    j                  |«        ‰| ||«      S # t        $ r Y Œw xY wr   )r
   r#   r   ÚKeyError)r   ÚkeyÚvalueÚoriginal_setattrs      €r   Úcustom_setattrz&ensure_patched.<locals>.custom_setattr4   sF   ø€ ðÜ×"Ñ" 4Ñ(×4Ñ4°SÔ9ñ $ D¨#¨uÓ5Ð5øô ò Ùðús   ƒ"/ ¯	;º;)Úgetattrr,   Ú__setattr__Ú	functoolsÚwraps)Úclsr2   r1   s     @r   r&   r&   /   sL   ø€ ÜˆsÐ-¨tÔ4Ø&+ˆÔ#ØŸ?™?Ðä	�‰Ð)Ó	*ó	6ó 
+ð	6ð )ˆ�ð 5r   c                   ó|   — e Zd ZdZ e«       Z e«       Zed„ «       Ze	d„ «       Z
ed„ «       Zed„ «       Zed„ «       Zy)ÚGenerationTrackerr   c                 ó6   — | j                   | j                  |<   y r   )Ú
generationÚgeneration_values©r7   r(   s     r   ÚtagzGenerationTracker.tagD   s   € à%(§^¡^ˆ×Ñ˜cÒ"r   c                 óv   — t        | t        j                  j                  «      sJ ‚dt        j
                  | <   y )NT)Ú
issubclassÚtorchÚnnr   r9   Údynamic_classes©r7   s    r   Úmark_class_dynamicz$GenerationTracker.mark_class_dynamicH   s+   € ä˜#œuŸx™xŸ™Ô/Ð/Ð/Ø15Ô×)Ñ)¨#Ò.r   c                 ó>   — || j                   vry| j                   |   S )Néÿÿÿÿ)r<   r=   s     r   Úget_generation_valuez&GenerationTracker.get_generation_valueM   s$   € à�c×+Ñ+Ñ+ØØ×$Ñ$ SÑ)Ð)r   c                 óZ   — || j                   v xr | j                   |   | j                  k(  S r   )r<   r;   r=   s     r   ÚcheckzGenerationTracker.checkS   s3   € ð �3×(Ñ(Ð(ò =Ø×%Ñ% cÑ*¨c¯n©nÑ<ð	
r   c                 óN   — d| _         t        «       | _        t        «       | _        y r   )r;   r   rC   r<   rD   s    r   ÚclearzGenerationTracker.clearZ   s   € àˆŒÜ4Ó6ˆÔÜ 6Ó 8ˆÕr   N)r    r!   r"   r;   r   rC   r<   Úclassmethodr>   ÚstaticmethodrE   rH   rJ   rL   r$   r   r   r9   r9   ?   sz   „ Ø€JÙ,Ó.€OÙ.Ó0Ðàñ4ó ð4ð ñ6ó ð6ð ñ*ó ð*ð
 ñ
ó ð
ð ñ9ó ñ9r   r9   c                 óþ  — t        | t        j                  j                  «      rd| j                  v ryt        | d«      r| j                  S t        | «      ryt        | t        j                  j                  «      rt        j                  r|syt        | t        j                  j                  «      rt        «       ryt        j                  j                  t        | «      «      xs t        j                  | «      }|S )z5Check for nn.Modules() created dynamically or mutatedÚforwardTÚtorchdynamo_force_dynamicF)Ú
isinstancerA   rB   r   Ú__dict__ÚhasattrrQ   r   r   Úinline_inbuilt_nn_modulesr   r9   rC   Úgetr'   rJ   )r(   Ú	is_exportÚdyns      r   Úis_dynamic_nn_modulerY   a   s¹   € ä�#”u—x‘x—‘Ô'¨I¸¿¹Ñ,EàÜˆsÐ/Ô0Ø×,Ñ,Ð,Ü�cÔØô 	�3œŸ™Ÿ™Ô(Ü×,Ò,Ùàä�#”u—x‘x—‘Ô'Ô,FÔ,HØÜ
×
+Ñ
+×
/Ñ
/´°S³	Ó
:ò Ô>O×>UÑ>UØó?€Cð €Jr   c                  óò   ‡‡— t        t        dd«      rKt        j                  Šˆfd„} | t        _        t        j                  Šˆfd„}|t        _        dt        _        t
        xj                  dz  c_        y)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                 óH   •—  ‰| g|¢­i |¤Ž t         j                  | «       y r   ©r9   r>   )r   ÚargsÚkwargsÚinits      €r   Úpatched_initz5install_generation_tagging_init.<locals>.patched_init†   s#   ø€ Ù�Ð'˜Ò' Ò'Ü×!Ñ! $Õ'r   c                 óB   •—  ‰| |«       t         j                  | «       y r   r]   )r   ÚstateÚsetstates     €r   Úpatched_setstatez9install_generation_tagging_init.<locals>.patched_setstateŽ   s   ø€ Ù�T˜5Ô!Ü×!Ñ! $Õ'r   Fr   N)r3   r   r   Ú__setstate__r[   r9   r;   )ra   re   r`   rd   s     @@r   Úinstall_generation_tagging_initrg   }   s\   ù€ ô ŒvÐ6¸Ô=Ü�‰ˆô	(ð 'ŒŒä×&Ñ&ˆô	(ð /ŒÔà/4ŒÔ,ä× Ò  AÑ%Ö r   )r5   r   Útorch.nnrA   r   Ú r   Úutilsr   r   r   rB   r   Úunpatched_nn_module_initr
   r*   r&   r9   rY   rg   r$   r   r   ú<module>rl      s[   ðó Û ã Ý å ß UÑ Uð !Ÿ8™8Ÿ?™?×3Ñ3Ð ÷8ñ 8ò( ò)÷ 9ñ 9òDó8&r   