
    IЦi                      % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	JrJr  S SKJrJrJrJrJrJrJ r J!r!J"r"J#r#  S SKJ$r$  S SK%r%S SK&r%S SK'r%S SK(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1  S S	K2J3r3J4r4J5r5J6r6J7r7  S S
K8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArA  S SKBJCrC  S SKDJErE  S SKFJGrGJHrHJIrI  S SKJJKrK  S SKLJMrMJNrN  S SKOJPrP  SSKQJRrRJSrSJTrTJUrU  SSKVJWrW  SSKXJYrYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrrJsrsJtrt  SSKJuruJvrvJwrwJxrxJyryJzrz  SSK{J|r|J}r}J~r~JrJrJrJrJrJrJrJrJrJrJrJrJr  SrS\S'    S SKr\"(       a  S SKJr  \GR&                  " \5      r\%GR,                  GR/                  \S5      r\%GR,                  GR/                  \S5      r\%GR,                  GR/                  \S5      r\%GR,                  GR/                  \S5      r " S S5      rS  r\GR<                  " S5      S! 5       rSqS"\S#'   S$ rSOS% jrS& rS' rSPS( jr      SQS) jrS* rS+ rS, rS- r\GRV                  " S.S/9 " S0 S15      5       rS2 rS3 r\GRV                   " S4 S55      5       r " S6 S7\GR`                  5      r " S8 S9\=5      r " S: S;5      rS< r " S= S>\5      r " S? S@5      rSRSA jrSB rSC rSD rSE r        SSSF jr          STSG jr    SUSH jrSI r          SVSJ jr\W" \5        SK rSL rS SM.SN jrg! \ a    Sr GNf = f)W    )annotationsN)contextmanager)deepcopy)currentframegetframeinfo)
AnyCallableDictListOptionalSetTupleTypeTYPE_CHECKINGUnion)ReferenceType)	check_obj_idcheck_type_iddict_versionDictGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardprofile_guard_managerRootGuardManager)$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceTensorPropertyTensorPropertySource)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlap)
structured)justknobs_check)EqualityConstraintis_symbolicSYMPY_INTERP)
OrderedSet)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexcmutation_guard)set_guard_error_hook)AttrProxySource
AttrSourceCallFunctionNoArgsSourceChainedSourceConstDictKeySourceDefaultsSourceFlattenScriptObjectSourceFSDPNNModuleSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceLocalSourceNNModuleSourceNumpyTensorSourceODictGetItemSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTupleIteratorGetItemSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntryDynamoFrameType
ExtraStateGuardedCode	GuardFailGuardFn)common_constant_typesdict_keys_reprget_custom_getattrget_torch_function_mode_stack get_torch_function_mode_stack_atguard_failuresistype	key_is_id	key_to_idnormalize_range_iterorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenunpatched_nn_module_getattrverify_guard_fn_signaturez#Optional[Callable[[Any, Any], Any]]guard_manager_testing_hook_fn)Symbolguards
recompilesrecompiles_verboseverbose_guardsc                  ~    \ rS rSrSrSS jr\S 5       rS rS r	S r
S	 rS
 rSS jrS rS rS rS rS rS rSrg)GuardManagerWrapper   z
A helper class that contains the root guard manager. An instance of this
class is stored in the Dynamo cache entry, so that the cache entry can
access the RootGuardManager stored in the "root" attribute and directly call
the check_nopybind from C++.
Nc                    Uc  [        5       U l        OXl        S U l        S U l        S U l        / U l        S U l        S U l        S U l        S U l	        S U l
        0 U l        / U l        SU l        [        5       U l        g NT)r   rootdiff_guard_rootclosure_varsargs
code_partsverbose_code_partsglobal_scopeguard_fail_fncache_entryextra_stateid_matched_objsno_tensor_aliasing_sourcesprint_no_tensor_aliasing_guardr/   diff_guard_sources)selfrv   s     S/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/_dynamo/guards.py__init__GuardManagerWrapper.__init__   s~    <(*DII# 	"& !!*,'.2+3=<    c              #  J   #    SU l          S v   SU l         g ! SU l         f = f7fru   )r   r   s    r   '_preserve_print_no_tensor_aliasing_flag;GuardManagerWrapper._preserve_print_no_tensor_aliasing_flag   s%     .2+	726D/$D/s   # #	 #c                p   ^ ^^^ U U4S jmU U4S jmUU4S jmT" T R                   5        T R                  $ )Nc                d  > U R                  5       TR                  ;   =(       d    U R                  5       S:  n[        U R	                  5       R                  5       5       H  u  nu  p4UT" U5      T" U5      -  -  nM     U(       a)  TR                  R                  U R                  5       5        U$ Nr   )
get_sourcer   
fail_countsortedget_key_value_managersitemsadd)nodeis_diff_guard_nodeidxkey_mgrval_mgrr   visits        r   visit_dict_managerJGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_dict_manager   s    !T%<%<<U@QTU@U  ,2++-335,''g #eGnuW~&EE",
 "''++DOO,=>%%r   c                H  > [        U [        5      (       a   eU R                  5       TR                  ;   =(       d    U R	                  5       S:  nU R                  5        H  nUT" U5      -  nM     U(       a)  TR                  R                  U R                  5       5        U$ r   )
isinstancer   r   r   r   get_child_managersr   )r   r   	child_mgrr   r   s      r   visit_managerEGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_manager   s    !$(89999 !T%<%<<U@QTU@U  "446	"eI&66" 7 "''++DOO,=>%%r   c                V   > U c  g[        U [        5      (       a  T" U 5      $ T" U 5      $ )NF)r   r   )r   r   r   s    r   r   =GuardManagerWrapper.collect_diff_guard_sources.<locals>.visit   s/    |$ 011)$// &&r   )rv   r   )r   r   r   r   s   `@@@r   collect_diff_guard_sources.GuardManagerWrapper.collect_diff_guard_sources   s,    	&	&	' 	dii&&&r   c                D    U R                  5         U R                  5         g N)r   populate_diff_guard_managerr   s    r   finalizeGuardManagerWrapper.finalize   s    '')((*r   c                    U R                  U R                  5      U l        U R                  (       a  U R                  R	                  5         g g r   )clone_with_chosen_sourcesr   rw   r~   update_diff_guard_root_managerr   s    r   r   /GuardManagerWrapper.populate_diff_guard_manager   s=    #==d>U>UV ;;= r   c                F   ^ U4S jnU R                   R                  U5      $ )Nc                *   > U R                  5       T;   $ r   )r   )node_mgrchosen_sourcess    r   	filter_fn@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fn  s    &&(N::r   )rv   clone_manager)r   r   r   s    ` r   r   -GuardManagerWrapper.clone_with_chosen_sources  s    	; yy&&y11r   c                    UR                   R                  nUR                  5       nU Vs/ s H
  oBS-   U-   PM     nnU$ s  snf )N: )	__class____name__r{   )r   guard
guard_namepartsparts        r   get_guard_lines#GuardManagerWrapper.get_guard_lines  sE    __--
((*6;<edd"T)e< =s   A c                    UR                  5       nUR                  R                  nUS-   U-   nU(       a  USU-   -  nU$ )Nz	: source=, )r   r   r   )r   guard_manageraccessor_strsourcetss         r   get_manager_line$GuardManagerWrapper.get_manager_line  sF    ))+##,,Of$$$Ar   c                   [        UR                  5       R                  5       5       H  u  nu  pEUR                  SU 35        UR	                  5          U(       a4  UR                  SU R                  U5       35        U R                  XB5        U(       a4  UR                  SU R                  U5       35        U R                  XR5        S S S 5        M     g ! , (       d  f       M  = f)NzKeyValueManager pair at index=zKeyManager: zValueManager: )r   r   r   	writelineindentr   construct_manager_string)r   mgrbodyr   r   r   s         r   construct_dict_manager_string1GuardManagerWrapper.construct_dict_manager_string  s    '-c.H.H.J.P.P.R'S#C#'NN;C5ABNN\$2G2G2P1Q#RS11'@NN^D4I4I'4R3S#TU11'@  (Ts   A7C
C'	c           
     8   UR                  5          UR                  5        H  n[        U[        R                  R
                  R                  R                  5      (       ab  U R                  (       a)  SU l        UR                  U R                  U5      5        Mz  UR                  UR                  R                  /5        M  UR                  U R                  U5      5        M     [        U[        5      (       a  U R                  X5        [        UR!                  5       UR#                  5       5       HH  u  pEUR%                  U R'                  USUR)                  5        35      5        U R+                  XR5        MJ     S S S 5        g ! , (       d  f       g = f)NFzaccessed_by=)r   get_leaf_guardsr   torch_C_dynamorm   NO_TENSOR_ALIASINGr   
writelinesr   r   r   r   r   zipget_accessorsr   r   r   reprr   )r   r   r   r   accessorr   s         r   r   ,GuardManagerWrapper.construct_manager_string+  s/   [[],,.eUXX%5%5%<%<%O%OPP::>C;(<(<U(CD % 8 8 OOD$8$8$?@ / #/00223= (+!!#S%;%;%=(# )))|HMMOCT5UV --i>() ]]s   E1F
Fc                   SSK Jn   " S SU5      nU R                  5          U" 5       nSUl        UR	                  SSS9  UR	                  S	SS9  UR	                  S
5        U R                  U R                  U5        [        U R                  S5      (       aA  U R                  R                  5        H#  nUR                  U R                  U5      5        M%     UR                  5       sS S S 5        $ ! , (       d  f       g = f)Nr   IndentedBufferc                  2   ^  \ rS rSrS rSU 4S jjrSrU =r$ )=GuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefixiK  c                :    SU R                   U R                  -  -  $ )Nz| )_indenttabwidthr   s    r   prefixDGuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefix.prefixL  s    t||dmm;<<r   c                X   > U(       a  [         TU ]  U5        g [         TU ]  SU-   5        g )Nz+- )superr   )r   lineskip_prefixr   s      r   r   GGuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefix.writelineO  s$    G%d+G%edl3r    F)r   
__module____qualname____firstlineno__r   r   __static_attributes____classcell__r   s   @r   IndentedBufferWithPrefixr   K  s    =4 4r   r   r3    T)r   zTREE_GUARD_MANAGER:r   get_epilogue_lambda_guards)torch._inductor.utilsr   r   r   r   r   rv   hasattrr   r   r   getvalue)r   r   r   r   r   s        r   __str__GuardManagerWrapper.__str__H  s    8	4~ 	4 99;+-DDMNN24N0NN0dNCNN-.))$))T:tyy">??!YYAACEOOD$8$8$?@ D==? <;;s   CC33
Dc                8    U R                   R                  U5      $ r   )rv   checkr   xs     r   r   GuardManagerWrapper.checka  s    yyq!!r   c                8    U R                   R                  U5      $ r   )rv   check_verboser  s     r   r  !GuardManagerWrapper.check_verbosee  s    yy&&q))r   c                L   ^ ^^^ SmS mUU UU4S jmT" T R                   5        g )NFc                    / nU R                  5        H6  nUR                  S5      S   R                  5       nUR                  U5        M8     U$ )N#r   )r{   splitrstripappend)
leaf_guardrz   verbose_code_part	code_parts       r   get_code_partsMGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.get_code_partsm  sP    J%/%B%B%D!-33C8;BBD	!!), &E r   c                  > U R                  5        H  n[        U[        R                  R                  R
                  R                  5      (       a.  T(       d%  TR                  R                  T" U5      5        SmMl  Mn  TR                  R                  T" U5      5        M     U R                  5        H  nT" U5        M     g ru   )
r   r   r   r   r   rm   r   rz   extendr   )r   r   r   r  r   tensor_aliasing_guard_seenr   s      r   r   DGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.visitt  s    ,,.eUXX%5%5%<%<%O%OPP5..~e/DE592 6 OO**>%+@A / !335	i  6r   )rv   )r   r  r  r   s   `@@@r   !populate_code_parts_for_debugging5GuardManagerWrapper.populate_code_parts_for_debuggingi  s&    %*"		! 	! 	diir   )ry   r~   rx   rz   rw   r   r   r|   r}   r   r   r   rv   r{   r   )r   r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r   rr   rr      s_    @, 7 7/'b+>2
A?:#2"*r   rr   c                   [         R                  R                  5          [        U [        R
                  [        R                  45      (       a  [         R                  " U 5      OU sS S S 5        $ ! , (       d  f       g = fr   )r   	overrides_enable_torch_functionr   npgenericndarray	as_tensor)as    r   
from_numpyr!    sH     
	/	/	1%/BJJ

3K%L%Luq!RS 
2	1	1s   AA00
A>c                     SS K n SS Kn U R                  R                  U R                  R                  /nSSKJn  UR                  U5        U Vs1 s H  n[        R                  " U5      iM     sn$ s  snf )Nr   )POLYFILLED_MODULES)
torch._dynamo.external_utilstorch._dynamo.polyfillsr   external_utils	polyfillstorch._dynamo.polyfills.loaderr#  r  inspectgetfile)r   modsr#  ms       r   uninteresting_filesr-    sW    '"MM((%--*A*ABDAKK"#(,-1GOOA---s    A3zOptional[Dict[str, object]]_CLOSURE_VARSc                    [         c  0 S[        _S[        _S[        R                  R
                  _S[        _S[        _SS _S[        _S	[        _S
[        _S[        _S[        R                  _S[        c  S O[        R                  _S[        S5      _S[         R"                  _S[$        R&                  R(                  _S[$        R*                  _S[,        _[$        R.                  [$        [0        S.Eq [         $ )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                
    X;   $ r   r   )r   bs     r   <lambda>#_get_closure_vars.<locals>.<lambda>  s    QVr   ___tuple_iterator_len___normalize_range_iter___tuple_iterator_getitem#___get_torch_function_mode_stack_at__math_isnan__numpy_isnaninf__load_moduleutils_devicedevice___from_numpy)___as_tensorr   r)  )r.  r   r   collectionsOrderedDict__getitem__rc   r   rh   rd   rg   r_   mathisnanr  float	importlibimport_moduler   utils_devicerC  r!  _as_tensor_fullprecr)  r   r   r   _get_closure_varsrQ    s,   

|
  7 7 C C
 I	

 |
  3
 $%7
 &';
 ()?
 23S
 DJJ
 RZTRXX
 5<
 Y44
 EKK//
  ell!
" Z#
$ "55)
, r   c                N    [         R                  " U 5      R                  SS5      $ )N
r   )astunparsereplace)r   s    r   _ast_unparserW    s    ;;t$$T2..r   c                    [         R                  " S5      nSnU  HM  nUS;   a  SnM  US;   a6  U(       a-  US:w  a%  UR                  U5      (       a  [        U5      s  $ ME  MG  MI  X#-  nMO     [	        U 5      $ )z
"___odict_getitem(a, 1)" => "a"
"a.layers[slice(2)][0]._xyz" ==> "a"
"getattr(a.layers[slice(2)][0]._abc, '0')" ==> "a"
"getattr(getattr(a.x[3], '0'), '3')" ==> "a"
"a.layers[slice(None, -1, None)][0]._xyz" ==> "a"
z[A-Za-z_].*r   z (z),[]None)recompilematchstrip_function_callstrip_getattr_getitem)name
valid_namecurrchars       r   r]  r]    sx     M*JD4<DV^:+;+;D+A+A*400 ,Bt LD  !&&r   c                6    [         R                  " SU 5      S   $ )z
"a[1]" => "a"
"a.foo" => "a"
z[.\[]r   )rZ  r
  r_  s    r   r^  r^    s    
 88Hd#A&&r   c                8   SnUb  UR                   (       aD  [        UR                   5       H*  nUR                  [        5       ;  d  M  S[	        USS9 3n  O=   O:UR
                  (       a)  S[	        UR
                  R                  5       S   5       3nU S U 3$ )Nr   z  # T)r   z<60)
user_stackreversedfilenamer-  r0   stacksummary)r  r   extrafss       r   get_verbose_code_partrn    s    Eu//0;;&9&;;"<#>"?@E 1 [[<(;(;(=b(ABCDE_UG$$r   c                t    [        U [        5      (       d  U /n U  Vs/ s H  n[        X!5      PM     sn$ s  snf r   )r   listrn  )rz   r   r  s      r   get_verbose_code_partsrq    s6     j$'' \
EOPZ	!)3ZPPPs   5c                    / nU  Hp  n[        U5      (       d  UR                  U5        M&  [        U[        R                  5      (       d   eUR                  UR
                  R                  5       5        Mr     U$ r   )r-   r  r   r   SymIntr   maybe_as_int)size_or_stride	converteddims      r   convert_to_concrete_valuesrx    sd    %'I3S!c5<<0000SXX2245  r   c                |   [        U 5      n[        R                  R                  U 5      [        R                  R	                  5       -  [        R                  R                  5       -
  nU R                  nU R                  R                  nU R                  nSU SUR                   SU SU SU SU SU SU S3n	U	$ )Nzcheck_tensor(r   z	, device=z, requires_grad=z, size=z	, stride=))typer   r   _dispatch_keys_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyperC  indexrequires_gradr   )
valuer_  sizesstridespytypedispatch_keyr  device_indexr  	guard_strs
             r   get_tensor_guard_code_partr    s    %[F&)Q)Q)SS0023L KKE<<%%L''M
vR 3 34B|nBug N/geWIV]U^^_	a  r   c                R    [        U R                  5       5      R                  U5      $ r   )rp  keysr  )dctkeys     r   get_key_indexr    s    
!!#&&r   c                    SU  SU S3$ )Nlist(	.keys())[]r   )r   r  s     r   get_key_index_sourcer    s    6()E7!,,r   T)frozenc                  @    \ rS rSr% SrS\S'   SrS\S'   SrS\S'   S	rg)
NNModuleAttrAccessorInfoi  Fboolpresent_in_generic_dictNzOptional[str]l1_keyl2_keyr   )	r   r   r   r   r  __annotations__r  r  r   r   r   r   r  r    s'     %*T) !FM  !FM r   r  c                   U R                   R                  5       nU R                  5       n[        U R                  [        5      (       a  U R                  R                  nO,[        U[
        5      (       d   e[        X R                  5      n[        XW5      n[        UR                  5       5      U   n	[        U	[        [        45      (       a
  U SU	< S3n
OU SU S3n
[        U R                  [        5      (       dK  UR                  UUU R                  [        R                  S9R                  U R                  U SU	< 3/5        UR!                  UU
UUS9$ )N[r  r  r   example_valueguard_manager_enum == )baser_  r   r  r=   dictr  r  rp  r  intstrget_key_managerGuardManagerTypeGUARD_MANAGERadd_equals_match_guardget_value_manager)r   base_guard_managerbase_example_valuer  r  base_source_namesource_namer  
key_sourcekey_example_valuevalue_sources              r   getitem_on_dict_managerr  #  sN    {{'')++-K&,, 233"",d33330,,?%&6>J/4467>#c3Z00*+1->,AC*+1ZL:fll$677 	** ,,/==	 	+ 	

 !
 LLj\.?-BCD
 //#-	 0  r   c                r    U R                   nUR                  5       =(       a    [        U[        5      (       + $ r   )originating_sourceis_dict_keyr   rE   )r   r   s     r   match_on_id_for_tensorr  H  s+    %%FF
6:(F$FFr   c                  *    \ rS rSr% S\S'   S\S'   Srg)GuardCodeListiO  	List[str]	code_listr$   r   r   Nr   r   r   r   r  r   r   r   r   r  r  O  s    Lr   r  c                       \ rS rSrSrSrSrSrg)r  iU  r3         r   N)r   r   r   r   r  DICT_GUARD_MANAGERDICT_SUBCLASS_GUARD_MANAGERr   r   r   r   r  r  U  s    M"#r   r  c                     \ rS rSr              S7S jrS rS r\S 5       rS r	S r
S rS	 rS
 rS rS8S jr  S9S jrS:S jrS;S jrS<S jrS8S jrS=S>S jjrS>S jrS8S jrS?S jrS8S jrS=S8S jjrS8S jrS8S jrS8S jrS8S jrS8S jrS8S jr S8S jr!S8S  jr"S8S! jr#S8S" jr$S8S# jr%S8S$ jr&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S8S- jr/S8S. jr0S8S/ jr1S8S0 jr2S8S1 jr3S8S2 jr4S8S3 jr5S=S8S4 jjr6S=S5 jr7S6r8g)@GuardBuilderi[  c                   Xl         X l        X0l        XES.U l        [        R
                  R                  5       U R                  S'   [        R                  R                  R                  R                  5        HW  u  nn	UR                  SS5      R                  SS5      R                  SS5      nXR                  S   U'   XR                  U'   MY     X`l        / U l        / U l        / U l        / U l        / U l        Xpl        [)        5       U l        U R&                  R,                  R.                   H6  n
U R*                  R1                  [3        U R5                  U
5      5      5        M8     0 U l        0 U l        [)        5       U l        g )NLG__builtins__>_<._dot_)id_ref
source_reflookup_weakrefsscopebuiltins__dict__copyr   packagepackage_importer_package_imported_modulesr   rV  r   argnamescodeshape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managersetkey_order_guarded_dict_idsoutput_graphguard_on_key_orderr   idgetr   _cached_guard_managers_cached_duplicate_input_guards)r   r  r  r  local_scoper|   r   r  r_  package_moduler  s              r   r   GuardBuilder.__init__\  s[    $.9D3X
%-%6%6%;%;%=

>" ]]++EEKKM
<<S)11#s;CCCQD/=JJ~&t,-JJt N +#%)+	
 46 46%LN.6F +.%'00==PPK++//488K3H0IJ Q BD
  	# EHE+r   c                f   U R                  U5      n[        U[        5      (       a  [        SUR                   35      eUR
                  R	                  5       nUR                  5        HE  nX   n[        UR
                  US9nU R                  Xq5      nUR                  UU SU< S3UUS9  MG     g )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )r  r  r  r  r   r  r  )
get_guard_managerr   r   NotImplementedErrorr_  r  r  rA   get_guard_manager_typedict_getitem_manager)	r   r  r   dict_mgrdict_sourcer  r  r  r  s	            r   #guard_on_dict_keys_and_ignore_order0GuardBuilder.guard_on_dict_keys_and_ignore_order  s    ))%0h 011%FFKjj\S  ..335 %%'C!&E()A)AML!%!<!<" ))%awa0##5	 *  (r   c                .   U R                  U5      n[        U[        5      (       d  [        SUR                   35      e[        U[        5      (       d   e[        UR                  5       5       H  u  pE[        UR                  U5      nUR                  UUU[        R                  S9n[        U5      (       a6  U R                  XV5      nUR                  U[        SU SU S3U5      5        M  UR                  U[        U SU< 3U5      5        M     g )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r  z__check_obj_id(r   rz  r  )r  r   r   r  r_  	enumerater  r  r  r  r  rb   r  add_id_match_guardrq  r  )	r   r  r   r  r   r  r  key_managerid_vals	            r   guard_on_dict_keys_and_order)GuardBuilder.guard_on_dict_keys_and_order  s    ))%0($455%;;@::,H  ($45555!%**,/HC-ejj#>J"22!!#3#A#A	 3 K ~~S5..*)*RxqA5 22/:,d3'0JER' 0r   c                    [         R                  (       aD  [        R                  S:  a0  [        R                  S:  a  [        R
                  " S[        5        g U $ )N)r     )r  r  r3   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)r4   issue_3_13_0_warningsysversion_infowarningswarnRuntimeWarning)r  s    r   '_get_generic_dict_manager_example_value4GuardBuilder._get_generic_dict_manager_example_value  sF     ''  G+  :-MM_ r   c           	     $   S nUR                   n	UR                  n
[        5       n[        R                  " UR
                  5       H,  nUR                  UR                  R                  5       5        M.     [        SSS5      nX;   a  [        SU	S5      nOXSU
;   a  XS   ;   a  [        SSU	5      nO<SU
;   a  XS   ;   a  [        SSU	5      nO X;  a  SU
;   a  XS   ;   a  [        SSU	5      nUR                  (       d  UR                  UR                   UUUS9$ UR                  (       d   eUR                  nUR                  nU S	3nS=nnS=nnS=nnU(       aR  [        UR                  U5      nUR                  5       nX   nU R!                  UU5      nUnUnU R!                  X5      nOUnUnU R!                  X5      nUR#                  UU R%                  U
5      [&        R(                  S
9nU" UUUU
UUS9nU(       a  U" UUUUUUS9$ U$ )a  
This tries to avoid calling the expensive nn module custom getattr method by
checking if the attribute is accessible via __dict__. For attributes that
are not accessible via __dict__ (like descriptors), we fallback to
PyObject_GetAttr.

There are two cases that we optimize for
1) attributes present directly in __dict__, e.g training.
2) parameters/buffers/modules - they can be accessed via _parameters,
_buffers, _modules keys in __dict__. For example, mod.linear can be
accessed as mod.__dict__["_parameters"]["linear"]

The most common and expensive case for nn module guards is of type
mod.submod1.submod2.submod3.training. We avoid the python getattr of nn
modules by going through the __dict__.
c                
   [        U [        5      (       a]  [        X15      nSU SU< S3nU R                  UUU[        R
                  S9R                  X SU< 3/5        U R                  UUUUS9$ U R                  UUUUS9$ )Nr  r  r  r  r  r  )	r   r   r  r  r  r  r  r  r  )r   r  r  r  r  r  r  r  s           r   getitem_on_dict_mgr>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr  s     #/00 &&8>  %[M5)1E
##%"%'7'E'E	 $ 
 )(T#/I.JK ,,&"/'9	 -   //&"/'9	 0  r   FNT_parameters_buffers_modulesattrr   r  r  	.__dict__r   r  r  )r   r  r  r  r  r  )memberr  r  r)  getmror   updater  r  r  getattr_managerr  r  r:   r  r_  r  get_generic_dict_managerr  r  r  )r   r   r  r  r  r  r  r  r  	attr_namemod_dictall_class_attribute_namesr  accessor_infor  r  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_module!GuardBuilder.getattr_on_nn_module  se   6	@ MM	%...1e! 2 < <=A%,,QZZ__->? > 1dC 4T9dKMh&98O+O4T=)TM8#	j5I(I4T:yQM6h&j11 5T:yQM44 &55]]"+#5	 6   !''''"))F"))F "2 2)<O.22N^"&&Hx<@@!$9&v{{F;	!*!1#+ )-(C(CIx(X%!,((,(C(C)% "-((,(C(C)% (:'R'R&"JJ8T#3#A#A (S ($ ),*#+&#8F * .'/"*'<  Mr   c                    UR                  5       nUS:X  a  g[        U R                  U5      5      nX0R                  ;   $ )Nr   F)r_  r  r  r  )r   r   r  obj_ids       r   requires_key_order_guarding(GuardBuilder.requires_key_order_guardingy  s:    kkm"DHH[)*8888r   c                   [         R                  nU R                  U5      (       ad  [        U[        5      (       d   e[        U5      R                  [        0 5      R                  L a  [         R                  nU$ [         R                  nU$ r   )	r  r  r%  r   r  r{  r  r  r  )r   r   r  r  s       r   r  #GuardBuilder.get_guard_manager_type  sw    -;;++F33mT2222 M"''48==8%5%H%H" "! &6%Q%Q"!!r   c                \    U[         R                  :H  =(       d    U[         R                  :H  $ r   )r  r  r  )r   mgr_enums     r   manager_guards_on_keys#GuardBuilder.manager_guards_on_keys  s+    (;;; H+GGG	
r   c                    U R                   R                  R                  U R                  S   SU R                  S   [        R
                  S9$ )Nr  )	f_globalsr   r  r  )r   rv   globals_dict_managerr  r  r  r   s    r   get_global_guard_manager%GuardBuilder.get_global_guard_manager  sH    !!&&;;jjo**S//==	 < 
 	
r   c           	       ^ U R                   R                  nS nTR                  5       nUS:w  a  X@R                  ;   a  U R                  U   $ US:w  a  U R	                  U5      nU R                  TU5      nS nS nS n[        R                  n	[        T[        5      (       ab  TR                  R                  5       nU R	                  U5      nU R                  TR                  5      nU R                  TR                  U5      n	[        T[        5      (       a  UR                  TR                  UUUS9n
GO[        T[         5      (       a,  U R#                  5       R                  TR$                  UUUS9n
GO[        T[&        5      (       a,  U R#                  5       R)                  TR$                  UUUS9n
GO[        T[*        5      (       a  U$ [        T[,        5      (       a  U$ [        T[.        5      (       a  U(       d   eUR1                  UUUS9n
GO6[        T[2        [4        [6        [8        [:        45      (       a  U(       d   eUn
GO[        T[<        5      (       a  UR?                  U4S jUUUS9n
GO[        T[@        5      (       a  U(       d   eURC                  UUUS9n
GO[        T[D        [F        45      (       a{  U(       d   e[        U[H        RJ                  RL                  5      (       a+  [O        U5      [P        L a  U RS                  TUUUUUU5      n
GO)URU                  TRV                  UUUS9n
GO[        T[X        5      (       Ga}  U(       d   e[        U[Z        [\        R^                  45      (       a  [        U[`        5      (       a)  U Rc                  U	5      (       d   e[e        TUUUU5      n
GO[        TRf                  [h        5      (       a  [k        S5      eUR                  TRf                  UUUS9n
GOA[        U[l        5      (       a/  TRn                  (       d  URq                  TRf                  UUUS9n
GO[        U[r        5      (       a/  TRn                  (       d  URu                  TRf                  UUUS9n
GOTRf                  nTRn                  (       a  TRw                  5       nURy                  UUUUS9n
GOx[        T[z        5      (       ae  [        U[`        5      (       a)  U Rc                  U	5      (       d   e[e        TUUUU5      n
GO%U(       d   eUR                  TRf                  UUUS9n
GO[        T[|        5      (       a  U(       d   e[        U5      (       d   eTR                  (       dE  UR                  UUR                  [        R                  S9Ry                  TR                  UUUS9n
GOxUR                  nUc   eUS	-   nUR                  UU[        R                  S9n[        U[`        5      (       a   eUR                  TR                  UUUS9n
GO[        T[        5      (       a!  U(       d   eUR?                  [        UUUS9n
GO[        T[        5      (       a  U(       d   eUR?                  S
 UUUS9n
GO[        T[        5      (       a  U(       d   eUR?                  S UUUS9n
GOr[        T[        5      (       a  U(       d   eUR?                  S UUUS9n
GO?[        T[        5      (       a  U(       d   eUR?                  S UUUS9n
GO[        T[        5      (       a&  U(       d   eUR                  TRf                  UUUS9n
O[        T[h        5      (       a=  [        U[`        5      (       d  [        S5      eUR                  TRf                  UUUS9n
O[        T[        5      (       a  U(       d   eUR                  UUUS9n
OO[        T[        5      (       a  U(       d   eUR                  UUUS9n
O[        ST STR                  5        35      eXR                  TR                  5       '   U
$ )Nr   r  )global_namer   r  r  r  c                6   > [        TR                  5       5      $ r   )r_   
_get_index)r  r   s    r   r8  <GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (H%%')r   )python_lambdar   r  r  r
  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_orderz.__kwdefaults__c                (    U R                  5       S   $ r   __tensor_flatten__r  s    r   r8  r6    s    (<(<(>q(Ar   c                "    U R                  5       $ r   )__obj_flatten__r;  s    r   r8  r6    s    (9(9(;r   c                >    U R                  5       R                  5       $ r   )_typequalified_namer;  s    r   r8  r6    s    	(@(@(Br   c                "    U R                  5       $ r   )get_baser;  s    r   r8  r6    s
    

r   r  z4ConstDictKeySource can only work on DictGuardManagerzmissing guard manager builder z - )Tr   rv   r_  r  r  r  r  r  r   r<   r  get_guard_manager_from_sourcera   rF   r  
local_namerB   r0  r3  rD   global_weakref_managerrC   rL   rP   type_managerrJ   rG   rR   rQ   r@   rN   lambda_managerrE   grad_managerr:   rS   r   nnModuler]   ri   r!  r  r  rA   r  rF  rG  r   r+  r  r  r=   RuntimeErrorrp  index_is_slicelist_getitem_managertupletuple_getitem_managerunpack_slicegetitem_managerrI   r>   callableis_kwfunc_defaults_manager__defaults__idx_key__kwdefaults__func_kwdefaults_managerrH   r!  rM   r?   rK   r9   rO   tuple_iterator_getitem_managerAssertionErrorr  rT   weakref_call_managerr;   call_function_no_args_manager)r   r   root_guard_managerr  r  r  r  r  r  base_guard_manager_enumoutr  
kwdefaults	kw_sourcer  s    `             r   rC  *GuardBuilder.get_guard_manager_from_source  s   !//44kkm"0K0K!K..{;;" HH[1M!88O  !!"2"@"@fm,,%{{//1!%*:!;!%!C!CFKK!P&*&A&A/'#
 &+&& %99%%"+#5	 : C FL)) //1FF&&"+#5	 G C F/00//1HH".."+#5	 I C F-.. &%FN++%%FJ''%%%$11"+#5 2 C
 +2"	
 	
 &%%$CF899$33 #+#5 4 C FJ''%%%$11"+#5 2 C
 FZ)GHII%%% -uxx??&'9:./ //&&!$& )88&"/'9	 9  FM**%%%,t[5L5L.MNN 02BCC667NOOOO1**%*C "&,,0BCC*<  -AA"LL*&3+=	 B C .55f>S>S(==&"/'9	 >  .66v?T?T(>>&"/'9	 ?  (("//1E(88&"/'9	 9  F.//,.>??223JKKKK-&&!& *))(==&"/'9	 >  FN++%%%.////<<(>>+"4"A"A'7'E'E ?  "/&"/'9	 " 	  0>>
'333,/@@	 .EE$",'7'E'E F 
 &h0@AAAA33&"/'9	 4  F-..%%%$33("+#5	 4 C F233%%%$33A"+#5	 4 C F566%%%$33;"+#5	 4 C F;<<%%%$33B"+#5	 4 C FO,,%%%$334"+#5	 4 C F677%%%$CCll"+#5	 D C  23302BCC$J  %44ll"+#5	 5 C F-..%%%$99"+#5 : C
 F455%%%$BB"+#5 C C !0FKKM?K  69##FKKM2
r   c                8    U R                  UR                  5      $ r   )rC  r  r   r   s     r   r  GuardBuilder.get_guard_manager  s    11%2J2JKKr   Nc                   Uc
  [        5       nSR                  UR                  5       5      n[        X5      u  pg0 nSU R                  S   0n	[        XyU5        US   " UR                  5       6 n
U(       a&  U R                  R                  R                  X5        g U R                  R                  R                  X5        g )Nr   r  ___make_guard_fn)rQ  joinr  build_guard_functionr  execvaluesr   rv   add_epilogue_lambda_guardadd_lambda_guard)r   rz   r{   rx   is_epiloguemake_guard_fn_args
guard_bodypycoder_  globals_for_guard_fnguard_fns              r   $add_python_lambda_leaf_guard_to_root1GuardBuilder.add_python_lambda_leaf_guard_to_root  s     ,.L "YY|'8'8':;1*Q
  #TZZ_5V3/)*L,?,?,AB ##== ##44XRr   c                >    [        XR                  [        5       5      $ r   )evalr  rQ  )r   r_  s     r   r  GuardBuilder.get  s    D**&7&9::r   c                f   [        U[        5      (       a  UnOUR                  n[        [	        U5      5      nX0R
                  ;  ai  [        R                  " SU5      (       aM  [        R                  " SU5      (       a  [        R                  SU5        U R
                  R                  U5        U$ )Nz[a-zA-Z0-9_]+z^\d+$zinvalid var name: %s)r   r  r_  r^  r]  r  rZ  r\  logwarningr  )r   r   r_  r  s       r   arg_refGuardBuilder.arg_ref  s    eS!!D::D$%8%>?}}$xx($//88Hd++KK 6>$$T*r   c                    [        UR                  U5      n[        XCUR                  UR                  S9nUR                  U 5        g )N)rj  rg  )r:   r  r$   rj  rg  create)r   r   r  rs  attr_source	new_guards         r   _guard_on_attribute GuardBuilder._guard_on_attribute  s?     !9!99EAQAQ
	 	r   c           	        UR                   n[        U[        5      (       a  UR                  n[        U[        5      (       d   SUR
                   35       eUR                  nUR                  5       nUR                  nU R                  U5      n[        U R                  U5      U5      nS nU(       a  SU SU< S3nO
SU SU< S3nU R                  X/U R                  U5      S9  U R                  U5      n	U(       a  U R                  UR                  5       5      n
U R                  U5      nU R                  X*5      n[        U[        R                  R                  5      (       a7  [!        U5      ["        L a%  U R%                  UU	UU
UUR                  5       U5      $ U	R'                  UUR
                  U
US9  g U	R)                  U[+        X5      5        g )Nzinvalid source hasattr(r   rz  znot hasattr()provided_guarded_objectr
  )r  r   rG   r  r:   r_  r  r|  r   r  _set_guard_export_inforC  r  r   rI  rJ  r]   ri   r!  r  add_no_hasattr_guardrq  )r   r   r   base_sourcer  r  refvalr  base_managerr  r  r  s                r   HASATTRGuardBuilder.HASATTR  s   ))fn--[[F&*--M/MM-kk!}}ll4 dhhtnd+cU"THA.D!#b2D##6488D> 	$ 	
 99+F !HHV[[]3M!%$!%!<!<V!S
 -uxx??&'9:./ 00 &!KKM&  ,, ::"/'9	 -  --d4J44WXr   c                   Uc   eU R                  U5      nU R                  UR                  5      n[        U[        R
                  R                  5      (       d   eU R                  U5      nUR                   S3nUR                  UU R                  UR                  5      [        R                  S9nSU< SU S3nUR                  SU[        X5      5        g )Nr  r  znot ___dict_contains(r   z
.__dict__)F)r|  r  r_  r   r   rI  rJ  r  r  r  r  r  r  add_dict_contains_guardrq  )	r   r   r  r  r  r  r  r  r  s	            r   NOT_PRESENT_IN_GENERIC_DICT(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICTE  s    ll5!hhuzz"#uxx////--e4"ZZL	2#/#H#H"FFs||T/== $I $
  'thbZ@ 884/<	
r   c                4   [        U R                  UR                  5      5      nU R                  USUR                   S35      nSU R	                  U5       SU S3nU R                  X/5        U R                  U5      R                  U[        XA5      5        g )Ntype(rz  z___check_type_id(r   )	r{  r  r_  r  r|  r  r  add_type_match_guardrq  )r   r   r   r$  r  s        r   
TYPE_MATCHGuardBuilder.TYPE_MATCHY  s    %**%&Q%

|1 56"4<<#6"7r&C##E62u%::*47	
r   c                ,   U R                  U5      nU R                  UR                  5      n[        U R                  UR                  5      5      nSU SU 3nU R	                  X/5        U R                  U5      R                  U[        XQ5      5        g )Nz___dict_version() == )r|  r  r_  r   r  r  add_dict_version_guardrq  )r   r   r  r  versionr  s         r   DICT_VERSIONGuardBuilder.DICT_VERSIONd  s    ll5!hhuzz"txx

34!#eG95##E62 	u%<<'4	
r   c                    U R                  U5      nU(       a  SOSnU SU< SU S3nU R                  X/5        U R                  U5      R                  U(       + U[	        Xa5      5        g )Nnot r   z___dict_contains(r   rz  )r|  r  r  r  rq  )r   r   r  invertdict_ref	maybe_notr  s          r   DICT_CONTAINSGuardBuilder.DICT_CONTAINSr  sj    <<&$F"	-cWBxjB##E62u%==J3D@	
r   c                   [        UR                  [        5      (       a=  U R                  [	        UR                  R
                  [        R                  5      5      $ U R                  U5      nU R                  UR                  5      nU R                  X1R                  5      nSU SU S3nU R                  X/5        U R                  U5      R                  U[        XQ5      5        [        UR                  [        5      (       ad  [        U[         R"                  R$                  5      (       a:  UR                  R&                  nU R)                  U5      nUb  XpR*                  U'   g g g g )Nz___check_obj_id(r   rz  )r   r  rP   r  r$   r  r  r|  r  r_  r  r  r  r  rq  rF   r   rI  rJ  rD  r  r   )r   r   r  r  r  r  rD  weak_ids           r   ID_MATCHGuardBuilder.ID_MATCH}  s.   e..
;;??e..33\5L5LM  ll5!hhuzz"S**-!#b2##E62u%88*47	
 e..<< #uxx//"55@@
..s3&7>((4 ' 0	 =r   c                   U R                  U5      nU R                  UR                  5      n[        U[        R
                  5      (       d   eU S3nU R                  X/5        U R                  U5      R                  [        XQ5      5        g Nz is not None)
r|  r  r_  r   r   Tensorr  r  add_not_none_guardrq  )r   r   r  r  r  r  s         r   NOT_NONE_MATCHGuardBuilder.NOT_NONE_MATCH  sv    ll5!hhuzz"#u||,,,,l###E62u%88"4/	
r   c                F    U R                  US[        R                  5        g )Nr   )r  r  EQUALS_MATCHrd  s     r   
NAME_MATCHGuardBuilder.NAME_MATCH  s      
L4M4MNr   c                    U R                  UR                  5      nU R                  U5       SUR                  5        3nU R	                  X/5        U R                  U5      R                  U[        X15      5        g )Nz.data_ptr() == )r  r_  r|  data_ptrr  r  add_data_ptr_guardrq  )r   r   objr  s       r   DATA_PTR_MATCHGuardBuilder.DATA_PTR_MATCH  si    hhuzz",,u%&oclln5EF##E62u%88'4	
r   c                   ^^ [         R                  R                  R                  mST 3/nU R	                  X/5        [         R                  R                  mUU4S jnU R
                  R                  R                  U[        X!5      5        g )Nz,torch.autograd.forward_ad._current_level == c                "   > TR                   T:H  $ r   )_current_level)r  
dual_level
forward_ads    r   fn#GuardBuilder.DUAL_LEVEL.<locals>.fn  s    ,,
::r   )	r   autogradr  r  r  r   rv   rm  rq  )r   r   r  r  r  r  s       @@r   
DUAL_LEVELGuardBuilder.DUAL_LEVEL  st     ^^..==
>zlKL##E62^^..
	; 	00&t3	
r   c                  ^^ [         R                  R                  R                  5       nU Vs/ s H  o3R	                  5       PM     snmST S3/nU R                  X5        [         R                  R                  R                  mUU4S jnU R                  R                  R                  U[        XA5      5        g s  snf )Nz5torch._functorch.pyfunctorch.compare_functorch_state(rz  c                   > T" T5      $ r   r   )r  
compare_fnstatess    r   r  .GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn  s    f%%r   )r   
_functorchpyfunctorch#retrieve_all_functorch_interpreters	get_stater  compare_functorch_stater   rv   rm  rq  )r   r   ciscir  r  r  r  s         @@r   FUNCTORCH_STACK_MATCH"GuardBuilder.FUNCTORCH_STACK_MATCH  s     **NNP+./3R,,.3/GxqQR##E0 %%11II
	& 	00&t3	
 0s   B>c                  ^^ U R                  UR                  5      m[        U R                  UR                  5      R                  5       S   5      m[	        TS5      (       a  [        T5        UU4S jnOU4S jnS[        U5       S[        R                  " 5        3nU R                  U5      R                  U[        X15      5        g )Nr3   __metadata_guard__c                J   > TR                  TU R                  5       S   5      $ Nr3   )r  r:  )r  original_metadatar  s    r   metadata_checkerEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s)    //%q';';'=a'@ r   c                0   > U R                  5       S   T:H  $ r  r9  )r  r  s    r   r  r    s    ++-a04EEEr   ___check_metadata__c)r  r_  r   r:  r   rj   r  r!   current_compile_idr  rm  rq  )r   r   r  r3  r  r  s       @@r   TENSOR_SUBCLASS_METADATA_MATCH+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH  s    $$TXXejj%9%L%L%Nq%QR5.//%e,F +2.>+?*@>CdCdCfBghu%664[H	
r   c                8  ^ U R                  U5      nU R                  UR                  5      n[        U5      n[        (       a  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  4nOSn[         ["        4n[%        [&        [        [$        [(        [*        [,        [.        R0                  1UkUk-  5      m[.        R2                  R5                  5       (       a  SSKJn  SSKJnJn	J n
  TU
U	UU4-   m[C        U[D        5      (       aN  [G        U4S j[H        RJ                  " URM                  5       URO                  5       5       5       5      (       d   eO'[C        UT5      (       d   S[        U5       ST 35       e[C        U[P        5      (       a  [R        RT                  " U5      (       ao  U RW                  U5        / nURY                  SU S	35        U R[                  X5        U R]                  U5      R_                  [a        5       S
   [c        X5      5        g [C        U[d        5      (       a  [        RT                  " U5      (       ao  U RW                  U5        / nURY                  SU S	35        U R[                  X5        U R]                  U5      R_                  [a        5       S   [c        X5      5        g U SU< 3/n[C        X65      (       a  [g        U5      nU R]                  U5      Ri                  U[c        X5      5        U R[                  X5        g )Nr   r   )
DeviceMesh)Partial	ReplicateShardc              3  <   >#    U  H  n[        UT5      v   M     g 7fr   )ra   ).0r  ok_typess     r   	<genexpr>,GuardBuilder.EQUALS_MATCH.<locals>.<genexpr>  s      -Vq(##-Vs   zUnexpected type z	, not in z__math_isnan(rz  r>  z__numpy_isnan(r?  r  )5r|  r  r_  r{  r  int8int16int32int64uint8uint16uint32uint64float16float32float64rp  r  rN  r[   	frozensetsliceranger   Sizedistributedis_availabletorch.distributed.device_meshr  (torch.distributed.tensor.placement_typesr  r  r  ra   r  all	itertoolschainr  rk  rK  rI  rJ  r  r  r  r  rm  rQ  rq  complexr   r  )r   r   r  r  r   np_typesok_mutable_typesr  r  r  r  r  r  s               @r   r  GuardBuilder.EQUALS_MATCH  s    ll5!hhuzz"I2						





/H H #;!

	 	 "	

 ))++@   	# H #t -6__SXXZ-V       A "$s)IhZ@A  #u$**S//OOE"DKK-uA./''4""5)::!#N3&t3  #wBHHSMMOOE"DKK.Q/0''4""5)::!#O4&t3  %tC7#$#(( 3-Cu%<<'4	
 	##E0r   c                    U R                  UR                  5      n[        U[        [	        S 5      [
        R                  45      (       a  U R                  U5        g U R                  U5        g r   )	r  r_  ra   r  r{  typesCodeTyper  r  r   r   r  s      r   CONSTANT_MATCHGuardBuilder.CONSTANT_MATCHO  sJ    hhuzz"#d4j%..9::MM% e$r   c                H   U R                  U5        U R                  UR                  5      n[        US5      (       aC  [	        UR
                  [        5      (       d   eU R                  US[        R                  5        g [        R                  " S[        U5       35        g )Ntrainingz$Guard setup for uninitialized class )r  r  r_  r   ra   r	  r  r  r  r  r6   unimplementedr{  r  s      r   	NN_MODULEGuardBuilder.NN_MODULEV  sv    ehhuzz"3
###,,----$$UJ8S8ST DT#YKPQr   c                $    U R                  U5      $ )z0things like torch.add and user defined functions)r  rd  s     r   FUNCTION_MATCHGuardBuilder.FUNCTION_MATCH_  s    }}U##r   c                >   U R                  UR                  5      n[        U5      [        R                  :X  aT  [        US5      (       aC  U R                  US[        R                  5        U R                  US[        R                  5        gU R                  U5        g)z!matches a closure by __code__ id.__code__N)
r  r_  r{  r  FunctionTyper   r  r  r  r  r  s      r   CLOSURE_MATCHGuardBuilder.CLOSURE_MATCHc  sp    hhuzz"9***wsJ/G/G$$UJ8L8LM$$UJ8S8ST&r   c                $    U R                  U5      $ r   r  rd  s     r   BUILTIN_MATCHGuardBuilder.BUILTIN_MATCHm      ""5))r   c                $    U R                  U5      $ r   r  rd  s     r   PYMODULE_MATCHGuardBuilder.PYMODULE_MATCHp  r  r   c                d   U R                  U5      nU R                  UR                  5      n[        U5      n[	        U[
        5      (       d  U R                  U5        / n[        U5      S:X  a  UR                  SU 35        O UR                  SU S[        U5       35        U R                  X5        [	        U[
        5      (       a4  U R                  U5      R                  [        U5      [        XQ5      5        g U R                  U5      R                  [        U5      [        XQ5      5        g )Nr   r  zlen(r  )r|  r  r_  r{  r   r  r  lenr  r  r  add_dict_length_check_guardrq  add_length_check_guardr   r   r  r  r   r  s         r   SEQUENCE_LENGTHGuardBuilder.SEQUENCE_LENGTHs  s     ll5!$K%&&OOE"u:?KK$se%KK$se5U56##E0eT""""5)EEE
24? ""5)@@E
24?r   c                   U R                  U5      nU R                  UR                  5      n[        U5      n/ nUR	                  SU S[        U5       35        U R                  X5        [        U5      nU R                  USUR                   S35      nU R                  U5      R                  [        U5      U[        XQ5      5        g )Nz___tuple_iterator_len(r  r  rz  )r|  r  r_  r{  r  rh   r  r  r  add_tuple_iterator_length_guardrq  )r   r   r  r  r   r  r$  s          r   TUPLE_ITERATOR_LENGuardBuilder.TUPLE_ITERATOR_LEN  s    ll5!$K,SE7I%7P6QRS##E0KQ%

|1 56u%EEu%v/Ed/R	
r   c           
        U R                  U5      nU R                  UR                  5      n[        U5      n/ n[	        U5      nUR                  SU SU 35        U R                  X5        [        U5      nU R                  USUR                   S35      nUu  pn
U R                  U5      R                  XX[        XQ5      5        g )Nz___normalize_range_iter(r  r  rz  )r|  r  r_  r{  rd   r  r  r  r  add_range_iterator_match_guardrq  )r   r   r  r  r   r  normalized_range_iterr$  startstopsteps              r   RANGE_ITERATOR_MATCH!GuardBuilder.RANGE_ITERATOR_MATCH  s    ll5!$K 4U ;.se59N8OPQ##E0KQ%

|1 561Tu%DD'=d'J	
r   c                   U R                  U5      nU R                  UR                  5       5      n[        UR                  5      (       d  [        U5      (       a  g U SU 3/nU R	                  X5        X44nX`R
                  ;   a  g U R
                  R                  X445        U R
                  R                  XC45        [        U R                  U5      U R                  U5      [        XQ5      5        g )N is )r|  r_  r   r  r  r  r   r   r  rC  rq  )r   r   source_bref_aref_br  r  s          r   DUPLICATE_INPUTGuardBuilder.DUPLICATE_INPUT  s    U#X]]_-#$$
 
%h//'eW%&##E0 n555++//?++//?%""5)..x8"4/	
r   c                8   U R                  U5      nU R                  UR                  5      n[        U5      nU R	                  U5        / n[        S UR                  5        5       5      n[        [        U5      [        UR                  5      S9nU(       a  UR                  SU SU 35        OUR                  SU SU 35        U R                  X5        U R                  UR                  5      (       a  U R                  X15        g U R                  X15        g )Nc              3  8   #    U  H  n[        U5      v   M     g 7fr   )rb   )r  ks     r   r  )GuardBuilder.DICT_KEYS.<locals>.<genexpr>  s     ?,QIaLL,s   )localz___key_to_id(r  r  .keys()) == )r|  r  r_  r{  r  anyr  r\   rc   r   r  r  r  r%  r  r  )r   r   r  r  r   r  any_key_is_idconst_keys_reprs           r   	DICT_KEYSGuardBuilder.DICT_KEYS  s    ll5!$K?%**,??(e&u'?'?@
 KK-uE/1BCDKK%uL0ABC##E0++E,D,DEE--e;44UBr   c                    U R                  U5       S3/nU R                  X5        U R                  U5      R                  [	        X!5      5        g r  )r|  r  r  r  rq  )r   r   r  s      r   WEAKREF_ALIVEGuardBuilder.WEAKREF_ALIVE  sJ    <<&'|45##E0u%88"4/	
r   c           	     |   U R                  U5      nU R                  UR                  5      n[        U5      n/ nUR	                  SU S[        UR                  5       5      < 35        U R                  X5        U R                  UR                  5      (       a  U R                  X15        gU R                  X15        g)zConstant keys matchr  r<  N)r|  r  r_  r{  r  rp  r  r  r%  r  r  r  r!  s         r   DICT_CONST_KEYSGuardBuilder.DICT_CONST_KEYS  s    ll5!$KeC5T%**,-?,BCD##E0++E,D,DEE--e;44UBr   c                R    [         R                  (       a  gU R                  U5        g)z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)r4   skip_nnmodule_hook_guardsr"  rd  s     r   EMPTY_NN_MODULE_HOOKS_DICT'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s    ++U#r   c                x    [         R                  " U R                  UR                  5      U R                  5        g r   )r7   watchr  r_  r  rd  s     r   OBJECT_MUTATIONGuardBuilder.OBJECT_MUTATION   s%    TXXejj143H3HIr   c                    g r   r   rd  s     r   	GRAD_MODEGuardBuilder.GRAD_MODE      r   c                    g r   r   rd  s     r   DETERMINISTIC_ALGORITHMS%GuardBuilder.DETERMINISTIC_ALGORITHMS  rS  r   c                    g r   r   rd  s     r   TORCH_FUNCTION_STATE!GuardBuilder.TORCH_FUNCTION_STATE	  rS  r   c                    g r   r   rd  s     r   FSDP_TRAINING_STATE GuardBuilder.FSDP_TRAINING_STATE  rS  r   c                    UR                   [        R                  L d   eSSKJs  Jn  SUR                  < 3/nU R                  X5        U R                  U5      R                  [        X15      5        g)z/Guard on CURRENT_DEVICE per torch.utils._devicer   Nzutils_device.CURRENT_DEVICE == )r   r'   GLOBALtorch.utils._devicerN  rO  CURRENT_DEVICEr  r  add_default_device_guardrq  )r   r   r,  r  s       r   DEFAULT_DEVICEGuardBuilder.DEFAULT_DEVICE  se    ||{11111''1!2B2B1EFG##E0u%>>"4/	
r   c                  ^ UR                   S:X  d   eU R                  R                  mTR                  nU Vs/ s H  o3R                  PM     nnU4S jnTR
                  (       a  0 n/ n/ n0 n	[        5       n
TR
                   Hn  nUR                  TR                  ;   a<  [        R                  R                  R                  UUTR                  UUUU	U
5        MY  [        R                  S5        Mp     [!        UU[#        U	R%                  5       5      U
SS9nOS nTR                  R'                  U Vs/ s H  o3R(                  PM     snU Vs/ s H  o3R*                  PM     snUUU R,                  U R                  R                  R                  (       + S9u  pU R                  R                  R                  (       d  TR                  R/                  5         U H  nU R1                  X/5        M     [2        R4                  " 5       =n(       a  UR6                  R9                  U5        U R;                  UU0 [<        E[?        5       ES9  g s  snf s  snf s  snf )Nr   c                   > TR                   U     Vs/ s H  n[        U[        R                  U5      PM      sn$ s  snf r   )tracked_fakes_id_to_sourcer    r   SIZE)t_idrw  r   r  s      r   get_sources+GuardBuilder.SHAPE_ENV.<locals>.get_sources%  sD    
 +EEdKKF %V^-@-@#FK  s   %;z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_only)input_contextsequalities_inputsr  ignore_static)rx   ) r_  r  r  tracked_fakessymbolic_contextexport_constraintsr  rh  rf  r   exportdynamic_shapes_process_equalities	shape_envrz  r{  r,   rp  rk  produce_guards_verbosefaker   r  freezer  r!   try_getshape_env_guardsr  rt  r.   rQ  )r   r   rm  r   rp  ri  namesrk  rl  rm  rn  
constraintrq  rz   r{   r  compile_contextr  s                    @r   	SHAPE_ENVGuardBuilder.SHAPE_ENV  s+    zzR,,99''689b,,b9	 **02E8:L   24O+.5O*==
??l&M&MMLL//CC"#$..$*''	 KK MN > !3)#5 $_%;%;%= > /! !%)5)?)?)V)V RVVR !"r!XXr")/#44AAHHH *W *
&
 $$1188""))+D''v6  -4466?6,,334FG
 	11@L@,=,?@ 	2 	
C :T !"s   I8II
c                   UR                  5       (       a  [        UR                  [        5      (       a  [	        U5      (       a  U R                  U5        g [        U[        5      (       a  U" 5       nUb  UOU R                  UR                  5      n[        U[        R                  5      (       d   eU R                  U5      n/ nU R                  R                  R                  (       a  U R                  U5        / SQnU H  nU R                  US-   U-   5      n[!        U[        R"                  [        R$                  45      (       a&  UR'                  SU SU S[)        U5      < 35        Mo  UR'                  U SU SU 35        M     GO]U R+                  U5      n[,        R.                  (       a)  [!        U[        R0                  R2                  5      (       d6  U R4                  R'                  U5        U R6                  R'                  U5        U R                  R                  n	U	R8                  UR                     n
[;        U
S   5      n[;        U
S   5      n[=        [?        X#X5      U5      nURA                  UUUUU5        [        U[        R0                  R2                  5      (       d9  U R                  RB                  RD                  RG                  UR                  5        URH                  c   e[K        USUR                  S	9u  pU(       d  [M        US
5      (       aU  URN                  nSU SU SU S3nUR'                  U5        U R+                  U5      RQ                  U[=        UU5      5        OBSU S3nUR'                  U5        U R+                  U5      RS                  S
[=        UU5      5        [U        U5      S:  a  U RW                  X5        g g )N)r  rC  r  zndimension()r  zstr(r  r  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)r  z%, '_dynamo_dynamic_indices') == Falser   ),is_specialized_nn_moduler   r  rH   r  r  r2   r  r_  r   r  r|  r  r  rv  r  ra   rC  r  r  r  r  r4   ,skip_no_tensor_aliasing_guards_on_parametersrI  	Parameterr  r  input_source_to_sizes_stridesrx  rq  r  add_tensor_match_guardr   r   r   r   rf   r   r  add_dynamic_indices_guardr  r  r  )r   r   r  tensor_namer  termsterm
real_valuer   r  metadatar  r  r{   staticreasondynamic_indicesr  s                     r   TENSOR_MATCHGuardBuilder.TENSOR_MATCHj  si    **,,u779JKK#E**MM% %//".EDHHUZZ4HEeU\\2222,,u-K, !D$$1188& "D!%+*;d*B!CJj5<<*EFFd;-qeC
OCV$WX{m1TF$zl$KL " !% 6 6u = GGuehh&8&899 1188E::AA-P#44AA'EE,, 2(62BC3HX4FG%;.u4P&" 44& "%););<<))77JJNN

@ <<+++;U5M5MNF 5";<<&+&C&CO"$[M1STcSddrs~r  @g  !hIKK	***51KK')?	5)Q #;-/TU  KK	***51FF1.y%@ 4y1}++E8 r   c                r   [        5       nUc   eUR                  nAUc   e[        U5      S   nAU[        U R                  5      ;   d
   SU 35       eUcI  UR
                  S L=(       a    UR
                  S:g  nU(       a  U R                  UR
                  5      OS nOUnUb  [        R                  " [        U5      5      OS n	S n
[        UR                  SS5      S:g  nU(       a;  [        U[        R                  [        45      (       d  [        R                  " U5      n
UR                  UU	UU
5        g )Nr  zH_produce_guard_code must be called from inside GuardedCode. Called from r   __weakrefoffset__r   )r   f_backr   dirr   r_  r  weakrefr  r{  getattrr   enumEnumrN  set_export_info)r   r   r  r  	cur_framecaller	func_name
name_validguarded_objectguarded_object_typeobj_refsupports_weakrefs               r   r  #GuardBuilder._set_guard_export_info  s>    !N	$$$!!!!! (+	CNN
 
 	bUV_U`a	b 

 #*4/DEJJ"4DJ5?TXXejj1TN4N 2@1KGKK^,-QU 	  N,,.A1EJ 	 J~		5?Q$R$Rkk.1G		
r   )r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  )r  zCallable[[Any, str], str]r  zCallable[[Source], str]r  z)Callable[[object], ReferenceType[object]]r  Dict[str, object]r|   r  r   rr   r  CheckFunctionManager)r   r$   ru   )r_  r  returnr   )r   zUnion[str, Guard]r  r  )r   r$   r  r  r   )r   r$   r  rY  )r   r$   r  r  r  r  )9r   r   r   r   r   r  r  staticmethodr  r!  r%  r  r+  r0  rC  r  rt  r  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r&  r.  r5  r@  rC  rF  rJ  rN  rQ  rU  rX  r[  rb  r  r  r  r   r   r   r   r  r  [  s{   ;J);J ,;J C	;J
 ';J (;J +;J /;Jz. D  "Sj9
"

n`	L SD;4Yl
(	

	
?<	
O

 
$
*cJ%R$'**6
 
&
2C0
C$J

M
^[9|*
r   r  c                     \ rS rSrSr\R                  \R                  \R                  4r	\
R                   " S S5      5       r " S S\R                  5      r " S S\R                  5      rSS	 jrSSS
 jjrSS jrSS jrSrg)PyExprCSEPassiF  r3   c                  *    \ rS rSr% S\S'   S\S'   Srg)PyExprCSEPass.ConfigiN  zDict[str, int]
expr_countzDict[str, str]expr_to_namer   Nr  r   r   r   Configr  N  s    ""$$r   r  c                  6   ^  \ rS rSrSS jrSU 4S jjrSrU =r$ )PyExprCSEPass.ExprCounteriS  c                    Xl         g r   _config)r   r4   s     r   r   "PyExprCSEPass.ExprCounter.__init__T  s    !Lr   c                   > [        U[        R                  5      (       a*  U R                  R                  [        U5      ==   S-  ss'   [        TU ]  U5        g r  )r   r  ALLOWED_NODE_TYPESr  r  rW  r   r   )r   r   r   s     r   r   PyExprCSEPass.ExprCounter.visitW  sA    $ @ @AA''T(:;q@;GM$r   r  )r4   r  r  rY  r   ast.ASTr  r   r   r   r   r   r   r   r   r   r   s   @r   ExprCounterr  S  s    	"	  	 r   r  c                  H   ^  \ rS rSr      SU 4S jjrSU 4S jjrSrU =r$ )PyExprCSEPass.Replaceri\  c                H   > [         TU ]  5         Xl        X l        / U l        g r   )r   r   r  	_gen_namepreface)r   r4   gen_namer   s      r   r   PyExprCSEPass.Replacer.__init__]  s!    
 G!L%N&(DLr   c                J  > [        U[        R                  5      (       a  [        U5      nU R                  R
                  U   [        R                  :  a  X R                  R                  ;  ac  [        TU ]%  U5      n[        U5      nU R                  5       nU R                  R                  U SU 35        XPR                  R                  U'   OU R                  R                  U   n[        R                  " U[        R                  " 5       5      $ [        TU ]%  U5      $ )Nz = )r   r  r  rW  r  r  USE_THRESHOLDr  r   r   r  r  r  rT  NameLoad)r   r   exprnode_expr_var_namer   s         r   r   PyExprCSEPass.Replacer.visitg  s    $ @ @AA#D) <<**40=3N3NN<<#<#<< !&d 3 ,U 3#'>>#3++xjE7,CD:B11$7#'<<#<#<T#B88Hchhj997=&&r   )r  r  r  )r4   r  r  zCallable[[], str]r  rY  r  r  r   s   @r   Replacerr  \  s.    	)(	) (	) 		)	' 	'r   r  c                f    SU l         U R                  [        R                  " S 5      0 S9U l        g )Nr   c                     gr   r   r   r   r   r8  (PyExprCSEPass.__init__.<locals>.<lambda>  s    qr   )r  r  )_counterr  rF  defaultdictr  r   s    r   r   PyExprCSEPass.__init__  s.    {{"..y9 # 
r   c                P    U U R                    3nU =R                   S-  sl         U$ r  )r  )r   r   r_  s      r   _new_varPyExprCSEPass._new_var  s'    $--)r   c                    U R                  U R                  5      nU H)  n UR                  [        R                  " U5      5        M+     g ! [
         a'  n[        R                  SUR                  U5        e S nAff = f)Nz#Failed to visit expr at line %s.
%s)	r  r  r   rT  parseSyntaxErrorrz  	exceptionlineno)r   exprscountereexs        r   countPyExprCSEPass.count  sd    ""4<<0Aciil+   DbiiQRSs   %A
A="A88A=c                    U R                  U R                  U R                  5      nUR                  [        R
                  " U5      5      nUR                  [        U5      4$ r   )r  r  r  r   rT  r  r  rW  )r   r  replacernew_nodes       r   rV  PyExprCSEPass.replace  sF    ==t}}=>>#))D/2h!777r   )r  r  N)r  rY  )_var)r   r  r  r  )r  r  r  rY  r  r  r  zTuple[List[str], str])r   r   r   r   r  rT  	AttributeCall	Subscriptr  dataclasses	dataclassr  NodeVisitorr  NodeTransformerr  r   r  r  rV  r   r   r   r   r  r  F  sx     M --3==A% % % coo  #'3&& #'J

8r   r  c                    [        U R                  [        5      =(       d3    [        R                  =(       a    U R
                  [        R                  L $ r   )r   r  r>   r4    guard_nn_modules_using_dict_tags	create_fnr  r  )r   s    r   must_add_nn_module_guardsr    s@    
 	5++^< 	
 33 :<#9#99r   c                  .   ^  \ rS rSrU 4S jrS rSrU =r$ )DeletedGuardManagerWrapperi  c                .   > [         TU ]  5         Xl        g r   )r   r   invalidation_reason)r   r  r   s     r   r   #DeletedGuardManagerWrapper.__init__  s    #) r   c                    S U l         g r   )rw   r   s    r   r   6DeletedGuardManagerWrapper.populate_diff_guard_manager  s
    #r   )rw   r  )r   r   r   r   r   r   r   r   r   s   @r   r  r    s    *$ $r   r  c                  B    \ rS rSr   S	 S
S jjrS rS rS rS rSr	g)r  i  Nc           	       ^ ^ U(       a  UR                   OS n0 T l        [        U5      n[        5       T l        UT R                  l        UT l        S mU(       a  UR                  OS T l        U4S jn[        T R                  UT R                  UR                  UR                  T R                  T 5      nS n[        R                  " Xx5      m[        R                   =(       a    [#        S5      n	[#        S5      (       d  [$        R'                  S5        [)        U=(       d    / [*        R,                  S9 Hw  n
U	(       d\  U
R/                  5       (       aG  SU
R0                  ;  a7  SU
R0                  ;  a'  [        R2                  (       d  SU
R0                  ;  a  Mf  U
R5                  U5        My     T R7                  XtU5        UR8                  T R                  l        [:        R<                  R?                  S	U 4S
 jS9  [@        RC                  ST R                  5        UR8                  T R                  l        URD                  (       d  T R                  RG                  UR                  5      (       dB  [I        T R                  UR                  [J        RL                  " 5       5      n[O        SU 35      e[P        b   [Q        T R                  UR                  5        [@        RS                  [T        RV                  5      (       aB  [Y        T R                  RZ                  UR                  5      n[@        RC                  SUS 5        T R                  R]                  5         S T l        g )Nc                   > U R                  5       nU[        R                  L a  U R                  5       $ T(       d   eT" 5       nUc   eUR	                  U R                  5       5      $ r   )guard_sourcer'   CONSTANTr_  r|  )r   r  	r_builder	w_builders      r   r  1CheckFunctionManager.__init__.<locals>.source_ref  s]    !..0L{333{{}$9!I((($$V[[]33r   c                0    U " 5       nU(       a  S Ul         g g r   )r  )weak_br7  s     r   cleanup_builder6CheckFunctionManager.__init__.<locals>.cleanup_builder  s    A r   z!pytorch/compiler:guard_nn_modulesz9guard_nn_modules is turned off using justknobs killswitch)r  rU  rW  hooksdynamo_cpp_guards_strc                 .   > [        T R                  5      $ r   )r  r   r   s   r   r8  /CheckFunctionManager.__init__.<locals>.<lambda>	  s    D<N<N8Or   
payload_fn%szGuard check failed: zGuard eval latency = %s usz.2f)/rm   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesrr   r   r   r  torch_function_mode_stackr  r  r  r  r|   r  r  r4   guard_nn_modulesr+   rz  r{  r   r$   sort_keyr  r_  rI  r  compile_check_fnr   r   _loggingtrace_structured
guards_logdebugrv  r   get_guard_fail_reason_helperr!   r  rZ  rk   isEnabledForloggingDEBUGr   rv   clear)r   r  r~   r}   rm   existing_diff_guard_sourcesr  builderr  guard_on_nn_modulesr   reasonslatencyr  s   `            @r   r   CheckFunctionManager.__init__  s    )5$$$;= B+N 	$ 120K-(	
 7CL22 	&	4 KK  $$%%
	 KK9	$55 
//;
 BCCKKSTFLbenn=E'2244 #%**4$EJJ655

9RLL! > 	g}= .5-D-D* 	''#0O 	( 	
 	t112-4-D-D* ""%%++L,D,DEE6&& ,,"557
 %';G9%EFF,8-&&(@(@ &&w}}55/&&++\-E-E   !='#P 	 r   c                 	  ^^^ UR                   nUS/-  n[        R                  S5        / m/ m/ m[        U R                  5      nU R
                  R                  R                  S/5        U R
                  R                  R                  U R                  S/5        S U l        SUUU4S jjn[        5       nUR                   HA  nUR                   H.  n	X;  d  M
  U" XR                  S5        UR                  U	5        M0     MC     UR                  n
S nS n[        U
5      S:  a-  [!        UR"                  U
SS	R%                  U
5      -   S
-   /5        U R&                  (       a*  U R&                  R(                  R*                  R,                  O/ nU GHf  n[/        U[0        5      (       as  UR2                  nUR4                  nUR7                  5        SUR7                  5        3n[9        UR;                  U5      UR;                  U5      U/5        U" US S5        M  [/        U[<        5      (       a  UR>                   Vs/ s H  nUR;                  U5      PM     nnUR@                   Vs/ s H  nUR;                  U5      PM     nnSS	R%                  S UR>                   5       5       SS	R%                  S UR@                   5       5       S3n[C        UUU/5        U" US S5        GM[  [E        SU 35      e   URF                   H)  nUR                   H  n	U" XR                  S5        M     M+     T(       a"  [H        RJ                  RM                  SU4S jS9  [N        RP                  nUc  [N        RR                  " 5       nUUURT                  US.[V        E[Y        5       EnU R
                  R[                  5         SUR\                  S   0n[        T5      S:X  d   eUU R
                  l/        X@R
                  l0        U R
                  Rc                  5         TU R
                  l2        UU R
                  l3        X0R
                  l4        S U R
                  l5        S U R
                  l6        XR
                  l7        g s  snf s  snf )Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()c                P  >^ ^ [        T T5      n[        R                  SU5        TR                  U U4S j5        [        R                  [        R                  5      (       a  SnSnTbz  TR                  (       a,  SSR                  TR                  R                  5       5       3nTR                  (       a,  SSR                  TR                  R                  5       5       3n[        R                  ST UU5        U(       d#  TR                  T 5        TR                  U5        g g )Nr  c                   > T T(       a?  TR                   (       a.  [        R                  " TR                   R                  5       5      OS T(       a3  TR                  (       a"  [        R                  " TR                  5      S.$ S S.$ )N)r  rj  rg  )rj  r*   from_tracebackrk  rg  )r  r   s   r   r8  NCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>U	  sc    % !U[[ #11%++2E2E2GH! !U%5%5 #11%2B2BC "r   r   z
Stack:
z
User stack:
zGuard: %s%s%s)rn  r  r  r  verbose_guards_logr  r   r!  rj  rh  formatrg  )	r  r   log_onlyr  maybe_stackmaybe_user_stackrz   structured_guard_fnsr{   s	   ``    r   add_code_part<CheckFunctionManager.compile_check_fn.<locals>.add_code_partP	  s     5i GT#45 ''  "..w}}== #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!),"))*;< r   Tr3   zcheck_no_aliasing(r   rz  r1  zcheck_overlapping(overlapping=[c              3  @   #    U  H  oR                  5       v   M     g 7fr   rd  r  r   s     r   r  8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>	  s     /\B[QB[   z], non_overlapping=[c              3  @   #    U  H  oR                  5       v   M     g 7fr   rd  r7  s     r   r  r8  	  s     3dFcFFHHFcr9  z])zUnknown GuardEnvExpr: dynamo_guardsc                 <   > T V s/ s H	  o " 5       PM     sn $ s  sn f r   r   )fr3  s    r   r8  7CheckFunctionManager.compile_check_fn.<locals>.<lambda>	  s    BV4WBVQQSBV4W4Ws   r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr  r   r   )8r  r  r  $make_torch_function_mode_stack_guardr  r   rv   add_global_state_guard#add_torch_function_mode_stack_guardr  r  r  r   r   r  r  r   r  rh  r  tracing_contextguards_contextaotautograd_guardsr   r#   input_source_ainput_source_br_  r   rC  r)   overlapping_sourcesnon_overlapping_sourcesr   rK  r  r   r  r  r5   initial_global_stateGlobalStateGuardr   r.   rQ  r   r  rx   ry   r  r{   r|   r}   r~   r   r   )r   r$  
guards_outr}   largs"torch_function_mode_stack_check_fnr4  seengclr  r  check_tensors_fncheck_tensors_verbose_fnrH  r   source_ar2  r  r   overlapping_guard_managersnon_overlapping_guard_managersglobal_staterx   rr  rz   r3  r{   s                           @@@r   r  %CheckFunctionManager.compile_check_fn7	  sa     '((#
CE-Q**.
*
 	668Q7RSCC**34	

 *.&'	= '	=R u<<C# "$		48HHTN &   $+#C#C #' '(1, -99(%		2J(KKcQR    --<<OO 	 (E%11 // //'}}/tHMMO3DE	-99(C99(CK
 it4E>22 #66.6 99!<6 + . #::2: 99!<: / 2
&&*ii/\%B[B[/\&\%] ^**.))3deFcFc3d*d)eegk 
 2.2K
 it4"%;E7#CDDA (H ))C dIIt4 & *  NN++,W ,  %99(99;L 0(@%1%7%72T	

 
  !
 	##% #W]]3%78 :!###*6'"'<<>0B-*>'+8( *.&)-&8P5G.2s   R.Rc                |   [        U S5      (       a  [        U R                  [        5      (       d  U R                  R                  =nbq  U R                  R
                  =nbW  [        U[        5      (       d   e[        U[        5      (       d   eSU S3n[        U5      nUR                  X%5        XPl        g g g g g )Nr   zCache line invalidated because z got deallocated)	r   r   r   r  r~   r   rU   rW   
invalidate)r   obj_strr~   r   r  deleted_guard_managers         r   r\  CheckFunctionManager.invalidate	  s    
 D/**t113MNN $ 2 2 > >>K $ 2 2 > >>Kk:6666k:66666wi?OPF$>v$F!"";F!6 L L O +r   c                ,    [        U5      U R                  ;  a`  [        R                  " U5      U R                  [        U5      '   [        R                  " U[
        R                  " U R                  US95        [        U5      $ ! [         a     Nf = f)zadd a weakref, return the id)r]  )	r  r  r  r  r   	functoolspartialr\  	TypeError)r   r  r]  s      r   r  CheckFunctionManager.id_ref	  sw    
	#wdnn, +2++c*:r#w'  **4??GL
 #w  		s   A9B 
BBc                f    [        U5      U R                  ;   a  U R                  [        U5         $ g)zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)r  r  )r   r  s     r   r  $CheckFunctionManager.lookup_weakrefs	
  s(    c7dnn$>>"S'**r   )r  r   r  r  )NNN)r}   z%Optional[Callable[[GuardFail], None]])
r   r   r   r   r   r  r\  r  r  r   r   r   r   r  r    s6     ?C	}! =	}!~pQd7"r   r  c                (  ^	 SSK Jn  [        5       m	T	R                  U 5        SU	4S jjnU" 5       nU  H]  nU" U5      u  peUR	                  U5        UR                  SU S35        UR                  5          UR                  S5        S S S 5        M_     U" 5       nUR                  S5        UR                  5          UR                  U5        UR                  S5        S S S 5        U" 5       nUR                  S	U S35        UR                  5          UR                  U5        UR                  S
5        S S S 5        UR                  5       UR                  5       4$ ! , (       d  f       GM;  = f! , (       d  f       N= f! , (       d  f       NR= f)Nr   r   c                &   > TR                  U 5      $ r   )rV  )r  csepasss    r   rV  %build_guard_function.<locals>.replace
  s    t$$r   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardr  )	r   r   r  r  r   r   r   splicer   )
rz   closure_argsr   rV  rp  r  r  r   make_guard_fnri  s
            @r   ri  ri  
  sH   4oGMM*%
  !Jg&xvR01   0 ! 	  E	OOO$	Z & 
 #$M3L>DE				U#/ 
   -"8"8":::% !  
 
 	s$   7E=#E2#F
E/	2
F 
Fc                 h    [         R                  R                  R                  R	                  S5      $ )Nrn   r   r  	_internal	log_stateis_artifact_enabledr   r   r   is_recompiles_enabledrs  5
  s#    >>##--AA,OOr   c                 h    [         R                  R                  R                  R	                  S5      $ )Nro   ro  r   r   r   is_recompiles_verbose_enabledru  9
  s$    >>##--AABVWWr   c                V   ^ U  Vs/ s H  n[        U5      PM     snmU4S jnU$ s  snf )Nc                    > [        5       n [        U 5      [        T5      :w  a  g[        TU 5       H  u  pU[        U5      :w  d  M    g   g)NFT)r^   r  r   r{  )	cur_stacktymoder  s      r   check_torch_function_mode_stackMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stackA
  sE    13	y>SZ'E9-HBT$Z . r   )r{  )intial_stackr  r{  r  s      @r   rC  rC  >
  s-    *+lT!Wl+E
 +* ,s   &c                f   [        U R                  5      n[        R                  " [        5      nU R
                   H/  nXBS'   [        [        XBU5      5      nX5   R                  U5        M1     U Vs/ s H  n[        X6   5      S:  d  M  X6    PM     nnSR                  U5      nSU 3/$ s  snf )N__compile_source__r3   r   zDuplicate tensors found: )r  r|   rF  r  rp  r   r  rw  r  r  rh  )	r   r  r|   ids_to_sourcer  	tensor_idr  duplicate_tensorsr  s	            r   1recompilation_reason_for_no_tensor_aliasing_guardr  P
  s    223L++D1M&AA-:)*tM?@	 ''6 B ,9+8CC@R<SVW<W=
=   YY()F'x011s   3B.	B.c                   XR                   S   S.nUR                  U R                  5        / nSn/ nU R                  U5      nUR                  (       d+  UR
                  n[        U5      S:X  a  SUS   ;   a  SnOUn/ nU(       a  [        X5      nOU H  n[        U R                   5      n	XS'   [        5           [        XU5      n
 S	S	S	5        [        W
[        5      (       a	  U
(       d  Un
[        U
[        5      (       d  Mr  UR!                  U
5        [        5       (       a  M    O   U S
3SR#                  U5      -   nU$ ! [         a#  n[        5       (       a   S	nAS	S	S	5        M  e S	nAff = f! , (       d  f       N= f)z
Return the reason why `guard_manager` failed.
Updates `guard_failures` with the generated reason.
Only the first failed check of guard_manager is reported.
r  r  Fr3   zDuplicate tensor foundr   Tr  Nr   z; )r|   r  rx   r  resultr{   r  r  r  r1   rw  	Exceptionru  r   r  r  r  rh  )r   f_locals
compile_idr  r&  no_tensor_aliasing_check_failedr{   guard_debug_infor   r|   fail_reasonr  
reason_strs                r   r  r  `
  ss    !;!;C!@AE	LL++,G&+#$&$228< ""-@@ !"a''+=a+@@26/,%'"&C
 'D : :;L15-./1"&t5"AK 2 +t,,["+s++{+466' '* <r"TYYw%77J! ! 466  21 	 21s6   ;E6=E
E3E.E6-E..E33E66
F	c                t   [        U [        5      (       a  U SU R                   3$ [        XU5      n[        [
        U      R                  U5         U R                  b+  U R                  [        U=(       d    S[
        U   5      5        U$ ! [         a   n[        R                  S5         S nAU$ S nAff = f)Nr   zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r   r  r  r  r`   re   r  r}   rY   r  rz  r  )r   r  r  r  r  r  s         r   get_guard_fail_reasonr  
  s     -!;<<R A ABCC-mzRJ=&'..z:
&&2''*8(8-:MN   
d	
 	
 
s   8B 
B7B22B7c                  ^ / mU b_  [        U R                  U R                  UR                  U R                  5      nU(       a  TR                  U5        U R                  n U b  M_  UR                  n[        5       =(       d
    [        5       nU(       d  [        R                  (       Ga	  [        5       (       a"  SR                  S [        T5       5       5      nO&[        R                  " SR                  T5      S5      nSU 3nSUR                    SUR"                   SUR$                   S[        R                  " US	5       3nU(       a:  [        5       (       a  [&        R)                  U5        O[*        R)                  U5        [        R                  (       a  [,        R.                  " U5      e[0        R2                  R5                  S
S U4S jS9  T$ )z
Return the list of guard failure reasons using cache_entry.
Logs the recompilation reason if `recompiles` logging is enabled.
Raises a RecompileError if `config.error_on_recompile` is enabled.
z

c              3  b   #    U  H%  u  pS U S3[         R                  " US5      -   v   M'     g7f)zguard z failures:
- N)textwrapr   )r  ir  s      r   r  9get_and_maybe_log_recompilation_reason.<locals>.<genexpr>
  s2      #!3IA <(8??64+HH!3s   -/rS  r  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     SSS.$ )Nrecompile_reasonsjson)r_  encodingr   r   r   r   r8  8get_and_maybe_log_recompilation_reason.<locals>.<lambda>
  s    '
r   c                    > T $ r   r   )r&  s   r   r8  r  
  s    7r   )metadata_fnr  )r  r   r  r  r  r  nextf_coders  ru  r4   error_on_recompilerh  r  r  r   co_nameco_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logr6   RecompileErrorr   r  r  )	r~   framer  r  do_recompiles_logfailuresguard_failure_detailsmessager&  s	           @r   &get_and_maybe_log_recompilation_reasonr  
  s    G

!&%%NN""	
 NN6"!&& 
! <<D ./R3P3RF555(**{{ #!*7!3# H
  tyy'94@H<XJG 	 $DLL>d6F6F5GqI\I\H]]_4f=>@ 	 ,..&,,W5$$W-$$$$W--	NN##
 # $  Nr   c                   U n[        5       nU b:  UR                  U R                  R                  5       5        U R                  n U b  M:  Un U b;  X R                  l        U R                  R                  5         U R                  n U b  M;  U$ r   )r  r  r   r   r  r   r   )r~   first_cache_entryacc_diff_guard_sourcess      r   r  r  
  s    #
 !U

!%%%%@@B	
 "&&	 
! $K

!7M!!4!!==?!&& 
! "!r   c                   [        SUR                   SUR                   SUR                   35        [        SSR	                  U R
                  5      -   S-   5        [        SSR	                  U R                  5      5        [        U 5        SU0U R                  EnU R                   H  n [        X`R                  U5        M     g !   [        SU 35         M2  = f)	NzERROR RUNNING GUARDS  r  zlambda r   z and
  r  zMalformed guard:
)
printr  r  r  rh  ry   rz   rx   rw  r|   )r   r  r  r  lastr  r   s          r   guard_error_hookr    s     

~Qt/?/?.@$BUBUAVW 
)dii 2 23
3c
9:	#z}7789	-?M$>$>?K))	022K@ *	0&ug./s   -CCc              #  j   #    [        5       nU  H  nX!;  d  M
  Uv   UR                  U5        M!     g 7fr   )r  r   )seqrR  r  s      r   uniquer  *  s+     5D=GHHQK s   33c                H   U(       a  X:w  a  [        U5      n[        U 5      n[        U5      (       d  [        U 5      (       a8  [        R                  " U R	                  5        SUR	                  5        S35      eX#:X  a#  [
        R                  " [        R                  US9$ g )Nz is alising zC. This is not supported. Please do a clone for corresponding input.)r2  )	r   r   r6   UnsafeScriptObjectErrorr_  ra  rb  r  r5  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardr  2  s     {02;?.z:/
 
1*==--??$%\+2B2B2D1E F> ?  1 $$\%A%AKXXr   )skipc                Z   SSK Jn  [        R                  [        R
                  5      =(       d#    [        R                  [        R
                  5      nUR                  5       R                  R                  R                  nU H$  n[        U[        5      (       d   eU" XSU S-   S9  M&     g)z
Add dynamo guards to the current tracing context.

Args:
    guards: guard(s) to add
    skip: number of stack frames to ignore for debug stack trace
r   )TracingContextr3   )collect_debug_stackr  N)torch._guardsr  r  r  r   r!  r.  r  rG  r;  r   r   r$   )r  rm   r  r  r   r   s         r   install_guardr  T  s     -$11 8		(	(	7  



-
-
;
;
?
?C%''''EJ r   )r   r  r  r  )r  r  r   r$   r  r  )rz   zUnion[str | List[str]]r   r$   r  r  )r  zTuple[str, str])r   rZ   r  r  r  r"   r  r  )
r   rZ   r  types.CodeTyper  r  r  r"   r  r  )r  rV   r  r  )
r   rZ   r  r  r  r  r  r  r  r  )
__future__r   rT  r  rF  r  r  ra  rL  r)  r  r   rI  rZ  r  r  r  r  r  
contextlibr   r  r   r   r   typingr   r	   r
   r   r   r   r   r   r   r   r   r   torch.overridesr_  torch._C._dynamo.guardsr   r   r   r   r   r   r   r   r   torch._dynamo.sourcer   r   r   r   r    r  r!   r"   r#   r$   r%   r&   r'   r(   r)   torch._loggingr*   torch._utils_internalr+   %torch.fx.experimental.symbolic_shapesr,   r-   r.   torch.utils._ordered_setr/   torch.utils._tracebackr0   r1   torch.utils.weakr2   r   r4   r5   r6   r7   
eval_framer8   r   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   rN  r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   r  numpyr  ModuleNotFoundErrorsympyrl   	getLoggerr   rz  r  getArtifactLoggerr  r  r  r.  rr   r!  	lru_cacher-  r.  rQ  rW  r]  r^  rn  rq  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ri  rs  ru  rC  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s   # 
           	 
     %  .   "   
 
 
 
 
 
 & 1 
 0 O * 8 8 ,       <     ( FJ B I
  !^^--hA
11(LI99"  ^^55h@PQ ^ ^BT T
. 
. .2* 18/'.'
%Q&Q/4QQ'- d#! ! $!"JG   
$tyy $W
# W
V/R8 R8j$!4 $V Vr
";JPX
+$2 @@@ @ 		@F
   	
 	09'99x"200
0  0 	0
 0. % &D !" KEV  	Bs   8M
 
MM