
    ȅis                   
   % 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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"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/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErE  SSKFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrP  SSKQJRrRJSrS  SSKTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]  SSK^J_r_  SSK`Jara  SSKbJcrc  SSKdJere  SSKfJgrgJhrhJiriJjrjJkrk  SSKlJmrn  SSKoJprp  SSKqJrrrJsrs  SSKtJuru  SSKvJwrwJxrxJyry  SSKzJ{r{  SSK|J}r}J~r~JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJrJrJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  \(       a  SSKJr  SrS\S '    SSKr\(       a$  SS!KJrJrJr  SS"KJr  SS#KJr  SS$KJrJr  SS%KJr  \$" S&5      r\GR                  " \5      r\&GR                  GR                  \S'5      r\&GR                  GR                  \S(5      r\&GR                  GR                  \S)5      r\&GR                  GR                  \S*5      rS+rSpS, jr " S- S.\_5      r " S/ S05      rSqS1 jr\GR                  SrS2 j5       rSqS3\S4'   SsS5 jrStS6 jr\&GR                  GR                  GR                  rSuS7 jr Sv       SwS8 jjrSxS9 jrSyS: jr              SzS; jrS{S< jrS|S= jrS}S> jrS~S? jr\GR                  " S@SA9 " SB SC5      5       r            SSE jrSSF jr\GR                   " SG SH5      5       r " SI SD\GR                  5      r\GR                  SSJ j5       r " SK SL\Y5      Gr  " SM SN5      GrSSO jGr " SP SQ\5      Gr\GR                   " SR SS5      5       Gr\GR                   " ST SU5      5       Gr " SV SW5      Gr\GR                  SSX j5       Gr " SY SZ\GR                  5      Gr	SS[ jGr
      SS\ jGr " S] S^5      GrSS_ jGrSS` jGrSSa jGr    SSb jGr\#" ScG\G\G\4   5      Gr      SSd jGrSSe jGr    SSf jGr          SSg jGr S             SSh jjGr S         SSi jjGr    SSj jGr            SSk jGr\{" G\5        SSl jGr      SSm jGrSSn.SSo jjGrg! \ a    Sr GNif = f)a  
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
NamedTupleNoReturnOptionalTYPE_CHECKINGUnion)LiteralStringTypeAliasTypeTypeVar)ReferenceType)code_framelocals_names)check_obj_idcheck_type_idClosureGuardAccessorCodeGuardAccessordict_versionDictGetItemGuardAccessorDictGuardManagerFuncDefaultsGuardAccessorFuncKwDefaultsGuardAccessorGetAttrGuardAccessorGetGenericDictGuardAccessorGuardAccessorGuardDebugInfoGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardinstall_symbolic_shape_guard	LeafGuardprofile_guard_managerRelationalGuardRootGuardManagerTupleGetItemGuardAccessorTypeDictGuardAccessorTypeGuardAccessorTypeMROGuardAccessor)
get_global_source_nameget_local_source_nameIndexedSource$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceis_from_skip_guard_source.is_from_unspecialized_builtin_nn_module_sourceTensorPropertyTensorPropertySource)CompileEventLoggerget_metrics_context)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlapIndentedBuffer)is_opaque_value_type)
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ClosureSource
CodeSourceCollectionsSourceConstantSourceConstDictKeySourceCurrentStreamSourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceDynamicScalarSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceListGetItemSourceLocalSourceNamedTupleFieldsSourceNNModuleSourceNonSerializableSetGetItemSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTorchSourceTupleIteratorGetItemSourceTypeDictSourceTypeMROSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntryDynamoFrameType
ExtraStateGuardedCode	GuardFailGuardFilterEntryGuardFn)builtin_dict_keyscommon_constant_typesdataclass_fields	dict_keysget_current_stream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_signature)Callablez(Optional[Callable[[Any, Any, Any], Any]]guard_manager_testing_hook_fn)	GeneratorKeysViewSequence)Symbol)DispatchKeySet)OutputGraphCommonOutputGraphGuardsStateSerializedCodeTguards
recompilesrecompiles_verboseverbose_guards)__defaults____kwdefaults____code____closure____annotations____func____mro__c                \    [        U 5      n[        U5      UR                  U5      -
  S-
  nU$ NrP   )&code_framelocals_names_reversed_cachedlenindex)codevar_nameframelocals_names_reversedframelocals_idxs       N/home/james-whalen/.local/lib/python3.13/site-packages/torch/_dynamo/guards.pyget_framelocals_idxr      s=     "H!M&'*D*J*J8*TTWXX      c                  :   ^  \ rS rSrSS jrSSU 4S jjjrSrU =r$ )IndentedBufferWithPrefix   c                :    SU R                   U R                  -  -  $ )Nz| )_indenttabwidthselfs    r   prefixIndentedBufferWithPrefix.prefix   s    t||dmm344r   c                X   > U(       a  [         TU ]  U5        g [         TU ]  SU-   5        g )Nz+- )super	writeline)r   lineskip_prefix	__class__s      r   r   "IndentedBufferWithPrefix.writeline  s$    Gd#Gedl+r    returnstrF)r   r   r   boolr   None)__name__
__module____qualname____firstlineno__r   r   __static_attributes____classcell__r   s   @r   r   r      s    5, ,r   r   c                      \ rS rSrSrSSS jjr\SS j5       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SS jr S     S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Srg)"GuardManagerWrapperi	  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_guardsrL   diff_guard_sources)r   r   s     r   __init__GuardManagerWrapper.__init__  s    <(*DII;?6:)-	%'7;6:DH1515AC57'?Bu&3=<r   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                |   ^ ^^^ SU U4S jjmSU U4S jjmSUU4S j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  -3++-335-((w #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_managerH  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>.visitV  s/    |$ 011)$// &&r   )r   r   r   r   )r   r   r   r   )r   r   )r   r  r  r  s   `@@@r   collect_diff_guard_sources.GuardManagerWrapper.collect_diff_guard_sources0  s;    	& 	&	& 	&	' 	' 	dii&&&r   c                    [         R                  (       a   [        S5      (       a  U R                  5         U R	                  5         g )Nz3pytorch/compiler:use_recursive_dict_tags_for_guards)rQ   "use_recursive_dict_tags_for_guardsrE   find_tag_safe_rootsprepare_diff_guard_managerr   s    r   finalizeGuardManagerWrapper.finalizea  s4    44A:
 :
 $$&'')r   c                D    U R                  5         U R                  5         g r   )r  populate_diff_guard_managerr   s    r   r  .GuardManagerWrapper.prepare_diff_guard_managerh  s    '')((*r   c                  ^^^^       SS jmSU4S jjmSUU4S jjmSUU4S jjmT" U R                   5      nU HL  n[        UR                  5       [        R                  R
                  5      (       d  M<  UR                  5         MN     g)	u	  
Identify ``tag safe nodes`` and ``tag safe roots`` within a guard tree.

-----------------------------------------------------------------------
tag safe node
-----------------------------------------------------------------------
A *tag safe node* is a ``GuardManager`` whose guarded value satisfies one
of the following conditions:

1. Immutable value - The value is intrinsically immutable according to
``is_immutable_object``. Tensors are considered immutable. To ensure
that symbolic guards run, we also check that the GuardManager has no
accessors.

2. Nested tag safe dictionary - The value is a ``dict`` whose keys and
values are all tag safe nodes  (checked recursively).  Such dictionaries
allow entire nested structures to be skipped once their identity tag
matches.

3. Pure ``nn.Module`` - The value is an ``nn.Module`` whose sole
accessor is ``GetGenericDictGuardAccessor``—i.e., it only exposes its
``__dict__`` and nothing else that could mutate between runs.

For every tag safe node, verifying the identity/tag of just the top-level
dictionary is enough to guarantee the entire subtree is unchanged, enabling
a *fast-path* guard check.

-----------------------------------------------------------------------
tag safe root
-----------------------------------------------------------------------
A ``tag safe root`` is a tag safe node whose parent is not tag safe.
These boundary nodes mark the points where guard evaluation can safely
prune traversal: if a tag-safe root's dictionary tag matches, the entire
subtree beneath it is skipped.

One strong requirement for tag safe root is for the guarded object to
support weakref. Refer to more details in the Recursive dict tag
matching note. In short, we need to save the weakref of the object on
first invocation, and check if it is still valid in later iterations, to
apply recursive dict tag optimizations. `dict` objects do NOT support
weakref. Therefore, as of now, we only mark nn module related guard
managers as tag safe roots.

Algorithm
---------
The search runs in post-order traversal

1. Visit leaves and classify them as tag safe or not.
2. Propagate tag-safety upward: a parent dictionary becomes tag safe only if
all of its children are already tag-safe.
3. Propagate tag-safe-rootness upward: if the whole subtree is tag safe,
the current node becomes the new tag safe root, otherwise propagate the
subtree tag safe roots.
4. Collect every tag safe node and, by inspecting parent tags, label the
subset that are tag safe roots.
c                   ^ U R                  5       nU R                  5       n[        U4S j[        X#5       5       5      $ )Nc              3  n   >#    U  H*  u  p[        UT5      =(       a    UR                  5       v   M,     g 7fr   )r  is_tag_safe).0accessormgraccepted_accessorss      r   	<genexpr>TGuardManagerWrapper.find_tag_safe_roots.<locals>.check_tag_safety.<locals>.<genexpr>  s1      %?MH 8%78NS__=NN%?s   25)get_accessorsr	  allzip)r   r#  	accessors
child_mgrss    `  r   check_tag_safetyAGuardManagerWrapper.find_tag_safe_roots.<locals>.check_tag_safety  s@     **,I002J %(%?  r   c                  > [        U R                  5       [        5      (       d   e/ nSn[        U R	                  5       R                  5       5       H/  u  nu  pEUb  T" U5        Uc  M  UR                  T" U5      5        M1     U R	                  5       R                  5        H9  u  pEU(       a  X$R                  5       -  nU(       d  M'  X%R                  5       -  nM;     U(       a  U R                  5         U$ NT)

issubclassget_type_of_guarded_valuedictr   r   r   extendvaluesr  mark_tag_safe)r   tag_safe_rootsis_subtree_tag_safer  r  r  r  s         r   r  CGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_dict_manager  s     d<<>EEEEN"& -3++-335-((w &'N&"))%.9- %)$?$?$A$H$H$J '+>+>+@@'7'+>+>+@@' %K #""$!!r   c                  > [        U [        5      (       a   e/ nU R                  5        H  nUR                  T" U5      5        M     U R	                  5       (       a|  [        U R                  5       [        R                  5      (       a<  U R                  5       (       a%  U R                  5       (       d  U R                  5         U$ U R                  5          U$ [        U R                  5       [        5      (       aT  U R                  5       nU R                  5       n[        S [        X45       5       5      nU(       a  U R                  5         U$ [        U R                  5       [        R                   R"                  5      (       a0  T" U [$        [&        45      nU(       a  U R                  5         U /$  U$ U R                  5       [(        R*                  [(        R,                  [.        [0        4;   a  [2        R4                  (       a  T" U [6        [8        [:        [<        [>        45      nU R                  5        H4  n[        U[>        5      (       d  M  UURA                  5       [B        ;   -  nM6     U(       a  U R                  5         U$ [        U R                  5       [(        RD                  5      (       aJ  T" U [>        45      nU[        S U R                  5        5       5      -  nU(       a  U R                  5         U$ [        U R                  5       [F        5      (       ad  U RI                  5       RK                  [B        5      (       a<  [2        R4                  (       a'  T" U [L        45      nU(       a  U R                  5         U$ [        U R                  5       [N        5      (       a*  T" U [P        [R        45      nU(       a  U R                  5         U$ )Nc              3  t   #    U  H.  u  p[        U[        5      =(       a    UR                  5       v   M0     g 7fr   )r  r   r  )r   r!  r"  s      r   r$  QGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager.<locals>.<genexpr>  s0      *)C x)ABXsGXX)Cs   68c              3  v   #    U  H/  n[        U[        5      =(       a    UR                  5       S :H  v   M1     g7f)cell_contentsN)r  r   get_attr_name)r   r!  s     r   r$  r:    s>      + %9 x)=> D ..0OCD$8s   79)*r  r   r	  r2  is_guarded_value_immutabler/  r0  torchTensorhas_no_accessorshas_object_aliasing_guardr4  r1  r&  r'  r(  nnModuler   r*   typesFunctionType
MethodTypestaticmethodclassmethodrQ   )assume_dunder_attributes_remain_unchangedr   r   r   r   r   r=  dunder_attrs_assumed_constantsCellTypetupler   endswithr(   typer)   r+   )	r   r5  r
  r)  r*  r6  r!  r+  r  s	          r   r  >GuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager  sg   !$(89999  N!446	%%eI&67 7 ..00 d<<>MM,,..t7U7U7W7W**,| "!y &&(x "!w D::<dCC ..0	!446
&) *),Y)C* '# '&&(f "!e D::<ehhooNN&668IJ'# '&&(  	 '\ "!M ..0&&$$ 	 DD '7),13,	'# !% 2 2 4H!(,@AA+$2248VV+ !5 '&&(J "!I D::<ennMM&6t>R=T&U##s + %)$6$6$8+ ( #
 '&&(6 "!3 499;UCCOO%../MNNDD '746'# '&&( "! D::<dCC&602FG'# '&&(!!r   c                X   > U c  / $ [        U [        5      (       a  T" U 5      $ T" U 5      $ r   r  r  s    r   r  6GuardManagerWrapper.find_tag_safe_roots.<locals>.visit:  s1    |	$ 011)$// &&r   N)r   r   r#  ztuple[type[GuardAccessor], ...]r   r   )r   r   r   list[GuardManager])r   r   r   rS  )r   r/  r0  r?  rC  rD  mark_tag_safe_root)r   r5  r   r+  r  r  r  s      @@@@r   r  'GuardManagerWrapper.find_tag_safe_rootsl  s    t		4S			"8l	" l	"\	' 	' tyy)"D$88:EHHOOLL'') #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_managerF  s=    #==d>U>UV ;;= r   c                J   ^ SU4S j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_fnV  s    &&(N::r   )r\  r   r   r   )r   clone_manager)r   r]  r^  s    ` r   rW  -GuardManagerWrapper.clone_with_chosen_sourcesS  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: )r   r   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SUR                  5        3-  nUSUR	                  5        SUR                  5        S3-  nU$ )Nz	: source=, z, type=z, tag_safe=())r   r   r   r0  r  is_tag_safe_root)r   guard_manageraccessor_strsourcetss         r   get_manager_line$GuardManagerWrapper.get_manager_linea  s     ))+##,,Of$$$A	w}>>@ABB	|M5578=;Y;Y;[:\\]^^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   r   indentrs  construct_manager_string)r   r"  bodyidxr  r  s         r   construct_dict_manager_string1GuardManagerWrapper.construct_dict_manager_stringm  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[        5      (       at  X0R                  ;  a=  U R                  R                  U5        UR                  U R                  U5      5        Md  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=)rv  get_leaf_guardsr  r&   r   r   
writelinesrh  r   r   r   rz  r(  r&  r	  r   rs  reprrw  )r   r"  rx  rd  r!  r
  s         r   rw  ,GuardManagerWrapper.construct_manager_string{  s*    [[],,.e_55$B$BB66::5A(<(<U(CD % 8 8 OOD$8$8$?@ /  #/00223= (+!!#S%;%;%=(# )))|HMMOCT5UV --i>(+ ]]s   EE55
Fc                   U R                  5          [        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)NrP    T)r   zTREE_GUARD_MANAGER:r'   get_epilogue_lambda_guards)r   r   r   r   rw  r   hasattrr  r~  rh  getvalue)r   rx  rd  s      r   __str__GuardManagerWrapper.__str__  s    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
C%%
C3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                d   ^ ^^^ [        5       mSS jmSUUU U4S j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                V  > U R                  5        Hu  n[        U[        5      (       a<  UT;  a4  TR                  R	                  T" U5      5        TR                  U5        MR  MT  TR                  R	                  T" U5      5        Mw     U R                  5        H  nT" U5        M     g r   )r}  r  r&   r   r2  r   r	  )r"  rd  r
  r  relational_guards_seenr   r  s      r   r  DGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.visit  s    ,,.e_55$::..~e/DE.2259 ; OO**>%+@A / !335	i  6r   )r  r$   r   	list[str])r"  r   r   r   )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   zOptional[RootGuardManager]r   r   )r   zGenerator[None, None, None])r   OrderedSet[str]r   r   )r]  r  r   r'   )rd  r$   r   r  )rn  r   ro  Optional[str]r   r   )r"  r   rx  r   r   r   )r"  r   rx  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  rW  rh  rs  rz  rw  r  r  r  r  r   r   r   r   r   r   	  s    @, 3 3/'b*+X*t>2-2	2 JN
)
9F
	
A#A+CA	A??'??	?@#"*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_numpyr    sH     
	/	/	1%/BJJ

3K%L%Luq!RS 
2	1	1s   AA00
A>c                     SS K n SS Kn U R                  R                  U R                  R                  /nSSKJn  UR                  U5        U Vs1 s H  n[        R                  " U5      iM     sn$ s  snf )Nr   )POLYFILLED_MODULES)
torch._dynamo.external_utilstorch._dynamo.polyfills_dynamoexternal_utils	polyfillstorch._dynamo.polyfills.loaderr  r2  inspectgetfile)r?  modsr  ms       r   uninteresting_filesr    sY    '"MM((%--*A*ABDA 	KK"#(,-1GOOA---s    A3Optional[dict[str, object]]_CLOSURE_VARSc                    [         c  0 S[        _S[        _S[        R                  R
                  _S[        _S[        _SS _S[        _S	[        _S
[        _S[        _SS _S[        _S[        _S[        R                  _S[         c  S O[         R                  _S[#        S5      _S[$        R&                  _[(        R*                  R,                  [(        R.                  [0        [(        R2                  [(        [4        S.Eq [         $ )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                ,    [         R                  X5      $ r   )r1  __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___namedtuple_fieldsc                    U R                   $ r   _fieldsr  s    r   r  r    s    aiir   #___get_torch_function_mode_stack_at___get_current_stream__math_isnan__numpy_isnaninf__load_module)utils_devicedevice___from_numpy___as_tensorr?  r  )r  r   r   collectionsOrderedDict__getitem__r   r   r   r   r   r   r   r   mathisnanr  float	importlibimport_moduler?  utils_devicer  r  _as_tensor_fullprecr  r   r   r   _get_closure_varsr    s8   

|
  7 7 C C
 I	

 |
  D
 $%7
 &';
 ()?
 "#3
 #$7
 23S
 $%7
 DJJ
 RZTRXX
  5<!
" Y44#
$ "KK//ll'!55/
2 r   c                N    [         R                  " U 5      R                  SS5      $ )N
r  )astunparsereplace)r   s    r   _ast_unparser    s    ;;t$$T2..r   c                   SnUb  UR                   (       aa  [        UR                   5       HG  nUR                  [        5       ;  d  M  S[	        USS9 3n[        U5      S:  a  S[	        U5       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   i   r   z  # <unknown>z<60)
user_stackreversedfilenamer  rM   r   stacksummary)r  rd  extrafsr  s        r   get_verbose_code_partr    s    Eu//0;;&9&;;"<#>"?@E5zD( #'|B'7&8 9 1 [[kk))+G7|a|GBK89:'_UG$$r   c                    [        U [        5      (       d  U /n U  Vs/ s H  n[        X15      PM     nnU(       a  U Vs/ s H
  oU SU S3PM     nnU$ s  snf s  snf )N (HINT: rl  )r  listr  )r   rd  recompile_hintr  r   rg  s         r   get_verbose_code_partsr  %  s~    
 j$'' \
 BLAKIi/   ;M
;M4fH^,A.;M 	 
 
s
   AAc                    U c  g [        U 5      (       d  U $ [        U [        R                  5      (       d   eU R                  R                  5       $ r   )rI   r  r?  SymIntr   maybe_as_int)dims    r   convert_int_to_concrete_valuesr  8  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  B  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(rk  z	, device=z, requires_grad=z, size=z	, stride=rl  )	r?  _C_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper  r   requires_gradr   )valuenamesizesstridespytypedispatch_keysdispatch_keyr
  device_indexr  	guard_strs              r   get_tensor_guard_code_partr  F  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   )r  r   r   )dctkeys     r   get_key_indexr  [  s     
 !#&'--c22r   c                    SU  SU S3$ )Nlist(dict.keys())[]r   )rp  r   s     r   get_key_index_sourcer  c  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).)	TypeErrorrO  )objs    r   raise_local_type_errorr'  g  s8    

S	{,se+<=
L	M
L	M r   c                    [        U [        R                  R                  5      =(       a(    [        R
                  =(       d    [        U 5      [        L $ r   )r  r?  rC  rD  rQ   inline_inbuilt_nn_modulesr   r   )r  s    r   $should_optimize_getattr_on_nn_moduler*  o  s=     eUXX__- (( 	De$(CCr   T)frozenc                  @    \ rS rSr% SrS\S'   SrS\S'   SrS\S'   S	rg)
NNModuleAttrAccessorInfoiy  Fr   present_in_generic_dictNr  l1_keyl2_keyr   )	r   r   r   r   r.  r   r/  r0  r   r   r   r   r-  r-  y  s'     %*T) !FM  !FM r   r-  GuardManagerTypec                   U R                   R                  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      (       dL  UR                  UUU R                  [        R                  S9R                  U R                  U SU< 3/S 5        UR!                  UU	UUS9$ )N[r  r   rp  example_valueguard_manager_enum == )baser  r  r   r^   r1  r  r  r  r   intr   get_key_managerr1  GUARD_MANAGERadd_equals_match_guardget_value_manager)
rp  base_guard_managerbase_example_valuer5  r6  base_source_namer   
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerrD    sA    {{''&,, 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Dd
 //#-	 0  r   c                    U R                   n[        U[        5      (       a  gU R                  5       (       a  gUR	                  5       =(       a    [        U[
        5      (       + $ NFT)originating_sourcer  rs   is_specialized_nn_moduleis_dict_keyrm   )rd  rp  s     r   match_on_id_for_tensorrJ    sP    %%F &+,,%%''F
6:(F$FFr   c                  *    \ rS rSr% S\S'   S\S'   Srg)GuardCodeListi  r  	code_listr;   rd  r   Nr   r   r   r   r   r   r   r   r   rL  rL    s    Lr   rL  c                      \ rS rSrSrSrSrg)r1  i  rP      r   N)r   r   r   r   r;  DICT_GUARD_MANAGERr   r   r   r   r1  r1    s    Mr   c                <    [        [        [        U 5      5      5      $ r   )r  r  r   )r   s    r   r   r     s    /5677r   c                  L   \ rS rSr   S=                       S>S jjr      S?S jrS@S jr\SAS j5       r                SBS jr	SCS jr
      SDS	 jrSES
 jrSFS jrSGS jrSHS jr  SI         SJS jjr SK     SLS jjrSMS jr        SNS jrSOS jr SK     SPS jjrSOS jrSOS jrSQS jrSRS jrSOS jrSOS jrSKSSS jjr SK     SSS jjrSKSTS jjrSOS jrSOS jr SOS jr!SOS  jr"SOS! jr#SOS" jr$SKSSS# jjr%SOS$ jr&SOS% jr'SOS& jr(SOS' jr)SOS( jr*SOS) jr+SOS* jr,SOS+ jr-SOS, jr.SOS- jr/SUS. jr0SOS/ jr1SOS0 jr2SOS1 jr3SOS2 jr4SOS3 jr5SOS4 jr6SOS5 jr7SOS6 jr8SOS7 jr9SOS8 jr:SOS9 jr;SKSTS: jjr<  SV         SWS; jjr=S<r>g)XGuardBuilderi  Nc                J   Xl         X l        X0l        X@l        XVS.U l        [
        R                  " 5       U l        U
=(       d    U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        0 U l        Xl        Xl        [9        5       U l        U R0                  R<                  c   eU R0                  R<                  R>                   H8  nU RA                  U5      nU R:                  RC                  [E        U5      5        M:     0 U l#        0 U l$        [9        5       U l%        / U l&        [N        RP                  =(       a    [S        S5      U l(        [U        5       U l+        g )	NLG__builtins__>_<._dot_!pytorch/compiler:guard_nn_modules),f_codeid_ref
source_reflookup_weakrefsscopeweakrefWeakKeyDictionarysrc_get_value_cacheruntime_global_scopebuiltins__dict__copyr?  packagepackage_importer_package_imported_modulesr   r  rn  argnamesr   shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managerguard_tree_valuessave_guardsguard_filter_fnr   key_order_guarded_dict_idsoutput_graphguard_on_key_ordergetr   idr   _cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codesrQ   guard_nn_modulesrE   rL   already_added_code_parts)r   r`  ra  rb  rc  local_scoper   rn  rs  ru  rh  rv  r  package_modulerp  dict_objs                   r   r   GuardBuilder.__init__  s    $.9D3X
%%' 	  %9$HL!%-%6%6%;%;%=

>" ]]++EEKKM
<<S)11#s;CCCQD/=JJ~&t,-JJt N +#%)+	
 46 46%EG.6F13&. +.%'$$11===++88KKFxx'H++//8= L BD @B#DGE+BD( & 7 7 !
O/=
 :D%r   c                T   U R                  U5      n[        U[        5      (       a  [        SUR                   35      eUR
                  R                  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   r3  r  r  rp  r5  r6  )
get_guard_managerr  r   NotImplementedErrorr  rG  r   rb   get_guard_manager_typedict_getitem_manager)	r   r5  rd  dict_mgrdict_sourcer  r  rC  r6  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 %]3C!&E,U-E-ESQL!%!<!<" ))%awa0##5	 *  4r   c                P   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      (       aA  U R                  XV5      nUR                  U[        SU SU S3U5      UR                  5        M  UR!                  U[        U SU< 3U5      UR                  5        M     g )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r4  z__check_obj_id(rk  rl  r7  )r  r  r   r  r  	enumerater   r  r:  r1  r;  r   ra  add_id_match_guardr  r  r<  )	r   r  rd  r  ry  r  rA  key_managerid_vals	            r   guard_on_dict_keys_and_order)GuardBuilder.guard_on_dict_keys_and_orderC  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*j\cW+EuM$$) <r   c                    [         R                  (       aD  [        R                  S:  a0  [        R                  S:  a  [        R
                  " S[        5        g U $ )N)      )r  r  rP   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)rQ   issue_3_13_0_warningsysversion_infowarningswarnRuntimeWarning)r5  s    r   '_get_generic_dict_manager_example_value4GuardBuilder._get_generic_dict_manager_example_valuel  sF     ''  G+  :-MM_ r   c           	     L                 SS j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(       aN  [        UR                  U5      nUR                  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b  Uc   e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/S 5        U R                  UUUUS9$ U R                  UUUUS9$ )Nr  r  r  r4  r7  r  )	r  r   r  r:  r1  r;  r<  r=  r  )r"  r  source_namer?  r5  r6  r   rA  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.JDQ ,,&"/'9	 -   //&"/'9	 0  r   FNT_parameters_buffers_modulesattrrp  r5  r6  	.__dict__rp  r5  r6  )r"  r  r  r?  r5  r6  )r"  r   r  r   r  r   r?  r   r5  r   r6  r1  r   r   )memberrj  r   r  getmror   updatekeysr-  r.  getattr_managerr/  r0  rV   r8  r  r  get_generic_dict_managerr  r1  r;  )r   rp  r>  r?  r5  r@  r  r6  r  	attr_namemod_dictall_class_attribute_namesr  accessor_infor/  r0  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~  s   6#	#	#	 #	 !$	#	
 #	 !1#	 #	J 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;	!*#+ )-(C(CIx(X%!,((,(C(C)% "-((,(C(C)% (:'R'R&"JJ8T#3#A#A (S ($ ),*#+&#8F %16K6WWW* .'/"*'<  Mr   c                x    UR                   nUS:X  a  g[        U R                  U5      5      nX0R                  ;   $ )Nr  F)r  r{  rz  rw  )r   rp  r  obj_ids       r   requires_key_order_guarding(GuardBuilder.requires_key_order_guarding  s8    kk"DHHV$%8888r   c                H   [         R                  nU R                  U5      (       a{  [        U[        5      (       a  [         R
                  nU$ [        U[        [        45      (       a  [         R                  nU$ [        U[        5      (       d   e[         R
                  nU$ r   )	r1  r;  r  r  r   rQ  r   	frozensetr1  )r   rp  r5  r6  s       r   r  #GuardBuilder.get_guard_manager_type   s     .;;++F33-33%5%H%H" "! MC+;<< &6%C%C" "! "-6666%5%H%H"!!r   c                (    U[         R                  :H  $ r   )r1  rQ  )r   mgr_enums     r   manager_guards_on_keys#GuardBuilder.manager_guards_on_keys6  s    +>>>>r   c                    U R                   R                  R                  U R                  SU R                  S   [
        R                  S9$ )NrX  )	f_globalsrp  r5  r6  )rn  r   globals_dict_managerrh  rd  r1  r;  r   s    r   get_global_guard_manager%GuardBuilder.get_global_guard_manager9  sF    !!&&;;//**S//==	 < 
 	
r   c           	     <  ^ U R                   R                  nS nTR                  nUS:w  a  X@R                  ;   a  U R                  U   $ US:w  a(  U R	                  T5      nX0R
                  [        U5      '   U R                  TU5      nS nS nS n[        R                  n	[        T[        5      (       ah  TR                  R                  nU R	                  TR                  5      nU R                  TR                  5      nU R                  TR                  U5      n	[        T[        5      (       a@  [!        U R"                  TR$                  5      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
OQ[        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[<        5      (       a  U(       d   eUR?                  UUUS9nG	O[        T[@        5      (       a  U(       d   eURC                  UUUS9nG	OO[        T[D        [F        [H        [J        [L        45      (       a  U(       d   eUnG	O[        T[N        5      (       a  URQ                  S UUUS9nGO[        T[R        5      (       a  URQ                  S UUUS9nGO[        T[T        5      (       a  URQ                  U4S jUUUS9nGO[        T[V        5      (       a  URQ                  U4S	 jUUUS9nGOj[        T[X        5      (       a  U(       d   eUR[                  UUUS9nGO9[        T[\        5      (       a'  U(       d   eUR_                  TR`                  UUUS
9nGO[        T[b        [d        45      (       ap  U(       d   e[        T[b        5      (       d   e[g        U5      (       a"  U(       d   eU Ri                  TUUUUUU5      nGOURk                  TR`                  UUUS
9nGOr[        T[l        [n        45      (       a  U(       d   e[        U[p        [r        Rt                  45      (       d   e[        T[l        [n        45      (       d   e[        U[v        5      (       a)  U Ry                  U	5      (       d   e[{        TUUUU5      nGO[        TR|                  [~        5      (       a  [        S5      eUR-                  TR|                  UUUS9nGO[        T[        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[p        [r        Rt                  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(       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[v        5      (       a   eUR-                  TR                  UUUS9nGO[        T[        5      (       a!  U(       d   eURQ                  [        UUUS9nGOp[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO=[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO
[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGOq[        T[        5      (       a  U(       d   eURQ                  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[~        5      (       a>  [        U[v        5      (       d  [        S5      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Os[        T[        5      (       a  U(       d   eUR                  UUUS9nGOB[        T[        5      (       a  U(       d   eUR                  UUUS9nGO[        T[        5      (       a  U(       d   eURQ                  S UUUS9nO[        T[        5      (       a  U(       d   eURQ                  S 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OM[        T[        5      (       a  U(       d   eURQ                  S UUUS9nO[        ST STR                   35      eXR                  TR                  '   U$ )Nr  r  )global_namerp  r5  r6  r  c                    [         $ r   )r?  r[  s    r   r  <GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    r   )python_lambdarp  r5  r6  c                    [         $ r   )r  r  s    r   r  r    s    r   c                6   > [        TR                  5       5      $ r   )r   
_get_indexr[  rp  s    r   r  r    s    (H%%')r   c                .   > [        TR                  5      $ r   )r   r  r  s    r   r  r    s    (:6==(Ir   r  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_ordertensor_property__manager)ry  rp  r5  r6  zUse DictGetItemSourcez.__kwdefaults__c                (    U R                  5       S   $ r   __tensor_flatten__r  s    r   r  r  _  s    (<(<(>q(Ar   c                "    U R                  5       $ r   )__obj_flatten__r  s    r   r  r  g  s    (9(9(;r   c                >    U R                  5       R                  5       $ r   )_typequalified_namer  s    r   r  r  o  s    	(@(@(Br   c                "    U R                  5       $ r   )get_baser  s    r   r  r  w  s
    

r   c                "    U R                  5       $ r   )itemr  s    r   r  r    s
    r   c                .    [         R                  " U 5      $ r   )r?  r  r  s    r   r  r    s    (A(A!(Dr   r4  z4ConstDictKeySource can only work on DictGuardManagerc                    [        U 5      $ r   )r   r  s    r   r  r    s
    (8(;r   c                    U R                   $ r   r  r  s    r   r  r    s    		r   c                    [        U 5      $ r   )r9  r  s    r   r  r    s    Ar   zmissing guard manager builder z - )rrn  r   r  r|  rz  rt  r{  r  r1  r;  r  rY   r8  get_guard_manager_from_sourcer   ro   r   r`  
local_nameframelocals_managerrj   r  r  r  rl   global_weakref_managerrk   rv   r}   type_managerr{   type_dict_managerr|   type_mro_managerrt   rq   r   r~   rg   ry   lambda_managerr\   rx   r_   rm   grad_managerrh   generic_getattr_managerr  rV   r   r*  r  r  rb   rc   r1  r  r  r   r  rD  r   r^   RuntimeErrorr5   getattrproplowerry  r.   indexed_managerrn   list_getitem_managerri   r  index_is_slicerM  tuple_getitem_managerunpack_slicegetitem_managerra   callableis_kwfunc_defaults_managerr   idx_keyr   func_kwdefaults_managerrs   r  rw   re   ru   rU   rX   rf   rz   tuple_iterator_getitem_managerAssertionErrorr:  rr   set_getitem_managerr   weakref_call_managerrW   call_function_no_args_managerr`   rp   r[   code_managerrZ   closure_managerrd   )r   rp  root_guard_managerr5  r  r6  r@  r?  r>  base_guard_manager_enumr   outr   
kwdefaults	kw_sourcer  s    `              r   r  *GuardBuilder.get_guard_manager_from_sourceA  s   !//44kk"0K0K!K..{;;" HHV,M8E""2m#45!88O  !!"2"@"@fm,,%{{//!%&++!6!%!C!CFKK!P&*&A&A/'#
 &+&&1$++v?P?PQO$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
 FN++%%%$66"+#5 7 C
 FM**%%%$55"+#5 6 C
 +2"	
 	
 &%%$CFK(($33-"+#5	 4 C F-..$333"+#5	 4 C F899$33 #+#5 4 C F/00$33I"+#5	 4 C FJ''%%%$11"+#5 2 C
 F-..%%%$<<]]"+#5	 = C FZ)GHII%%%fj111134FGG'''//&&!$& )88&"/'9	 9  F.0IJKK%%%049P9P2QRRRRf'8:S&TUUUU,.>??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;<<%%%$88ll"+#5	 9 C F-..%%%$99"+#5 : C
 F455%%%$BB"+#5 C C
 F122%%%$33;"+#5	 4 C F233%%%$331"+#5	 4 C FJ''%%%$11"+#5 2 C
 FM**%%%$44"+#5 5 C
 F/00%%%$33."+#5	 4 C !0FKK=I  47##FKK0
r   c                8    U R                  UR                  5      $ r   )r  rG  r   rd  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                  U
US 5        g U R                  R                  R                  XS 5        g )Nrk  rX  zPython shape guard function:
%s___make_guard_fn)r  joinr  build_guard_functionrd  
guards_logdebugexecr3  rn  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4XSWXr   c                    [        U[        5      (       a  UnOUR                  nUc
  [        5       nUR	                  U R
                  X R                  5      nU$ r   )r  r?   rG  r  	get_valuerd  rg  )r   guard_or_sourcer   srcrets        r   rz  GuardBuilder.get  sN    
 ov..!C!44C,.LmmDJJ6N6NO
r   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$ )NrP  zinvalid var name: %s)r  r   r  strip_function_callro  r?  r  r  is_valid_var_namelogwarningr  )r   rd  r  r8  is_valids        r   arg_refGuardBuilder.arg_ref  s{    eS!!D::D"4(}}$xx''99$?Hq=KK 6>$$T*r   c                    US:X  a  [        UR                  5      nO[        UR                  U5      n[        XCUR                  UR
                  S9nUR                  U 5        g )Nr   )r  r  )r[   rG  rV   r;   r  r  create)r   rd  r  r'  attr_source	new_guards         r   _guard_on_attribute GuardBuilder._guard_on_attribute.  sY     
"$U%=%=>K$U%=%=yIKAQAQ
	 	r   c           	        UR                   n[        U[        5      (       a  UR                  n[        U[        5      (       a  g [        U[
        5      (       d   SUR                   35       eUR                  nUR                  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XR                  ;   a  g U R                  X/U R                  U5      S9  U R                  U5      n	U(       a  U R                  U5      n
U R                  U5      nU R                  X*5      n[        U5      (       a"  U R!                  UU	UU
UUR                  U5        OCU	R#                  UUR                  U
US9  O&U	R%                  U['        X5      UR(                  5        U R                  R+                  U5        g )Nzinvalid source hasattr(rk  rl  znot hasattr()provided_guarded_objectr  )rG  r  rq   r8  r[   rV   r  r  r6  r  rz  r  _set_guard_export_infor  r  r*  r  r  add_no_hasattr_guardr  r  r   )r   rd  rp  base_sourcer8  r  refvalr   base_managerr5  r?  r6  s                r   HASATTRGuardBuilder.HASATTR?  s   ))fn--[[Ffj))&*--M/MM-kk}}ll4 dhh{+T2cU"THA.D!#b2D000##6488K3H 	$ 	
 99+F !HHV,M!%+!6!%!<!<V!S 44FGG)) &!KK& ,, ::"/'9	 -  --,T95;K;K 	%%))$/r   c                   Uc   eU R                  U5      nU R                  U5      nU R                  U5      nSU< SU S3nX`R                  ;   a  g UR                   S3nUR                  UU R                  UR                  5      [        R                  S9nUR                  SU[        Xa5      UR                  5        U R                  R                  U5        g )Nznot ___dict_contains(rk  z
.__dict__)r  r  F)r6  rz  r  r  r  r  r  rj  r1  r;  add_dict_contains_guardr  r  r   )	r   rd  r  rD  rE  rF  r   r  r  s	            r   NOT_PRESENT_IN_GENERIC_DICT(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT{  s     ll5!hhuo--e4&thbZ@000"ZZL	2#/#H#H"FFs||T/== $I $
  	!88"4/		
 	%%))$/r   c           	     <   U R                  U5      n[        U[        R                  R                  5      (       a  UR
                  (       a  UR
                  nO[        U5      nUR                  UR                  :w  a  SUl	        U R                  USUR                   S35      n[        U5      nSU R                  U5       SU SU 3nU R                  X/5        U R                  U5      R!                  U[#        XaSUR                   3S9UR$                  5        g )	NTtype(rl  z___check_type_id(rk  ), type=ztype )r  )rz  r  r?  _subclasses
FakeTensorr  rO  r   r   _unserializablera  r  r  r6  rA  r  add_type_match_guardr  r  )r   rd  r  rq  r  	type_reprr   s          r   
TYPE_MATCHGuardBuilder.TYPE_MATCH  s    eU..99::u||AUA>>QZZ' %)E!Q%

|1 56G	"4<<#6"7r&)U##E62u%::"eANN3C,D 	
r   c                   U R                  U5      nU R                  U5      n[        U R                  U5      5      nSU SU 3nU R                  X/5        U R	                  U5      R                  U[        XQ5      UR                  5        g )Nz___dict_version() == )r6  rz  r   rA  r  add_dict_version_guardr  r  )r   rd  rD  rE  versionr   s         r   DICT_VERSIONGuardBuilder.DICT_VERSION  s    ll5!hhuotxx/!#eG95##E62 	u%<<'4e6F6F	
r   c                D   U R                  U5      nU(       a  SOSnU SU< SU S3nX`R                  ;   a  g U R                  X/5        U R                  U5      R	                  U(       + U[        Xa5      UR                  5        U R                  R                  U5        g )Nnot r  z___dict_contains(rk  rl  )r6  r  rA  r  rJ  r  r  r   )r   rd  r  invertdict_ref	maybe_notr   s          r   DICT_CONTAINSGuardBuilder.DICT_CONTAINS  s    <<&$F"	-cWBxjB000##E62u%==J"4/		
 	%%))$/r   c                2   U R                  U5      nUnU(       + nSU SU< S3nXpR                  ;   a  g U R                  X/5        U R                  U5      R	                  UU[        Xq5      UR                  5        U R                  R                  U5        g )Nzset.__contains__(rk  rl  )r6  r  rA  r  add_set_contains_guardr  r  r   )r   rd  r  r_  set_refr  containsr   s           r   SET_CONTAINSGuardBuilder.SET_CONTAINS  s    ,,u%:"7)2dXQ7000##E62u%<<"4/		
 	%%))$/r   c                   U R                  U5      nU R                  U5      n[        U[        5      (       d   eU SU< 3/nU R	                  X5        U(       a5  U R                  U5      R                  [        XA5      UR                  5        g U R                  U5      R                  [        XA5      UR                  5        g )Nr7  )
r6  rz  r   r   rA  r  add_true_match_guardr  r  add_false_match_guardr   rd  rD  rE  r   s        r   
BOOL_MATCHGuardBuilder.BOOL_MATCH  s    ll5!hhuoc4    %tC7#$##E0""5)>>&t3U5E5E ""5)??&t3U5E5Er   c                    U R                  U5      nU R                  U5      nUb   eU S3/nU R                  X5        U R                  U5      R	                  [        XA5      UR                  5        g )Nz is None)r6  rz  rA  r  add_none_match_guardr  r  rm  s        r   
NONE_MATCHGuardBuilder.NONE_MATCH  sm    ll5!hhuo{{%x !##E0u%::"4/1A1A	
r   c                $    U R                  X5      $ r   )id_match_unchecked)r   rd  r  s      r   ID_MATCHGuardBuilder.ID_MATCH   s     &&u==r   c                J   [        UR                  [        5      (       a=  U R                  [	        UR                  R
                  [        R                  5      5      $ U R                  U5      nU R                  U5      nU R                  XAR                  5      n [        U5      nSU SU SU 3nU R                  X/SS9  U R!                  U5      R#                  U[%        XqU5      UR&                  5        [        UR                  [(        5      (       ad  [        U[*        R,                  R.                  5      (       a:  UR                  R0                  nU R3                  U5      n	U	b  XR4                  U'   g g g g ! [         a    S[        U5      R                   S3n Nf = f)Nr\  rZ  z___check_obj_id(rk  rO  rv  )provided_func_name)r  rG  r}   rU  r;   r8  rT  r6  rz  ra  r  r  	ExceptionrO  r   rA  r  r  r  r  ro   r?  rC  rD  r  rc  r   )
r   rd  r  rD  rE  r  rT  r   r  weak_ids
             r   ru  GuardBuilder.id_match_unchecked	  s{    e..
;;??e..33\5L5LM  ll5!hhuoS**-	2S	I
 "#bD##E6j#Qu%88"4?	
 e..<< #uxx//"55@@
..s3&7>((4 ' 0	 =  	2 DI../q1I	2s   E< <#F"!F"c                    U R                  U5      nU R                  U5      n[        U[        R                  5      (       d   eU S3nU R                  X/5        U R                  U5      R                  [        XQ5      UR                  5        g Nz is not None)
r6  rz  r  r?  r@  rA  r  add_not_none_guardr  r  )r   rd  r  rD  rE  r   s         r   NOT_NONE_MATCHGuardBuilder.NOT_NONE_MATCH0  sy    ll5!hhuo#u||,,,,l###E62u%88"4/1A1A	
r   c                   U R                  U5      nU R                  U5      n[        U[        R                  R
                  5      (       d   eU SU< S3nU R                  U5      R                  U[        XA5      UR                  5        g )Nz.raw_repr() == z.raw_repr())
r6  rz  r  r?  r  r   r  add_dispatch_key_set_guardr  r  )r   rd  rD  rE  r   s        r   DISPATCH_KEY_SET_MATCH#GuardBuilder.DISPATCH_KEY_SET_MATCH;  sy    ll5!hhuo#uxx667777uOC7+>
u%@@":5	
r   c                   U R                   R                  c   eU R                   R                  R                  nSU 3/nU R                  X5        U R                  R
                  R                  U[        X15      UR                  5        g )Nz,torch.autograd.forward_ad._current_level == )	rs  rx  
dual_levelrA  rn  r   add_dual_level_match_guardr  r  )r   rd  r  r   s       r   
DUAL_LEVELGuardBuilder.DUAL_LEVELG  s~     $$11===**77BB
>zlKL##E0::"4/	
r   c                  ^^ U R                   R                  c   e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SUU4S jjnU R                  R                  R                  U[        XA5      UR                  5        g s  snf )Nz5torch._functorch.pyfunctorch.compare_functorch_state(rl  c                   > T" T5      $ r   r   )r  
compare_fnstatess    r   fn.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn`  s    f%%r   r  )rs  rx  functorch_layers	get_staterA  r?  
_functorchpyfunctorchcompare_functorch_statern  r   r!  r  r  )r   rd  ciscir   r  r  r  s         @@r   FUNCTORCH_STACK_MATCH"GuardBuilder.FUNCTORCH_STACK_MATCHT  s     $$11===##00AA+./3R,,.3/GxqQR##E0 %%11II
	& 	& 	00&t3U5E5E	
 0s    Cc                  ^^^^ [         R                  R                  R                  R                  m[         R                  R                  R                  R
                  m    SU4S jjmT" T" 5       5      mST 3/nU R                  X5        SUUU4S jjnU R                  R                  R                  U[        X!5      UR                  5        g )Nc                R   > T" U 5      (       d  g [        [        [        U 5      5      $ r   )rM  mapr{  )hooksare_inline_hookss    r   hooks_ids_fn?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fnm  s$     $E**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>.fn|  s    "l9;&???r   )r  zCtuple[Callable[[torch.Tensor], Any], Callable[[Any], torch.Tensor]]r   zOptional[tuple[int, ...]]r  )r?  r  _aot_autogradr  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineablerA  rn  r   r!  r  r  )r   rd  r   r  r  r  r  r  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKS)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKSg  s    $$2288PP	**00SS 		)V	)&	) 'y{3 RRaQbc
 	##E0	@ 	@ 	00&t3U5E5E	
r   c                  ^^ U R                  U5      n[        U R                  U5      R                  5       S   5      m[        US5      (       a   [	        U5        [        U5      mSUU4S jjnOSU4S jjnS[        U5       S[        R                  " 5        3nU R                  U5      R                  U[        XA5      UR                  5        g )NrP   __metadata_guard__c                J   > TR                  TU R                  5       S   5      $ r   )r  r  )r  clsoriginal_metadatas    r   metadata_checkerEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s)    --%q';';'=a'@ r   c                0   > U R                  5       S   T:H  $ r   r  )r  r  s    r   r  r    s    ++-a04EEEr   ___check_metadata__cr  )rz  r   r  r  r   rO  r{  r8   current_compile_idr  r!  r  r  )r   rd  r  r  r  r  r  s        @@r   TENSOR_SUBCLASS_METADATA_MATCH+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH  s    $TXXe_%G%G%I!%LM5.//%e,u+C F +2.>+?*@>CdCdCfBghu%66";6	
r   c                   ^ [        U R                  U5      5      mSU4S jjnS[        U5       3nU R                  U5      R	                  U[        X15      UR                  5        g )Nc                $   > U R                  TSS9$ )NT)skip_shapes)_check_equals)r  r  s    r   r'  1GuardBuilder.DTENSOR_SPEC_MATCH.<locals>.guard_fn  s    ??5d?;;r   __dtensor_spec_r  )r   rz  r{  r  r!  r  r  )r   rd  r'  r   r  s       @r   DTENSOR_SPEC_MATCHGuardBuilder.DTENSOR_SPEC_MATCH  sZ     %)	< !H/u%66,T95;K;K	
r   c                2   U R                  U5      nU R                  U5      n[        (       a  [        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  4nOSn[        [        4n[!        ["        [$        [         [&        [(        [*        [,        [.        R0                  [.        R2                  [.        R4                  R6                  R2                  1	UkUk-  5      n[.        R8                  R;                  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  [U        XG5      (       dL  URV                  " [%        U5      5      (       d,  [Y        [%        U5      5      (       d   S[%        U5       35       e[[        U[\        5      (       ak  [^        R`                  " U5      (       aP  SU SU S	3/nU Rc                  X5        U Re                  U5      Rg                  [i        X5      URj                  5        g [[        U[l        5      (       ak  [        R`                  " U5      (       aP  SU S
U S	3/nU Rc                  X5        U Re                  U5      Ro                  [i        X5      URj                  5        g U SU< 3/n[[        XF5      (       a  [q        U5      n[i        X5      nU(       a  U Vs/ s H  nU SU S3PM     nnU Re                  U5      Rs                  UUURj                  5        U Rc                  X5        g s  snf )Nr   r   )
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z(type(z) is float and __math_isnan(z))z) is complex and __numpy_isnan(r7  r  rl  ):r6  rz  r  int8int16int32int64uint8uint16uint32uint64float16float32float64r  r   rM  r   rO  r  sliceranger   r?  SizeStreamcudastreamsdistributedis_availabletorch.distributed.device_meshr  (torch.distributed.tensor.placement_typesr  r  r  r  torch.export.dynamic_shapesr  torch.utils._pytreer  rK   r  is_constant_classrC   r   r  r  r  rA  r  add_float_is_nan_guardr  r  complexadd_complex_is_nan_guardr   r<  )r   rd  r  rD  rE  np_typesok_mutable_typesok_typesr  r  r  r  r  r  pytreer   r   rg  s                     r   EQUALS_MATCHGuardBuilder.EQUALS_MATCH  s   ll5!hhuo2						





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



""))  "
" ))++@   # H 	<n,,, s%%''S	22#DI..	* d3i[)		*/ #u$**S//SE!=cU"EFD''4""5)@@&t3    #wBHHSMMSE!@RHID''4""5)BB&t3    %tC7#$#(( 3-C3D@?Q"?Qt4& 02?Q  " 	u%<<#U%5%5	
 	##E0"s   Nc                "   U R                  U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   )	rz  r   r   rn  rr  rE  CodeTyperv  r  r   rd  rE  s      r   CONSTANT_MATCHGuardBuilder.CONSTANT_MATCH	  sd    hhuo#tOOE"[OOE"C((MM% e$r   c                `   U R                  US5        U R                  U5      n[        US5      (       aU  [        UR                  [
        5      (       d   eU R                  (       d"  U R                  US[        R                  5        g g [        R                  " SSS[        U5       S3S/S9  g )	Nz%[inline-inbuilt-nn-modules-candidate]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)rv  rz  r  r   r  r   r  r<  rT  r  rS   unimplementedrO  r  s      r   	NN_MODULEGuardBuilder.NN_MODULE"	  s    eDEhhuo3
###,,----((((
L<W<WX ) G''+Cyk5 `r   c                $    U R                  U5      $ )z0things like torch.add and user defined functions)rv  r  s     r   FUNCTION_MATCHGuardBuilder.FUNCTION_MATCH6	  s     }}U##r   c                    U R                  U5      n[        R                  " U5      (       d  [        UR                   S35      eU R                  U5        g)zNEquals ID_MATCH on classes - better readability than directly calling ID_MATCHz( is not a class, but CLASS_MATCH is usedN)rz  r  isclassr
  r  ru  r  s      r   CLASS_MATCHGuardBuilder.CLASS_MATCH;	  sJ    hhuos## ::,FG  	&r   c                    U R                  U5      n[        R                  " U5      (       d  [        UR                   S35      eU R                  U5        g)zNEquals ID_MATCH on modules - better readability than directly calling ID_MATCHz* is not a module, but MODULE_MATCH is usedN)rz  r  ismoduler
  r  ru  r  s      r   MODULE_MATCHGuardBuilder.MODULE_MATCHD	  sL    hhuo$$ ::,HI  	&r   c                (   U R                  U5      n[        U5      [        R                  L 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   N)
rz  rO  rE  rF  r  r<  rT  rG  r  r  r  s      r   CLOSURE_MATCHGuardBuilder.CLOSURE_MATCHM	  sm     hhuo9***wsJ/G/G$$UJ8L8LM$$UJ8S8ST&r   c                    U R                   (       aX  [        UR                  [        5      (       a9  U R                  R
                  R                  UR                  R                  5        U R                  U5      $ r   )	ru  r  rG  rb   rs  used_builtin_varsr   r   ru  r  s     r   BUILTIN_MATCHGuardBuilder.BUILTIN_MATCHX	  s[    %224EFF%%77;;,,22 &&u--r   c                f   U R                  U5      nU R                  U5      n[        U[        5      (       d  U R	                  U5        / n[        U5      S:X  a  UR                  SU 35        O UR                  SU S[        U5       35        U R                  X5        [        U[        5      (       a?  U R                  U5      R                  [        U5      [        XA5      UR                  5        g U R                  U5      R                  [        U5      [        XA5      UR                  5        g )Nr   r^  zlen(rX  )r6  rz  r  r1  rU  r   r  rA  r  add_dict_length_check_guardr  r  add_length_check_guardr   rd  rD  r  r   s        r   SEQUENCE_LENGTHGuardBuilder.SEQUENCE_LENGTHa	  s     ll5!%&&OOE"u:?KK$se%KK$se5U56##E0eT""""5)EEE
&t3   ""5)@@E
&t3  r   c                   U R                  U5      nU R                  U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      UR                  5        g )Nz___tuple_iterator_len(rX  rN  rl  )r6  rz  rO  r  r   rA  ra  r  r  add_tuple_iterator_length_guardr  r  )r   rd  rD  r  rq  r   r  s          r   TUPLE_ITERATOR_LENGuardBuilder.TUPLE_ITERATOR_LEN	  s    ll5!K,SE7I%7P6QRS##E0KQ%

|1 56u%EEu%"4/		
r   c           
        U R                  U5      nU R                  U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                  UU	U
U[        XQ5      UR                  5        g )Nz___normalize_range_iter(rX  rN  rl  )r6  rz  rO  r   r  rA  ra  r  r  add_range_iterator_match_guardr  r  )r   rd  rD  r  rq  r   normalized_range_iterr  startstopsteps              r   RANGE_ITERATOR_MATCH!GuardBuilder.RANGE_ITERATOR_MATCH	  s    ll5!K 4U ;.se59N8OPQ##E0KQ%

|1 561Tu%DD"4/	
r   c                   [        UR                  5      (       d  [        U5      (       a  g U R                  (       an  [        U5      =n(       a%  U R                  R
                  R                  U5        [        U5      =n(       a%  U R                  R                  R                  U5        U R                  U5      nU R                  UR                  5      n[        UR                  5      (       d  [        U5      (       a  g XE4nX`R                  ;   a  g U R                  R                  XE45        U R                  R                  XT45        U SU 3/nU R                  X5        [        R                  (       a0  US   n[!        X5      S   n	U R"                  R%                  X45        g ['        U R)                  U5      U R+                  U5      [!        Xq5      UR,                  5        g )N is r   )r2   rG  ru  r-   rs  additional_used_local_varsr   r,   additional_used_global_varsr6  r  r1   r}  rA  rQ   #use_lamba_guard_for_object_aliasingr  r~  r  r!   r  r  r  )
r   rd  source_br  ref_aref_br  r   r  r  s
             r   DUPLICATE_INPUTGuardBuilder.DUPLICATE_INPUT	  s   $$$
 
&x00,X66t6%%@@DDTJ-h77t7%%AAEEdKU#X]]+#$$
 
%h// n555++//?++//?'eW%&##E055 QI 6y H K,,33Y4RS)&&u-228<&t3  	r   c                    U R                  U5       S3/nU R                  X5        U R                  U5      R                  [	        X!5      UR
                  5        g r~  )r6  rA  r  r  r  r  r   rd  r   s      r   WEAKREF_ALIVEGuardBuilder.WEAKREF_ALIVE	  sR    <<&'|45##E0u%88"4/1A1A	
r   c           	         U R                  U5      nU R                  U5      n/ nUR                  SU S[        UR	                  5       5       35        U R                  X5        U R                  U5      R                  X4UR                  5        g)z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	r6  rz  r  r  r  rA  r  add_mapping_keys_guardr  r
  s        r   MAPPING_KEYS_CHECKGuardBuilder.MAPPING_KEYS_CHECK	  sy    ll5!eC5T%**,-?,@AB##E0u%<<))	
r   c           
        U R                  U5      nU R                  U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)) == )r6  rz  r?  r  rK   SUPPORTED_NODESr[  r  r  r  r   rA  r  rG  r  r  r
  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)rQ   skip_nnmodule_hook_guardsr  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
  r6  r   c                    g r   r   r  s     r   FSDP_TRAINING_STATE GuardBuilder.FSDP_TRAINING_STATE
  r6  r   c                "   U R                   R                  nUc   eUR                  nX0R                   l        SU R                   R                  R	                  5        3/nU R
                  R                  R                  X4UR                  5        g )Nz ___check_global_state() against )	rs  rx  global_state_guardglobal_state__getstate__rn  r   add_global_state_guardr  )r   rd  rx  r?  r   s        r   GLOBAL_STATEGuardBuilder.GLOBAL_STATE
  s    ,,99'''#66-9* /t/D/D/Q/Q/^/^/`.ab
 	66 0 0	
r   c                   U R                   R                  c   e[        U R                   R                  5      U R                   l        U R                  R
                  R                  U R                   R                  S/UR                  5        g )Nz$___check_torch_function_mode_stack())rs  torch_function_mode_stack$make_torch_function_mode_stack_guard"torch_function_mode_stack_check_fnrn  r   #add_torch_function_mode_stack_guardr  r  s     r   TORCH_FUNCTION_STATE!GuardBuilder.TORCH_FUNCTION_STATE#
  sy    $$>>JJJ0%%?? 	@
 	CC!!;;34	
r   c                H   UR                   [        R                  L d   eU R                  R                  c   eSU R                  R                  R
                  < 3/nU R                  X5        U R                  U5      R                  [        X!5      UR                  5        g)z/Guard on CURRENT_DEVICE per torch.utils._deviceNzutils_device.CURRENT_DEVICE == )rp  r>   GLOBALrs  rx  current_devicerA  r  add_default_device_guardr  r  r$  s      r   DEFAULT_DEVICEGuardBuilder.DEFAULT_DEVICE0
  s    ||{11111$$11===-d.C.C.P.P._._-bc
 	##E0u%>>"4/1A1A	
r   c                  ^ ^%^&^'^( SSK Jn  UR                  S:X  d   eT R                  R                  m(T(c   eT R                  R
                  bU  T R                  R
                  nUR                  nUR                  nUR                  b  UR                  nUR                  nGO[        T(U5      (       d   eT(R                  c   eT(R                  R                  =(       d    / m&T& Vs/ s H  oR                  PM     snm'SU(4S j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     [1        UU[3        UR5                  5       5      USS9m%OS m%SU%U&U'U(U 4S jjn[6        R8                  (       a   U" S	5      u  pEnSnOS
nU" S5      u  pET(R&                  (       d  T(R                  R=                  5         T R>                  (       aw  [A        5       RC                  S5      nUb  [        U[D        5      (       d   eUc  / O"[3        URF                  RI                  5       5      n[K        UUUUUS9T R                  l        URL                   H  nT RO                  UU/5        M     [P        RR                  " 5       =n(       a%  URT                  RW                  URL                  5        / n/ nU(       d  W(       d   eURL                  URF                  nnU(       d  g URY                  5        H  u  nn[        U[Z        5      (       a  S
nM  T RC                  U0 [\        E[_        5       ES9n[        U[`        5      (       a  URc                  UU45        Mi  [        U[d        5      (       a  URc                  UU45        M  S
nM     U(       Gd  SS K3nSSK4J5n  W(       d   eURL                  URF                  nn[m        UU-   5      n [o        U5       VVs/ s H!  u  nnT Rq                  [s        UU5      5      PM#     nnnSRu                  S [o        U5       5       5      n SRu                  S [o        U5       5       5      n!U (       a  SU  S3n U!(       a  SU! S3n![v        Rx                  " SU  SU! SSRu                  U5       S35      n"[z        R}                  SU"URL                  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RL                  UR                  5        g URL                  (       a6  T R                  URL                  URL                  0 [\        E[_        5       ES9  g g s  snf ! [:         a    S
nU" S5      u  pE GNf = fs  snnf ! [$        R                  R                  R                   a     Nf = f)Nr   r   r  c                   > TR                   U     Vs/ s H  n[        U[        R                  U5      PM      sn$ s  snf r   )tracked_fakes_id_to_sourcer5   r4   SIZE)t_idr  rp  rx  s      r   get_sources+GuardBuilder.SHAPE_ENV.<locals>.get_sourcesU
  sG     #/"I"I$"O #P )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
                  (       + U S9$ s  snf s  snf )N)input_contextsequalities_inputsrb  ignore_staticlangs)	shape_envproduce_guards_verbosefakerp  rb  export)rb  r  r`  r  r_  rx  r   s     r   _get_code_parts/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts~
  sn    #--DD%'(RVVR(')*r!XXr*#1&7# (4':':#: E 
 
(*s
   A.A3
)pythonverbose_pythoncppT)ri  rj  cpp_code_parts)python_code_partsr   rl  python_fallbackshape_env_sources)r   )CppCodeCacherk  c              3  <   #    U  H  u  nu  p#U S U S3v   M     g7f)z = int_values[r  Nr   r   ir[  symbols       r   r$  )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   rr  s       r   r$  ru  
  s+      .*K;A h.qc3*Krv  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)rV  r9  r  r9  r   list[Source])rb  tuple[str, ...]r   zlist[_ShapeGuardsHelper])Ktorch._dynamo.output_graphr   r  rs  rx  shape_code_partsrm  r   rl  rn  r  rc  tracked_fakessymbolic_contextexport_constraintsr   rV  rT  r?  rf  dynamic_shapes_process_equalitiesr3  r4  rH   r  r3  rQ    enable_cpp_symbolic_shape_guardsOverflowErrorfreezeru  localsrz  rF   source_to_symbolr  ShapeCodePartsexprsrA  r8   try_getshape_env_guardsr2  r   r]   rJ   r  r9  r  r  ctypestorch._inductor.codecacherp  r1  r  r  r.   r  textwrapdedentr  r  loadcastrd  c_void_pr  r#   r   r  	_inductorrS   InvalidCxxCompilerr(  ))r   rd  r   r|  rm  r   rl  rn  r  rW  namesrY  rZ  r[  r\  
constraintrg  maybe_cpp_code_partsmaybe_shape_env_sourcesr   compile_contextint_source_to_symbolfloat_source_to_symbolr   r  rp  rt  r5  r  rp  rs  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardr`  r  r_  rx  s)   `                                    @@@@r   	SHAPE_ENVGuardBuilder.SHAPE_ENV>
  sB   @zzR,,99'''  11=#44EE 0 B B!1!D!D..:!1!@!@.>>O l,=>>>>))555''55;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!  &&&&--/ $*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  #y >@ % &*O<K4=9%'9v"^ ??&&99 s=   *W74W< X (X=C9X <XXX (Y
	Y
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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      (       am  [)        5       nUR+                  5       (       aN  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                  c   eU R4                  R6                  R8                  (       a  U R;                  U5        / SQnU H  n	[=        UR>                  U	5      n
U	S:X  a  Sn	[A        U
5      n
U R                  U
5      n[C        U[        RD                  [        RF                  45      (       a&  URI                  SU S	U	 S
[K        U5      < 35        M  URI                  U S	U	 SU 35        M     GOU RM                  U5      n[         RN                  (       aC  [C        U[        R$                  R&                  5      (       do  [Q        UR>                  5      (       dU  [        UR>                  [R        5      (       d6  U RT                  RI                  U5        U RV                  RI                  U5        U R4                  R6                  nURX                  UR>                     n[[        US   5      n[[        US   5      n[]        [_        UUUUUU5      U5      nUR`                  nURc                  UUUUUUUU5        [        U[        R$                  R&                  5      (       d/  U Rd                  Rf                  Ri                  URj                  5        URl                  c   e[o        USUR>                  S9u  nnU(       d  [q        US5      (       a`  URr                  nSU SU SU S3nURI                  U5        U RM                  U5      Ru                  U[]        UU5      UR`                  5        OMSU S3nURI                  U5        U RM                  U5      Rw                  S[]        UU5      UR`                  5        [y        U5      S:  a  U R{                  X5        g g )Nparam_numelparam_bytesparam_countrP   )r
  r  r  
ndimensionr  zndimension()zstr(r]  rX  r7  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   )>rQ   _unsafe_skip_fsdp_module_guardsis_fsdp_modulerJ  rv  r  rO   rz  rO  r?  r  _dispatch_keysrP  rQ  r  r  r@  log_compilation_metricsrC  	Parameterr7   in_progress	incrementnumelnbytesr6  rs  rx  rf  rU  rV   rG  rW   r   r  r
  r  r   r  ,skip_no_tensor_aliasing_guards_on_parametersr3   rs   rq  rr  input_source_to_sizes_stridesr  r  r  r  add_tensor_match_guardrn  r   r   r  rp  r   r  r  add_dynamic_indices_guardrB  r   rA  )r   rd  r  r  r  metrics_contexttensor_namer   termstermterm_src
real_valuern  rx  metadatar  r  r   r  static_reasondynamic_indicesr  s                          r   TENSOR_MATCHGuardBuilder.TENSOR_MATCH6  s   11e6J6J6L6L "%((MM% %//".EDHHUOE%[F!HH33E:M%!2!2!=!=>><<+"\\F&&2$)$7$7MeU\\2222--*UEHHDVDV2W2W"5"7"..00#--mU[[]K#--mU\\J#--mQ?,,u-K, !D((55AAA$$1188& "D)%*B*BDIH|+-#;H#E!%(!3Jj5<<*EFFd;-qeC
OCV$WX{m1TF$zl$KL " !% 6 6u = GGuehh&8&899I!44  %U%=%=?PQQ 1188E::AA-P#44AA'EE,, 2(62BC3HX4FG%;.#% 
&" #--
44&!	 "%););<<&&99==ejjI< <<+++<U5M5MOFG 5";<<&+&C&CO"$[M1STcSddrs~r  @g  !hIKK	***51KK'.y%@(( #;-/TU  KK	***51FF1.y%@((
 4y1}++E8 r   c                n   [        5       nUc   eUR                  nAUc   eU=(       d    UR                  R                  nAXpR                  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(       aJ  [        U	[        R                  [        [        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   rj  r  rz  re  rD  rO  r  r  enumEnumrM  
ProxyTypesset_export_info)r   rd  rM  r@  ry  	cur_framecaller	func_namer  guarded_objectguarded_object_typeobj_refsupports_weakrefs                r   rA  #GuardBuilder._set_guard_export_info  s0    !N	$$$!!!!!&?&--*?*?	NN333 	
VW`Vab	
3
 #*::D)-T488E?N4N 2@1KGKK^,-QU 	  N,,.A1EJ 	 JTYYw/A/AB%
 %
 kk.1G		
r   )r}  r|  r  ro  rs  r   r`  rv  rn  r  rt  r   ra  rw  rc  rr  rq  r~  rh  ru  rd  rp  rb  rg  )FNN)r`  types.CodeTypera  zCallable[[object, str], int]rb  zCallable[[Source], str]rc  z1Callable[[object], Optional[weakref.ref[object]]]r  dict[str, object]r   r  rn  r   rs  CheckFunctionManagerru  r   rh  r  rv  =Callable[[Sequence[GuardFilterEntry]], Sequence[bool]] | Noner   r   )r5  dict[Any, Any]rd  r;   r   r   )r  r  rd  r;   r   r   )r5  r   r   Optional[Any])rp  rV   r>  r   r?  r   r5  r   r@  r   r  r   r6  r1  r   r   )rp  r?   r   r   )rp  r?   r5  zHOptional[Union[KeysView[Any], set[Any], frozenset[Any], dict[Any, Any]]]r   r1  )r  r1  r   r   )r   r   )rp  r?   r   r   )rd  r;   r   r   r.  )
r   r  r   r  r   r  r"  r   r   r   r   )r,  zGuard | Sourcer   Optional[dict[str, Any]]r   r   )rd  zUnion[str, Guard]r   r   )rd  r;   r  r   r'  z(Callable[[GuardBuilderBase, Guard], Any]r   r   )rd  r;   r   r   )rd  r;   r  r  r   r   )rd  r;   r  r   r_  r   r   r   )rd  r;   r  r   r_  r   r   r   )rd  r;   r  r  r   r   )rd  r;   r  r  r   r   )rd  r;   r  r?   r   r   )NN)
rd  r;   rM  r  r@  r  ry  r  r   r   )?r   r   r   r   r   r  r  rH  r  r  r  r  r  r  r  r  r(  rz  r6  r<  rG  rK  rU  r[  rb  rh  rn  rr  rv  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r)  r-  r1  r4  r8  r;  rB  rI  rO  r  r  rA  r   r   r   r   rT  rT    sc    "<@NFNF -NF ,	NF
 KNF 'NF (NF +NF /NF NF :NFNF 
NF`+49	<'R  "YY )Y  	Y
 Y Y Y -Y 
Yv9""
" 
",?
`DL 59 YY &Y 2	Y
 Y 
YP 26' / 
	&   ;	
 
":0z 3700"/0	08
4
0"0&"

> =A%?%?,9%?	%?N	




&
8
0
m^	%($
''	'.<
&
0,\


C2$


vp@9N 26,01
1
 1
 "/	1

 *1
 
1
 1
r   rT  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>  rP   c                  *    \ rS rSr% S\S'   S\S'   Srg)PyExprCSEPass.ConfigiF  zdict[str, int]
expr_countzdict[str, str]expr_to_namer   NrN  r   r   r   Configr  F  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.ExprCounteriK  c                    Xl         g r   _config)r   rQ   s     r   r   "PyExprCSEPass.ExprCounter.__init__L  s    !Lr   c                   > [        U[        R                  5      (       a*  U R                  R                  [        U5      ==   S-  ss'   [        TU ]  U5        g r   )r  r  ALLOWED_NODE_TYPESr  r  r  r   r  )r   r   r   s     r   r  PyExprCSEPass.ExprCounter.visitO  sA    $ @ @AA''T(:;q@;GM$r   r  )rQ   r  r   r   )r   ast.ASTr   r   r   r   r   r   r   r  r   r   r   s   @r   ExprCounterr  K  s    	"	  	 r   r  c                  H   ^  \ rS rSr      SU 4S jjrSU 4S jjrSrU =r$ )PyExprCSEPass.ReplaceriT  c                H   > [         TU ]  5         Xl        X l        / U l        g r   )r   r   r  	_gen_namepreface)r   rQ   gen_namer   s      r   r   PyExprCSEPass.Replacer.__init__U  s!    
 G!L%N&(DLr   c                J  > [        U[        R                  5      (       a  [        U5      nU R                  R
                  U   [        R                  :  a  X R                  R                  ;  ac  [        TU ]%  U5      n[        U5      nU R                  5       nU R                  R                  U SU 35        XPR                  R                  U'   OU R                  R                  U   n[        R                  " U[        R                  " 5       5      $ [        TU ]%  U5      $ )Nz = )r  r  r  r  r  r  USE_THRESHOLDr  r   r  r  r  r  r  NameLoad)r   r   exprnode_expr_r   r   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   )r  r  r  )rQ   r  r  zCallable[[], str]r   r   )r   r  r   r   r  r   s   @r   Replacerr  T  s.    	)(	) (	) 		)	' 	'r   r  c                f    SU l         U R                  [        R                  " S 5      0 S9U l        g )Nr   c                     gr   r   r   r   r   r  (PyExprCSEPass.__init__.<locals>.<lambda>|  s    qr   )r  r  )_counterr  r  defaultdictr  r   s    r   r   PyExprCSEPass.__init__y  s.    {{"..y9 # 
r   c                P    U U R                    3nU =R                   S-  sl         U$ r   )r  )r   r   r  s      r   _new_varPyExprCSEPass._new_var  s'    $--)r   c                    U R                  U R                  5      nU H)  n UR                  [        R                  " U5      5        M+     g ! [
         a'  n[        R                  SUR                  U5        e S nAff = f)Nz#Failed to visit expr at line %s.
%s)	r  r  r  r  parseSyntaxErrorr3  	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   )r  r  r  r  r  r
  r  r  )r   r  replacernew_nodes       r   r  PyExprCSEPass.replace  sF    ==t}}=>>#))D/2h!777r   )r  r  Nr  )_var)r   r   r   r   )r  r  r   r   r  r   r   ztuple[list[str], str])r   r   r   r   r  r  	AttributeCall	Subscriptr  dataclasses	dataclassr  NodeVisitorr  NodeTransformerr  r   r  r  r  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  rG  ra   rQ    guard_nn_modules_using_dict_tags	create_fnrT  r  )rd  s    r   must_add_nn_module_guardsr#    s@    
 	5++^< 	
 33 :<#9#99r   c                  6   ^  \ rS rSrSU 4S jjrSS j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   r'  )r(  r   r   r   r  )r   r   r   r   r   r  r   r   r   s   @r   r%  r%    s    *$ $r   r%  c                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   Srg)r  i  rG   rm  r   zOptional[_CppShapeGuardsHelper]rl  r   rn  ry  ro  r   NrN  r   r   r   r  r    s     ))**33##r   r  c                  *    \ rS rSr% S\S'   S\S'   Srg)GuardsStatei  r   rx  Optional[ShapeCodeParts]r|  r   NrN  r   r   r   r.  r.    s    ((..r   r.  c                  @    \ rS rSrSS	S jjrS
S jrS
S jrSS jrSrg)_Missingi  Nc                    Xl         g r   r  )r   r(  s     r   r   _Missing.__init__  s    r   c                "    SU R                    S3$ Nz	_Missing(rl  r3  r   s    r   __repr___Missing.__repr__      4<<.**r   c                "    SU R                    S3$ r6  r3  r   s    r   r  _Missing.__str__  r9  r   c                    [        5       $ r   )r1  )r   r   kwargss      r   __call___Missing.__call__  s
    zr   r3  r   )r(  r  r   r   r   )r   r   r=  r   r   r   )	r   r   r   r   r   r7  r  r>  r   r   r   r   r1  r1    s    ++
r   r1  c                     [         R                  R                  [        R                  4n  U [         R                  R
                  R                  4-  n U $ ! [         a     U $ f = fr   )r?  r  r  re  r   _distributed_c10dProcessGroupAttributeError)r.  s    r   _get_unsupported_typesrD    sa     	C**7799 J  Js   (A 
A$#A$c                  6  ^  \ rS rSr            SU 4S jjr\SS j5       r\            SS j5       r\              SS j5       r\SS j5       r	\SS j5       r
\    SS j5       r\    SS	 j5       r\SS
 j5       r\    S S j5       r\    S!S j5       r\S"S j5       r\S#S j5       r\S$S j5       r\S%S j5       r\S&S j5       r\      S'S j5       r\S(S j5       r\            S)S j5       r    S*S j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        Xl	        X l
        X0l        g r   )r   r   r?  rP  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converterrt  empty_valuesmissing_values)r   rt  rM  rN  r   r=  r   s         r   r   GuardsStatePickler.__init__  s\     	$)&)**99; % 1 1 = = Q Q S!2(,r   c                d    [         R                  R                  5       nUR                  U5        U$ r   )r?  rC  rD  __setstate__)r  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      nXXl	        U$ r   )
r?  rP  rH  rJ  rK  from_meta_and_devicer  r   from_raw_reprgrad)	r  meta_tensorr  r  dispatch_keys_rawrY  rI  rL  r.  s	            r   _unpickle_tensor#GuardsStatePickler._unpickle_tensor  st     %%446	 ,,88LLN33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  rO  __tensor_unflatten__r  r?  r  r   rX  r  )r  rZ  r  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_subclass  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_module  s    &&u--r   c                T    [         R                  R                  R                  U5      $ r   )r?  r  r   rX  )r  raw_reprs     r   _unpickle_dispatch_key_set-GuardsStatePickler._unpickle_dispatch_key_set  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_interpreter!  s%     xx""//;;DAAr   c                .    [         R                  " U5      $ r   )rE  MappingProxyType)r  ds     r   _unpickle_mapping_proxy*GuardsStatePickler._unpickle_mapping_proxy'  s     %%a((r   c                H    [         R                  U5      R                  5       $ r   )r1  fromkeysr  )r  elemss     r   _unpickle_dict_keys&GuardsStatePickler._unpickle_dict_keys-  s    }}U#((**r   c                    [         R                  R                  R                  R                  R	                  5       U   $ r   )r?  r  fsdp_fully_shardget_cls_to_fsdp_cls)r  original_types     r   _unpickle_fsdp_module_type-GuardsStatePickler._unpickle_fsdp_module_type1  s5       %%22??SSU
 	
r   c                    [         R                  R                  R                  nUR	                  U5      n[         R                  R
                  R                  X15        U$ r   )r?  rC  parallelDistributedDataParallel__new__rD  rQ  )r  rR  tyddps       r   _unpickle_ddp_module'GuardsStatePickler._unpickle_ddp_module9  sA     XX66jjn$$S0
r   c                J    [        [        R                  R                  U5      $ r   )r  r?  opsr  )r  r  s     r   _unpickle_c_op!GuardsStatePickler._unpickle_c_opB  s    uyy||T**r   c                ^    [        [        [        [        R                  U5      U5      U5      $ r   )r  r?  r  )r  	namespaceopnameoverloadnames       r   _unpickle_opGuardsStatePickler._unpickle_opF  s!    wwuyy)<fE|TTr   c                .    [         R                  " X5      $ r   )rE  rG  )r  funcr8  s      r   _unpickle_bound_method)GuardsStatePickler._unpickle_bound_methodJ  s    ++r   c                ^    [        [        R                  R                  R                  U 5      $ r   )r  r?  rC  	attention
SDPBackendr  s    r   _unpickle_sdp_backend(GuardsStatePickler._unpickle_sdp_backendN  s!     uxx))44d;;r   c                P   ^ SU4S jjnUR                   c   eUR                   S   $ )Nc                    > T $ r   r   )rE  s   r   r[  ,GuardsStatePickler._unpickle_cell.<locals>._U  s    Jr   r   )r   r   )r   )r  rE  r[  s    ` r   _unpickle_cell!GuardsStatePickler._unpickle_cellS  s)    	 }}(((}}Qr   c                .    [         R                  " X5      $ r   )r  
namedtuple)r  r  fieldss      r   _unpickle_named_tuple_type-GuardsStatePickler._unpickle_named_tuple_type[  s    
 %%d33r   c                2    SSK Jn  UR                  " U5      $ )Nr   r   )torch._dynamo.packager   to_code_object)r  serialized_coder   s      r   _unpickle_code!GuardsStatePickler._unpickle_codeb  s    8,,_==r   c                r    [         R                  " U5      R                  n[        R                  " XX4U5      $ r   )r  r  rj  rE  rF  )r  r   modulequalnameargdefsclosurer  s          r   _unpickle_nested_function,GuardsStatePickler._unpickle_nested_functionh  s/     ++F3<<	!!$8gNNr   c                2   SS K n[        U5      U R                  ;   a!  [        U5      R                  [        U5      44$ [
        R                  " U5      (       a.  SSKJn  [        U 5      R                  UR                  " U5      44$ [        U5      U R                  ;   a  [        S4$ [        U[        R                  5      (       Ga  UR                   R                  S:w  Ga  SSKJn  [        U5      U R&                  ;  a  [        S4$ U" U5      (       a  / nUR)                  5       u  pgU Hj  n[+        X5      n	[        U	[        R                  5      (       a  XR&                  [        U	5      '   U R-                  U	5      u  pUR/                  XU45        Ml     [        U 5      R0                  [        R2                  " USS9UR                   [        U5      [        R4                  R7                  U5      R9                  5       UU44$ [        U 5      R:                  [        R2                  " USUR<                  S9UR                   [        U5      [        R4                  R7                  U5      R9                  5       UR>                  44$ [        U[        R@                  RB                  5      (       Ga  [        U5      U R&                  ;  a  [        S	4$ URD                  RG                  5        H  n[        U[        R                  [        R@                  RB                  45      (       a  M>  [        U5      U R&                  ;   a  MY  [I        U5      (       a  Mk  XR                  [        U5      '   M     [        U[        R@                  RJ                  RL                  5      (       a&  [        U 5      RN                  URQ                  5       44$ [        U5      RR                  [        U5      RT                  :X  a  [V        $ URX                  RP                  [        R@                  RB                  RP                  :X  a&  [        U 5      RZ                  URQ                  5       44$ GO[
        R\                  " U5      (       a"  [        U 5      R^                  URT                  44$ [        U[        R4                  R`                  5      (       a&  [        U 5      Rb                  UR9                  5       44$ [        U[        R4                  Rd                  Rf                  5      (       a&  [        U 5      Rh                  URk                  5       44$ [
        Rl                  " U5      (       aW  [o        XRp                  5      (       a=  [s        US
5      (       a,  [s        US5      (       d   eURt                  URv                  44$ [
        Rl                  " U5      (       am  [o        U[x        5      (       aX  [s        US5      (       aG  URR                  URT                  :w  a-  [        U 5      Rz                  URT                  UR|                  44$ [        U[        R~                  5      (       a  [        SU SUR                   S35      e[        U[        R                  5      (       a&  [        U 5      R                  UR                  5       44$ [        U[        R                  R                  R                  5      (       a!  [        U 5      R                  [        U5      44$ [        U[        R                  R                  5      (       aB  UR                  R                  S5      (       a"  [        U 5      R                  URT                  44$ [        U[        R                  R                  5      (       a8  [        U 5      R                  UR                  UR                  UR                  44$ URX                  R                  S:X  a"  URX                  RT                  S:X  a  [        S4$ [        U[        5       5      (       a  [        S4$ [
        R                  " U5      (       a  SURR                  ;   aN  [        U 5      R                  UR                  UR                  URR                  UR                  UR                  44$ UR                  [        R                  ;   aW  [        R                  UR                     nURR                  R                  S5       H  n[+        XS 5      nM     XLa  [        S4$ O[
        R                  " U5      (       aq  UR                  n
UR                  n[+        XRT                  5      n[
        R                  " U5      (       a  UR                  nXLa  [        U 5      R                  X44$ OP[        U[        S " S5      R                  S   5      5      (       a"  [        U 5      R                  UR                  44$ [s        [        R                  S5      (       aT  [        U[        R                  R                  R                  5      (       a!  [        U5      U R&                  ;  a  [        S4$ [        U[        R@                  R                  R                  5      (       a"  [        U 5      R                  UR                  44$ [        U5      RR                  [        U5      RT                  :w  aT  [        U[x        5      (       d?  [        R                  R                  R                  S[        U5       SU S3S-   S-   5      e[
        Rl                  " U5      (       Ga"  [s        [        R                  S 5      (       Ga  [o        U[        R                  R                  R                  R                  5      (       a  U[        R                  R                  R                  R                  La  UR                  S!   n[o        U[        R@                  RB                  5      (       d   eU[        R                  R                  R                  R                  R                  5       ;   d   e[        U 5      R                  U44$ [V        $ )"Nr   r   )zmissing valuesmeta)is_traceable_wrapper_subclass)ztensor guard tree)r  )r  r  )zmodule guard tree_torch_handler_name_torch_unpicklerr  zCannot serialize SymInt z (node: rl  z_C::ri  	PyCapsule)capsule)unsupportedz<locals>r]  )zfqn mismatchc                   ^  U 4S j$ )Nc                    > T $ r   r   r  s   r   r  GGuardsStatePickler.reducer_override.<locals>.<lambda>.<locals>.<lambda>  s    Qr   r   r  s   `r   r  5GuardsStatePickler.reducer_override.<locals>.<lambda>  s    Yr   distributed_c10d)zdistributed_c10d.Workr   r!  r"  r#  r$  r  rP  )tsympyr{  rM  rO  r  r  iscoder  r   r  from_code_objectrN  r1  r  r?  r@  r  torch.utils._python_dispatchr  rt  r  r  reducer_overrider  rh  
empty_liker  r  ro  r\  r  rY  rC  rD  rj  r3  r  r  r  r  r@  r   r   NotImplementedr   rT  r  rl  r   rp  r  rs  rv  	serializer  r/  Functionr  r  r  rM  r  r  r  r  r   rE  ry  r{  rk  r  r  r   r  r  _opsOpOverloadPacket_qualified_op_name
startswithr  
OpOverloadr  r  _opname_overloadnamer   rD  
isfunctionr  r   r   r   r  modulesr  ismethodr   __self__r  r  r<  r  r  Workr  r  r  r  rS   PackageErrorr  r  
FSDPModuler   r  r  )r   r&  r  r   r  rb  attrsra  r  innerr  
args_tuplefr  method_self
inner_funcr  s                    r   r  #GuardsStatePickler.reducer_overrideu  s	    	c7d'''9$$tCyl22>>#<:,,~/N/Ns/S.UUUc7d)))000c5<<((SZZ__-FR#wd444!777,S11  
 335
!D#C.E!%66<A..r%y9'+'<'<U'C$D%%t:&>? " DzFF$$S8JJIHH++C099;I   :..  V3CTCTU

S	'',5571   UXX__--#wd444!777++-dU\\588??$CDDd8t555D>>04##BtH- . #uxx00HHIIDz669I9I9K8MMM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 OOC  3&&Y''  CLL0:883<<:UUUU\\**!9#hsxxjPQRSSU3344:55
}DDU]]00::;;:11DI<??,,
 
$$//77:,,s||o==UZZ2233:**!!-   MM$$
2&&+5 \))3566---$$S---Dz;;LLNN$$$$OO>   ~~,KK/,,2237D.A 8<#%666c""<<D,,K mm<J
++'00
%Dz884:MMM & T#6":"F"Fq"IJKK:,,s/@/@.BBB5$$&899j""3388?
 ?
 #wd444!;;;c588--8899:33chh[@@9!!T#Y%7%77
3PU@V@V--##00S	{,se3DETUTU  OOC  ))6223 1 1 6 6 C C N NOO%++00==HHH #A!-AAAA!((--::GG[[]^^ Dz<<}>NNNr   )rM  rI  rt  rN  rL  )rt  dict[int, Any]rM  r  rN  r  r   r   r=  r   r   r   )rR  r   r   ztorch.nn.Module)rZ  torch.Tensorr  torch.devicer  rO  r[  r9  rY  r  r   r  )rZ  r  r  r  r  rO  r[  r9  ra  r   rb  z5list[tuple[str, Callable[..., Any], tuple[Any, ...]]]r   r  )rk  r   r   ztypes.ModuleType)ro  r9  r   ztorch._C.DispatchKeySet)ru  bytesr   z torch._C._functorch.CInterpreter)rz  r  r   z types.MappingProxyType[Any, Any])r  	list[Any]r   r   )r  type[torch.nn.Module]r   r  )rR  zdict[str, Any]r   z)torch.nn.parallel.DistributedDataParallel)r  r   r   r   )r  r   r  r   r  r   r   r   )r  r   r8  r   r   r   )r  r   r   ztorch.nn.attention.SDPBackend)rE  r   r   r   )r  r   r  rz  r   ztype[NamedTuple])r  r   r   r  )r   r  r  r   r  r   r  ztuple[object, ...] | Noner  z!tuple[types.CellType, ...] | Noner   ztypes.FunctionType)r&  r   r   z6Union[tuple[Callable[..., Any], tuple[Any, ...]], Any])r   r   r   r   r   rI  rT  r\  rh  rl  rp  rv  r{  r  r  r  r  r  r  rH  r  r  r  r  r  r  r   r   r   s   @r   rF  rF    s   -)- %- '	-
 - - 
-  
 !  	
   
 ( !  	
   J 
 , . . ? ? BB	)B B
 ))	)) )
 + + 
1
	
 
 "	2  + + U U , , < <     44 /4	4 4 > >
 	O	O 	O 		O
 +	O 3	O 
	O 	O~~	?~ ~r   rF  c           
     H   [        5       n[        U R                  5      nUS:X  a  SnUnO UR                  U 5      nSn[	        U R
                  5      S Ln[        UUUU R                  5       U R                  (       a  [        U R                  5      OSUU S9$ !   UnSn Nb= f)Nr  FTr   )r  	has_valuer  
guard_typederived_guard_types	is_global
orig_guard)
objectstrip_local_scoper  rz  r,   rG  r   create_fn_nameguard_typesrM  )rd  builderMISSINGr  r  r  r  s          r   make_guard_filter_entryr  6  s    hGUZZ(Drz			
 KK&EI 'u'?'?@LI'')9>9J9JU5#4#45PR 		EIs   B B!c                   [         R                  " 5       n0 n0 nUR                  n[        R                  " U R
                  R                  5      nU H  n[        R                  " U5      (       aa  [        US5      (       aP  UR                  n[        U5      U;  a3   [        U5      R                  [        U5      5        X[        U5      '   M}  M  [        U5      U;  d  M  Xt[        U5      '   M     [        XSXB5      n	[        [         R"                  R%                  U R
                  R&                   V
s/ s H  n
[)        X5      PM     sn
5      5      (       a*  [+        5       U R
                  l        0 U R
                  l         U	R1                  U 5        UR=                  5       $ !    GMZ  = fs  sn
f ! [2         a8  n[         R4                  R6                  R9                  [;        U5      5      UeS nAff = f)Nr  )ioBytesIOrt  r  tree_leavesrx  r  r  r  r  r  r{  rO  r  rF  r'  r?  compilerkeep_portable_guards_unsafer   r  r   ry  r   dumprC  r  rS   r  r   r  )rR  r  bufrM  rN  rt  leavesleafr8  picklerrd  r  s               r   pickle_guards_stater  S  s    **,CLN11 2 2 > >?FD!!gdJ&?&?==D$x00J&&tDz2-1D* 1 X.. (,2d8$  !!2.VG
22 #//666E (76	
  14-*,'<U <<>1  <mm,,SV4!;<s*   0F&5F/F4 &F,4
G6>3G11G6c                      \ rS rSr%        S                   SS jjrSrS\S'           SS jr S             SS jjr        SS	 jr	SS
 jr
SS jrSS jrSrg)r  i  Nc
           	     H	  ^ ^^ U(       a  UR                   OS n
0 T l        [        U5      nUT l        T R                  c   eUT l        U(       a  UR
                  OS T l        [        5       T l        [        5       T l        [        5       T l	        UT l
        S T l        S T l        [        S5      (       d  [        R                  S5        [         R"                  R$                  R&                  (       a  U=(       d    S mSU4S jjn[)        U
=(       d    S[*        R,                  S9nU(       a  T R/                  UUUUS5      u  pU" U Vs/ s H  n[1        X5      PM     sn5      n[3        U5      [3        U5      :X  d   e[5        S U 5       5      (       d   e[7        U5       VVs/ s H  u  nnUU   (       d  M  UPM     nnnT R/                  UUUUUUS	9u  pUT l        T R;                  XU5        UR<                  T R8                  l        [>        RA                  S
T R8                  5        UR<                  T R8                  l        SmURB                  (       Gd  URD                  (       d  T R8                  RG                  URH                  5      (       dA  [K        T R8                  URH                  [L        RN                  " 5       S S9n[Q        SU 35      e[R        b!  [S        T R8                  URH                  U5        [U        T R8                  RV                  URH                  S5      m[>        RA                  STS 5        [X        RZ                  " S[]        T5      5        S T l/        U(       aE  SSK0J1n  [e        T R                  U5      (       d   e T Rg                  XT R                  5      T l/        [         Rx                  R{                  SUU 4S jS9  T R                  R}                  5         S T l        g s  snf s  snnf ! [h        Rj                   a  n[         R"                  R$                  Rl                  (       d  U	(       a  UeT R                  Ro                  S[q        U5       3[r        Rt                  " 5       Rw                  S5      S9   S nANS nAff = f)Nr_  z9guard_nn_modules is turned off using justknobs killswitchc                2    U  Vs/ s H  nSPM     sn$ s  snf r.  r   )gsgs     r   r  /CheckFunctionManager.__init__.<locals>.<lambda>  s    R>PRtR>P>Ps   c                  > / n[        T" U 5      U 5       H  u  p#U(       d  UR                  S5        M  UR                  S;   d   SUR                  ;   d  SUR                  ;   aH  [        R                  SUR                  UR                  R                  5        UR                  S5        M  UR                  S5        M     U$ )NF)rv  r  r%  r[  rv  r[  z7%s guard on %s is dropped with caching_precompile=True.T)r(  r  r  r  r3  r4  r  r  )r   r.  keepr
  _guard_filter_fns       r   rv  6CheckFunctionManager.__init__.<locals>.guard_filter_fn  s    "#3F#;VDGD

5) &)>)>>)Q-B-BBULLLL--
 

5)

4(+  E, 
r   r   )r  Fc              3  D   #    U  H  n[        U5      [        L v   M     g 7fr   )rO  r   )r   r  s     r   r$  0CheckFunctionManager.__init__.<locals>.<genexpr>  s     ?1tAw$s    )rv  %sg        )backendziGuard failed on the same frame it was created. This is a bug - please create an issue.Guard fail reason: rP   zGuard eval latency = %s us.2fguard_latency_usr   rR  zGuard evaluation failed: r  )	tracebackdynamo_cpp_guards_strc                 *   > TR                    ST S S3$ )Nz
Guard latency = r  z us)rn  )latencyr   s   r   r  r  <  s    $"4"4!55GPS}TWXr   
payload_fn)r   zSequence[GuardFilterEntry]r   zSequence[bool])?r   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesrx  r|  rE  rL   r  r  r  rh  r?  rG  rE   r3  r4  r?  r  rQ   caching_precompiler   r;   sort_keybuild_guardsr  r   r'  r  rn  compile_check_fnr   r  r  skip_guards_checkrf  r  r  get_guard_fail_reason_helperr8   r  r
  r   r%   r   r6   increment_toplevelr9  guards_stater{  r   r  serialize_guardsrS   r  strict_precompilebypass_packager   r  
format_excr  _loggingtrace_structuredclear)r   r`  rx  r   r   rv  r|  rh  ru  strict_errorr   existing_diff_guard_sourcessorted_guardsr  rn  rd  filter_resultsrs  reasonsr   r  r  r  s   `                    @@r   r   CheckFunctionManager.__init__  s    )5$$$;= B+N 	$ :F  ,,, !1
 7CL22 	& 3=,;E<'<FL($8!PTPT/BCCKKST ==22.Q3P4 v|@ &*%6%6+&"G -FSTmU(8mTN ~&#m*<<<<??????&/&>&>(!U.QRBS&>  
 "&!2!2'+ "3 "
 +gmD .5-D-D*t112-4-D-D* ---l6I6I%%++L,D,DEE6&& ,,"557 	 %**14 
 -8-&&(@(@' ,""'')A)A1G 9gc]L 112Dc'lS-1Dd//1BCCCC
$($9$9D,=,=%! 	''#X 	( 	
 	 ] Uh ## ==''99\G!!00/Ax8'224::4@ 1 s+   O>(P=P!P	 	R!A:RR!)r[  r  rv  r  r  r  r  r%  ztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPESc                  ^^^^ U H  nUR                  5       nUR                  (       a  [        UR                  5      OSnUS;   a1  UR                  (       a  UR	                  U5      n[        U5        Mp  Mr  U[        R                  ;   a,  [        R                  R                  R                  U S35      e[        S U 5       S 5      =n(       d  M  [        R                  R                  R                  U S35      e   UR                  =(       d    Sm[        5       m[        5       mSUUU4S jjn	UR                  5       n
U Hn  n[!        UR"                  [$        5      (       a:  U R&                  (       d   eU R&                  R(                   H  nU	" U5        M     M\  U	" UR"                  5        Mp     UR*                   H  nU	" U5        M     SS jmU
R,                  R/                  5        VVs0 s H  u  pUT;   d  XR0                  ;   d  M  X_M      nnnU
R,                  T   R/                  5        VVs0 s H  u  pXR2                  ;   d  M  X_M     snnUT'   [4        R6                  " U
U
R8                  R/                  5        VVs0 s H  u  pUT;   d  XR:                  ;   d  M  X_M      snnU[        R<                  R?                  [A        U4S jU 5       5      5      [B        RD                  " [F        U
RH                  5      S	S
9n
[K        U
U R&                  S9n[M        X5      $ s  snnf s  snnf s  snnf )Nr   )rU  r  z guard cannot be serialized.c              3  R   #    U  H  nU[         R                  ;   d  M  Uv   M     g 7fr   )r  r3  )r   rs  s     r   r$  8CheckFunctionManager.serialize_guards.<locals>.<genexpr>l  s(      00VVV A0s   '	'r  c                   > [        U 5      =n(       a0  [        U[        5      (       d   eUT:w  a  TR                  U5        g g [	        U 5      =n(       a)  [        U[        5      (       d   eTR                  U5        g g r   )r,   r  r   r   r-   )rp  r  builtins_dict_nameused_global_varsused_local_varss     r   prune_variable=CheckFunctionManager.serialize_guards.<locals>.prune_variable|  sz    -f55t5!$,,,, --$((. ..v666!$,,,,##D) 7r   c                L  ^ [        U [        R                  5      (       a}  SS j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  rO   re  rD  r  s    r   _refPCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>._ref  s$    !!mW[[%ABB s
Hr   c              3  4   >#    U  H  nT" U5      v   M     g 7fr   r   )r   r  r?  s     r   r$  UCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>.<genexpr>  s      9&Qa&s   )r  r   r   r   )r  	functoolspartialrM  r   keywordsr   r  )r  new_argskvnew_keywordsr?  s        @r   normalize_create_fnBCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn  s    !Y..//
 ! 9!&& 9978zz7G7G7IJ7Itq47
7IJ ((K(KlKKH  Ks   "B c           	   3  r   >#    U  H,  n[         R                  " US S T" UR                  5      S9v   M.     g 7f)N)obj_weakrefguarded_class_weakrefr"  )r  r  r"  )r   rd  rJ  s     r   r$  r6    s<       "/  ''$(.2"5eoo"F	 "/s   47T)r  r   _guardsr  r"  )rx  r|  )rp  r?   r   r   )r  Callable[..., None]r   rP  )'r  r  rM  rR  rz  r'  r  r3  r?  r  rS   r  next%name_of_builtins_dict_key_in_fglobalsr   dump_guards_stater  rG  rv   r|  ro  ry  r   r   r  r  r  r  r  r  rO  	GuardsSetrL   r  tree_mapr  r  r.  r  )r   r  r/  rx  rd  r  r  r&  failedr;  output_graph_guards_staterp  rG  rH  global_scope_stater%  r8  rJ  r9  r:  s                   @@@@r   r&  %CheckFunctionManager.serialize_guardsT  s+    #E--/J>C>O>O%(9(9":UW <<((!++e,C*3/ )
 2XXXmm''44!l">?   0
    mm''44h:; 3 #: *OOUSU5%
	* 
	* %1$B$B$D!"E%22NCC,,,,"33EEF"6* F u778 # #55F6" 6	  2>>DDF
F$$-M-M(M ADF 	 
 2>>"eg2
 *** AD2
-. %0$7$7% 6AAGGIIDA'10O0O+O I
 ,MM++  "/ 
 +1//.)GG+ #/%
!2 #2!22

 #<99W

2
s$   7L4L4?L:L:M 2M c                <  ^ [        5       nX'l        S mSU4S jjn[        UU R                  UU R                  UR
                  UR                  UU UU R                  US9n	S	S j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                   nU[        R                  L a  U R                  $ T(       d   eT" 5       nUc   eUR	                  U R                  5      $ r   )guard_sourcer>   CONSTANTr  r6  )rp  r\  	r_builder	w_builders      r   rb  5CheckFunctionManager.build_guards.<locals>.source_ref  sV    !..L{333{{"9!I((($$V[[11r   )rh  rv  c                0    U " 5       nU(       a  S Ul         g g r   )rd  )weak_br  s     r   cleanup_builder:CheckFunctionManager.build_guards.<locals>.cleanup_builder  s    A r   r_  r   r   r  )rp  r?   r   r   )rb  zweakref.ref[GuardBuilder]r   r   )r   r   rT  ra  rc  r  r   rh  re  rD  rQ   r  rE   rH  r  r0  r9  )r   r/  r.  r`  rx  ru  rv  rn  rb  r  rc  guard_on_nn_modulesrd  r_  s                @r   r   !CheckFunctionManager.build_guards  s     ,-+F(		2 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                  R                  R                  [        [        R                  " 5       5      5        S U l	         S       SUUU4S j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-   /S 5        [(        R*                  (       aD  UR,                  (       a3  [/        [0        [3        UR,                  6 5      u  pUR5                  X5        U R6                  (       a  U R6                  R8                  O/ nU GH`  n[;        U[<        5      (       al  UR>                  nUR@                  nURB                   S	URB                   3n[E        URG                  U5      URG                  U5      U/S 5        U" US S5        M  [;        U[H        5      (       a  URJ                   Vs/ s H  nURG                  U5      PM     nnURL                   Vs/ s H  nURG                  U5      PM     nnS
SR'                  S URJ                   5       5       SSR'                  S URL                   5       5       S3n[O        UUU/S 5        U" US S5        GMU  [Q        SU 35      e   URR                   H)  nUR                   H  nU" XR                  S5        M     M+     T(       a"  [T        RV                  RY                  SU4S jS9  [Z        R\                  c   [Z        R^                  " 5       R`                  nO[c        U Rd                  SS 5      nU
UUU Rf                  S.[h        E[k        5       EnU R                  Rm                  5         SURn                  S   0n[!        T5      S:X  d   eUU R                  l8        X@R                  l9        U R                  Ru                  5         TU R                  l;        UU R                  l<        X0R                  l=        S U R                  l>        S U R                  l?        XR                  l@        g s  snf s  snf )Nz**___kwargs_ignoredzGUARDS: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   r  r  )r  rD   from_tracebackr  r  )r  rd  s   r   r  NCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>2  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)r  r  r  r  verbose_guards_logisEnabledForloggingDEBUGr  r  formatr  )	r  rd  log_onlyr  maybe_stackmaybe_user_stackr   structured_guard_fnsr   s	   ``    r   add_code_part<CheckFunctionManager.compile_check_fn.<locals>.add_code_part+  s     !6i GT#45 ''  "..w}}== #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!),"))*;< r   TrP   zcheck_no_aliasing(rk  rl  r  zcheck_overlapping(overlapping=[c              3  8   #    U  H  oR                   v   M     g 7fr   r  r   rr  s     r   r$  8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s     /Z@Y1@Y   z], non_overlapping=[c              3  8   #    U  H  oR                   v   M     g 7fr   r  rx  s     r   r$  ry    s     3bDaqFFDarz  z])zUnknown GuardEnvExpr: dynamo_guardsc                 <   > T V s/ s H	  o " 5       PM     sn $ s  sn f r   r   )r  rt  s    r   r  7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    BV4WBVQQSBV4W4Ws   r  r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackrX  r   r   )r  r   rd  Optional[Guard]rq  r   r   r   )Aro  r  r  rn  r   attach_compile_idr   r8   r  rE  r   r   rM  rd  r   rq  r   r    rr  r  rQ   r  r~  r  r  r(  r(  rx  aotautograd_guardsr  r:   input_source_ainput_source_br  r!   r  r@   overlapping_sourcesnon_overlapping_sourcesr"   r  rp  r?  r*  r+  rR   initial_global_stateGlobalStateGuardr  r  r?  rG  rJ   r  r  rd  r   r   r  r   r   r   r   r   r   )r   r  
guards_outr   largsru  seengclr   rq  check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsr  rd  source_ar  r  rr  overlapping_guard_managersnon_overlapping_guard_managerscheck_global_stater   r&  r   rt  r   s                            @@@r   r!  %CheckFunctionManager.compile_check_fn  s      '((#
CE 	111134	

 *.& FK)	=)	=#2)	=>B)	=)	= )	=V u<<C# "$		48HHTN &   $+#C#C #' '(1, -99(%		2J(KKcQR	" 6633?Bc7>>?@< 88#
 594E4ED002 	 (E%11 // //'}}oT(--A	-99(C99(CK	 it4E>22 #66.6 99!<6 + . #::2: 99!<: / 2
&&*ii/Z@Y@Y/Z&Z%[ \**.))3bEDaDa3b*b)ccei 
 2.2K	 it4"%;E7#CDDE (L ))C dIIt4 & *  NN++,W ,  --5!.!?!?!A!G!G!():):GT!J 0(@%7262Y2Y	

 
  !
 	##% #W]]3%78 :!###*6'"'<<>0B-*>'+8( *.&)-&8P5K.2s   !SS
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 )Nrn  zCache line invalidated because z got deallocated)	r  r  rn  r%  r   r   r   r   
invalidate)r   obj_strr   r   r(  deleted_guard_managers         r   r  CheckFunctionManager.invalidate  s    
 D/**t113MNN $ 2 2 > >>K $ 2 2 > >>Kk:6666k:66666wi?OPF$>v$F!"";F!6 L L O +r   c                ,    [        U5      U R                  ;  a`  [        R                  " U5      U R                  [        U5      '   [        R                  " U[
        R                  " U R                  US95        [        U5      $ ! [         a     Nf = f)zadd a weakref, return the id)r  )	r{  r  re  rD  r  rC  rD  r  r%  )r   r&  r  s      r   ra  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   rc  $CheckFunctionManager.lookup_weakrefs  s(    c7dnn$>>"S'**r   )r  r  r  r?  rn  r%  rx  rh  r|  rE  rG  r  )NNNNNFF)r`  r  rx  r   r   Optional[CacheEntry]r   %Optional[Callable[[GuardFail], None]]rv  r  r|  r/  rh  r  ru  r   r-  r   r   r   )r  rT  r/  list[Guard]rx  r   r   r  r   )r/  r  r.  r  r`  r  rx  r   ru  r   rv  r  r   z(tuple[GuardBuilder, GuardManagerWrapper])r  rT  r  r  r   r  r   r   )r  r   r   r   )r&  r  r  r   r   r9  )r&  r  r   zOptional[weakref.ref[object]])r   r   r   r   r   r3  r   r&  r   r!  r  ra  rc  r   r   r   r   r  r    sj   
 -1?C599=!"B!B! (B! *	B!
 =B!B! 3B! 7B! B! B! 
B!H	H)+D 	z:z: #z: (	z:
 
z:H A&"A& &5A& 	A&
 -A& A&A& 
2A&FGQGQ  GQ =	GQ
 
GQR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   rA   c                &   > TR                  U 5      $ r   )r  )r  csepasss    r   r  %build_guard_function.<locals>.replace  s    ??4((r   c                
    / U 4$ r   r   )r  s    r   r  r    s    t8Or   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardr  )
torch._inductor.utilsrB   r  r  RecursionErrorr~  r   rv  splicer  )
r   closure_argsrB   r  
guard_bodyr  r  rd  make_guard_fnr  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_enabledr  1  s#    >>##--AA,OOr   c                 h    [         R                  R                  R                  R	                  S5      $ )Nr   r  r   r   r   is_recompiles_verbose_enabledr  5  s$    >>##--AABVWWr   c                Z   ^ U  Vs/ s H  n[        U5      PM     snmSU4S j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      Ld  M    g   grF  )r   r   r(  rO  )	cur_stackr  moderE  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d# . r   r   r   )rO  )initial_stackr  r  rE  s      @r   rF  rF  :  s/     ,,mT!Wm,E
 +* -s   (Scopec                   U R                   c   e[        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__rP   rk  zDuplicate tensors found: )r   r1  r  r  r  r   r{  evalr  r   r  )	rn  rd  r   ids_to_sourcer  	tensor_idr  duplicate_tensorsr(  s	            r   1recompilation_reason_for_no_tensor_aliasing_guardr  Q  s     %%111223L++D1M&AA-:)*tM?@	 ''6 B ,9+8CC@R<SVW<W=
=   YY()F'x011s   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)rr  r  patterns      r   r  r  d  s     +G66'5!$$r   c           	     p   U b  [        U 5      S:X  a  g/ nU  H  nUR                  nUR                  nUR                  nUR                  (       a  UR                  R                  5       OSnUR                  SU SU SU 35        U(       d  Mw  UR                  SU 35        M     SR                  U5      $ )z
Format the user stack trace for display in guard failure messages.

Returns a formatted string representation of the stack trace,
or an empty string if no user stack is available.
r   r  z  File "z", line z, in     r  )r   r  r  r  r   stripr  r  )r  linesframer  r  r  source_lines          r   format_user_stack_tracer  q  s     S_1E>>zz,1JJejj&&(Bxz&tfEF;LL4}-.  99Ur   c                   U R                   c   eU R                  c   eXR                   S   S.nUR                  U R                  5        / nSnU R                  (       a  U R                  R                  nSn/ nU R                  U5      n	Sn
U	R                  (       dR  U	R                  n[        U5      S:X  a  SUS   ;   a  S	nOUn/ nU	R                  (       a  [        U	R                  5      n
O,Xc:w  a  S
nUR                  U5        OSnUR                  U5        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5      S:X  a  U SUS    3nOU S3SR+                  U5      -   nU
(       a  USU
 3-  n[-        U5      $ ! [          a    [#        5       (       a   SSS5        G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.
NrX  rV  Fr  rP   zDuplicate tensor foundr   Ta  BACKEND_MATCH failure: torch.compile detected different backend callables. If this is unexpected, wrap your backend in functools.partial (or reuse the same cached backend) to avoid creating a new backend function each time. More details: https://github.com/pytorch/pytorch/issues/168373zUnexpected recompilation: runtime guards failed even though they passed during recompilation-reason analysis. Please open an issue with a minimal repro: https://github.com/pytorch/pytorchr  rc  z; z
User stack trace:
)r   r   r  r   r  r  resultr   r   r  r  r  r  r1  rN   r  rz  r  r  r   r   r  r  )rn  f_locals
compile_idr  rd  r1  cache_entry_backendno_tensor_aliasing_check_failedr   guard_debug_infouser_stack_strr(  rg  r   fail_reason
reason_strs                   r   r#  r#    sK    %%111%%111!;!;C!@AE	LL++,G  +77??&+#$&$228<N
 ""-@@ !"a''+=a+@@26/,%'" &&45E5P5PQN		'N 	 	v2 	 	v&C
 'D : :;L15-./1"&t5"AK 2 +t,,["+s++{+466' '. 7|q"|2gaj\2
"|2&7);;
-n-=>>
Z((/ ! 466  21 	 21s*   H>HH;-H>9H;;H>>
I	c                x   [        U [        5      (       a  U SU R                   3$ [        XX45      nU(       a  U$ [        [
        U      R                  U5         U R                  b+  U R                  [        U=(       d    S[
        U   5      5        U$ ! [         a    [        R                  S5         U$ f = f)Nrc  zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r  r%  r'  r#  r   r   r  r   r   rz  r3  r  )rn  r   r  r  r  skip_loggingr  s          r   get_guard_fail_reasonr    s     -!;<<R A ABCC-J =&'..z:
&&2''*8(8-:MN   
d	
 
s   8B B98B9c                  ^
 / m
U ba  [        U R                  U R                  UR                  U R                  UU5      nU(       a  T
R                  U5        U R                  n U b  Ma  UR                  nU(       a  T
$ [        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  rv  )r   rs  r(  s      r   r$  :get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>3  s2      #!3IA <(8??64+HH!3s   -/r  r  z-triggered by the following guard failure(s):
zRecompiling function z in :r  artifactc                     SSS.$ )Nrecompile_reasonsru  )r  encodingr   r   r   r   r  9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>J  s    '
r   c                 0   > [        T 5      S:X  a  T S   $ T $ )NrP   r   )r   )r1  s   r   r  r  N  s    W):71:GGr   )metadata_fnr  )r  rn  r   r  r  r  rQ  r`  r  r  rQ   error_on_recompiler  r  r  rv  r  co_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logrS   RecompileErrorr?  r*  r+  )r   r  r  r  r(  r   do_recompiles_logfailuresguard_failure_detailsmessager1  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##
 H $  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   )rL   r  rn  r  rQ  r   r  )r   first_cache_entryacc_diff_guard_sourcess      r   r  r  T  s     $
 /9l

!%%%%@@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 rk  z and
  rW  zMalformed guard:
)
printr  r  r  r  r   r   r   r  r   )rn  r   r  r   lastr  rd  s          r   guard_error_hookr  o  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   )seqr  r  s      r   uniquer    s+     5D=GHHQK s   33c                8   U(       a  X:w  a  [        U5      n[        U 5      n[        U5      (       d  [        U 5      (       a0  [        R                  " U R                   SUR                   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.)r  )	r0   r/   rS   UnsafeScriptObjectErrorr  rC  rD  rT  r!  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardr    s     {02;?.z:/
 
1*==--??#=1A1A0B C> ?  1 $$\%A%AKXXr   )skipc                   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R                  5      (       a  M6  U" XSU S-   S9  MB     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   )TracingContextrP   )collect_debug_stackr	  N)torch._guardsr  r  rm  rn  ro  rl  rz  guards_contextr|  r   r  r;   r2   rG  )r	  r   r  r  r   rd  s         r   install_guardr    s     -$11 8		(	(	7  



-
-
;
;
?
?C%''''$U%=%=>>EJ	 r   )r   r  r   r   r   r9  )r  r   r   r  )r   zset[str])r   r  )r   r  r   r   )r  r   rd  r  r   r   r   )r   zUnion[str, list[str]]rd  r  r  r  r   r  )r  r   r   zOptional[int])r  r  r   list[Optional[int]])r  r  r  r   r  r  r  r  r  rO  r  r   r   r   )r  r  r  r   r   r9  )rp  r   r   r   r   r   )r&  r   r   r	   )r  r   r   r   )rp  z3Union[DictGetItemSource, DictSubclassGetItemSource]r>  r   r?  r   r5  r   r6  r1  r   r   )rd  r;   r   r   )r   r  r   r  )r   ztuple[type, ...])rd  r;   r  rT  r   r   )rR  r.  r  rT  r   r  )r   r  r  r   r   ztuple[str, str]r  )r  z'list[torch.overrides.TorchFunctionMode]r   zCallable[[], bool])rn  r   rd  r  r   r  )rr  r   r   r   )r  ztraceback.StackSummary | Noner   r   )
rn  r   r  r  r  zOptional[CompileId]r  zOptional[Callable]r   r   r   )rn  r   r   r  r  r  r  r9   r  r   r  r   r   r   )
r   r  r  r   r  r   r  r   r   r  )r   r  r   r  )rn  r   r   r  r  r  r   r9  r  r   r   r   )r   zSequence[T]r   zGenerator[T, None, None])r  r?   r  zSource | Noner   z Optional[functools.partial[Any]])r   r;   r	  r9  r   r   (   r  
__future__r   r  ri  r  r  r  rC  r  r  r  rn  r  pickler  r  r  rE  r  re  
contextlibr   rk  r   r   typingr   r   r	   r
   r   r   typing_extensionsr   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   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   torch._dynamo.sourcer,   r-   r.   r/   r0   r1   r2   r3   r4   r5   torch._dynamo.utilsr6   r7   r  r8   r9   r:   r;   r<   r=   r>   r?   r@   r  rB   torch._library.opaque_objectrC   torch._loggingrD   torch._utils_internalrE   %torch.fx.experimental.symbolic_shapesrF   rG   rH   rI   rJ   torch.utilsrK   r  torch.utils._ordered_setrL   torch.utils._tracebackrM   rN   torch.utils.weakrO   r  rQ   rR   rS   
eval_framerT   rp  rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   collections.abcr   r   r   numpyr  ModuleNotFoundErrorr   r   r   r  r   torch._Cr   r{  r   r   r  r   r   	getLoggerr   r3  r*  getArtifactLoggerr  r  r  rl  rK  r   r   r   r  cacher  r  r  r  r  r  r1  r  r  r  r  r  r  r  r'  r*  r  r-  rD  rJ  rL  r  r1  r   rT  r  r#  r%  r  r.  r1  rD  PicklerrF  r  r  r  r  r  r  rF  r1  r   r  r  r  r  r  r#  r  r  r  r  r  r  r  r   r   r   <module>r-     sn  " # 
        	    
      %    L L C C !    >      8   H
 
 
 1 = % 1  * / O * ( ( ,. . . . . . . . . . . .^       . ( KO G N
 =='T4CL!^^--hA
11(LI99"  ^^55h@PQ " ,~ , DT . . .2* 1>/ hh&&:: %6 %)% " 	&'K
  !	
  " 	*31 d#! ! $!*?*(* * 	*
 )* *Z
G   
tyy 
 8 8V!
# V!
TCR8 R8j$!4 $ $ $ $ / / /
   
 
\ \~
:))) )b~	 ~	B);XPX
+:++( 	gtCK012&2/422&
%-0g)&g)g) $g)  	g)
 	g)` &
   	
   	D 	@%@@ @ 	@
 @F"%""600
0  0 	0
 0 
0. % &!!%2!%!H /0 K KOO  	Bs   U% %U10U1