
    IЦi                        S SK r S SKrS SKJrJrJr  S SKrS SKJr  SSK	J
r
  SSKJrJr  \R                  R                  R                  r " S S5      rS	\S
\SS4S jrS\SS4S jr " S S5      rS	\S\S\4S jrSS jrg)    N)AnyListType)Module   )config)ExactWeakKeyDictionarynn_module_has_global_hooksc                   \    \ rS rSr% \" 5       r\\S'   SS jrS\SS4S jr	S\
SS4S	 jrS
rg)MutationTracker   dbreturnNc                      SU l         / U l        g Nr   mutation_countwatchers)selfs    [/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/_dynamo/mutation_guard.py__init__MutationTracker.__init__   s    #$:<    namec                     U =R                   S-  sl         U R                  n/ U l        U H   nU" 5       nUc  M  UR                  U5        M"     g )Nr   )r   r   
invalidate)r   r   tmprefguardeds        r   on_mutationMutationTracker.on_mutation   sH    q mmCeG"""3' r   guarded_codec                 b    U R                   R                  [        R                  " U5      5        g N)r   appendweakrefr   )r   r"   s     r   trackMutationTracker.track   s    W[[67r   r   r   N)__name__
__module____qualname____firstlineno__r	   r   __annotations__r   strr    r   r'   __static_attributes__ r   r   r   r      s;    !7!9B9=( ( (8# 8$ 8r   r   objr"   r   c                     [        [        U 5      5        U [        R                  ;  a  [        5       [        R                  U '   [        R                  U    nUR	                  U5        g)z+invalidate guarded_code when obj is mutatedN)ensure_patchedtyper   r   r'   )r2   r"   trackers      r   watchr7   #   sK    49
/$$$"1"33  %GMM,r   clsc           	         ^ [        U SS5      (       aO  SU l        U R                  m[        R                  " T5      S[
        S[        S[
        SS 4U4S jj5       nXl        g g )	N___needs_mutation_patchTFr   keyvaluer   c                 |   >  [         R                  U    R                  U5        T" XU5      $ ! [         a     Nf = fr$   )r   r   r    KeyError)r   r;   r<   original_setattrs      r   custom_setattr&ensure_patched.<locals>.custom_setattr2   sD    ""4(44S9 $Du55  s   ". 
;;)getattrr:   __setattr__	functoolswrapsr   r/   )r8   r@   r?   s     @r   r4   r4   -   si    s-t44&+#??	)	*	6 	63 	6s 	6t 	6 
+	6 ) 5r   c                      \ rS rSr% Sr\\S'   \" 5       r\\S'   \" 5       r	\\S'   \
S\SS4S	 j5       r\S
\\R                   R"                     SS4S j5       r\
S\S\4S j5       r\
S\S\4S j5       r\
SS j5       rSrg)GenerationTracker=   r   
generationdynamic_classesgeneration_valuesr2   r   Nc                 6    U R                   U R                  U'   g r$   )rI   rK   r8   r2   s     r   tagGenerationTracker.tagB   s    %(^^c"r   r8   c                     [        U [        R                  R                  5      (       d   eS[        R
                  U '   g )NT)
issubclasstorchnnr   rG   rJ   r8   s    r   mark_class_dynamic$GenerationTracker.mark_class_dynamicF   s.    #uxx////15))#.r   c                 @    XR                   ;  a  gU R                   U   $ )N)rK   rM   s     r   get_generation_value&GenerationTracker.get_generation_valueK   s"    +++$$S))r   c                 d    XR                   ;   =(       a    U R                   U   U R                  :H  $ r$   )rK   rI   rM   s     r   checkGenerationTracker.checkQ   s1     ((( =%%c*cnn<	
r   c                 N    SU l         [        5       U l        [        5       U l        g r   )rI   r	   rJ   rK   rT   s    r   clearGenerationTracker.clearX   s    46 6 8r   r1   r)   )r*   r+   r,   r-   rI   intr.   r	   rJ   rK   classmethodr   rN   staticmethodr   rR   rS   r   rU   rY   boolr\   r_   r0   r1   r   r   rG   rG   =   s    J.D.FO+F0F0H-H4c 4d 4 4 6UXX__ 5 6$ 6 6 *s *s * *
 
 
 
 
 9 9r   rG   	is_exportc                 :   [        U [        R                  R                  5      (       a  SU R                  ;   a  g[        U S5      (       a  U R                  $ [        U [        R                  R                  5      (       a  [        R                  (       a  U(       d  g[        U [        R                  R                  5      (       a  [        5       (       a  g[        R                  R                  [        U 5      5      =(       d    [        R                  U 5      nU$ )z5Check for nn.Modules() created dynamically or mutatedforwardTtorchdynamo_force_dynamic)
isinstancerR   rS   r   __dict__hasattrrh   r   inline_inbuilt_nn_modulesr
   rG   rJ   getr5   r\   )r2   re   dyns      r   is_dynamic_nn_modulero   _   s    #uxx''I,Es/00,,, 	3((,,#uxx'',F,H,H

+
+
/
/S	
: >O>U>U?C Jr   c                  L  ^^ [        [        SS5      (       as  [        R                  mS[        S[        S[        SS4U4S jjn U [        l        [        R                  mS[        S	[        SS4U4S
 jjnU[        l        S[        l        [        =R                  S-  sl        g)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                 H   > T" U /UQ70 UD6  [         R                  U 5        g r$   rG   rN   )r   rr   rs   inits      r   patched_init5install_generation_tagging_init.<locals>.patched_init   s#    '''!!$'r   statec                 @   > T" X5        [         R                  U 5        g r$   ru   )r   ry   setstates     r   patched_setstate9install_generation_tagging_init.<locals>.patched_setstate   s    T!!!$'r   Fr   )rB   r   r   r   __setstate__rq   rG   rI   )rw   r|   rv   r{   s     @@r   install_generation_tagging_initr   y   s     v6==	(v 	(c 	(S 	(T 	( '&&	(6 	(# 	($ 	( //4,  A% r   r)   )rD   r&   typingr   r   r   torch.nnrR   r    r   utilsr	   r
   rS   r   unpatched_nn_module_initr   r7   r4   rG   rd   ro   r   r1   r   r   <module>r      s      " "    E !88??33 8 8( s  #  $  ) ) ) 9 9Dc d t 4&r   