
    Ph                     x    d dl Z d dlZd dlZd dlmZ ddlmZmZ  G d d      Zd Z	d Z
 G d	 d
      Zd Zd Zy)    N)Module   )ExactWeakKeyDictionaryis_lazy_modulec                   ,    e Zd Z e       Zd Zd Zd Zy)MutationTrackerc                      d| _         g | _        y )Nr   )mutation_countwatchers)selfs    gC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\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   sH    q mmCeG"""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MM,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_setattr/   sF    ""4(44S9 $D#u55  s   "/ 	;;)getattrr)   __setattr__	functoolswraps)clsr/   r.   s     @r   r#   r#   *   sL    s-t4&+#??	)	*	6 
+	6 ) 5r   c                   l    e Zd ZdZ e       Z e       Zed        Ze	d        Z
ed        Zed        Zy)GenerationTrackerr   c                 6    | j                   | j                  |<   y r   )
generationgeneration_valuesr4   r%   s     r   tagzGenerationTracker.tag?   s    %(^^c"r   c                 v    t        | t        j                  j                        sJ dt        j
                  | <   y )NT)
issubclasstorchnnr   r6   dynamic_classes)r4   s    r   mark_class_dynamicz$GenerationTracker.mark_class_dynamicC   s+    #uxx///15))#.r   c                 >    || j                   vry| j                   |   S )N)r9   r:   s     r   get_generation_valuez&GenerationTracker.get_generation_valueH   s$    c+++$$S))r   c                 Z    || j                   v xr | j                   |   | j                  k(  S r   )r9   r8   r:   s     r   checkzGenerationTracker.checkN   s3     3((( =%%c*cnn<	
r   N)r   r   r   r8   r   r@   r9   classmethodr;   staticmethodrA   rD   rF   r!   r   r   r6   r6   :   sf    J,.O.04 4 6 6 * *
 
 
r   r6   c                 2   t        | t        j                  j                        rd| j                  v ryt        | d      r| j                  S t        |       ryt        j                  j                  t        |             xs t        j                  |       }|S )z5Check for nn.Modules() created dynamically or mutatedforwardTtorchdynamo_force_dynamicF)
isinstancer>   r?   r   __dict__hasattrrK   r   r6   r@   getr$   rF   )r%   dyns     r   is_dynamic_nn_modulerQ   V   s{    #uxx'I,Es/0,,,c

+
+
/
/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   r6   r;   )r   argskwargsinits      r   patched_initz5install_generation_tagging_init.<locals>.patched_initn   s#    '''!!$'r   c                 B     | |       t         j                  |        y r   rU   )r   statesetstates     r   patched_setstatez9install_generation_tagging_init.<locals>.patched_setstatev   s    T5!!!$'r   Fr   N)r0   r   r   __setstate__rS   r6   r8   )rY   r]   rX   r\   s     @@r   install_generation_tagging_initr_   e   s\     v6=	( '&&	( //4,  A% r   )r2   r   torch.nnr>   r   utilsr   r   r   r'   r#   r6   rQ   r_   r!   r   r   <module>rb      s>        98 8( ) 
 
8&r   