
    7h9                   &   % S r 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  SSK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%  SS
K&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0  SSK1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9  SSK:J;r;J<r<  SSK=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrF  SSKGJHrH  SSKIJJrJ  SSKKJLrLJMrMJNrNJOrOJPrP  SSKQJRrS  SSKTJUrU  SSKVJWrWJXrX  SSKYJZrZ  SSK[J\r\J]r]J^r^  SSK_J`r`  SSKaJbrbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrrJsrsJtrtJuruJvrvJwrwJxrxJyryJzrzJ{r{J|r|J}r}J~r~JrJrJrJrJrJr  SSKJrJrJrJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SrS\S'    SSKr\(       a  SSKJr  SSKJr  \GRP                  " \5      r\!GRV                  GRY                  \S5      r\!GRV                  GRY                  \S 5      r\!GRV                  GRY                  \S!5      r\!GRV                  GRY                  \S"5      r " S# S$5      rS% r\GRf                  S& 5       rSqS'\S('   S) rS]S* jr\!GRp                  GRr                  GRt                  rS^S+ jr      S_S, jrS`S- jrS. rS/ rS0 rS1 rSaS2 jr\GR                  " S3S49 " S5 S65      5       rS7 rS8 r\GR                   " S9 S:5      5       r " S; S<\GR                  5      r\GRf                  SbS= j5       r " S> S?\B5      r " S@ SA5      rSB r " SC SD\5      r\GR                   " SE SF5      5       r\GR                   " SG SH5      5       r " SI SJ\GR                  5      rScSK jr " SL SM5      rSdSN jrSO rSP rSQ rSR rSeSS jr        SfST jr          SgSU jr    ShSV jrSW r          SiSX jr\`" \5        SY rSZ rSS[.S\ jrg! \ a    Sr GNif = f)ja  
Core guard system for Dynamo that detects when compiled code needs to be recompiled due to
changes in program state. Guards are conditions that must remain true for previously-compiled
code to be valid for reuse.

This module provides the infrastructure for creating, managing and checking guards, including:
- Guard creation and composition
- Guard state management and invalidation
- Guard checking and failure handling
- Utilities for guard optimization and debugging
- Integration with Dynamo's compilation caching

The guard system is critical for Dynamo's ability to efficiently reuse compiled code while
maintaining correctness by detecting when recompilation is necessary due to changes in
program state, tensor properties, or control flow.
    )annotationsN)contextmanager)deepcopy)currentframe)AnyCallableNoReturnOptionalTYPE_CHECKINGUnion)ReferenceType)code_framelocals_names)
check_obj_idcheck_type_iddict_versionDictGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardinstall_symbolic_shape_guardprofile_guard_managerRootGuardManager)get_global_source_nameget_local_source_nameIndexedSource$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceTensorPropertyTensorPropertySource)CompileEventLoggerget_metrics_context)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlap)
structured)justknobs_check)_CppShapeGuardsHelper_ShapeGuardsHelperEqualityConstraintis_symbolicSYMPY_INTERP)_pytree)
OrderedSet)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexc)set_guard_error_hook)#AttrProxySource
AttrSourceCallFunctionNoArgsSourceCallMethodItemSourceChainedSourceConstantSourceConstDictKeySourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceListGetItemSourceLocalSourceNNModuleSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTupleIteratorGetItemSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntryDynamoFrameType
ExtraStateGuardedCode	GuardFailGuardFilterEntryGuardFn)builtin_dict_keyscommon_constant_typesdataclass_fields	dict_keys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)OutputGraphGuardsState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        [        5       U l        [        5       U l        g N)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setprinted_relational_guardsr4   diff_guard_sources)selfr   s     N/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/_dynamo/guards.py__init__GuardManagerWrapper.__init__   s    <(*DII# 	"& !!*,'),&3=<    c              #  z   #    [        5       U l         S v   [        5       U l        g ! [        5       U l        f = f7fr   )r   r   r   s    r   #_preserve_printed_relational_guards7GuardManagerWrapper._preserve_printed_relational_guards   s+     ),&	3-0UD*SUD*s   ;' ;8;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   )r   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 r   )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   r   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   )r   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_line2  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           
     \   UR                  5          UR                  5        H  n[        U[        R                  R
                  R                  R                  5      (       at  X0R                  ;  a=  U R                  R                  U5        UR                  U R                  U5      5        M  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)Nzaccessed_by=)r   get_leaf_guardsr   torch_C_dynamor|   RelationalGuardr   r   
writelinesr   r   r   r   r   zipget_accessorsr   r   r   reprr   )r   r   r   r   accessorr   s         r   r   ,GuardManagerWrapper.construct_manager_stringF  s>   [[],,.eUXX%5%5%<%<%L%LMM$B$BB66::5A(<(<U(CD % 8 8 OOD$8$8$?@ / #/00223= (+!!#S%;%;%=(# )))|HMMOCT5UV --i>() ]]s   FF
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>.IndentedBufferWithPrefixif  c                :    SU R                   U R                  -  -  $ )Nz| )_indenttabwidthr   s    r   prefixDGuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefix.prefixg  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.writelinej  s$    G%d+G%edl3r    F)r   
__module____qualname____firstlineno__r   r   __static_attributes____classcell__r   s   @r   IndentedBufferWithPrefixr   f  s    =4 4r   r  r8    T)r   zTREE_GUARD_MANAGER:r   get_epilogue_lambda_guards)torch._inductor.utilsr   r   r   r   r   r   hasattrr  r   r   getvalue)r   r   r  r   r   s        r   __str__GuardManagerWrapper.__str__c  s    8	4~ 	4 557+-DDMNN24N0NN0dNCNN-.))$))T:tyy">??!YYAACEOOD$8$8$?@ D==? 877s   CC33
Dc                8    U R                   R                  U5      $ r   )r   checkr   xs     r   r  GuardManagerWrapper.check|  s    yyq!!r   c                8    U R                   R                  U5      $ r   )r   check_verboser  s     r   r  !GuardManagerWrapper.check_verbose  s    yy&&q))r   c                \   ^ ^^^ [        5       mS mUUU U4S jmT" T R                  5        g )Nc                    / 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_guardr   verbose_code_part	code_parts       r   get_code_partsMGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.get_code_parts  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<  UT;  a4  TR                  R                  T" U5      5        TR                  U5        Mz  M|  TR                  R                  T" U5      5        M     U R                  5        H  nT" U5        M     g r   )r   r   r   r   r   r|   r   r   extendr   r   )r   r   r   r  relational_guards_seenr   r   s      r   r   DGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.visit  s    ,,.eUXX%5%5%<%<%L%LMM$::..~e/DE.2259 ; OO**>%+@A / !335	i  6r   )r   r   )r   r  r#  r   s   `@@@r   !populate_code_parts_for_debugging5GuardManagerWrapper.populate_code_parts_for_debugging  s(    !$		! 	! 	diir   )r   r   r   r   r   r   r   r   r   r   r   r   r   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   r   r      s_    @, 3 3/'b+>2
A?:#2"*r   r   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_numpyr0    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.loaderr2  r"  inspectgetfile)r   modsr2  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[        _S[        R                  _S[        c  S O[        R                  _S[!        S5      _S["        R$                  _S[&        R(                  R*                  _S[&        R,                  _[.        [&        R0                  [&        [2        S.Eq [         $ )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                ,    [         R                  X5      $ r   )dict__contains__)r/  bs     r   <lambda>#_get_closure_vars.<locals>.<lambda>  s    T->->q-Dr   ___tuple_iterator_len___normalize_range_iter___tuple_iterator_getitem___dataclass_fields#___get_torch_function_mode_stack_at__math_isnan__numpy_isnaninf__load_moduleutils_devicedevice)___from_numpy___as_tensorr   r8  )r=  r   r   collectionsOrderedDict__getitem__rq   r   rv   rr   ru   ri   rm   mathisnanr+  float	importlibimport_moduler   utils_devicerU  r0  _as_tensor_fullprecr8  r   r   r   _get_closure_varsrc    s0   

|
  7 7 C C
 I	

 |
  D
 $%7
 &';
 ()?
 "#3
 23S
 DJJ
 RZTRXX
 5<
 Y44
  EKK//!
" ell#
$ (!55+
. r   c                N    [         R                  " U 5      R                  SS5      $ )N
r  )astunparsereplace)r   s    r   _ast_unparseri    s    ;;t$$T2..r   c                `   SnUb  UR                   (       aD  [        UR                   5       H*  nUR                  [        5       ;  d  M  S[	        USS9 3n  OQ   ONUR
                  (       a=  UR
                  R                  5       n[        U5      S:  a  S[	        US   5       3nOSnU S U 3$ )	Nr  z  # T)r   r   z  # <unknown>z<60)
user_stackreversedfilenamer<  r5   stacksummarylen)r  r   extrafsrp  s        r   get_verbose_code_partrt    s    Eu//0;;&9&;;"<#>"?@E 1 [[kk))+G7|a|GBK89:'_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   listrt  )r   r   r  s      r   get_verbose_code_partsrw    s6     j$'' \
EOPZ	!)3ZPPPs   5c                    U c  g [        U 5      (       d  U $ [        U [        R                  5      (       d   eU R                  R                  5       $ r   )r1   r   r   SymIntr   maybe_as_int)dims    r   convert_int_to_concrete_valuesr|    sD    
{s
#u||,,,,xx$$&&r   c                D    U  Vs/ s H  n[        U5      PM     sn$ s  snf r   )r|  )size_or_strider{  s     r   convert_to_concrete_valuesr     s     ;IJ>C*3/>JJJs   c                ,   U[         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=))	r   r   _dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyperU  indexrequires_gradr  )valuenamesizesstridespytypedispatch_keysdispatch_keyr  device_indexr  	guard_strs              r   get_tensor_guard_code_partr    s    @@BB0023L KKE<<%%L''M
vR 3 34B|nBug N/geWIV]U^^_	a  r   c                H    [        [        U 5      5      R                  U5      $ r   )rv  rg   r  )dctkeys     r   get_key_indexr    s     
 !#&'--c22r   c                    SU  SU S3$ )Nlist(dict.keys())[]r   )r   r  s     r   get_key_index_sourcer    s    VHCwa00r   c                D    [        S[        U 5       SU  S3S-   S-   5      e)NType  for object  cannot be saved @into torch.compile() package since it's defined in local scope. @Please define the class at global scope (top level of a module).)	TypeErrortype)objs    r   raise_local_type_errorr    s8    

S	{,se+<=
L	M
L	M 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_dictN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      (       a  U R                  R                  nO,[        U[
        5      (       d   e[        X R                  5      n[        XV5      n[        [        U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  rC   rF  r  r  rv  rg   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_namer  
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerr  5  sB    {{'')&,, 233"",d33330,,?%&6>J ./ABCEJ#c3Z00*+1->,AC*+1ZL:fll$677 	** ,,/==	 	+ 	

 !
 LLj\.?-BCD
 //#-	 0  r   c                    U R                   n[        U[        5      (       a  gU R                  5       (       a  gUR	                  5       =(       a    [        U[
        5      (       + $ NFT)originating_sourcer   rT   is_specialized_nn_moduleis_dict_keyrP   )r   r   s     r   match_on_id_for_tensorr  ^  sP    %%F &+,,%%''F
6:(F$FFr   c                  *    \ rS rSr% S\S'   S\S'   Srg)GuardCodeListim  	list[str]	code_listr&   r   r   Nr   r   r  r  r  r  r   r   r   r  r  m  s    Lr   r  c                      \ rS rSrSrSrSrg)r  is  r8      r   N)r   r   r  r  r  DICT_GUARD_MANAGERr  r   r   r   r  r  s  s    Mr   r  c                <    [        [        [        U 5      5      5      $ r   )rv  rm  r   )codes    r   &code_framelocals_names_reversed_cachedr  x  s    /5677r   c                  "   \ rS rSr S8                 S9S jjrS rS r\S 5       rS r	S r
S	 rS
 rS rS rS:S jr  S;S jrS8S<S jjrS=S jrS>S jrS:S jrS8S?S jjrS?S jrS:S jrS@S jrS:S jrS:S jrS:S jrS8S:S jjrS:S jrS:S jrS:S jrS:S jr S:S jr!S:S  jr"S8SAS! jjr#S:S" jr$S:S# jr%S:S$ jr&S:S% jr'S:S& jr(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S:S/ jr1S:S0 jr2S:S1 jr3S:S2 jr4S:S3 jr5S:S4 jr6S8S:S5 jjr7S8S6 jr8S7r9g)BGuardBuilderi}  Nc
           	     H   Xl         X l        X0l        X@l        XVS.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     Xpl        / U l        / U l        / U l        / U l        / U l        Xl        [+        5       U l        U R(                  R.                  R0                   HD  nU R,                  R3                  [5        U R7                  UR9                  5       5      5      5        MF     0 U l        0 U l        [+        5       U l        Xl         g )NLG__builtins__>_<._dot_)!f_codeid_ref
source_reflookup_weakrefsscopebuiltins__dict__copyr   packagepackage_importer_package_imported_modulesr   rh  r   argnamesr  shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managerr   key_order_guarded_dict_idsoutput_graphguard_on_key_orderr   idgetr  r   _cached_guard_managers_cached_duplicate_input_guardsserialization_mode)r   r  r  r  r  local_scoper   r   r  r  r  package_moduler   s                r   r   GuardBuilder.__init__~  sl    $.9D3X
%-%6%6%;%;%=

>" ]]++EEKKM
<<S)11#s;CCCQD/=JJ~&t,-JJt N +#%)+	
 46 46%LN.6F +.%'++88KKF++//488FKKM3J0KL L BD
  	# EHE+"4r   c                \   U R                  U5      n[        U[        5      (       a  [        SUR                   35      eUR
                  R	                  5       n[        U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  rg   rF   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 %]3C!&E,U-E-ESQL!%!<!<" ))%awa0##5	 *  4r   c                $   U R                  U5      n[        U[        5      (       d  [        SUR                   35      e[        U[        5      (       d   e[        [        U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   r  r  )r  r   r   r  r  	enumeraterg   r  r  r  r  rp   r  add_id_match_guardrw  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 ""3E":;HC-ejj#>J"22!!#3#A#A	 3 K ~~S5..*)*RxqA5 22/:,d3'0JER' <r   c                    [         R                  (       aD  [        R                  S:  a0  [        R                  S:  a  [        R
                  " S[        5        g U $ )N)      )r  r  r8   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)r9   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  source_namer  r  r  r  r  s           r   getitem_on_dict_mgr>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr.  s     #/00 &&8>  /{m3uiqI
##%"%'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   r8  getmror   updatekeysr  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_guarding  s:    kkm"DHH[)*8888r   c                    [         R                  nU R                  U5      (       aN  [        U[        5      (       a  [         R
                  nU$ [        U[        5      (       d   e[         R
                  nU$ r   )r  r  r:  r   rj   r  rF  )r   r   r  r  s       r   r  #GuardBuilder.get_guard_manager_type  sg    -;;++F33-33%5%H%H" "! "-6666%5%H%H"!!r   c                (    U[         R                  :H  $ r   )r  r  )r   mgr_enums     r   manager_guards_on_keys#GuardBuilder.manager_guards_on_keys  s    +>>>>r   c                    U R                   R                  R                  U R                  S   SU R                  S   [        R
                  S9$ )Nr  )	f_globalsr   r  r  )r   r   globals_dict_managerr  r  r  r   s    r   get_global_guard_manager%GuardBuilder.get_global_guard_manager  sH    !!&&;;jjo**S//==	 < 
 	
r   c           	     V  ^ 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                  5      n
[!        U
5      U
R#                  TR$                  5      -
  S-
  nUR'                  TR$                  U4UUUS9nGO[        T[(        5      (       a,  U R+                  5       R-                  TR.                  UUUS9nGOT[        T[0        5      (       a,  U R+                  5       R3                  TR.                  UUUS9nGO[        T[4        5      (       a  U$ [        T[6        5      (       a  U$ [        T[8        5      (       a  U(       d   eUR;                  UUUS9nGO[        T[<        [>        [@        [B        [D        45      (       a  U(       d   eUnGO}[        T[F        5      (       a  URI                  U4S jUUUS9nGOP[        T[J        5      (       a  U(       d   eURM                  UUUS9nGO[        T[N        5      (       a'  U(       d   eURQ                  TRR                  UUUS9nGO[        T[T        [V        45      (       a{  U(       d   e[        U[X        RZ                  R\                  5      (       a+  [_        U5      [`        L a  U Rc                  TUUUUUU5      nGOkURe                  TRR                  UUUS9nGOM[        T[f        [h        45      (       a  U(       d   e[        U[j        [l        Rn                  45      (       d   e[        U[p        5      (       a)  U Rs                  U	5      (       d   e[u        TUUUU5      nGO[        TR"                  [v        5      (       a  [y        S	5      eUR-                  TR"                  UUUS9nGO|[        T[z        5      (       aE  [}        US
TR~                  R                  R                  5        S35      " TR                  UUUS9nGO"[        T[        5      (       a'  U(       d   eUR                  TR                  UUUS9nGO[        T[        5      (       a'  U(       d   eUR                  TR"                  UUUS9nGO[        T[        5      (       a  U(       d   e[        U[j        [l        Rn                  45      (       a   S5       e[        U[        5      (       a/  TR                  (       d  UR                  TR"                  UUUS9nGO[        U[        5      (       a/  TR                  (       d  UR                  TR"                  UUUS9nGOTR"                  nTR                  (       a  TR                  5       nUR                  U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R                  TR                  UUUS9nGOUR                  nUc   eUS-   nUR                  UU[        R                  S9n[        U[p        5      (       a   eUR-                  TR                  UUUS9nGO[        T[        5      (       a!  U(       d   eURI                  [        UUUS9nGOq[        T[        5      (       a  U(       d   eURI                  S UUUS9nGO>[        T[        5      (       a  U(       d   eURI                  S UUUS9nGO[        T[        5      (       a  U(       d   eURI                  S UUUS9nGO[        T[        5      (       a  U(       d   eURI                  S UUUS9nGO[        T[        5      (       a  U(       d   eURI                  S UUUS9nGOr[        T[        5      (       a  U(       d   eURI                  S UUUS9nGO?[        T[        5      (       a'  U(       d   eUR                  TR"                  UUUS9nGO[        T[v        5      (       a=  [        U[p        5      (       d  [        S5      eUR                  TR"                  UUUS9nO[        T[        5      (       a  U(       d   eUR                  UUUS9nO[        T[        5      (       a  U(       d   eUR                  UUUS9nOQ[        T[        5      (       a  U(       d   eURI                  S UUUS9nO[        ST STR                  5        35      eXR                  TR                  5       '   U$ )Nr  r8   r  )global_namer   r  r  r!  c                6   > [        TR                  5       5      $ r   )rm   
_get_index)r  r   s    r   rI  <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_ordertensor_property__manager)r   r   r  r  zUse DictGetItemSourcez.__kwdefaults__c                (    U R                  5       S   $ r   __tensor_flatten__r  s    r   rI  rK    s    (<(<(>q(Ar   c                "    U R                  5       $ r   )__obj_flatten__rR  s    r   rI  rK    s    (9(9(;r   c                >    U R                  5       R                  5       $ r   )_typequalified_namerR  s    r   rI  rK    s    	(@(@(Br   c                "    U R                  5       $ r   )get_baserR  s    r   rI  rK    s
    

r   c                "    U R                  5       $ r   )itemrR  s    r   rI  rK    s
    r   c                .    [         R                  " U 5      $ r   )r   rb  rR  s    r   rI  rK    s    (A(A!(Dr   r  z4ConstDictKeySource can only work on DictGuardManagerc                    [        U 5      $ r   )ri   rR  s    r   rI  rK    s
    (8(;r   zmissing guard manager builder z - )fr   r   r  r  r  r  r  r  r   rA   r  get_guard_manager_from_sourcero   rR   r  r  rq  r  
local_nameframelocals_managerrM   rE  r  rH  rO   global_weakref_managerrN   rW   r[   type_managerrU   rS   r]   r\   rJ   rY   lambda_managerrP   grad_managerrK   generic_getattr_managerr"  r>   r^   r   nnModulerk   rw   r6  r&  rF   rG   rF  rX  rY  r   r@  r  rC   RuntimeErrorr    getattrproplowerr   r   indexed_managerrQ   list_getitem_managerrL   rv  index_is_slicetupletuple_getitem_managerunpack_slicegetitem_managerrE   callableis_kwfunc_defaults_manager__defaults__idx_key__kwdefaults__func_kwdefaults_managerrT   r0  rX   rH   rV   r=   r@   rI   rZ   tuple_iterator_getitem_managerAssertionErrorr  r_   weakref_call_managerr?   call_function_no_args_managerrD   )r   r   root_guard_managerr  r  r  r  r  r  base_guard_manager_enumframelocals_names_reversedframelocals_idxoutr  
kwdefaults	kw_sourcer   s    `               r   r^  *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/'#
 &+&& *P*& ./,2263D3DEF 
 %88&&8"+#5	 9 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
 F-..%%%$<<]]"+#5	 = C FZ)GHII%%% -uxx??&'9:./ //&&!$& )88&"/'9	 9  F.0IJKK%%%049P9P2QRRRR,.>??223JKKKK-&&!& fll,>??&8  )==&"/'9	 >  F011""6;;#3#3#9#9#;"<HE JJ"+#5C FM**%%%$44JJ"+#5	 5 C F-..%%%$99LL"+#5	 : C FM**%%%!"T;+B+B$C  '&'  ,d33F<Q<Q(==&"/'9	 >  .66v?T?T(>>&"/'9	 ?  (("//1E(88&"/'9	 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011%%%$330"+#5	 4 C F-..%%%$33D"+#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
 F122%%%$33;"+#5	 4 C !0FKKM?K  69##FKKM2
r   c                8    U R                  UR                  5      $ r   )r^  r  r   r   s     r   r  GuardBuilder.get_guard_manager+  s    11%2J2JKKr   c                   Uc
  [        5       nSR                  UR                  5       5      n[        X5      u  pg0 nSU R                  S   0n	[
        R                  SU5        [        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  zPython shape guard function:
%s___make_guard_fn)rc  joinr%  build_guard_functionr  
guards_logdebugexecvaluesr   r   add_epilogue_lambda_guardadd_lambda_guard)r   r   r   r   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':;2:R  #TZZ_5;VDV3/)*L,?,?,AB ##== ##44XRr   c                H    Uc
  [        5       n[        XR                  U5      $ r   )rc  evalr  )r   r  r   s      r   r  GuardBuilder.getQ  s!    ,.LD**l33r   c                P   [        U[        5      (       a  UnOUR                  n[        U5      nX0R                  ;  ag  [
        R                  R                  R                  U5      nU(       a7  US:X  a  [        R                  SU5        U R                  R                  U5        U$ )Nr  zinvalid var name: %s)r   r  r  strip_function_callr  r   r   r   is_valid_var_namelogwarningr  )r   r   r  r  is_valids        r   arg_refGuardBuilder.arg_ref[  s{    eS!!D::D"4(}}$xx''99$?Hq=KK 6>$$T*r   c                    [        UR                  U5      n[        XCUR                  UR                  S9nUR                  U 5        g )N)ro  rl  )r>   r  r&   ro  rl  create)r   r   r(  r  attr_source	new_guards         r   _guard_on_attribute GuardBuilder._guard_on_attributek  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   r  znot hasattr()provided_guarded_objectr  )r  r   rS   r  r>   r  r"  r  r
  r  _set_guard_export_infor^  r  r   rf  rg  rk   rw   r6  r&  add_no_hasattr_guardrw  )r   r   r   base_sourcer  r  refvalr  base_managerr  r  r  s                r   HASATTRGuardBuilder.HASATTRt  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   rf  rg  r  r'  r  r  r  r  add_dict_contains_guardrw  )	r   r   r  r  r  r  r,  r4  r  s	            r   NOT_PRESENT_IN_GENERIC_DICT(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT  s    ll5!hhuzz"#uxx////--e4"ZZL	2#/#H#H"FFs||T/== $I $
  'thbZ@ 884/<	
r   c                0   U R                  UR                  5      n[        U[        R                  R
                  5      (       a  UR                  (       a  UR                  nO[        U5      nU R                  S:X  a%  UR                  UR                  :w  a  [        U5        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[#        XQ5      5        g )Nsavetype(r  z___check_type_id(r   )r  r  r   r   _subclasses
FakeTensorr  r  r  r  r   r  r  r  r  r  add_type_match_guardrw  )r   r   r  r   r9  r  s         r   
TYPE_MATCHGuardBuilder.TYPE_MATCH  s    $eU..99::u||AUA""f,~~+&u-Q%

|1 56"4<<#6"7r&C##E62u%::*47	
r   c                   U R                   S:X  a)  [        R                  R                  R	                  S5      e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 )Nr  z(DICT_VERSION guard cannot be serialized.z___dict_version() == )r  r   r   r;   PackageErrorr  r  r  r   r  r  add_dict_version_guardrw  )r   r   r  r  versionr  s         r   DICT_VERSIONGuardBuilder.DICT_VERSION  s    ""f,--##00:  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   r  )r  r  r  r  rw  )r   r   r  invertdict_ref	maybe_notr  s          r   DICT_CONTAINSGuardBuilder.DICT_CONTAINS  sj    <<&$F"	-cWBxjB##E62u%==J3D@	
r   c                r   U R                  U5      nU R                  UR                  5      n[        U[        5      (       d   eU SU< 3/nU R                  X5        U(       a*  U R                  U5      R                  [        XA5      5        g U R                  U5      R                  [        XA5      5        g )Nr  )
r  r  r  ro   r  r  r  add_true_match_guardrw  add_false_match_guardr   r   r  r  r  s        r   
BOOL_MATCHGuardBuilder.BOOL_MATCH  s    ll5!hhuzz"c4    %tC7#$##E0""5)>>&t3 ""5)??&t3r   c                    U R                  U5      nU R                  UR                  5      nUb   eU S3/nU R                  X5        U R	                  U5      R                  [        XA5      5        g )Nz is None)r  r  r  r  r  add_none_match_guardrw  r  s        r   
NONE_MATCHGuardBuilder.NONE_MATCH   sj    ll5!hhuzz"{{%x !##E0u%::"4/	
r   c                L   U R                   S:X  a)  [        R                  R                  R	                  S5      e[        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 R1                  U5      nUb  XpR2                  U'   g g g g )Nr  z$ID_MATCH guard cannot be serialized.z___check_obj_id(r   r  )r  r   r   r;   r  r   r  r[   r  r&   r  r  r  r  r  r  r  r  r  rw  rR   rf  rg  r_  r  r   )r   r   r  r  r  r  r_  weak_ids           r   ID_MATCHGuardBuilder.ID_MATCH  sX   ""f,--##001WXX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 )N is not None)
r  r  r  r   r   Tensorr  r  add_not_none_guardrw  )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                   U R                  U5      nU R                  UR                  5      n[        U[        R
                  R                  5      (       d   eU SU< S3nU R                  U5      R                  U[        XA5      5        g )Nz.raw_repr() == z.raw_repr())
r  r  r  r   r   r   DispatchKeySetr  add_dispatch_key_set_guardrw  )r   r   r  r  r   s        r   DISPATCH_KEY_SET_MATCH#GuardBuilder.DISPATCH_KEY_SET_MATCH7  su    ll5!hhuzz"#uxx667777uOC7+>
u%@@'
:	
r   c                F    U R                  US[        R                  5        g )Nr   )r  r  EQUALS_MATCHr  s     r   
NAME_MATCHGuardBuilder.NAME_MATCHA  s      
L4M4MNr   c                  ^^ U 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>.fnM  s    ,,
::r   )r  r  r  r  r   autogradr  r   r   r  rw  )r   r   r  r  r  r  s       @@r   
DUAL_LEVELGuardBuilder.DUAL_LEVELD  sv     **77BB
>zlKL##E62^^..
	; 	00&t3	
r   c                v  ^^ U R                   R                  R                  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(r  c                   > T" T5      $ r   r   )r  
compare_fnstatess    r   r  .GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn_  s    f%%r   )r  r  functorch_layers	get_stater  r   
_functorchpyfunctorchcompare_functorch_stater   r   r  rw  )r   r   ciscir  r  r  r  s         @@r   FUNCTORCH_STACK_MATCH"GuardBuilder.FUNCTORCH_STACK_MATCHT  s     ##00AA+./3R,,.3/GxqQR##E0 %%11II
	& 	00&t3	
 0s   B6c                  ^^^^ [         R                  R                  R                  R                  m[         R                  R                  R                  R
                  mU4S jmT" T" 5       5      mST 3/nU R                  X5        UUU4S jnU R                  R                  R                  U[        X!5      5        g )Nc                Z   > T" U 5      (       d  g U u  p[        [        [        U 5      5      $ r   )ro  mapr  )hooks	pack_hookunpack_hookare_inline_hookss      r   hooks_ids_fn?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fnl  s*    #E**%*"IR((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == c                $   > TT" T" 5       5      :H  $ r   r   )r  	get_hooksguard_hooks_idsr  s    r   r  5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fnz  s    "l9;&???r   )r   r  _aot_autogradr`  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineabler  r   r   r  rw  )r   r   r  r  r  r  r  r  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKS)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKSf  s    $$2288PP	**00SS 		) 'y{3 RRaQbc
 	##E0	@ 	00&t3	
r   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 )Nr8   __metadata_guard__c                J   > TR                  TU R                  5       S   5      $ Nr8   )r  rQ  )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  rP  )r  r  s    r   r  r    s    ++-a04EEEr   ___check_metadata__c)r  r  r   rQ  r
  rx   r  r#   current_compile_idr  r  rw  )r   r   r  rH  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                   U R                  U5      nU R                  UR                  5      n[        (       a  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  4nOSn[        [         4n[#        [$        [&        ["        [(        [*        [,        [.        [0        R2                  1UkUk-  5      n[0        R4                  R7                  5       (       a  SSKJn  SSKJn	J n
J!nJ"n  UUUU
UU	4-   nSSK#J$n  X}4-   nSS K%J&s  J'n  [Q        XG5      (       d3  URR                  " ['        U5      5      (       d   S['        U5       35       e[Q        U[T        5      (       a  [V        RX                  " U5      (       ao  U R[                  U5        / nUR]                  SU S35        U R_                  X5        U Ra                  U5      Rc                  [e        5       S	   [g        X5      5        g [Q        U[h        5      (       a  [        RX                  " U5      (       ao  U R[                  U5        / nUR]                  S
U S35        U R_                  X5        U Ra                  U5      Rc                  [e        5       S   [g        X5      5        g U SU< 3/n[Q        XF5      (       a  [k        U5      n[g        X5      nU(       a  U Vs/ s H  nU SU S3PM     nnU Ra                  U5      Rm                  UU5        U R_                  X5        g s  snf )Nr   r   )
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z__math_isnan(r  rP  z__numpy_isnan(rQ  r  z (HINT: )7r  r  r  r+  int8int16int32int64uint8uint16uint32uint64float16float32float64rv  r   ro  rh   r  	frozensetslicerangerj   r   Sizedistributedis_availabletorch.distributed.device_meshr&  (torch.distributed.tensor.placement_typesr'  r(  r)  r*  torch.export.dynamic_shapesr+  torch.utils._pytreer`  r3   ro   is_constant_classr]  r[  r\  r  r  r  r  r  rc  rw  complexr   r  )r   r   recompile_hintr  r  np_typesok_mutable_typesok_typesr&  r'  r(  r)  r*  r+  pytreer  r   r   s                     r   r  GuardBuilder.EQUALS_MATCH  s   ll5!hhuzz"2						





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


 
 "

 ))++@   # H 	<n,,,c$$(@(@c(K(K 	
tCyk*	
K
 #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3D@?Q"?Qt4& 02?Q  " 	u%<<SBTU##E0"s   ?Nc                6   U R                  UR                  5      n[        U[        5      (       a  U R	                  U5        g Uc  U R                  U5        g [        U[        R                  5      (       a  U R                  U5        g U R                  U5        g r   )
r  r  ro   r  r  r  typesCodeTyper  r  r   r   r  s      r   CONSTANT_MATCHGuardBuilder.CONSTANT_MATCH  si    hhuzz"#tOOE"[OOE"C((MM% e$r   c                   U R                   S:X  a)  [        R                  R                  R	                  S5      e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SS[!        U5       S3S/S	9  g )
Nr  z%NN_MODULE guard cannot be serialized.trainingz-Attempted to guard on uninitialized nn.Moduler  zKAttempted to setup an NN_MODULE guard on uninitialized nn.Module subclass `z`.zIEnsure the `nn.Module` subclass instance has called `super().__init__()`.)gb_typecontextexplanationhints)r  r   r   r;   r  r  r  r  r
  ro   rP  r  r  r  rM  unimplemented_v2r  rL  s      r   	NN_MODULEGuardBuilder.NN_MODULE  s    ""f,--##007  	ehhuzz"3
###,,----$$UJ8S8ST  G''+Cyk5 `r   c                    U R                   S:X  a)  [        R                  R                  R	                  S5      eU R                  U5      $ )z0things like torch.add and user defined functionsr  z*FUNCTION_MATCH guard cannot be serialized.)r  r   r   r;   r  r  r  s     r   FUNCTION_MATCHGuardBuilder.FUNCTION_MATCH#  sC     ""f,--##00<  }}U##r   c                   U R                   S:X  a)  [        R                  R                  R	                  S5      e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.r  z)CLOSURE_MATCH guard cannot be serialized.__code__N)r  r   r   r;   r  r  r  r  rJ  FunctionTyper
  r  r  r  rY  rL  s      r   CLOSURE_MATCHGuardBuilder.CLOSURE_MATCH,  s     ""f,--##00;  hhuzz"9***wsJ/G/G$$UJ8L8LM$$UJ8S8ST&r   c                $    U R                  U5      $ r   )rY  r  s     r   BUILTIN_MATCHGuardBuilder.BUILTIN_MATCH;  s    ""5))r   c                N   U R                  U5      nU R                  UR                  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      [        XA5      5        g U R                  U5      R                  [        U5      [        XA5      5        g )Nr   r  zlen(r  )r  r  r  r   rF  r  rq  r  r  r  add_dict_length_check_guardrw  add_length_check_guardr   r   r  r  r  s        r   SEQUENCE_LENGTHGuardBuilder.SEQUENCE_LENGTH>  s     ll5!$%&&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  r  )r  r  r  r  r  rv   r  r  r  add_tuple_iterator_length_guardrw  )r   r   r  r  r   r  r9  s          r   TUPLE_ITERATOR_LENGuardBuilder.TUPLE_ITERATOR_LENX  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  r  )r  r  r  r  rr   r  r  r  r  add_range_iterator_match_guardrw  )r   r   r  r  r   r  normalized_range_iterr9  startstopsteps              r   RANGE_ITERATOR_MATCH!GuardBuilder.RANGE_ITERATOR_MATCHh  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                   S:X  a)  [        R                  R                  R	                  S5      eU R                  U5      nU R                  UR                  5       5      n[        UR                  5      (       d  [        U5      (       a  g X44nXPR                  ;   a  g U R                  R                  X445        U R                  R                  XC45        U SU 3/nU R                  X5        [        U R                  U5      U R                  U5      [        Xa5      5        g )Nr  z/DUPLICATE_INPUT guard cannot be serialized yet. is )r  r   r   r;   r  r  r  r   r  r  r   r  r   r  r^  rw  )r   r   source_bref_aref_br  r  s          r   DUPLICATE_INPUTGuardBuilder.DUPLICATE_INPUT{  s	   ""f,--##00A  U#X]]_-#$$
 
%h// n555++//?++//?'eW%&##E0%""5)..x8"4/	
r   c                   U R                   S:X  a)  [        R                  R                  R	                  S5      eU R                  U5       S3/nU R                  X5        U R                  U5      R                  [        X!5      5        g )Nr  z)WEAKREF_ALIVE guard cannot be serialized.r  )
r  r   r   r;   r  r  r  r  r  rw  r   r   r  s      r   WEAKREF_ALIVEGuardBuilder.WEAKREF_ALIVE  sz    ""f,--##00;  <<&'|45##E0u%88"4/	
r   c           	        U R                  U5      nU R                  UR                  5      n/ nUR                  SU S[	        UR                  5       5       35        U R                  X5        U R                  U5      R                  X45        g)z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	r  r  r  r  rv  r%  r  r  add_mapping_keys_guardrf  s        r   MAPPING_KEYS_CHECKGuardBuilder.MAPPING_KEYS_CHECK  ss    ll5!$eC5T%**,-?,@AB##E0u%<<UIr   c           
        U R                  U5      nU R                  UR                  5      nU[        R                  R
                  R                  L a  U R                  U5        gU R                  U5        / nUR                  SU S[        [        U5      5      < 35        U R                  X5        U R                  UR                  5      (       a  U R                  X15        gU R!                  X15        g)z6Insert guard to check that the keys of a dict are sameNr  z)) == )r  r  r  r   r`  r3   SUPPORTED_NODESr  rg  r  rv  rg   r  r:  r  r	  r  rf  s        r   DICT_KEYS_MATCHGuardBuilder.DICT_KEYS_MATCH  s    ll5!$EKK''777e$U#
 	ocU&6G6N1O0RST##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)r9   skip_nnmodule_hook_guardsrg  r  s     r   EMPTY_NN_MODULE_HOOKS_DICT'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s    ++U#r   c                    g r   r   r  s     r   	GRAD_MODEGuardBuilder.GRAD_MODE      r   c                    g r   r   r  s     r   DETERMINISTIC_ALGORITHMS%GuardBuilder.DETERMINISTIC_ALGORITHMS  r  r   c                    g r   r   r  s     r   TORCH_FUNCTION_STATE!GuardBuilder.TORCH_FUNCTION_STATE  r  r   c                    g r   r   r  s     r   FSDP_TRAINING_STATE GuardBuilder.FSDP_TRAINING_STATE  r  r   c                    UR                   [        R                  L d   eSU R                  R                  R
                  < 3/nU R                  X5        U R                  U5      R                  [        X!5      5        g)z/Guard on CURRENT_DEVICE per torch.utils._devicezutils_device.CURRENT_DEVICE == N)
r   r)   GLOBALr  r  current_devicer  r  add_default_device_guardrw  r}  s      r   DEFAULT_DEVICEGuardBuilder.DEFAULT_DEVICE  sq    ||{11111 .d.C.C.P.P._._-bc
 	##E0u%>>"4/	
r   c                b  ^ ^$^%^&^' UR                   S:X  d   eT R                  R                  m'T R                  S:X  an  T R                  R                  c   eT R                  R                  nUR
                  nUR                  nUR                  b  UR                  nUR                  nGOoT'R                  m%T% Vs/ s H  owR                  PM     snm&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R1                  5       5      USS9m$OS m$U$U%U&U'U 4S jn[2        R4                  (       a   U" S5      u  p4nSnOS	nU" S
5      u  p4T R                  R                  R                   (       d  T'R&                  R9                  5         T R                  S:X  aw  [;        5       R=                  S5      nUb  [?        U[@        5      (       d   eUc  / O"[/        URB                  RE                  5       5      n[G        UUUUUS9T R                  l        URH                   H  nT RK                  UU/5        M     [L        RN                  " 5       =n(       a%  URP                  RS                  URH                  5        / n/ nU(       d  W(       d   eURH                  URB                  nnU(       d  g URU                  5        H  u  nn[?        U[V        5      (       a  S	nM  T R=                  UR                  5       0 [X        E[[        5       ES9n[?        U[\        5      (       a  UR_                  UU45        Mw  [?        U[`        5      (       a  UR_                  UU45        M  S	nM     U(       Gd  SS K1nSSK2J3n  W(       d   eURH                  URB                  nn[i        UU-   5      n [k        U5       VVs/ s H!  u  nnT Rm                  [o        UU5      5      PM#     nnnSRq                  S [k        U5       5       5      nSRq                  S [k        U5       5       5      n U(       a  SU S3nU (       a  SU  S3n [r        Rt                  " SU SU  SSRq                  U5       S35      n![v        Ry                  SU!URH                  5        UR{                  U!5      n"UR}                  U"R~                  UR                  5      R                  n#U#(       d   e [        U[        U5      [        U5      U#U"URH                  5        g URH                  (       a6  T R                  URH                  URH                  0 [X        E[[        5       ES9  g g s  snf ! [6         a    S	nU" S
5      u  p4 GNf = fs  snnf ! [        R                  R                  R                   a     Nf = f)Nr  loadc                   > 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_idr{  r   r  s      r   get_sources+GuardBuilder.SHAPE_ENV.<locals>.get_sources  sD    
 #/"I"I$"O"O )1D1DcJ"O  s   %;z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlyc           
       > TR                   R                  T Vs/ s H  oR                  PM     snT Vs/ s H  oR                  PM     snTTTR                  TR
                  R                  R                  (       + U S9$ s  snf s  snf )N)input_contextsequalities_inputsr  ignore_staticlangs)	shape_envproduce_guards_verbosefaker   r  r  r  export)r  r/  r  rs  r  r  r   s     r   _get_code_parts/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts#  sx    #--DD%'(RVVR(')*r!XXr*#1&7#'+'<'<'I'I'P'P#P E 	 	(*s
   BB
)pythonverbose_pythoncppT)r  r  r  cpp_code_parts)python_code_partsr   r  python_fallbackshape_env_sources)r   r   )CppCodeCacher   c              3  <   #    U  H  u  nu  p#U S U S3v   M     g7f)z = int_values[r  Nr   .0ir  symbols       r   	<genexpr>)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  s*      ,*I;A hnQCq1*I   c              3  <   #    U  H  u  nu  p#U S U S3v   M     g7f)z = float_values[r  Nr   r  s       r   r  r    s+      .*K;A h.qc3*Kr  zint64_t ;zdouble a  
                #include <algorithm>
                #include <cstdint>
                #include <cmath>
                #include <c10/util/generic_math.h>

                #if defined(_MSC_VER)
                #  define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)
                #else
                #  define EXTERN_DLL_EXPORT extern "C"
                #endif

                EXTERN_DLL_EXPORT int8_t guard(int64_t *int_values, double *float_values) {
                  z
                  z
                  return (z) && (z%);
                }
                zC++ shape guard function: %s %s)Hr  r  r  r  shape_code_partsr  r   r  r  tracked_fakessymbolic_contextexport_constraintsr   r  r  r   r  dynamic_shapes_process_equalitiesr  r  r  r0   rv  r  r9    enable_cpp_symbolic_shape_guardsOverflowErrorfreezelocalsr  r   r.   source_to_symbolr%  ShapeCodePartsexprsr  r#   try_getshape_env_guardsr"  r   rB   r2   rc  r  r  r]  ctypestorch._inductor.codecacher  rF  r  r^  r   r  textwrapdedentr  r  r  castr   c_void_pr  r   rq  	_inductorr;   InvalidCxxCompilerr  )(r   r   r  r  r   r  r  r/  r  namesr  r  r  r  
constraintr  maybe_cpp_code_partsmaybe_shape_env_sourcesr  compile_contextint_source_to_symbolfloat_source_to_symbolr   r  r   r  r  r  r  r  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardr  rs  r  r  s(   `                                   @@@@r   	SHAPE_ENVGuardBuilder.SHAPE_ENV  s    zzR,,99""f,((99EEE#44EE 0 B B!1!D!D..:!1!@!@.>>O ++B:<="Q00"=N ..46<>  # 68/2u"."A"AJ!,*Q*QQ33GG&'(22!(.++	 $QR #B %7!-'9$()?)?)A$B$3#%! %)!
 
 66 ((KL J%> ',O #'8G095! ((55<<&&--/""f, $*8<<0@#A '/:$&;4 4  
 (/ .??DDFG $
 6D"3#53 /"96D!!2 &++D''v6 , -4466?6,,334F4L4LM!!#!!>$$// )J
 "2"8"8":fn55&*O$(HH%L%L8I8K%L %- %M "-55,33VV4DE#M599.55vv6FG +/ #;" >!!>$$// )J
  $$8;Q$QR< &//?%@"%@	6 66}VQ7OP%@  "
 #')) ,*34H*I, # %)II .*34J*K. %!
 #(00A&CO$*12C1DA(F%#?? ## $$% &#==45 6(   5&,,
 $((2TZZAGGv
 -",-./&,, 
 ""55!''"((DD0A0CD 6  #i >z % &*O<K4=9%'9n"^ ??&&99 s=   <WW  6X (W=,C9X  W:9W:=X (X.-X.c                 
   [         R                  (       a  UR                  5       (       a  g [        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5      n[        R                  R                  U5      n[        U[        R                  R                  5      (       a2  UR                  b  UR                  nUR                   b  UR                   n[        U[        R"                  5      (       d   e[         R$                  (       a  [        U[        R&                  R(                  5      (       aX  [+        5       nUR-                  SUR/                  5       5        UR-                  SUR0                  5        UR-                  SS5        U R3                  U5      n/ nU R4                  R6                  R8                  (       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RC                  SU SU	 S[E        U
5      < 35        Mo  URC                  U SU	 S	U
 35        M     GOuU RG                  U5      n[         RH                  (       a)  [=        U[        R&                  R(                  5      (       dU  [        URJ                  [L        5      (       d6  U RN                  RC                  U5        U RP                  RC                  U5        U R4                  R6                  nURR                  URJ                     n[U        US
   5      n[U        US   5      n[W        [Y        X&XX45      U5      nUR[                  UUUUUUU5        [        U[        R&                  R(                  5      (       d/  U R\                  R^                  Ra                  UR                  5        URb                  c   e[e        USURJ                  S9u  nnU(       d  [g        US5      (       aU  URh                  nSU SU SU S3nURC                  U5        U RG                  U5      Rk                  U[W        UU5      5        OBSU S3nURC                  U5        U RG                  U5      Rm                  S[W        UU5      5        [o        U5      S:  a  U Rq                  X5        g g )Nparam_numelparam_bytesparam_countr8   )r  rU  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   )9r9   _unsafe_skip_fsdp_module_guardsis_fsdp_moduler  r  r   r7   r  r  r  r   r   _dispatch_keysr  r  r  r  r  log_compilation_metricsrf  	Parameterr"   	incrementnumelnbytesr  r  r  r  r  ro   rU  r  r  r  r  ,skip_no_tensor_aliasing_guards_on_parametersr  rT   r  r  input_source_to_sizes_stridesr  rw  r  add_tensor_match_guardr   r   r   r   rt   r
  r  add_dynamic_indices_guardr  rq  r  )r   r   r  r  r  metrics_contexttensor_namer  termsterm
real_valuer   r  metadatar  r  r   static_reasondynamic_indicesr  s                        r   TENSOR_MATCHGuardBuilder.TENSOR_MATCH  s:   11e6J6J6L6L "%((MM% %//".EDHHUZZ4HE%[F!HH33E:M%!2!2!=!=>><<+"\\F&&2$)$7$7MeU\\2222--*UEHHDVDV2W2W"5"7))-G))-F))-;,,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$U%=%=?PQQ 1188E::AA-P#44AA'EE,, 2(62BC3HX4FG%;.D& 	&" 44&! "%););<<&&99==ejjI< <<+++<U5M5MOFG 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                >   [        5       nUc   eUR                  nAUc   eUR                  R                  nAX`R                  R
                  ;   d
   SU 35       eUc'  UR                  nU(       d  S OU R                  U5      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 )NzH_produce_guard_code must be called from inside GuardedCode. Called from __weakrefoffset__r   )r   f_backr  co_namer   r  r  r  weakrefr  r  ri  r   enumEnumro  set_export_info)r   r   r  r  	cur_framecaller	func_namer  guarded_objectguarded_object_typeobj_refsupports_weakrefs               r   r  #GuardBuilder._set_guard_export_info	  s    !N	$$$!!!!!MM))	NN333 	
VW`Vab	
3
 #*::D)-T488D>N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  r  r   )r  types.CodeTyper  zCallable[[Any, str], str]r  zCallable[[Source], str]r  z)Callable[[object], ReferenceType[object]]r  dict[str, object]r   r   r   r   r  CheckFunctionManagerr  r  )r   r&   )NT)r  r  r   zOptional[dict[str, Any]]returnr   )r   zUnion[str, Guard]r"  r  )r   r&   r(  r  )r   r&   r"  None)r   r&   r  r  r  r  )r   r&   rC  r  ):r   r   r  r  r   r  r	  staticmethodr  r6  r:  r  r@  rE  r^  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r  rM  rV  rY  r^  ra  rg  rk  rs  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r  }  s    -1?5?5 *?5 ,	?5
 C?5 '?5 (?5 +?5 /?5 *?5B8$L  "Sj9	"?
dLL SF4 4Yl
(
(
$	
"

?@	

O
 
$
6
*jX	%,$'*4
 
&
<

JC2$
jXk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)PyExprCSEPassi	  r8   c                  *    \ rS rSr% S\S'   S\S'   Srg)PyExprCSEPass.Configi	  zdict[str, int]
expr_countzdict[str, str]expr_to_namer   Nr  r   r   r   Configr(  	  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.ExprCounteri	  c                    Xl         g r   _config)r   r9   s     r   r   "PyExprCSEPass.ExprCounter.__init__	  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_TYPESr0  r)  ri  r   r   )r   r   r   s     r   r   PyExprCSEPass.ExprCounter.visit	  sA    $ @ @AA''T(:;q@;GM$r   r/  )r9   r(  r"  r#  r   ast.ASTr"  r   r   r   r  r  r   r   r  r  r  s   @r   ExprCounterr-  	  s    	"	  	 r   r8  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   r0  	_gen_namepreface)r   r9   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&  r3  ri  r0  r)  USE_THRESHOLDr*  r   r   r<  r=  r  rf  NameLoad)r   r   exprnode_expr_var_namer   s         r   r   PyExprCSEPass.Replacer.visit	  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   )r0  r<  r=  )r9   r(  r>  zCallable[[], str]r"  r#  r5  r7  r  s   @r   Replacerr:  	  s.    	)(	) (	) 		)	' 	'r   rI  c                f    SU l         U R                  [        R                  " S 5      0 S9U l        g )Nr   c                     gr   r   r   r   r   rI  (PyExprCSEPass.__init__.<locals>.<lambda>	  s    qr   )r)  r*  )_counterr+  rX  defaultdictr0  r   s    r   r   PyExprCSEPass.__init__	  s.    {{"..y9 # 
r   c                P    U U R                    3nU =R                   S-  sl         U$ r  )rM  )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)	r8  r0  r   rf  parseSyntaxErrorr  	exceptionlineno)r   r  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   )rI  r0  rQ  r   rf  rT  r=  ri  )r   rD  replacernew_nodes       r   rh  PyExprCSEPass.replace
  sF    ==t}}=>>#))D/2h!777r   )r0  rM  N)r"  r#  )_var)r   r  r"  r  )r  r  r"  r#  rD  r  r"  ztuple[list[str], str])r   r   r  r  rA  rf  	AttributeCall	Subscriptr3  dataclasses	dataclassr+  NodeVisitorr8  NodeTransformerrI  r   rQ  r[  rh  r  r   r   r   r&  r&  	  sx     M --3==A% % % coo  #'3&& #'J

8r   r&  c                    [        U R                  [        5      =(       d3    [        R                  =(       a    U R
                  [        R                  L $ r   )r   r  rE   r9    guard_nn_modules_using_dict_tags	create_fnr  rV  )r   s    r   must_add_nn_module_guardsrm  
  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   reasonr   s     r   r   #DeletedGuardManagerWrapper.__init__#
  s    #) r   c                    S U l         g r   )r   r   s    r   r   6DeletedGuardManagerWrapper.populate_diff_guard_manager'
  s
    #r   )r   rq  )r   r   r  r  r   r   r  r  r  s   @r   ro  ro  "
  s    *$ $r   ro  c                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   Srg)r  i+
  r/   r  r   zOptional[_CppShapeGuardsHelper]r  r  r  zlist[Source]r  r   Nr  r   r   r   r  r  +
  s     ))**33##r   r  c                  *    \ rS rSr% S\S'   S\S'   Srg)GuardsStatei4
  r{   r  Optional[ShapeCodeParts]r  r   Nr  r   r   r   rx  rx  4
  s    ((..r   rx  c                     ^  \ rS rSrU 4S jr\S 5       r\S 5       r\S 5       r\SS j5       r	\SS j5       r
\SS j5       r\S	 5       rS
 rSrU =r$ )GuardsStatePickleri:
  c                   > [         TU ]  " U0 UD6  [        R                  R	                  5       U l        [        R                  R                  R                  5       U l        g r   )	r   r   r   r  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converter)r   r   kwargsr   s      r   r   GuardsStatePickler.__init__;
  sH    $)&)**99; % 1 1 = = Q Q Sr   c                d    [         R                  R                  5       nUR                  U5        U$ r   )r   rf  rg  __setstate__)clsstatemods      r   _unpickle_module#GuardsStatePickler._unpickle_module@
  s%    hhoo
r   c           	        [         R                  R                  5       n[         R                  R                  R	                  5       nUR                  UUUU[         R                  R                  R                  U5      5      $ r   )	r   r  r}  r  r  from_meta_and_devicer   r  from_raw_repr)r  meta_tensorrU  r  dispatch_keys_rawr~  r  s          r   _unpickle_tensor#GuardsStatePickler._unpickle_tensorF
  si    %%446	 ,,88LLN44HH##112CD
 	
r   c                   0 nU H  u  pn
U	" U
6 Xx'   M     UR                   UR                  5       p[        U5      R                  XuX5      nX=l        [
        R                  R                  R                  U5      Ul	        U$ r   )
shaper  r  __tensor_unflatten__r  r   r   r  r  r  )r  r  rU  r  r  ctx
inner_datainner_tensorsr  unpickle_funcunpickle_func_args
outer_sizeouter_strider  s                 r   $_unpickle_traceable_wrapper_subclass7GuardsStatePickler._unpickle_traceable_wrapper_subclassR
  s    
 7A3D!3"/1C"DM 8B $/#4#4k6H6H6JL;44

 
!HH33AABST
r   c                .    [         R                  " U5      $ r   )r^  r_  )r  aliass     r   _unpickle_python_module*GuardsStatePickler._unpickle_python_modulec
  s    &&u--r   c                T    [         R                  R                  R                  U5      $ r   )r   r   r  r  )r  raw_reprs     r   _unpickle_dispatch_key_set-GuardsStatePickler._unpickle_dispatch_key_setg
  s    xx&&44X>>r   c                h    [         R                  R                  R                  R	                  U5      $ r   )r   r   r  CInterpreterdeserialize)r  jsons     r   _unpickle_functorch_interpreter2GuardsStatePickler._unpickle_functorch_interpreterk
  s#    xx""//;;DAAr   c                .    [         R                  " U5      $ r   )rJ  MappingProxyType)r  ds     r   _unpickle_mapping_proxy*GuardsStatePickler._unpickle_mapping_proxyo
  s    %%a((r   c                	   SS K n[        U[        R                  5      (       GaV  UR                  R
                  S:w  Ga;  SSKJn  U" U5      (       a  / nUR                  5       u  pVU H4  n[        X5      nU R                  U5      u  pUR                  XyU
45        M6     [        U 5      R                  [        R                  " USS9UR                  [        U5      [        R                  R                  U5      R!                  5       UU44$ [        U 5      R"                  [        R                  " USS9UR                  [        U5      [        R                  R                  U5      R!                  5       44$ [        U[        R$                  R&                  5      (       a  [        U5      R(                  [        U5      R*                  :X  a  [,        $ UR.                  R0                  [        R$                  R&                  R0                  :X  a&  [        U 5      R2                  UR1                  5       44$ GO[4        R6                  " U5      (       a"  [        U 5      R8                  UR*                  44$ [        U[        R                  R:                  5      (       a&  [        U 5      R<                  UR!                  5       44$ [        U[        R                  R>                  R@                  5      (       a&  [        U 5      RB                  URE                  5       44$ [4        RF                  " U5      (       aW  [I        XRJ                  5      (       a=  [M        US5      (       a,  [M        US5      (       d   eURN                  URP                  44$ [        U[        RR                  5      (       a  [U        SU SURV                   S	35      e[        U[X        RZ                  5      (       a&  [        U 5      R\                  UR_                  5       44$ [        U5      R(                  [        U5      R*                  :w  a?  [        R`                  Rb                  Re                  S
[        U5       SU S3S-   S-   5      e[,        $ )Nr   meta)is_traceable_wrapper_subclass)rU  _torch_handler_name_torch_unpicklerzCannot serialize SymInt z (node: r  r  r  r  r  r  )3sympyr   r   r  rU  r  torch.utils._python_dispatchr  rQ  ri  reducer_overrider  r  
empty_liker   r  r  r  rf  rg  r  r   NotImplementedr   __getstate__r  r8  ismoduler  r  r  r  r  r  	serializeisclass
issubclassFunctionr
  r  r  ry  rh  r   rJ  r  r  r  r   r;   r  )r   r  r  r  r  attrsr  r  innerfunc
args_tuples              r   r  #GuardsStatePickler.reducer_overrides
  s~   c5<<((SZZ__-FR,S11  
 335
!D#C.E'+'<'<U'C$D%%t:&>? "
 DzFF$$S8JJIHH++C099;I   :..  V4

S	'',557	1   UXX__--Cy%%c););;%%}}))UXX__-I-IIDz22S5E5E5G4III J c"":55FFUXX4455:883<<>:KKKUXX00==>>:==?QQQ OOC  3//2333 23333''#*A*A)CCCU\\**!9#hsxxjPQRSSU3344:55
}DD9!!T#Y%7%77--##00S	{,se3DETUTU  r   )r~  r  )r  r  )r  r  )r  bytes)r   r   r  r  r   classmethodr  r  r  r  r  r  r  r  r  r  r  s   @r   r{  r{  :
  s    T
  
 	
 	
    . . ? ? B B ) )F Fr   r{  c                   [         R                  " 5       n[        U5      n UR                  U 5        UR                  5       $ ! [         a8  n[
        R                  R                  R                  [        U5      5      UeS nAff = fr   )ioBytesIOr{  dumpAttributeErrorr   r   r;   r  r  r  )r  bufpicklerrY  s       r   pickle_guards_stater  
  si    
**,C %G<U <<>  <mm,,SV4!;<s   A 
B3B  Bc                  `    \ rS rSr      S
       SS jjr SS 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	UT l        UT l        U(       a  UR
                  OS T l        UT l        [        S5      (       d  [        R                  S5        [        U=(       d    S[        R                  S9n
T R                  U
U	UUU(       a  S OT R                  5      u  mnU(       a  U4S jnU" U
 Vs/ s H
  o" U5      PM     sn5      n[        U5      [        U
5      :X  d   e[        S U 5       5      (       d   e[!        U
5       VVs/ s H  u  pX   (       d  M  UPM     n
nnT R                  U
U	UUT R                  5      u  mnUT l        T R%                  TX5        TR&                  T R"                  l        [(        R+                  ST R"                  5        TR&                  T R"                  l        SmUR,                  (       Gd  T R                  S	:w  a  T R"                  R/                  UR0                  5      (       dB  [3        T R"                  UR0                  [4        R6                  " 5       5      n[9        S
U 35      e[:        b   [;        T R"                  UR0                  5        [=        T R"                  R>                  UR0                  S5      m[(        R+                  STS 5        [@        RB                  " S[E        T5      5        S T l#        T R                  S:X  Ga  [I        5       m[I        5       mUU4S jnT R                  RK                  5       nU
 Hn  n[M        URN                  [P        5      (       a:  T R                  (       d   eT R                  RR                   H  nU" U5        M     M\  U" URN                  5        Mp     T R                  RT                   H  nU" U5        M     S n[V        RX                  " UUR0                  R[                  5        VVs0 s H  u  nnUT;   d  M  UU_M     snnUR\                  R[                  5        VVs0 s H  u  nnUT;   d  M  UU_M     snn[^        R`                  Rc                  U
 Vs1 s H*  n[V        RX                  " US S U" URd                  5      S9iM,     sn5      [f        Rh                  " [j        URl                  5      S9n[o        UT R                  S9n[q        U5      T l#        [^        Rr                  Ru                  SUU 4S jS9  T R                  Rw                  5         S T l        g s  snf s  snnf s  snnf s  snnf s  snf )N!pytorch/compiler:guard_nn_modulesz9guard_nn_modules is turned off using justknobs killswitchr   )r  c           
       > [        5       n[        U R                  5      nUS:X  a  SnUnOSnTR                  U R                  5      n[	        U R
                  5      S LnU R                  n[        U[        R                  5      (       a  U R                  R                  n[        UUUUR                  U R                  (       a  [        U R                  5      OSUU S9$ )Nr  FTr   )r  	has_valuer  
guard_typederived_guard_types	is_global
orig_guard)objectstrip_local_scoper  r  r   r  rl  r   	functoolspartialr  re   r   guard_typesro  )r   MISSINGr  r  r  r  r  builders          r   make_guard_filter_entry>CheckFunctionManager.__init__.<locals>.make_guard_filter_entry
  s     ((42: %I#E $I#KK

3E253K3KLTXX	 ??h	(9(9::$33H'''00(( ).e.?.?(@'$
 
r   c              3  F   #    U  H  n[        U5      [        :H  v   M     g 7fr   )r  r  )r  r  s     r   r  0CheckFunctionManager.__init__.<locals>.<genexpr>  s     ?1tAw$s   !%sg        r  zGuard check failed: r8   zGuard eval latency = %s us.2fguard_latency_usr  c                   > [        U 5      =n(       a)  [        U[        5      (       d   eTR                  U5        g [	        U 5      =n(       a)  [        U[        5      (       d   eTR                  U5        g g r   )r   r   r  r   r   )r   r  used_global_varsused_local_varss     r   prune_variable5CheckFunctionManager.__init__.<locals>.prune_variable_  sj    1&9949%dC0000$((.26::T:%dC0000#''- ;r   c                H  ^ [        U [        R                  5      (       a{  S m[        U4S jU R                   5       5      nU R
                  R                  5        VVs0 s H  u  p#UT" U5      _M     nnn[        R                  " U R                  /UQ70 UD6$ U $ s  snnf )Nc                ^    [        U [        [        R                  45      (       a  U " 5       $ U $ r   )r   r7   r  r  rR  s    r   _refHCheckFunctionManager.__init__.<locals>.normalize_create_fn.<locals>._refw  s$    %a-)EFF#$3J r   c              3  4   >#    U  H  nT" U5      v   M     g 7fr   r   )r  r/  r  s     r   r  MCheckFunctionManager.__init__.<locals>.normalize_create_fn.<locals>.<genexpr>|  s     $=fT!WWfs   )r   r  r  ro  r   keywordsr   r  )r  new_argskvnew_keywordsr  s        @r   normalize_create_fn:CheckFunctionManager.__init__.<locals>.normalize_create_fnt  s    a!2!233!
  %$=aff$==H;<::;K;K;M#N;M41AtAwJ;ML#N$,,QVVOhO,OO $Os    B)obj_weakrefguarded_class_weakrefrl  )r  r   _guardsr  )r  r  dynamo_cpp_guards_strc                 *   > TR                    ST S S3$ )Nz
Guard latency = r  z us)r   )latencyr   s   r   rI  /CheckFunctionManager.__init__.<locals>.<lambda>  s    $"4"4!55GPS}TWXr   
payload_fn)<r|   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesr  r  torch_function_mode_stackguards_serialization_moder-   r  r  r   r&   sort_keybuild_guardsrq  allr  r   compile_check_fnr   r  r  r  r  r  get_guard_fail_reason_helperr#   r"  r{  ry   r   r   r!   increment_toplevelr  guards_stater   dump_guards_stater   r  rW   r  r  rf  rh  r   r   r   r  	GuardsSetrl  rG  tree_mapr|  r  rx  r  _loggingtrace_structuredclear)r   r  r  r   r   guard_filter_fnr  r  r|   existing_diff_guard_sourcessorted_guardsr   r  r   filter_resultsr  reasonsr  output_graph_guards_stater   r  r  r  r  r  r  r  r  s   `                       @@@@r   r   CheckFunctionManager.__init__
  s    )5$$$;= B+N 	$ ) !1
 7CL22 	& *C&BCCKKSTv|@!%!2!2'#D)G)G"
 2 -=JK]E(/]KN ~&#m*<<<<??????&/&>&>(!.BS&>   &*%6%6+..&"G] +g}D .5-D-D*t112-4-D-D* """t'E'E'O%%++L,D,DEE6&& ,,"557
 %';G9%EFF,8-&&(@(@ ,""'')A)A1G 9gc]L 112Dc'lS-1))V3"u!eO. )-(9(9(K(K(M%&e66GG0000"&"7"7"I"I&v. #J #5#;#;< ' ++>>v& ? )4(;(;) !: E E K K M M1O+ AqD M !: F F L L N N1,, AqD N
 // &3 &3E $++!(,26&9%//&J	 &3
 /5oo2-KK//)%8 '6!%!6!6L !4L AD 	''#X 	( 	
 	 A L\
s0    U9UUU(UU U1U%c                   ^ [        5       nX&l        S mU4S jn[        UU R                  UU R                  UR
                  UR                  UU U5	      nS n	[        R                  " X5      m[        R                  =(       a    [        S5      n
U Hw  nU
(       d\  UR                  5       (       aG  SUR                  ;  a7  SUR                  ;  a'  [        R                  (       d  SUR                  ;  a  Mf  UR                  U5        My     X4$ )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  5CheckFunctionManager.build_guards.<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_brH  s     r   cleanup_builder:CheckFunctionManager.build_guards.<locals>.cleanup_builder  s    A r   r  rv  rx  r	  )r   r   r  r  r  r  r   r  r  r9   guard_nn_modulesr-   r  r  r  r  )r   r  r  r  r  r  r   r  r  r#  guard_on_nn_modulesr   r  s               @r   r  !CheckFunctionManager.build_guards  s     ,-+F(		4 KK  $$%%

	 KK9	$55 
//;
 #E'2244 #%**4$EJJ655

9RLL! # %%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(                  O/ nU GHf  n[+        U[,        5      (       as  UR.                  nUR0                  nUR3                  5        SUR3                  5        3n[5        UR7                  U5      UR7                  U5      U/5        U" US S5        M  [+        U[8        5      (       a  UR:                   Vs/ s H  nUR7                  U5      PM     nnUR<                   Vs/ s H  nUR7                  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[?        UUU/5        U" US S5        GM[  [A        SU 35      e   URB                   H)  nUR                   H  n	U" XR                  S5        M     M+     T(       a"  [D        RF                  RI                  SU4S jS9  [J        RL                  nUc  [J        RN                  " 5       nUUURP                  US.[R        E[U        5       EnU R
                  RW                  5         SURX                  S   0n[        T5      S:X  d   eUU R
                  l-        X@R
                  l.        U R
                  R_                  5         TU R
                  l0        UU R
                  l1        X0R
                  l2        S U R
                  l3        S U R
                  l4        XR
                  l5        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  ro  rl  )ro  r,   from_tracebackrp  rl  )r  r   s   r   rI  NCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>  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)rt  r  r  r  verbose_guards_logisEnabledForloggingDEBUGro  r  formatrl  )	r  r   log_onlyr  maybe_stackmaybe_user_stackr   structured_guard_fnsr   s	   ``    r   add_code_part<CheckFunctionManager.compile_check_fn.<locals>.add_code_part  s     5i GT#45 ''  "..w}}== #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!),"))*;< r   Tr8   zcheck_no_aliasing(r   r  rv  zcheck_overlapping(overlapping=[c              3  @   #    U  H  oR                  5       v   M     g 7fr   r  r  r   s     r   r  8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>h  s     /\B[QB[   z], non_overlapping=[c              3  @   #    U  H  oR                  5       v   M     g 7fr   r9  r:  s     r   r  r;  i  s     3dFcFFHHFcr<  z])zUnknown GuardEnvExpr: dynamo_guardsc                 <   > T V s/ s H	  o " 5       PM     sn $ s  sn f r   r   )fr5  s    r   rI  7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    BV4WBVQQSBV4W4Ws   r   )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr  r   r   )6r  r  r  $make_torch_function_mode_stack_guardr  r   r   add_global_state_guard#add_torch_function_mode_stack_guardr   r  r  r   r   r  rq  r   r  r  r  aotautograd_guardsr   r%   input_source_ainput_source_br  r   r^  r+   overlapping_sourcesnon_overlapping_sourcesr   rh  r  r   r  r  r:   initial_global_stateGlobalStateGuardr  r2   rc  r   r  r   r   r%  r   r   r   r   r   r   )r   r  
guards_outr   largs"torch_function_mode_stack_check_fnr6  seengclr  r  check_tensors_fncheck_tensors_verbose_fnrI  r   source_arw  r  r   overlapping_guard_managersnon_overlapping_guard_managersglobal_stater   r  r   r5  r   s                           @@@r   r	  %CheckFunctionManager.compile_check_fn  sQ     '((#
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 594E4ED002 	 (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   /Q2Q7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   ro  r   r   r`   rb   
invalidate)r   obj_strr   r   rr  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   r  r  r]  r  )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  r  r  r  )NNNNNN)r   z%Optional[Callable[[GuardFail], None]]r  z8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]r  r  r  ry  r   )r   r   r  r  r   r  r	  r]  r  r  r  r   r   r   r!  r!  
  sm     ?C 3759f!
 =f!
f! $1f! 3f!\  =&~nQ`7"r   r!  c                V  ^	 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$ ! [         a	    SS jn GNFf = f! , (       d  f       GMQ  = f! , (       d  f       N= f! , (       d  f       Nh= f)Nr   r   c                &   > TR                  U 5      $ r   )rh  )rD  csepasss    r   rh  %build_guard_function.<locals>.replace  s    ??4((r   c                
    / U 4$ r   r   )rD  s    r   rh  rh    s    t8Or   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardrb  )
r	  r   r&  r[  RecursionErrorr   r   r   splicer  )
r   closure_argsr   rh  
guard_bodyrD  r=  r   make_guard_fnrg  s
            @r   r  r    sc   4oG	j!	)  !Jg&xvR01   0 ! 	  E	OOO$	Z & 
 #$M3L>DE				U#/ 
   -"8"8":::?  	 !  
 
 	s5   E  8E6>#F	#F E32E36
F		
F
F(c                 h    [         R                  R                  R                  R	                  S5      $ )Nr}   r   r  	_internal	log_stateis_artifact_enabledr   r   r   is_recompiles_enabledrt    s#    >>##--AA,OOr   c                 h    [         R                  R                  R                  R	                  S5      $ )Nr~   rp  r   r   r   is_recompiles_verbose_enabledrv    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r  )rl   rq  r   r  )	cur_stacktymoderJ  s      r   check_torch_function_mode_stackMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stack  sE    13	y>SZ'E9-HBT$Z . r   )r  )initial_stackr  r|  rJ  s      @r   rF  rF    s-    +,mT!Wm,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__r8   r   zDuplicate tensors found: )rF  r   rX  rN  rv  r   r  r  r  rq  r  )	r   r  r   ids_to_sourcer  	tensor_idr  duplicate_tensorsrr  s	            r   1recompilation_reason_for_no_tensor_aliasing_guardr    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                4    SSK nSnUR                  USU 5      $ )z
Replace occurrences of L[...] with just the inner content.
Handles both single and double quotes.

This is to generate user friendly recompilation messages.
r   NzL\[\s*['\"](.*?)['\"]\s*\]z\1)resub)r   r  patterns      r   r  r     s     +G66'5!$$r   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5      $ ! [         a    [        5       (       a   S	S	S	5        M  e 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  Fr8   zDuplicate tensor foundr   Tr  Nr   z; )r   r$  r   r  resultr   rq  r  rF  r6   r  	Exceptionrv  r   r  r  r  r  r  )r   f_locals
compile_idr  r  no_tensor_aliasing_check_failedr   guard_debug_infor   r   fail_reason
reason_strs               r   r
  r
  -  sw    !;!;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Z((! ! 466  21 	 21s*   ;E8=EE5(E83E55E88
F	c                f   [        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    [        R                  S5         U$ f = f)Nr   zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r   ro  rq  r
  rn   rs   r  r   rd   r  r  rV  )r   r  r  r  r  s        r   get_guard_fail_reasonr  p  s     -!;<<R A ABCC-mzRJ=&'..z:
&&2''*8(8-:MN   
d	
 
s   8B B0/B0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)r  r   )r  r  rr  s      r   r  :get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>  s2      #!3IA <(8??64+HH!3s   -/re  r  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     SSS.$ )Nrecompile_reasonsr  )r  encodingr   r   r   r   rI  9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    '
r   c                    > T $ r   r   )r  s   r   rI  r    s    7r   )metadata_fnr  )r  r   r  r  r  r  nextr  rt  rv  r9   error_on_recompiler  r  r  r   r  co_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logr;   RecompileErrorr   r  r  )	r   framerr  r  do_recompiles_logfailuresguard_failure_detailsmessager  s	           @r   'get_and_maybe_log_recompilation_reasonsr    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  r  r   r   r   r  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   )seqrS  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 aliasing zC. This is not supported. Please do a clone for corresponding input.)rw  )	r   r   r;   UnsafeScriptObjectErrorr  r  r  r  rz  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardr    s     {02;?.z:/
 
1*==--??$%];3C3C3E2F G> ?  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   )TracingContextr8   )collect_debug_stackr  N)torch._guardsr  r  r.  r/  r0  r-  r  guards_contextr>  r   r   r&   )r  r|   r  r  r   r   s         r   install_guardr  !  s     -$11 8		(	(	7  



-
-
;
;
?
?C%''''EJ r   )r   r6  r"  r  )r  r  r   r&   r"  r  )r   zUnion[str | list[str]]r   r&   r"  r  )r"  zOptional[int])r  r   r"  r	   )r  r  )r  rx  r"  r  )r"  ztuple[str, str])r   r  r"  r  )r   rf   r  r   r  r$   r"  r  )
r   rf   r  r  r  r   r  r$   r"  r  )r  ra   r"  r  )
r   rf   r  r  r  r   r  r  r  r  )r'  
__future__r   rf  r  rX  rf  r  r  r^  r8  r  r/  r[  pickler  r  rJ  r  r  
contextlibr   r  r   r   typingr   r   r	   r
   r   r   r   r   torch.overridestorch.utils._devicetorch._C._dynamo.eval_framer   torch._C._dynamo.guardsr   r   r   r   r   r   r   r   r   r   torch._dynamo.sourcer   r   r   r   r   r   r   r    torch._dynamo.utilsr!   r"   r  r#   r$   r%   r&   r'   r(   r)   r*   r+   torch._loggingr,   torch._utils_internalr-   %torch.fx.experimental.symbolic_shapesr.   r/   r0   r1   r2   torch.utilsr3   rG  torch.utils._ordered_setr4   torch.utils._tracebackr5   r6   torch.utils.weakr7   r  r9   r:   r;   
eval_framer<   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   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   r`  rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   r  numpyr+  ModuleNotFoundErrorr  rz   torch._dynamo.output_graphr{   	getLoggerr   r  r  getArtifactLoggerr  r  r  r-  r   r0  cacher<  r=  rc  ri  r   r   r  rt  rw  r|  r  r  r  r  r  rg  r  r  r  r  r  r  r  r  r&  rm  ro  r  rx  Picklerr{  r  r!  r  rt  rv  rF  r  r  r
  r  r  r  r  r  r  r  r   r   r   <module>r     s_  " # 
        	    
     %    J J !    >  	 	 	 H
 
 
 & 1  * / O * ( ( ,$ $ $ $ $ $ $ $ $ $J      , FJ B I
 A !^^--hA
11(LI99"  ^^55h@PQ ^ ^BT 
. 
. .2* 1:/ hh&&:: %"Q&Q/4QQ'K31 d#! ! $!&R
G   
tyy 
 8 8n
# n
D:R8 R8j$!4 $ $ $ $ / / /
 D| |~(;VPX
+$2 
%@)@)@) @) 		@)F
   	
 	09'99x"200
0  0 	0
 0. % &D !" Kmk  	Bs   "P PP