
    קg                         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dS )    N)Module   )config)ExactWeakKeyDictionaryis_lazy_modulenn_module_has_global_hooksc                   4    e Zd Z e            Zd Zd Zd ZdS )MutationTrackerc                 "    d| _         g | _        d S Nr   )mutation_countwatchers)selfs    X/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/mutation_guard.py__init__zMutationTracker.__init__   s        c                     | xj         dz  c_         | j        }g | _        |D ]#} |            }||                    |           $d S )Nr   )r   r   
invalidate)r   nametmprefguardeds        r   on_mutationzMutationTracker.on_mutation   sc    q m 	( 	(CceeG"""3'''	( 	(r   c                 ^    | j                             t          j        |                     d S N)r   appendweakrefr   )r   guarded_codes     r   trackzMutationTracker.track!   s(    W[6677777r   N)__name__
__module____qualname__r   dbr   r   r    r   r   r
   r
      sO        			!	!B  ( ( (8 8 8 8 8r   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   )objr   trackers      r   watchr*   %   s\    499
/$$$"1"3"33 %GMM,r   c                     t          | dd          r6d| _        | j        t          j                  fd            }|| _        d S d S )N___needs_mutation_patchTFc                     	 t           j        |                              |           n# t          $ r Y nw xY w | ||          S r   )r
   r#   r   KeyError)r   keyvalueoriginal_setattrs      r   custom_setattrz&ensure_patched.<locals>.custom_setattr4   s\    "4(44S9999   ##D#u555s   %) 
66)getattrr,   __setattr__	functoolswraps)clsr2   r1   s     @r   r&   r&   /   sn    s-t44 )&+#?	)	*	*	6 	6 	6 	6 
+	*	6 )) )r   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dS )GenerationTrackerr   c                 $    | j         | j        |<   d S r   )
generationgeneration_valuesr7   r(   s     r   tagzGenerationTracker.tagD   s    %(^c"""r   c                 f    t          | t          j        j                  sJ dt          j        | <   d S )NT)
issubclasstorchnnr   r9   dynamic_classesr7   s    r   mark_class_dynamicz$GenerationTracker.mark_class_dynamicH   s0    #ux/////15)#...r   c                 2    || j         vrdS | j         |         S )N)r<   r=   s     r   get_generation_valuez&GenerationTracker.get_generation_valueM   s#    c+++2$S))r   c                 @    || j         v o| j         |         | j        k    S r   )r<   r;   r=   s     r   checkzGenerationTracker.checkS   s+     3(( =%c*cn<	
r   c                 `    d| _         t                      | _        t                      | _        d S r   )r;   r   rC   r<   rD   s    r   clearzGenerationTracker.clearZ   s+    466 6 8 8r   N)r    r!   r"   r;   r   rC   r<   classmethodr>   staticmethodrE   rH   rJ   rL   r$   r   r   r9   r9   ?   s        J,,..O..004 4 [4 6 6 \6 * * [*
 
 
 [
 9 9 [9 9 9r   r9   c                    t          | t          j        j                  rd| j        v rdS t          | d          r| j        S t          |           rd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_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    #ux'' I,E,Ets/00 -,,c u 	3((, 
 t#ux'' ,F,H,H t

+
/
/S		
:
: >O>U>U? ?C Jr   c                      t          t          dd          rFt          j        fd} | t          _        t          j        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_patchTc                 T     | g|R i | t                               |            d S r   r9   r>   )r   argskwargsinits      r   patched_initz5install_generation_tagging_init.<locals>.patched_init   s=    D'''''''!!$'''''r   c                 T     | |           t                               |            d S r   r]   )r   statesetstates     r   patched_setstatez9install_generation_tagging_init.<locals>.patched_setstate   s/    HT5!!!!!$'''''r   Fr   N)r3   r   r   __setstate__r[   r9   r;   )ra   re   r`   rd   s     @@r   install_generation_tagging_initrg   }   s     v6== 5	( 	( 	( 	( 	( '&	( 	( 	( 	( 	( //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 U U U U U U U U !8?3 8 8 8 8 8 8 8 8(     ) ) ) 9 9 9 9 9 9 9 9D  8& & & & &r   