
    Ph{                        d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
ZddlmZmZ ddlmZ ddlmZmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 d Z4ede5dejl                  jn                  fd       Z8 G d de-      Z9 G d de3      Z: G d de:      Z;y)    N)contextmanagernullcontext)DictList   )	skipfiles	variables)
is_allowed)unimplementedUnspecializeRestartAnalysisUnsupported)GuardBuilderinstall_guard)GenerationTracker)
AttrSourceFSDPNNModuleSourceGetItemSourceNNModuleSourceNotNNModuleSource)	get_custom_getattrget_fake_valueis_lazy_moduleis_safe_constantistensoristypennmodule_has_hooksobject_has_getattributeproxy_args_kwargs   )MutableLocaltypestrVariableTracker)invoke_and_store_as_constant)SliceVariable)UserDefinedObjectVariablec                 B    t        |      dk(  sJ t        |d      rw fd}t        |i       d   D cg c]E  }t        |t        t
        f      r% t        |      |D cg c]
  } ||       c}      n ||      G }}}|j                  ||       yyc c}w c c}}w )a~  
    Fairly coupled helper used by NNModuleVariable and UnspecializedNNModuleVariable.

    Used to cause lazy module to be initialized (and delete its init hook) before tracing. Especially
    useful now that 'allowed' modules graph-break on hooks, calling this first ensures there is no hook
    by the time we trace __call__ and thus no graph-break for lazy allowed modules.
    r   _initialize_hookc                 |    t        | t        j                  j                        rt	        | j
                        S | S N)
isinstancetorchfxProxyr   node)xtxs    lC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/variables/nn_module.pyconvert_to_fakez/initialize_lazy_module.<locals>.convert_to_fake3   s+    !UXX^^,%affb11    N)lenhasattrr   r*   listtupletype_infer_parameters)r0   modargskwargsr2   argr/   inputs   `       r1   initialize_lazy_moduler?   '   s     v;!s&'	 )r215	
 6 #e}- DI373aq)378 %& 6	 	 
 	c5) ( 8
s   *BB.BB
module_keyr:   c              #      K   |j                         }	 |t        |      f|j                  | <   d  |j                  | = y # |j                  | = w xY wwr)   )namer8   nn_module_stack)r@   sourcer0   r:   fully_qualified_names        r1   record_nn_module_stackrF   B   sO     !;;=+*>S	)J:&z*Bz*s   AA  A AAc                        e Zd Zddhej                  Zdedef fdZd Zd Z	d Z
dedd	fd
Zd Zd Zd Zd Z	 	 	 	 	 	 ddZ	 d	 	 	 	 	 d fdZ xZS )NNModuleVariablemodule_typer@   c                 \    t        |   di | || _        || _        | j                  sJ y )N )super__init__rI   r@   rD   )selfrI   r@   r<   	__class__s       r1   rM   zNNModuleVariable.__init__O   s.    "6"&${{{r3   c                     | j                   S r)   )rI   )rN   s    r1   python_typezNNModuleVariable.python_typeU   s    r3   c                      y r)   rK   )rN   r0   rD   submod	key_extraoptionss         r1   _wrap_submodulez NNModuleVariable._wrap_submoduleX   s    r3   c                 z   |j                   j                  | j                        }t        |t        j
                  j                        rg }|j                         D ]{  \  }}t        j                  j                  |      }|j                   j                  || j                  |t        t        | j                  |                   |j                  |       } |S t        |t        j
                  j                   t        j
                  j"                  t        j
                  j$                  f      sJ t'        |             | j                  sJ g }t)        |      D ]Z  \  }}|j                  |j                   j                  || j                  |t        t        | j                  |                         \ |S NrD   )outputget_submoduler@   r*   r+   nn
ModuleDictitemsr	   ConstantVariablecreateregister_attr_or_moduler   r   rD   append
ModuleListParameterList
Sequentialr!   	enumerate)rN   r0   baseresultrB   rS   name_varidxs           r1   unpack_var_sequencez$NNModuleVariable.unpack_var_sequence[   s`   yy&&t7dEHH//0F $

f$55<<TB		11OO)-T*JK	 2  h' !- M588&&(>(>@S@ST
 	4=	 
 {{{$T?KCMM		11OO)-S*IJ	 2  + r3   rB   returnr"   c                 ,   |j                   j                  | j                        }t        ||      }t	        t        t        | j                  |            j                  t        j                               t        j                  j                  |      S r)   )rZ   r[   r@   r5   r   r   r   rD   
make_guardr   HASATTRr	   r_   r`   )rN   r0   rB   r:   rh   s        r1   call_hasattrzNNModuleVariable.call_hasattr{   sn    ii%%doo6d#:dkk489DD$$	

 ))0088r3   c                 f    |j                   j                  | j                        }t        |dd      S )NtrainingF)rZ   r[   r@   getattrrN   r0   r:   s      r1   is_trainingzNNModuleVariable.is_training   s)    ii%%doo6sJ..r3   c                     |j                   j                  | j                        }t        j                  |       |j
                  j                  dk7  rt        j                  t        |             t               )zIRestart analysis treating this module as an UnspecializedNNModuleVariablerM   )
rZ   r[   r@   r   tagf_codeco_namemark_class_dynamicr8   r   rt   s      r1   convert_to_unspecializedz)NNModuleVariable.convert_to_unspecialized   sW    ii%%doo6c" 99
*00c;)++r3   c                     t        |      rt        d       t        |      }|yt        |t        j
                        st        d       t        j                  || fi |j                  |t        j                  j                  |      gi       S )zDCheck for a __getattr__ and handle it specially if it is implementedz6torch.nn.Module with a custom __getattribute__ definedNz6torch.nn.Module with a non-function custom __getattr__)r   r   r   r*   typesFunctionTyper	   UserMethodVariablecall_functionr_   r`   )rN   rg   r0   rB   rU   
getattr_fns         r1   _custom_getattr_fallbackz)NNModuleVariable._custom_getattr_fallback   s    "4(RS'-
*e&8&89RS++JHHVV++224892
 	
r3   c                    ddl m} | j                  rt        | j                  |      }nd }|j                  j                  | j                        }t        j                  |d      }d}t               }t        j                  |j                        D ]+  }	|j                  |	j                  j                                - | j                  st!        d       ||v r||   }
nYd|v r||d   v r||vr	|d   |   }
nAd|v r||d   v r	|d   |   }
n-d|v r||d   v r	|d   |   }
n	 t        j"                  ||      }
d	}|dk(  r#|s!t)        j*                  |j                  |      S |r  ||t-        |            |
      S t/        |
t0              r3t)        j2                  |
j4                  |      j7                  || gi       S t/        |
t8              r>t)        j:                  |
j<                  t)        j>                  tA        |            |      S t/        |
tB              r&t)        j2                  |
jE                  |      |      S t/        |
tF        jH                        rt)        j:                  |
| |      S tK        |
      stM        |
      r  ||t-        |            |
      S t!        dtO        |       dtO        |
              t)        jP                  | ||      S # t$        $ r | j'                  |||d
|i      }||cY S  w xY w)Nr   VariableBuilder__dict__TzGETATTR with no source_modules_parameters_buffersFrD   )rg   r0   rB   rU   rO   rY   zclass property  ))builderr   rD   r   rZ   r[   r@   object__getattribute__setinspectgetmrorO   updater   keysr   getattr_staticAttributeErrorr   r	   UserDefinedClassVariabler   r   propertyUserFunctionVariablefgetr   classmethodr   __func__r%   r8   staticmethod__get__r}   r~   r   r   r!   GetAttrVariable)rN   r0   rB   r   rD   rg   	base_dictobject_memberall_class_attribute_namesr/   subobjrh   s               r1   var_getattrzNNModuleVariable.var_getattr   s   ,;;T2FFyy&&t7++D*=	$'E!/A%,,QZZ__->? 0 {{239t_F)#	*--55z*40Fi'DIm4L,L}-d3F9$:1F)Fz*40F //d; % ;}55dnnVTT>?2~f'=>vFFfh' 55KK!  -dHb12 , 33OO77T
C! 
 - 55NN4(   2 23 33FDPP!&)Xf-=Br>&+AB6JJa?PQR((tFCCO " 66"4(F9K 7  %!Ms   "K $LLc                 `   |j                   j                  | j                        }t        | j                  | j                  ||      5  t        |      }t        |t        j                  j                        r|j                  j                  t        j                  j                  j                  u rt        |      r| j                  |       |rJ d       |rJ |\  }|j                  j                         D ]m  \  }}|j!                  |j                   j#                  || j                  |t%        t'        | j                  |                  |gi        |j)                         }o |cd d d        S |r+|j*                  |j*                  | _        t/        ||||       |j                   j1                         r}t3        |j                        rht        |dd      r| j                  |       ddlm}	  |	| |j                   j8                  d| j                  gt;        ||             cd d d        S | j                  sJ d	       t        |t        j<                  j>                        r|j                  }
n|j@                  }
t'        | j                  d
      }tC        |
tD        jF                        r|
jH                  }
t'        |d      }| g|z   }ntC        |
tD        jJ                        sJ |jM                  tO        jP                  |
|      ||      cd d d        S # 1 sw Y   y xY w)Nz3Expected lazy sequential isn't a valid combination?rY   T)check_forward_hookscheck_backward_hooksr   wrap_fx_proxycall_moduler0   proxyzsMust provide a valid source in order to inline, since inlined function may have default args which must be guarded.__call__r   ))rZ   r[   r@   rF   rD   r   r*   r+   r\   re   rO   forwardr   r{   r   r^   r   ra   r   r   popcls_to_becomerI   r?   is_root_tracerr
   r   r   create_proxyr   r,   GraphModule
_call_implr   r}   
MethodTyper   r~   inline_user_function_returnr	   r   )rN   r0   r;   r<   r:   is_lazyr=   
child_namerS   r   fn	fn_sources               r1   r   zNNModuleVariable.call_function   s    ii%%doo6#DOOT[["cJ$S)G3 3 34MM))UXX-@-@-H-HH%c* 11"5  IHI!!z*-,,*<*<*>&J$$		99" OO&#1*T[[*2U#V	 :  	 &&(C +? ? KJB $$0'*'8'8D$
 'r3f=
 yy'')j.G%T 11"52$0"))00% +48o KJ@ {{ Z{ c588#7#78 BB&t{{J?	"e../B *9j AI 6D=D!"e&8&899955222iHe KJJs   D"L$4B:L$8C"L$$L-c                 H    ddl mmm  j                  j
                  j                         fd}dv r j                        S dk(  r4t         j                   j                        5   |      cd d d        S dk(  rMt        j                  t        j                  j                  j                              rj!                  d      S dk(  rd   j#                         sJ t%        d	         sJ d	   j&                  d   j(                     }t%        |t*              r|S |j                  j
                  j                        }j
                  j-                  |t/        t1         j                              
      S |r7t3              }	j                  j4                   d dt7        |	      S fdfd}
 fd} fd}d dk(  rJsrJ g }j9                         D ]  \  }|j;                   ||               |t=                     S dk(  rMg } j>                  d+i  |
dd      D ]  \  }|j;                   ||               |t=                     S dk(  rNg } j@                  d+i  |
ddd      D ]  \  }|j;                   ||               |t=                     S dk(  rNg } jB                  d+i  |
ddd      D ]  \  }|j;                   ||               |t=                     S dk(  rsrJ  |j9                               S dk(  r |jC                               S dk(  r | j>                  d+i  |
d            S dk(  r | j@                  d+i  |
d            S dk(  rOsrJ g }jE                         D ]"  |j;                  j!                               $  |t=                     S d k(  rsrJ  |j'                               S d!k(  rJsrJ g }j'                         D ]  \  }|j;                   ||               |t=                     S d"k(  r srJ j!                  tG                    S d#k(  rt%        tH        jJ                  jL                  tH        jJ                  jN                  f      rCrAd	   j#                         r.j!                  d	   jQ                         jR                  v       S d$k(  rgstG              dk(  sJ tH        jJ                  jL                  jT                  tH        jJ                  jV                  jT                  tH        jJ                  jN                  jT                  tH        jJ                  jX                  jT                  tH        jJ                  jZ                  jT                  f}t]              jT                  |vrt%        d	   t^        j                        sJ ta        d	                d	   jQ                         t%        tb        td        f      sJ t3              jf                  }	t%        |	th        jj                        sJ tm        tm         j                        d%      }jo                  t_        jp                  |	|
       gts              z         S  j                  sJ t%        d	   tt              r+g }g }ts        tw        tG                          d	   jQ                            }ty        d	   jQ                                  D ]g  \  }}||   t/        t1         j                              }|j;                  j
                  j-                  ||
             |j;                  |       i tI        jJ                  jZ                  | }j
                  j-                  |  d&t/        t1         j                  d	   jQ                                     
      }|S d	   jQ                            }j
                  j-                  | j                  t/        t1         j                              
      S d'k(  szt%        tH        jJ                  jz                  j|                  j~                        rd(k(  s=t%        tH        jJ                  jz                  j|                  j                        rgd)k(  rbt3              jf                  }	tm        tm         j                        d%      }jo                  t_        jp                  |	|
       gz         S j                  j                  v r^t        j                  j                           r<t        d* t        j                  j                               D              r |      S t         !        S # 1 sw Y   	xY w),Nr   )r_   ListIteratorVariableTupleVariablec           	         	j                   j                  dj                  t               i       }|j                  j
                  d<   t              \  }}ddlm}  |		j                   j                  d| |g||            S )Nget_attrexample_valuer   r   call_method)r;   r<   r   )	rZ   r   r@   r7   r.   metar   r   r   )
rB   	mod_proxy
proxy_argsproxy_kwargsr   r;   r<   modulerN   r0   s
        r1   generic_call_method_helperz@NNModuleVariable.call_method.<locals>.generic_call_method_helper[  s     		..	I 4:INN0'8v'F$J. ii,,!#1j1'	 -  r3   r   _wrapped_call_implr   _check_input_dimT_get_item_by_idxr   rY   __resultc                      t        d t        j                   j                               D              st	        d       y )Nc              3   <   K   | ]  }|j                           y wr)   )is_python_constant.0r/   s     r1   	<genexpr>zUNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const.<locals>.<genexpr>  s      0V1$$&0Vs   znon-const NNModule method )all	itertoolschainvaluesr   )r;   r<   rB   s   r1   assert_all_args_kwargs_constzBNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const  sC     09fmmo0V  $&@$GHHr3   c                              t        	
      } t        j                  |      j                  D cg c]  }|j	                          c}i j                         D ci c]  \  }}||j	                          c}}}|j                          |j                  }| D ci c]  }|||   
 c}S c c}w c c}}w c c}w r)   )rs   r   	signaturebindas_python_constantr^   apply_defaults	arguments)namesr   r/   kv
bound_argsr;   r   r<   r   rB   s         r1   
get_kwargsz0NNModuleVariable.call_method.<locals>.get_kwargs  s    (*&B3**2.333784a1'')489?HA1a**,,HJ %%'#--J.34eAz!}$e44 9H 5s   B6%B;&Cc                     g }| D ]M  \  }}|j                  j                  j                  ||t         j                  |                         O  |t                     S )NrY   mutable_local)rb   rZ   ra   r   rD   r    )	r^   rh   rB   rS   r   
gen_sourcekeyrN   r0   s	       r1   wrap_valuesz1NNModuleVariable.call_method.<locals>.wrap_values  sf    F %fII55-jd.KL	 6  !& (lnMMr3   c                      j                  |       j                  j                  || t         j                  |                   g      S rX   )r`   rZ   ra   r   rD   )rB   objr_   r   r   r   rN   r0   s     r1   named_embedz1NNModuleVariable.call_method.<locals>.named_embed  sV     $++D1II55-jd.KL	 6 
 
r3   c                     |j                  d      }|d   dk(  r| S t        |      dkD  r,|j                  d      }t        | |      } t        |      dkD  r,| S )N.r    )splitr4   r   r   )rD   rB   
name_splitr/   s       r1   r   z0NNModuleVariable.call_method.<locals>.gen_source  s[    CJ!}"j/A%NN1%#FA. j/A% Mr3   named_childrenr   named_parametersprefixrecursenamed_buffersremove_duplicatenamed_modulesmemochildrenmodules
parametersbuffersr   r   r^   __len____contains____getitem__r   z.__getitem__(slice)_get_abs_string_index_conv_forward_output_paddingc              3   P   K   | ]  }t        |t        j                           y wr)   )r*   r	   TensorVariabler   s     r1   r   z/NNModuleVariable.call_method.<locals>.<genexpr>d  s%      ?A 1i667?s   $&rK   )Ir   r_   r   r   r@   rZ   r[   r   rF   rD   r   is_torch_inline_allowedr   getfilerO   r   r`   r   r*   r^   valueUnspecializedNNModuleVariablera   r   r   rs   __name__r#   r   rb   r    r   r   r   r   r4   r+   r\   r]   ParameterDictr   r   r   rc   rd   re   r8   r	   r!   strintr   r}   r~   r   r   r   r6   r$   rangerf   r   conv_ConvNd_ConvTransposeNdr   callabler   r   r   r   rL   r   ) rN   r0   rB   r;   r<   constantr   mod_varrS   r   r   r   r   rh   parambufferbuiltin_supportedsrcsubmodsr   rj   
new_modulenew_module_variabler   r_   r   r   r   r   r   r   rO   s    `````                   @@@@@@@r1   r   zNNModuleVariable.call_methodN  sh	    	LKoo((-	 	2 77 %%b$77Y (b&Q1$7 RQ %%)*K*KOOF,,==>+
 $**400%%7--///d1g}5551gmmDGMM2G'#@A$$CYY,,S1F9944%mDKK&EF	 5   &B&&//0$w?D/BdFKK	I		5 		5	N 	N	 		 ##''F & 5 5 7fk$78 !8'lnMM''F6v66  Xy1 e k$67  (lnMM_$F 4 4 4 !Xy2DE!f k$78! (lnMM_$F 4 4 4 !VX/AB!f k$78! (lnMMZ''v44677Yv33566\!6v66OI9NOPPY3v33Lj6KLMMV^''F.55d;< &'lnMMX''v||~..W_''F &fk$78 !/'lnMMY''#**3v;77N"6EHH$7$79O9O#PQQ**,#**Q**,?  ]"#d)q.00##//##//&&22&&22##//! F|''/@@!$q'9+E+EFXPTUVPWHXXF1g002!#Sz222VT*33!"e&8&8999 DKK!>
K55222cBFT$Z'  ;;;$q'=1 E#f+./Q0J0J0LM#,VDG4N4N4P-Q#RKCs)C(t{{C)HICMM		99"#& :  NN6* $S #XX00':
&(ii&G&Gf/0)%dkk473M3M3OP 'H '# +*q',,.CC[F9944%mDKK&EF	 5   ++6588#3#3#8#8#@#@AO+ 6588#3#3#8#8#I#IJ-- &//B":dkk4#@*MI11..r)D  F$$---))22489 "v}}? 
 .d337&r4v>>] RQs   hh!r;   zList[VariableTracker]r<   zDict[str, VariableTracker]rl   r"   )F)r  
__module____qualname__r"   _nonvar_fieldsr8   r
  rM   rQ   rV   rk   rp   ru   r{   r   r   r   r   __classcell__rO   s   @r1   rH   rH   L   s    #\SO4R4RSND c  @9S 9-> 9/,
 IDV^ &^ -	^
 
^L ]? &	]?
 -]? 
]? ]?r3   rH   c                        e Zd Zdhej                  Z	  fdZe ej                  d      d               Z	 fdZ
	 	 	 	 	 	 ddZ	 	 	 	 	 	 d fdZ xZS )	r  
value_typec                     t        |      t        j                  j                  j                  u rt        d      d|v r+t        |d   dd       }t        |      |u rt        |      |d<   t        |    dd|i| y )NzScriptModules aren't supported in UnspecializedNNModuleVariable becuase their .forward function isn't a static member of their typer!  r   r  rK   )	r8   r+   jit_scriptRecursiveScriptModuler   rs   rL   rM   )rN   r  r<   lazy_value_to_becomerO   s       r1   rM   z&UnspecializedNNModuleVariable.__init__y  s    ;%))++AAAW  6!#*6,+?RV#W E{22
 (,E{|$/u//r3   Nc                      t         j                  j                  j                  j	                         D  ch c]#  } t        | d      rt        | j                        % c} S c c} w )N__code__)r+   r\   Moduler   r   r5   idr(  )r/   s    r1   _nn_module_method_idsz3UnspecializedNNModuleVariable._nn_module_method_ids  sR    
 XX__--446
6q*% qzzN6
 	
 
s   (A c                 6   ddl m} 	 t        j                  | j                  d      }|t        j                  j                  j                  t        j                  j                  j                  t        j                  j                  j                  fv rX| j                  sJ t        | j                        D cg c])  \  }}  ||t!        | j                  |            |      + c}}S t"        | I  |      S # t
        $ r}t        |d }~ww xY wc c}}w )Nr   r   __iter__rY   )r   r   r   r   r!  r   NotImplementedErrorr+   r\   rc   r-  rd   re   rD   rf   r  r   rL   rk   )rN   r0   r   r   erj   itemrO   s          r1   rk   z1UnspecializedNNModuleVariable.unpack_var_sequence  s    ,	-''DB HH((HH""++HH((
 

 ;;; "+4::!6!6IC L=c+JKDQ!6 
 w*2..  	-%1,	-s    C= <.D=	DDDc                 .   | j                   }t        |      r+|j                  |j                  | _        t	        ||||       d}t        | j                  |      }| j                  r!t        t        | j                  d      |      }nd }| j                  r*t        t        t        |            | j                  ||      n	t               }|5  t        j                  ||      j                  || gt        |      z   |      cd d d        S # 1 sw Y   y xY w)Nr   rO   rY   )r  r   r   r!  r?   rs   rD   r   rF   r
  r*  r   r	   r   r   r6   )	rN   r0   r;   r<   r:   rB   r   rD   ctxs	            r1   r   z+UnspecializedNNModuleVariable.call_function  s     jj#  ,"%"3"3"2sD&9T__d+;;
4;; DdKFF {{ #3r#w<b#F 	
 11"VDRRTFT$Z' SSs   5DDc                     ddl m} |dv rzt        | j                  |      }| j                  r!t        t        | j                  d      |      }nd }t        j                  ||      j                  || gt        |      z   |      S |t        | j                  di       vr	 t        j                  t        | j                        |      }|t        j                   j"                  j$                  u r|r|sJ |j&                  j(                  j+                  |       rt-        d       t/        | j                  j1                  t2        j4                               g }	| j                  j7                         D ]7  \  }}
|	j9                    ||t        | j                  |            |
             9 t        j:                  |	t=                     S t?        |t@              r\t        t        t        | j                  d      |      d	      }|jC                  t        j                  |jD                  |      ||      S tG        |jH                        | jK                         v rt-        d
|        tL        |   ||||      S # t        $ r d }Y w xY w)Nr   r   r   rO   rY   r   z)Module.parameters() with pending mutationr   r   z&UnspecializedNNModuleVariable missing )(r   r   rs   r!  rD   r   r	   r   r   r6   r  r   r   r8   r   r+   r\   r)  r   rZ   side_effectshas_pending_mutationr   r   rn   r   NN_MODULE_PARAM_NAMESr   rb   r   r    r*   r   r   r   r*  r(  r+  rL   r   )rN   r0   rB   r;   r<   r   r   rD   methodr^   r  rO   s              r1   r   z)UnspecializedNNModuleVariable.call_method  s,    	-77$/B{{#Jt{{K$H$O11"VDRRTFT$Z'  wtzz:r:: //TZZ0@$G 3336))99))>>tD!"MNKK**<+M+MN #'::#>#>#@KD%LLJJt{{D,IJ5Q $A !55  FL1#z$++{CTJJ 55226??6R  &//"d&@&@&BB FtfMNw"2tT6::? " s   !)I> >JJr  )r  r  r  r%   r  rM   r   	functools	lru_cacher+  rk   r   r   r  r  s   @r1   r  r  n  s    "N%>%M%MNN0" Y
  
/*/9U	46; &	6;
 -6; 
6; 6;r3   r  c                   "     e Zd ZdZ fdZ xZS )FSDPManagedNNModuleVariablea  
    Tracing behavior: trace into submodules and treat them as Unspecialized, do not
    register parameters to the top-level, treat them as function inputs.

    Guards behavior: if 'skip_fsdp_guards', many guards that would be installed
    by a vanilla UnspecializedNNModuleVariable are simply dropped, on the basis
    that a user wrapping their model in FSDP(model) is already opting into a
    requirement to not modify internal model state, which would already break FSDP without
    compilation.
    c                     |j                  dd       }|J d       t        |   dd|i| t        j                  j
                  j                  rt        |      | _        y t        |      | _        y )NrD   zMFSDPManagedNNModule depends on having an accurate source to control guarding.r  rK   )
getrL   rM   r+   _dynamoconfigskip_fsdp_guardsr   rD   r   )rN   r  r<   rD   rO   s       r1   rM   z$FSDPManagedNNModuleVariable.__init__  so    Hd+	[Z	[ 	/u//==00,V4DK ,F3DKr3   )r  r  r  __doc__rM   r  r  s   @r1   r;  r;    s    	4 4r3   r;  )<r8  r   r   r}   
contextlibr   r   typingr   r   torch.nnr+   r   r   r	   allowed_functionsr
   excr   r   r   guardsr   r   mutation_guardr   rD   r   r   r   r   r   utilsr   r   r   r   r   r   r   r   r   rg   r    r!   r"   	functionsr#   listsr$   user_definedr%   r?   r
  r\   r)  rF   rH   r  r;  rK   r3   r1   <module>rM     s        2   # * I I 0 . 
 
 
 9 8 3   3*6 +s +UXX__ + +_? _?DJ;$= J;Z4"? 4r3   