
    9i                   X
   % 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!  SS	K#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/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrF  SSKGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQ  SSKRJSrSJTrT  SSKUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]J^r^  SSK_J`r`  SSKaJbrb  SSKcJdrd  SSKeJfrfJgrgJhrhJiriJjrj  SSKkJlrm  SSKnJoro  SSKpJqrqJrrr  SSKsJtrt  SSKuJvrvJwrwJxrx  SSKyJzrz  SSK{J|r|J}r}J~r~JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJrJrJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SrS\S'    SSKr\(       a  SS KJrJrJr  SS!KJr  SS"KJr  SS#KJrJr  \%" 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)r " S* S+\`5      r " S, S-5      rSjS. jr\GR                  SkS/ j5       rSqS0\S1'   SlS2 jrSmS3 jr\'GR                  GR                  GR                  rSnS4 jr So       SpS5 jjrSqS6 jrSrS7 jr              SsS8 jrStS9 jrSuS: jrSvS; jrSwS< jr\GR                  " S=S>9 " S? S@5      5       r            SxSB jrSySC jr\GR                   " SD SE5      5       r " SF SA\GR                  5      r\GR                  SzSG j5       r " SH SI\Z5      r " SJ SK5      rSySL jr " SM SN\5      r\GR                   " SO SP5      5       r\GR                   " SQ SR5      5       r " SS ST5      r " SU SV\GR                  5      rS{SW jGr  " SX SY5      GrS|SZ jGrS}S[ jGrS}S\ jGr    S~S] jGr\$" S^G\G\G\4   5      Gr	      SS_ jGr
SS` jGr        SSa jGr S           SSb jjGr S       SSc jjGr    SSd jGr            SSe jGr\z" G\5        SSf jGr      SSg jGrSSh.SSi jjGrg! \" a
    SSK#J!r!   GNf = f! \ a    Sr GN7f = 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Callable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)
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ConstantSourceConstDictKeySourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSource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_custom_getattrget_torch_function_mode_stack get_torch_function_mode_stack_atguard_failuresistype	key_is_id	key_to_idnormalize_range_iterorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenunpatched_nn_module_getattrverify_guard_fn_signaturez(Optional[Callable[[Any, Any, Any], Any]]guard_manager_testing_hook_fn)	GeneratorKeysViewSequence)Symbol)DispatchKeySet)OutputGraphOutputGraphGuardsStateTguards
recompilesrecompiles_verboseverbose_guards)__defaults____kwdefaults____code____closure____annotations____func____mro__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    T/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/_dynamo/guards.pyprefixIndentedBufferWithPrefix.prefix   s    t||dmm344    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)"GuardManagerWrapper   z
A helper class that contains the root guard manager. An instance of this
class is stored in the Dynamo cache entry, so that the cache entry can
access the RootGuardManager stored in the "root" attribute and directly call
the check_nopybind from C++.
Nc                   Uc  [        5       U l        OXl        S U l        S U l        S U l        / U l        S U l        S U l        S U l        S U l	        S U l
        0 U l        / U l        [        5       U l        [        5       U l        g N)r'   rootdiff_guard_rootclosure_varsargs
code_partsverbose_code_partsglobal_scopeguard_fail_fncache_entryextra_stateid_matched_objsno_tensor_aliasing_sourcessetprinted_relational_guardsrK   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  ,2++-335,''g #eGnuW~&EE",
 "''++DOO,=>%%r   c                H  > [        U [        5      (       a   eU R                  5       TR                  ;   =(       d    U R	                  5       S:  nU R                  5        H  nUT" U5      -  nM     U(       a)  TR                  R                  U R                  5       5        U$ r   )
isinstancer   r   r   r   get_child_managersr   )r   r   	child_mgrr   r   s      r   visit_managerEGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_manager7  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>.visitE  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_sources  s;    	& 	&	& 	&	' 	' 	dii&&&r   c                    [         R                  (       a   [        S5      (       a  U R                  5         U R	                  5         g )Nz3pytorch/compiler:use_recursive_dict_tags_for_guards)rP   "use_recursive_dict_tags_for_guardsrD   find_tag_safe_rootsprepare_diff_guard_managerr   s    r   finalizeGuardManagerWrapper.finalizeP  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_managerW  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       5       H<  u  n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   extendr  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"& ,2++-335,''g &'N&"))%.9, ,2++-335,''g '+>+>+@@'7'+>+>+@@', #""$!!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   r!  is_guarded_value_immutabler  r  torchTensorhas_no_accessorshas_object_aliasing_guardr"  r   r  r  r  nnModuler   r*   typesFunctionType
MethodTypestaticmethodclassmethodrP   )assume_dunder_attributes_remain_unchangedr   r   r   r   r   r+  dunder_attrs_assumed_constantsCellTypetupler   endswithr(   typer)   r+   )	r   r#  r   r  r  r$  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   rA  )r   r  r  r-  r1  r2  mark_tag_safe_root)r   r#  r   r  r   r   r   s      @@@@r   r  'GuardManagerWrapper.find_tag_safe_roots[  s    t		4S			"<l	" 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_manager7  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_fnG  s    &&(N::r   )rJ  r   r   r   )r   clone_manager)r   rK  rL  s    ` r   rE  -GuardManagerWrapper.clone_with_chosen_sourcesD  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_linesL  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   r  r  is_tag_safe_root)r   guard_manageraccessor_strsourcetss         r   get_manager_line$GuardManagerWrapper.get_manager_lineR  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   indentra  construct_manager_string)r   r  bodyr   r   r   s         r   construct_dict_manager_string1GuardManagerWrapper.construct_dict_manager_string^  s     (.c.H.H.J.P.P.R'S#C#'NN;C5ABNN\$2G2G2P1Q#RS11'@NN^D4I4I'4R3S#TU11'@  (Ts   A7C
C'	c           
        UR                  5          UR                  5        H  n[        U[        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=)rd  get_leaf_guardsr   r&   r   r   
writelinesrV  r   r   r   rg  r  r  r   r   ra  reprre  )r   r  rf  rR  r  r   s         r   re  ,GuardManagerWrapper.construct_manager_stringl  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)NrO    T)r   zTREE_GUARD_MANAGER:r'   get_epilogue_lambda_guards)r   r   r   r   re  r   hasattrrp  rk  rV  getvalue)r   rf  rR  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   rv  GuardManagerWrapper.check  s    yyq!!r   c                8    U R                   R                  U5      $ r   )r   check_verboserw  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   )rj  r   r&   r   r!  r   r   )r  rR  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   )rK  r  r   r'   )rR  r$   r   r  )r\  r   r]  Optional[str]r   r   )r  r   rf  r   r   r   )r  r   rf  r   r   r   r   rx  r   r   r   )rx  r   r   r   )r   r   r   r   __doc__r   r   r   r   r  r  r  r	  rE  rV  ra  rg  re  rs  rv  r{  r  r   r   r   r   r   r      s    @, 3 3/'b*+Z*x>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  r!  inspectgetfile)r-  modsr  ms       r   uninteresting_filesr    sW    '"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[        R                  _S[        c  S O[        R                  _S[!        S5      _S["        R$                  _S[&        R(                  R*                  _[&        R,                  [.        [&        R0                  [&        [2        S.Eq [         $ )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                ,    [         R                  X5      $ r   )r   __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rx  s    r   r  r    s    aiir   #___get_torch_function_mode_stack_at__math_isnan__numpy_isnaninf__load_moduleutils_device)device___from_numpy___as_tensorr-  r  )r  r   r   collectionsOrderedDict__getitem__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    s4   

|
  7 7 C C
 I	

 |
  D
 $%7
 &';
 ()?
 "#3
 #$7
 23S
 DJJ
 RZTRXX
 5<
  Y44!
" EKK//#
$ ll'!55-
0 r   c                N    [         R                  " U 5      R                  SS5      $ )N
ro  )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$ )
Nro  z  # T)r   i   r   z  # <unknown>z<60)
user_stackreversedfilenamer  rL   lenstacksummary)r  rR  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: rZ  )r   listr  )r   rR  recompile_hintr  r   rU  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   )rH   r   r-  SymIntr   maybe_as_int)dims    r   convert_int_to_concrete_valuesr  %  sD    
{s
#u||,,,,xx$$&&r   c                D    U  Vs/ s H  n[        U5      PM     sn$ s  snf r   )r  )size_or_strider  s     r   convert_to_concrete_valuesr  /  s     ;IJ>C*3/>JJJs   c                ,   U[         R                  R                  5       -  [         R                  R                  5       -
  nU R                  nU R
                  R                  nU R                  n	SU SUR                   SU SU SU SU	 SU SU S3n
U
$ )Nzcheck_tensor(rY  z	, device=z, requires_grad=z, size=z	, stride=rZ  )	r-  _C_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper  indexrequires_gradr   )valuenamesizesstridespytypedispatch_keysdispatch_keyr  device_indexr  	guard_strs              r   get_tensor_guard_code_partr  3  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  H  s     
 !#&'--c22r   c                    SU  SU S3$ )Nlist(dict.keys())[]r   )r^  r  s     r   get_key_index_sourcer  P  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).)	TypeErrorr=  )objs    r   raise_local_type_errorr  T  s8    

S	{,se+<=
L	M
L	M r   c                    [        U [        R                  R                  5      =(       a(    [        R
                  =(       d    [        U 5      [        L $ r   )r   r-  r1  r2  rP   inline_inbuilt_nn_modulesr   r   )r  s    r   $should_optimize_getattr_on_nn_moduler  \  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)
NNModuleAttrAccessorInfoif  Fr   present_in_generic_dictNr  l1_keyl2_keyr   )	r   r   r   r   r  r   r  r  r   r   r   r   r  r  f  s'     %*T) !FM  !FM r   r  GuardManagerTypec                   U R                   R                  5       n[        U R                  [        5      (       a  U R                  R                  nO,[        U[
        5      (       d   e[        X R                  5      n[        XV5      n[        [        U5      5      U   n[        U[        [        45      (       a
  U SU< S3n	OU SU S3n	[        U R                  [        5      (       dK  UR                  UUU R                  [        R                  S9R                  U R                  U SU< 3/5        UR!                  UU	UUS9$ )N[r  r  r^  example_valueguard_manager_enum == )baser  r   r  r\   r   r  r  r  r   intr   get_key_managerr  GUARD_MANAGERadd_equals_match_guardget_value_manager)
r^  base_guard_managerbase_example_valuer#  r$  base_source_namer  
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerr2  u  sB    {{'')&,, 233"",d33330,,?%&6>J ./ABCEJ#c3Z00*+1->,AC*+1ZL:fll$677 	** ,,/==	 	+ 	

 !
 LLj\.?-BCD
 //#-	 0  r   c                    U R                   n[        U[        5      (       a  gU R                  5       (       a  gUR	                  5       =(       a    [        U[
        5      (       + $ NFT)originating_sourcer   ro   is_specialized_nn_moduleis_dict_keyri   )rR  r^  s     r   match_on_id_for_tensorr8    sP    %%F &+,,%%''F
6:(F$FFr   c                  *    \ rS rSr% S\S'   S\S'   Srg)GuardCodeListi  r  	code_listr;   rR  r   Nr   r   r   r   r   r   r   r   r   r:  r:    s    Lr   r:  c                      \ rS rSrSrSrSrg)r  i  rO      r   N)r   r   r   r   r)  DICT_GUARD_MANAGERr   r   r   r   r  r    s    Mr   c                <    [        [        [        U 5      5      5      $ r   )r  r  r   )codes    r   &code_framelocals_names_reversed_cachedrB    s    /5677r   c                     \ rS rSr  S:                     S;S jjr      S<S jrS=S jr\S>S j5       r                S?S jr	S@S jr
      SAS	 jrSBS
 jrSCS jrSDS jrSES jr  SF         SGS jjrSHSIS jjrSJS jr        SKS jrSLS jr SH     SMS jjrSLS jrSLS jrSNS jrSOS jrSLS jrSLS jrSHSPS jjr SH     SPS jjrSHSQS jjrSLS jrSLS jr SLS jr!SLS  jr"SLS! jr#SLS" jr$SHSPS# jjr%SLS$ jr&SLS% jr'SLS& jr(SLS' jr)SLS( jr*SLS) jr+SLS* jr,SLS+ jr-SRS, jr.SLS- jr/SLS. jr0SLS/ jr1SLS0 jr2SLS1 jr3SLS2 jr4SLS3 jr5SLS4 jr6SLS5 jr7SLS6 jr8SHSQS7 jjr9  SS         STS8 jjr:S9r;g)UGuardBuilderi  Nc           	        Xl         X l        X0l        X@l        XVS.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        [-        5       U l        U R*                  R0                  c   eU R*                  R0                  R2                   HD  nU R.                  R5                  [7        U R9                  UR;                  5       5      5      5        MF     0 U l        0 U l        [-        5       U l         / U l!        Xl"        [F        RH                  =(       a    [K        S5      U l$        [M        5       U l'        g )	NLG__builtins__>_<._dot_!pytorch/compiler:guard_nn_modules)(f_codeid_ref
source_reflookup_weakrefsscoperuntime_global_scopebuiltins__dict__copyr-  packagepackage_importer_package_imported_modulesr   r  r\  argnamesrA  shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managerr   key_order_guarded_dict_idsoutput_graphguard_on_key_orderr   idgetr  r   _cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codessave_guardsrP   guard_nn_modulesrD   rK   +already_guarded_not_present_in_generic_dict)r   rP  rQ  rR  rS  local_scoper   r\  r`  ri  rU  r  package_moduler^  s                 r   r   GuardBuilder.__init__  s    $.9D3X
$8$HL!%-%6%6%;%;%=

>" ]]++EEKKM
<<S)11#s;CCCQD/=JJ~&t,-JJt N +#%)+	
 46 46%EG.6F +.%'$$11===++88KKF++//488FKKM3J0KL L BD @B#DGE+BD(& & 7 7 !
O/=

 L 	8r   c                \   U R                  U5      n[        U[        5      (       a  [        SUR                   35      eUR
                  R	                  5       n[        U5       HE  nX   n[        UR
                  US9nU R                  Xq5      nUR                  UU SU< S3UUS9  MG     g )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )r  r!  r  r  r^  r#  r$  )
get_guard_managerr   r   NotImplementedErrorr  r5  r   r_   get_guard_manager_typedict_getitem_manager)	r   r#  rR  dict_mgrdict_sourcer  r  r1  r$  s	            r   #guard_on_dict_keys_and_ignore_order0GuardBuilder.guard_on_dict_keys_and_ignore_order  s     ))%0h 011%FFKjj\S  ..335 %]3C!&E,U-E-ESQL!%!<!<" ))%awa0##5	 *  4r   c                $   U R                  U5      n[        U[        5      (       d  [        SUR                   35      e[        U[        5      (       d   e[        [        U5      5       H  u  pE[        UR                  U5      nUR                  UUU[        R                  S9n[        U5      (       a6  U R                  XV5      nUR                  U[        SU SU S3U5      5        M  UR                  U[        U SU< 3U5      5        M     g )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r"  z__check_obj_id(rY  rZ  r%  )rq  r   r   rr  r  	enumerater   r  r(  r  r)  r   rQ  add_id_match_guardr  r*  )	r   r  rR  ru  r   r  r/  key_managerid_vals	            r   guard_on_dict_keys_and_order)GuardBuilder.guard_on_dict_keys_and_order)  s    ))%0($455%;;@::,H  ($45555 ""3E":;HC-ejj#>J"22!!#3#A#A	 3 K ~~S5..*)*RxqA5 22/:,d3'0JER' <r   c                    [         R                  (       aD  [        R                  S:  a0  [        R                  S:  a  [        R
                  " S[        5        g U $ )N)      )r  r  rO   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)rP   issue_3_13_0_warningsysversion_infowarningswarnRuntimeWarning)r#  s    r   '_get_generic_dict_manager_example_value4GuardBuilder._get_generic_dict_manager_example_valueO  sF     ''  G+  :-MM_ r   c           	     T                 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(       aR  [        UR                  U5      nUR                  5       nX   nU R!                  UU5      nUnUnU R!                  X5      nOUnUnU R!                  X5      nUR#                  UU R%                  U
5      [&        R(                  S
9nU" UUUU
UUS9nU(       a  U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/5        U R                  UUUUS9$ U R                  UUUUS9$ )Nr	  r
  r  r"  r%  rp  )	r   r   r  r(  r  r)  r*  r+  rt  )r  r  source_namer-  r#  r$  r  r/  s           r   getitem_on_dict_mgr>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr|  s     #/00 &&8>  /{m3uiqI
##%"%'7'E'E	 $ 
 )(T#/I.JK ,,&"/'9	 -   //&"/'9	 0  r   FNT_parameters_buffers_modulesattrr^  r#  r$  	.__dict__r^  r#  r$  )r  r  r  r-  r#  r$  )r  r   r  r   r  r   r-  r   r#  r   r$  r  r   r   )memberrW  r   r  getmror   updatekeysr  r  getattr_managerr  r  rU   r&  r  rs  get_generic_dict_managerr  r  r)  )r   r^  r,  r-  r#  r.  r  r$  r  	attr_namemod_dictall_class_attribute_namesrx  accessor_infor  r  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_module!GuardBuilder.getattr_on_nn_modulea  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;	!*!1#+ )-(C(CIx(X%!,((,(C(C)% "-((,(C(C)% (:'R'R&"JJ8T#3#A#A (S ($ ),*#+&#8F %16K6WWW* .'/"*'<  Mr   c                    UR                  5       nUS:X  a  g[        U R                  U5      5      nX0R                  ;   $ )Nro  F)r  rd  re  ra  )r   r^  r  obj_ids       r   requires_key_order_guarding(GuardBuilder.requires_key_order_guarding  s:    kkm"DHH[)*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   )	r  r)  r  r   r   r?  r   	frozensetr   )r   r^  r#  r$  s       r   rs  #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   )r  r?  )r   mgr_enums     r   manager_guards_on_keys#GuardBuilder.manager_guards_on_keys  s    +>>>>r   c                    U R                   R                  R                  U R                  SU R                  S   [
        R                  S9$ )NrH  )	f_globalsr^  r#  r$  )r\  r   globals_dict_managerrU  rT  r  r)  r   s    r   get_global_guard_manager%GuardBuilder.get_global_guard_manager  sF    !!&&;;//**S//==	 < 
 	
r   c           	     D  ^ U R                   R                  nS nTR                  5       nUS:w  a  X@R                  ;   a  U R                  U   $ US:w  a  U R	                  U5      nU R                  TU5      nS nS nS n[        R                  n	[        T[        5      (       ab  TR                  R                  5       nU R	                  U5      nU R                  TR                  5      nU R                  TR                  U5      n	[        T[        5      (       a_  [        U R                  5      n
[!        U
5      U
R#                  TR$                  5      -
  S-
  nUR'                  TR$                  U4UUUS9nG
O[        T[(        5      (       a,  U R+                  5       R-                  TR.                  UUUS9nG	O[        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O[        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Oh[        T[R        5      (       a  URQ                  U4S jUUUS9nGO;[        T[T        5      (       a  U(       d   eURW                  UUUS9nGO
[        T[X        5      (       a'  U(       d   eUR[                  TR\                  UUUS	9nGO[        T[^        [`        45      (       ap  U(       d   e[        T[^        5      (       d   e[c        U5      (       a"  U(       d   eU Re                  TUUUUUU5      nGOaURg                  TR\                  UUUS	9nGOC[        T[h        [j        45      (       a  U(       d   e[        U[l        [n        Rp                  45      (       d   e[        T[h        [j        45      (       d   e[        U[r        5      (       a)  U Ru                  U	5      (       d   e[w        TUUUU5      nGO[        TR"                  [x        5      (       a  [{        S
5      eUR-                  TR"                  UUUS9nGOU[        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[l        [n        Rp                  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Op[        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OUR                  nUc   eUS-   nUR                  UU[        R                  S9n[        U[r        5      (       a   eUR-                  TR                  UUUS9nGOw[        T[        5      (       a!  U(       d   eURQ                  [        UUUS9nGOA[        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Ou[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGOB[        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[x        5      (       a>  [        U[r        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OD[        T[        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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OO[        T[        5      (       a  U(       d   eUR                  UUUS9nO[        ST STR                  5        35      eXR                  TR                  5       '   U$ )Nro  rO   rp  )global_namer^  r#  r$  r  c                    [         $ r   )r-  )rK  s    r   r  <GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    r   )python_lambdar^  r#  r$  c                6   > [        TR                  5       5      $ r   )r   
_get_index)rK  r^  s    r   r  r    s    (H%%')r   r  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_ordertensor_property__manager)r   r^  r#  r$  zUse DictGetItemSourcez.__kwdefaults__c                (    U R                  5       S   $ r   __tensor_flatten__r  s    r   r  r  @  s    (<(<(>q(Ar   c                "    U R                  5       $ r   )__obj_flatten__r  s    r   r  r  H  s    (9(9(;r   c                >    U R                  5       R                  5       $ r   )_typequalified_namer  s    r   r  r  P  s    	(@(@(Br   c                "    U R                  5       $ r   )get_baser  s    r   r  r  X  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  h  s    (A(A!(Dr   r"  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   zmissing guard manager builder z - )nr\  r   r  rf  re  rs  r  r)  r   rX   r&  get_guard_manager_from_sourcer   rk   rB  rP  r  r  
local_nameframelocals_managerrf   r  rt  r  rh   global_weakref_managerrg   rr   ry   type_managerrw   type_dict_managerrx   type_mro_managerrp   rm   r{   rz   rc   ru   lambda_managerrt   ri   grad_managerrd   generic_getattr_managerr  rU   r|   r  r  r  r_   r`   r   r  r  r   r  r2  r\   RuntimeErrorr5   getattrproplowerr   r.   indexed_managerrj   list_getitem_managerre   r  index_is_slicer;  tuple_getitem_managerunpack_slicegetitem_managerr^   callableis_kwfunc_defaults_managerr   idx_keyr   func_kwdefaults_managerro   r  rs   ra   rq   rT   rW   rb   rv   tuple_iterator_getitem_managerAssertionErrorr(  rn   set_getitem_managerr}   weakref_call_managerrV   call_function_no_args_managerr]   rl   rZ   code_managerrY   closure_manager)r   r^  root_guard_managerr#  r  r$  r.  r-  r,  base_guard_manager_enumframelocals_names_reversedframelocals_idxoutr  
kwdefaults	kw_sourceru  s    `               r   r  *GuardBuilder.get_guard_manager_from_source$  s    !//44kkm"0K0K!K..{;;" HH[1M!88O  !!"2"@"@fm,,%{{//1!%*:!;!%!C!CFKK!P&*&A&A/'#
 &+&& *P*& ./,2263D3DEF 
 %88&&8"+#5	 9 C FL)) //1FF&&"+#5	 G C F/00//1HH".."+#5	 I C F-.. &%FN++%%FJ''%%%$11"+#5 2 C
 FN++%%%$66"+#5 7 C
 FM**%%%$55"+#5 6 C
 +2"	
 	
 &%%$CFK(($33-"+#5	 4 C F899$33 #+#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 !0FKKM?K  69##FKKM2
r   c                8    U R                  UR                  5      $ r   )r  r5  r   rR  s     r   rq  GuardBuilder.get_guard_manager  s    11%2J2JKKr   c                   Uc
  [        5       nSR                  UR                  5       5      n[        X5      u  pg0 nSU R                  S   0n	[
        R                  SU5        [        XyU5        US   " UR                  5       6 n
U(       a&  U R                  R                  R                  X5        g U R                  R                  R                  X5        g )NrY  rH  zPython shape guard function:
%s___make_guard_fn)r  joinr  build_guard_functionrT  
guards_logdebugexecvaluesr\  r   add_epilogue_lambda_guardadd_lambda_guard)r   r   r   r   is_epiloguemake_guard_fn_args_guard_bodypycoder  globals_for_guard_fnguard_fns              r   $add_python_lambda_leaf_guard_to_root1GuardBuilder.add_python_lambda_leaf_guard_to_root  s     ,.L "YY|'8'8':;2:R  #TZZ_5;VDV3/)*L,?,?,AB ##== ##44XRr   c                H    Uc
  [        5       n[        XR                  U5      $ r   )r  evalrT  )r   r  r   s      r   re  GuardBuilder.get  s!    ,.LD**l33r   c                P   [        U[        5      (       a  UnOUR                  n[        U5      nX0R                  ;  ag  [
        R                  R                  R                  U5      nU(       a7  US:X  a  [        R                  SU5        U R                  R                  U5        U$ )Nr>  zinvalid var name: %s)r   r   r  strip_function_callr\  r-  r  r  is_valid_var_namelogwarningr  )r   rR  r  r&  is_valids        r   arg_refGuardBuilder.arg_ref  s{    eS!!D::D"4(}}$xx''99$?Hq=KK 6>$$T*r   c                    U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  )rZ   r5  rU   r;   r  r  create)r   rR  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                  5       nUR                  nU R                  U5      n[        U R                  U5      U5      nS nU(       a  SU SU< S3nO
SU SU< S3nU R                  X/U R                  U5      S9  U R                  U5      n	U(       a  U R                  UR                  5       5      n
U R                  U5      nU R                  X*5      n[        U5      (       a&  U R                  UU	UU
UUR                  5       U5        g U	R!                  UUR                  U
US9  g U	R#                  U[%        X5      5        g )Nzinvalid source hasattr(rY  rZ  znot hasattr()provided_guarded_objectr  )r5  r   rm   r&  rZ   rU   r  r  r  rq  re  _set_guard_export_infor  rs  r  r  r  add_no_hasattr_guardr  )r   rR  r^  base_sourcer&  r  refvalrA  base_managerr#  r-  r$  s                r   HASATTRGuardBuilder.HASATTR  s   ))fn--[[Ffj))&*--M/MM-kk!}}ll4 dhhtnd+cU"THA.D!#b2D##6488D> 	$ 	
 99+F !HHV[[]3M!%$!%!<!<V!S 44FGG)) &!KKM& ,, ::"/'9	 -  --d4J44WXr   c                   Uc   eU R                  U5      nU R                  UR                  5      nU R                  U5      nX24U R                  ;   a  g UR                   S3nUR                  UU R                  UR                  5      [        R                  S9nSU< SU S3nUR                  SU[        X5      5        U R                  R                  X245        g )Nr  r  znot ___dict_contains(rY  z
.__dict__)F)r  re  r  rq  rk  r  r  rW  r  r)  add_dict_contains_guardr  r   )	r   rR  r  r)  r*  r+  r  r  rA  s	            r   NOT_PRESENT_IN_GENERIC_DICT(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICTB  s     ll5!hhuzz"--e4;$JJJ"ZZL	2#/#H#H"FFs||T/== $I $
  'thbZ@ 884/<	
 	88<<c[Ir   c                   U R                  UR                  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SU R                  U5       SU S3nU R                  X/5        U R                  U5      R                  U[!        XQ5      5        g )NTtype(rZ  z___check_type_id(rY  )re  r  r   r-  _subclasses
FakeTensorr  r=  r   r   _unserializablerQ  r  r&  rq  add_type_match_guardr  )r   rR  r  r_  r  rA  s         r   
TYPE_MATCHGuardBuilder.TYPE_MATCH[  s    $eU..99::u||AUA>>QZZ' %)E!Q%

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

34!#eG95##E62 	u%<<'4	
r   c                    U R                  U5      nU(       a  SOSnU SU< SU S3nU R                  X/5        U R                  U5      R                  U(       + U[	        Xa5      5        g )Nnot ro  z___dict_contains(rY  rZ  )r  r&  rq  r/  r  )r   rR  r  invertdict_ref	maybe_notrA  s          r   DICT_CONTAINSGuardBuilder.DICT_CONTAINS~  sj    <<&$F"	-cWBxjB##E62u%==J3D@	
r   c                    U R                  U5      nUnU(       + nSU SU< S3nU R                  X/5        U R                  U5      R                  Xe[	        Xq5      5        g )Nzset.__contains__(rY  rZ  )r  r&  rq  add_set_contains_guardr  )r   rR  r  rB  set_refr  containsrA  s           r   SET_CONTAINSGuardBuilder.SET_CONTAINS  sd    ,,u%:"7)2dXQ7##E62u%<<24?	
r   c                r   U R                  U5      nU R                  UR                  5      n[        U[        5      (       d   eU SU< 3/nU R                  X5        U(       a*  U R                  U5      R                  [        XA5      5        g U R                  U5      R                  [        XA5      5        g )Nr%  )
r  re  r  r   r   r&  rq  add_true_match_guardr  add_false_match_guardr   rR  r)  r*  rA  s        r   
BOOL_MATCHGuardBuilder.BOOL_MATCH  s    ll5!hhuzz"c4    %tC7#$##E0""5)>>&t3 ""5)??&t3r   c                    U R                  U5      nU R                  UR                  5      nUb   eU S3/nU R                  X5        U R	                  U5      R                  [        XA5      5        g )Nz is None)r  re  r  r&  rq  add_none_match_guardr  rP  s        r   
NONE_MATCHGuardBuilder.NONE_MATCH  sj    ll5!hhuzz"{{%x !##E0u%::"4/	
r   c                $    U R                  X5      $ r   )id_match_unchecked)r   rR  r  s      r   ID_MATCHGuardBuilder.ID_MATCH  s    &&u==r   c                   [        UR                  [        5      (       a=  U R                  [	        UR                  R
                  [        R                  5      5      $ U R                  U5      nU R                  UR                  5      nU R                  XAR                  5      nSU SU S3nU R                  X/SS9  U R                  U5      R                  U[        XaU5      5        [        UR                  [        5      (       ad  [        U[         R"                  R$                  5      (       a:  UR                  R&                  nU R)                  U5      nUb  XR*                  U'   g g g g )Nz___check_obj_id(rY  rZ  rY  )provided_func_name)r   r5  ry   r8  r;   r&  rD  r  re  r  rQ  r&  rq  r{  r  rk   r-  r1  r2  r  rS  r   )	r   rR  r  r)  r*  r}  rA  r  weak_ids	            r   rX  GuardBuilder.id_match_unchecked  s7    e..
;;??e..33\5L5LM  ll5!hhuzz"S**-!#b2##E6j#Qu%88*4G	
 e..<< #uxx//"55@@
..s3&7>((4 ' 0	 =r   c                   U R                  U5      nU R                  UR                  5      n[        U[        R
                  5      (       d   eU S3nU R                  X/5        U R                  U5      R                  [        XQ5      5        g Nz is not None)
r  re  r  r   r-  r.  r&  rq  add_not_none_guardr  )r   rR  r  r)  r*  rA  s         r   NOT_NONE_MATCHGuardBuilder.NOT_NONE_MATCH  sv    ll5!hhuzz"#u||,,,,l###E62u%88"4/	
r   c                   U R                  U5      nU R                  UR                  5      n[        U[        R
                  R                  5      (       d   eU SU< S3nU R                  U5      R                  U[        XA5      5        g )Nz.raw_repr() == z.raw_repr())
r  re  r  r   r-  r  r   rq  add_dispatch_key_set_guardr  )r   rR  r)  r*  r   s        r   DISPATCH_KEY_SET_MATCH#GuardBuilder.DISPATCH_KEY_SET_MATCH  su    ll5!hhuzz"#uxx667777uOC7+>
u%@@'
:	
r   c                F    U R                  US[        R                  5        g )Nr   )r!  rD  EQUALS_MATCHr  s     r   
NAME_MATCHGuardBuilder.NAME_MATCH  s      
L4M4MNr   c                L  ^^ U R                   R                  c   eU R                   R                  R                  mST 3/nU R                  X5        [        R
                  R                  mSUU4S jjnU R                  R                  R                  U[        X!5      5        g )Nz,torch.autograd.forward_ad._current_level == c                "   > TR                   T:H  $ r   )_current_level)rx  
dual_level
forward_ads    r   fn#GuardBuilder.DUAL_LEVEL.<locals>.fn  s    ,,
::r   r  )r`  rb  ro  r&  r-  autogradrp  r\  r   r	  r  )r   rR  rA  rq  ro  rp  s       @@r   
DUAL_LEVELGuardBuilder.DUAL_LEVEL  s     $$11===**77BB
>zlKL##E0^^..
	; 	; 	00&t3	
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      5        g s  snf )Nz5torch._functorch.pyfunctorch.compare_functorch_state(rZ  c                   > T" T5      $ r   r   )rx  
compare_fnstatess    r   rq  .GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn
  s    f%%r   r  )r`  rb  functorch_layers	get_stater&  r-  
_functorchpyfunctorchcompare_functorch_stater\  r   r	  r  )r   rR  ciscirA  rq  rx  ry  s         @@r   FUNCTORCH_STACK_MATCH"GuardBuilder.FUNCTORCH_STACK_MATCH  s     $$11===##00AA+./3R,,.3/GxqQR##E0 %%11II
	& 	& 	00&t3	
 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      5        g )Nc                Z   > T" U 5      (       d  g U u  p[        [        [        U 5      5      $ r   )r;  maprd  )hooks	pack_hookunpack_hookare_inline_hookss      r   hooks_ids_fn?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fn  s,     $E**%*"IR((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == c                $   > TT" T" 5       5      :H  $ r   r   )rx  	get_hooksguard_hooks_idsr  s    r   rq  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_inlineabler&  r\  r   r	  r  )r   rR  rA  rq  r  r  r  r  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKS)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS  s    $$2288PP	**00SS 		)V	)&	) 'y{3 RRaQbc
 	##E0	@ 	@ 	00&t3	
r   c                  ^^ U R                  UR                  5      m[        U R                  UR                  5      R                  5       S   5      m[	        TS5      (       a  [        T5        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[        X15      5        g )NrO   __metadata_guard__c                J   > TR                  TU R                  5       S   5      $ NrO   )r  r  )rx  original_metadatar  s    r   metadata_checkerEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker4  s)    //%q';';'=a'@ r   c                0   > U R                  5       S   T:H  $ r  r  )rx  r  s    r   r  r  ;  s    ++-a04EEEr   ___check_metadata__cr  )re  r  r   r  rq  r   rd  r8   current_compile_idrq  r	  r  )r   rR  r  r  r  r  s       @@r   TENSOR_SUBCLASS_METADATA_MATCH+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.  s    $$TXXejj%9%L%L%Nq%QR5.//%e, F +2.>+?*@>CdCdCfBghu%664[H	
r   c                   U R                  U5      nU R                  UR                  5      n[        (       a  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  4nOSn[        [         4n[#        [$        [&        ["        [(        [*        [,        [.        [0        R2                  1UkUk-  5      n[0        R4                  R7                  5       (       a  SSKJn  SSKJn	J n
J!nJ"n  UUUU
UU	4-   nSSK#J$n  X}4-   nSS K%J&s  J'n  [Q        XG5      (       d3  URR                  " ['        U5      5      (       d   S['        U5       35       e[Q        U[T        5      (       a  [V        RX                  " U5      (       ao  U R[                  U5        / nUR]                  SU S35        U R_                  X5        U Ra                  U5      Rc                  [e        5       S	   [g        X5      5        g [Q        U[h        5      (       a  [        RX                  " U5      (       ao  U R[                  U5        / nUR]                  S
U S35        U R_                  X5        U Ra                  U5      Rc                  [e        5       S   [g        X5      5        g U SU< 3/n[Q        XF5      (       a  [k        U5      n[g        X5      nU(       a  U Vs/ s H  nU SU S3PM     nnU Ra                  U5      Rm                  UU5        U R_                  X5        g s  snf )Nr   r   )
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z__math_isnan(rZ  r  z__numpy_isnan(r  r%  r  )7r  re  r  r  int8int16int32int64uint8uint16uint32uint64float16float32float64r  r   r;  r   r=  r  sliceranger   r-  Sizedistributedis_availabletorch.distributed.device_meshr  (torch.distributed.tensor.placement_typesr  r  r  r  torch.export.dynamic_shapesr  torch.utils._pytreer  rJ   r   is_constant_classr  r  r  r8  r  r&  rq  r	  r  r  complexr   r*  )r   rR  r  r)  r*  np_typesok_mutable_typesok_typesr  r  r  r  r  r  pytreerA  r   rU  s                     r   ri  GuardBuilder.EQUALS_MATCHC  s   ll5!hhuzz"2						





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


 
 "

 ))++@   # H 	<n,,,c$$(@(@c(K(K 	
tCyk*	
K
 #u$**S//OOE"DKK-uA./''4""5)::!#N3&t3  #wBHHSMMOOE"DKK.Q/0''4""5)::!#O4&t3  %tC7#$#(( 3-C3D@?Q"?Qt4& 02?Q  " 	u%<<SBTU##E0"s   ?Nc                6   U R                  UR                  5      n[        U[        5      (       a  U R	                  U5        g Uc  U R                  U5        g [        U[        R                  5      (       a  U R                  U5        g U R                  U5        g r   )
re  r  r   r   rQ  rU  r3  CodeTyperY  ri  r   rR  r*  s      r   CONSTANT_MATCHGuardBuilder.CONSTANT_MATCH  si    hhuzz"#tOOE"[OOE"C((MM% e$r   c                t   U R                  US5        U R                  UR                  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.Modulero  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)rY  re  r  rq  r   r  r   rj  r!  rD  r  rR   unimplemented_v2r=  r  s      r   	NN_MODULEGuardBuilder.NN_MODULE  s    eDEhhuzz"3
###,,----((((
L<W<WX )   G''+Cyk5 `r   c                $    U R                  U5      $ )z0things like torch.add and user defined functions)rY  r  s     r   FUNCTION_MATCHGuardBuilder.FUNCTION_MATCH  s     }}U##r   c                >   U R                  UR                  5      n[        U5      [        R                  :X  aT  [        US5      (       aC  U R                  US[        R                  5        U R                  US[        R                  5        gU R                  U5        g)z!matches a closure by __code__ id.r   N)
re  r  r=  r3  r4  rq  r!  rD  r,  r  r  s      r   CLOSURE_MATCHGuardBuilder.CLOSURE_MATCH  sr     hhuzz"9***wsJ/G/G$$UJ8L8LM$$UJ8S8ST&r   c                   U R                   (       ai  [        UR                  [        5      (       a9  U R                  R
                  R                  UR                  R                  5        U R                  U5      $ U R                  U5      $ r   )
ri  r   r5  r_   r`  used_builtin_varsr   r  rX  rY  r  s     r   BUILTIN_MATCHGuardBuilder.BUILTIN_MATCH  sj    %224EFF%%77;;,,22 **511}}U##r   c                N   U R                  U5      nU R                  UR                  5      n[        U[        5      (       d  U R                  U5        / n[        U5      S:X  a  UR                  SU 35        O UR                  SU S[        U5       35        U R                  X5        [        U[        5      (       a4  U R                  U5      R                  [        U5      [        XA5      5        g U R                  U5      R                  [        U5      [        XA5      5        g )Nr   rA  zlen(r;  )r  re  r  r   r   r8  r  r  r&  rq  add_dict_length_check_guardr  add_length_check_guardr   rR  r)  r  rA  s        r   SEQUENCE_LENGTHGuardBuilder.SEQUENCE_LENGTH  s     ll5!$%&&OOE"u:?KK$se%KK$se5U56##E0eT""""5)EEE
24? ""5)@@E
24?r   c                   U R                  U5      nU R                  UR                  5      n[        U5      n/ nUR	                  SU S[        U5       35        U R                  X5        [        U5      nU R                  USUR                   S35      nU R                  U5      R                  [        U5      U[        XQ5      5        g )Nz___tuple_iterator_len(r;  r3  rZ  )r  re  r  r=  r  r   r&  rQ  rq  add_tuple_iterator_length_guardr  )r   rR  r)  r  r_  rA  r  s          r   TUPLE_ITERATOR_LENGuardBuilder.TUPLE_ITERATOR_LEN	  s    ll5!$K,SE7I%7P6QRS##E0KQ%

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

|1 561Tu%DD'=d'J	
r   c                r   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       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      5        g )N is r   )ri  r-   r`  additional_used_local_varsr   r,   additional_used_global_varsr  r  r1   r5  rg  r&  rP   #use_lamba_guard_for_object_aliasingr  rh  r  r!   rq  r  )
r   rR  source_br  ref_aref_br  rA  r  r  s
             r   DUPLICATE_INPUTGuardBuilder.DUPLICATE_INPUT&	  sq   ,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      5        g r`  )r  r&  rq  ra  r  r   rR  rA  s      r   WEAKREF_ALIVEGuardBuilder.WEAKREF_ALIVEN	  sJ    <<&'|45##E0u%88"4/	
r   c           	        U R                  U5      nU R                  UR                  5      n/ nUR                  SU S[	        UR                  5       5       35        U R                  X5        U R                  U5      R                  X45        g)z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	r  re  r  r  r  r  r&  rq  add_mapping_keys_guardr  s        r   MAPPING_KEYS_CHECKGuardBuilder.MAPPING_KEYS_CHECKV	  ss    ll5!$eC5T%**,-?,@AB##E0u%<<UIr   c           
        U R                  U5      nU R                  UR                  5      nU[        R                  R
                  R                  L a  U R                  U5        gU R                  U5        / nUR                  SU S[        [        U5      5      < 35        U R                  X5        U R                  UR                  5      (       a  U R                  X15        gU R!                  X15        g)z6Insert guard to check that the keys of a dict are sameNr	  z)) == )r  re  r  r-  r  rJ   SUPPORTED_NODESr>  r  r  r  r   r&  r  r5  r~  rw  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)rP   skip_nnmodule_hook_guardsr  r  s     r   EMPTY_NN_MODULE_HOOKS_DICT'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICTy	  s    ++U#r   c                    g r   r   r  s     r   	GRAD_MODEGuardBuilder.GRAD_MODE	      r   c                    g r   r   r  s     r   DETERMINISTIC_ALGORITHMS%GuardBuilder.DETERMINISTIC_ALGORITHMS	  r  r   c                    g r   r   r  s     r   TORCH_FUNCTION_STATE!GuardBuilder.TORCH_FUNCTION_STATE	  r  r   c                    g r   r   r  s     r   FSDP_TRAINING_STATE GuardBuilder.FSDP_TRAINING_STATE	  r  r   c                2   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      5        g)z/Guard on CURRENT_DEVICE per torch.utils._deviceNzutils_device.CURRENT_DEVICE == )
r^  r>   GLOBALr`  rb  current_devicer&  rq  add_default_device_guardr  r  s      r   DEFAULT_DEVICEGuardBuilder.DEFAULT_DEVICE	  s    ||{11111$$11===-d.C.C.P.P._._-bc
 	##E0u%>>"4/	
r   c                z  ^ ^%^&^'^( 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                  m&T& Vs/ s H  oR                  PM     snm'SU(4S jjn	T(R                  c   e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R                  5       0 [\        E[_        5       ES9n[        U[`        5      (       a  URc                  UU45        Mw  [        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                  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   ro  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  r^  rb  s      r   get_sources+GuardBuilder.SHAPE_ENV.<locals>.get_sources	  sD    
 #/"I"I$"O"O )1D1DcJ"O  s   %;z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlyc           
        > TR                   R                  T Vs/ s H  oR                  PM     snT Vs/ s H  oR                  PM     snTTTR                  TR
                  (       + U S9$ s  snf s  snf )N)input_contextsequalities_inputsrR  ignore_staticlangs)	shape_envproduce_guards_verbosefaker^  rR  export)r-  r  r+  r  r*  rb  r   s     r   _get_code_parts/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts	  sl    #--DD%'(RVVR(')*r!XXr*#1&7#'3':':#: E 	 	(*s
   A.A3
)pythonverbose_pythoncppT)r4  r5  cpp_code_parts)python_code_partsr   r7  python_fallbackshape_env_sources)r   )CppCodeCacherY  c              3  <   #    U  H  u  nu  p#U S U S3v   M     g7f)z = int_values[r  Nr   r  irK  symbols       r   r  )GuardBuilder.SHAPE_ENV.<locals>.<genexpr>H
  s*      ,*I;A hnQCq1*I   c              3  <   #    U  H  u  nu  p#U S U S3v   M     g7f)z = float_values[r  Nr   r=  s       r   r  r@  L
  s+      .*K;A h.qc3*KrA  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)r!  r'  r  r'  r   list[Source])r-  ztuple[str, ...]r   zlist[_ShapeGuardsHelper])Jtorch._dynamo.output_graphr   r  r`  rb  shape_code_partsr8  r   r7  r9  r   tracked_fakessymbolic_contextr.  export_constraintsr   r!  r  r-  r1  dynamic_shapes_process_equalitiesr  r  rG   r  r  rP    enable_cpp_symbolic_shape_guardsOverflowErrorfreezeri  localsre  rE   source_to_symbolr  ShapeCodePartsexprsr&  r8   try_getshape_env_guardsr!  r   r[   rI   r  r'  r  r  ctypestorch._inductor.codecacher;  r   rz  r  r.   r  textwrapdedentr  r  loadcastrR  c_void_pr  r#   r  	_inductorrR   InvalidCxxCompilerr  ))r   rR  r   rF  r8  r   r7  r9  r  r"  namesr$  r%  r&  r'  
constraintr2  maybe_cpp_code_partsmaybe_shape_env_sourcesrA  compile_contextint_source_to_symbolfloat_source_to_symbolr   rP  r^  r?  r#  rU  r;  r>  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardr+  r  r*  rb  s)   `                                    @@@@r   	SHAPE_ENVGuardBuilder.SHAPE_ENV	  s/   :zzR,,99'''  11=#44EE 0 B B!1!D!D..:!1!@!@.>>O lK8888++B:<="Q00"=N  ))555..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  #k >| % &*O<K4=9%'9n"^ ??&&99 s=   W'!W, X (X	8C9X ,XX	X (X:9X:c                
   [         R                  (       a  UR                  5       (       a  g [        U5      (       a  U R	                  U5        g [        U[        5      (       a  U" 5       nUb  UOU R                  UR                  5      n[        U5      n[        R                  R                  U5      n[        U[        R                  R                  5      (       a2  UR                  b  UR                  nUR                   b  UR                   n[        U[        R"                  5      (       d   e[         R$                  (       a  [        U[        R&                  R(                  5      (       aX  [+        5       nUR-                  SUR/                  5       5        UR-                  SUR0                  5        UR-                  SS5        U R3                  U5      n/ nU R4                  R6                  c   eU R4                  R6                  R8                  (       a  U R;                  U5        / SQnU H  n	U R                  US-   U	-   5      n
[=        U
[        R>                  [        R@                  45      (       a&  URC                  SU SU	 S[E        U
5      < 35        Mo  URC                  U SU	 S	U
 35        M     GOU RG                  U5      n[         RH                  (       aC  [=        U[        R&                  R(                  5      (       do  [K        URL                  5      (       dU  [        URL                  [N        5      (       d6  U RP                  RC                  U5        U RR                  RC                  U5        U R4                  R6                  nURT                  URL                     n[W        US
   5      n[W        US   5      n[Y        [[        UUUUUU5      U5      nUR]                  UUUUUUU5        [        U[        R&                  R(                  5      (       d/  U R^                  R`                  Rc                  UR                  5        URd                  c   e[g        USURL                  S9u  nnU(       d  [i        US5      (       aU  URj                  nSU SU SU S3nURC                  U5        U RG                  U5      Rm                  U[Y        UU5      5        OBSU S3nURC                  U5        U RG                  U5      Ro                  S[Y        UU5      5        [q        U5      S:  a  U Rs                  X5        g g )Nparam_numelparam_bytesparam_countrO   )r  r  r  zndimension()rM  zstr(r;  r%  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)r$  z%, '_dynamo_dynamic_indices') == Falser   ):rP   _unsafe_skip_fsdp_module_guardsis_fsdp_moduler8  rY  r   rN   re  r  r=  r-  r  _dispatch_keysr4  r5  r  r  r.  log_compilation_metricsr1  	Parameterr7   	incrementnumelnbytesr  r`  rb  r1  r8  r   r  r  r  r   rq  ,skip_no_tensor_aliasing_guards_on_parametersr3   r5  ro   r^  r_  input_source_to_sizes_stridesr  r  r  add_tensor_match_guardr\  r   r   r^  r   rq  ru  add_dynamic_indices_guardr'  r  r&  )r   rR  r  r  r  metrics_contexttensor_namerA  termsterm
real_valuer\  rb  metadatarq  rr  r   static_reasondynamic_indicesr  s                        r   TENSOR_MATCHGuardBuilder.TENSOR_MATCH
  su   11e6J6J6L6L "%((MM% %//".EDHHUZZ4HE%[F!HH33E:M%!2!2!=!=>><<+"\\F&&2$)$7$7MeU\\2222--*UEHHDVDV2W2W"5"7))-G))-F))-;,,u-K, !D((55AAA$$1188& "D!%+*;d*B!CJj5<<*EFFd;-qeC
OCV$WX{m1TF$zl$KL " !% 6 6u = GGuehh&8&899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')?	5)Q #;-/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_backrP  co_namer   rW  r  re  weakrefr)  r=  r  r   enumEnumr;  
ProxyTypesset_export_info)r   rR  r;  r%  r\  	cur_framecaller	func_namer  guarded_objectguarded_object_typeobj_refsupports_weakrefs                r   r&  #GuardBuilder._set_guard_export_infoC  s0    !N	$$$!!!!!&?&--*?*?	NN333 	
VW`Vab	
3
 #*::D)-T488D>N4N 2@1KGKK^,-QU 	  N,,.A1EJ 	 JTYYw/A/AB%
 %
 kk.1G		
r   )rg  rf  rk  r\  r`  rA  rP  r\  rj  r   rQ  ra  rS  r_  r^  rh  rU  ri  rT  r]  rR  )FN)rP  types.CodeTyperQ  zCallable[[object, str], int]rR  zCallable[[Source], str]rS  z1Callable[[object], Optional[weakref.ref[object]]]rl  dict[str, object]r   r  r\  r   r`  CheckFunctionManagerri  r   rU  r  r   r   )r#  dict[Any, Any]rR  r;   r   r   )r  r  rR  r;   r   r   )r#  r   r   Optional[Any])r^  rU   r,  r   r-  r   r#  r   r.  r   r  r   r$  r  r   r   )r^  r?   r   r   )r^  r?   r#  zHOptional[Union[KeysView[Any], set[Any], frozenset[Any], dict[Any, Any]]]r   r  )r  r  r   r   )r   r   )r^  r?   r   r   )rR  r;   r   r   r  )
r   r  r   r  r   r  r
  r   r   r   r   )r  r   r   Optional[dict[str, Any]]r   r   )rR  zUnion[str, Guard]r   r   )rR  r;   r  r   r  z(Callable[[GuardBuilderBase, Guard], Any]r   r   )rR  r;   r   r   )rR  r;   r  r  r   r   )rR  r;   r  r   rB  r   r   r   )rR  r;   r  r   rB  r   r   r   )rR  r;   r  r  r   r   )rR  r;   r  r  r   r   )rR  r;   r  r?   r   r   )NN)
rR  r;   r;  r  r%  r  r\  r  r   r   )<r   r   r   r   r   rw  r~  r6  r  r  r  rs  r  r  r  rq  r  re  r  r!  r,  r0  r8  r>  rE  rK  rQ  rU  rY  rX  rb  rf  rj  rt  r  r  r  ri  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  rk  r  r&  r   r   r   r   rD  rD    s    "<@GG -G ,	G
 KG 'G (G +G /G G :G 
GR+49	<$L  "YY )Y  	Y
 Y Y Y -Y 
Yv9""
" 
",?
VpL 59 SS &S 2	S
 S 
SF4   ;	
 
"3Yl 37JJ"/J	J2
*
	

"

> =A??,9?	?>	

O
"
&
:
*jX	%($
	'	$4
 
&&P
JC2$
n`v9z 26,01
1
 1
 "/	1

 *1
 
1
 1
r   rD  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  rO   c                  *    \ rS rSr% S\S'   S\S'   Srg)PyExprCSEPass.Configi  zdict[str, int]
expr_countzdict[str, str]expr_to_namer   Nr<  r   r   r   Configr    s    ""$$r   r  c                  6   ^  \ rS rSrSS jrSU 4S jjrSrU =r$ )PyExprCSEPass.ExprCounteri  c                    Xl         g r   _config)r   rP   s     r   r   "PyExprCSEPass.ExprCounter.__init__  s    !Lr   c                   > [        U[        R                  5      (       a*  U R                  R                  [        U5      ==   S-  ss'   [        TU ]  U5        g r  )r   r  ALLOWED_NODE_TYPESr  r  r  r   r   )r   r   r   s     r   r   PyExprCSEPass.ExprCounter.visit  sA    $ @ @AA''T(:;q@;GM$r   r  )rP   r  r   r   )r   ast.ASTr   r   r   r   r   r   r   r   r   r   r   s   @r   ExprCounterr    s    	"	  	 r   r  c                  H   ^  \ rS rSr      SU 4S jjrSU 4S jjrSrU =r$ )PyExprCSEPass.Replaceri  c                H   > [         TU ]  5         Xl        X l        / U l        g r   )r   r   r  	_gen_namepreface)r   rP   gen_namer   s      r   r   PyExprCSEPass.Replacer.__init__  s!    
 G!L%N&(DLr   c                J  > [        U[        R                  5      (       a  [        U5      nU R                  R
                  U   [        R                  :  a  X R                  R                  ;  ac  [        TU ]%  U5      n[        U5      nU R                  5       nU R                  R                  U SU 35        XPR                  R                  U'   OU R                  R                  U   n[        R                  " U[        R                  " 5       5      $ [        TU ]%  U5      $ )Nz = )r   r  r  r  r  r  USE_THRESHOLDr  r   r   r  r  r  r  NameLoad)r   r   exprnode_expr_var_namer   s         r   r   PyExprCSEPass.Replacer.visit  s    $ @ @AA#D) <<**40=3N3NN<<#<#<< !&d 3 ,U 3#'>>#3++xjE7,CD:B11$7#'<<#<#<T#B88Hchhj997=&&r   )r  r  r  )rP   r  r  zCallable[[], str]r   r   )r   r  r   r   r  r   s   @r   Replacerr    s.    	)(	) (	) 		)	' 	'r   r  c                f    SU l         U R                  [        R                  " S 5      0 S9U l        g )Nr   c                     gr   r   r   r   r   r  (PyExprCSEPass.__init__.<locals>.<lambda>  s    qr   )r  r  )_counterr  r  defaultdictr  r   s    r   r   PyExprCSEPass.__init__  s.    {{"..y9 # 
r   c                P    U U R                    3nU =R                   S-  sl         U$ r  )r  )r   r   r  s      r   _new_varPyExprCSEPass._new_var  s'    $--)r   c                    U R                  U R                  5      nU H)  n UR                  [        R                  " U5      5        M+     g ! [
         a'  n[        R                  SUR                  U5        e S nAff = f)Nz#Failed to visit expr at line %s.
%s)	r  r  r   r  parseSyntaxErrorr  	exceptionlineno)r   rR  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   )rR  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   r5  r^   rP    guard_nn_modules_using_dict_tags	create_fnrD  r  )rR  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)rQ  i  rF   r8  r   zOptional[_CppShapeGuardsHelper]r7  r   r9  rD  r:  r   Nr<  r   r   r   rQ  rQ    s     ))**33##r   rQ  c                  *    \ rS rSr% S\S'   S\S'   Srg)GuardsStatei  r   rb  Optional[ShapeCodeParts]rF  r   Nr<  r   r   r   r  r    s    ((..r   r  c                      \ rS rSrSrg)_Missingi  r   N)r   r   r   r   r   r   r   r   r  r    s    r   r  c                  "  ^  \ 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rSrU =r$ )GuardsStatePickleri  c                   > [         TU ]  " U0 UD6  [        R                  R	                  5       U l        [        R                  R                  R                  5       U l        g r   )	r   r   r-  r4  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converter)r   r   kwargsr   s      r   r   GuardsStatePickler.__init__  sH    $)&)**99; % 1 1 = = Q Q Sr   c                d    [         R                  R                  5       nUR                  U5        U$ r   )r-  r1  r2  __setstate__)clsstatemods      r   _unpickle_module#GuardsStatePickler._unpickle_module  s%    hhoo
r   c           	        [         R                  R                  5       n[         R                  R                  R	                  5       nUR                  UUUU[         R                  R                  R                  U5      5      nXXl	        U$ r   )
r-  r4  r  r  r   from_meta_and_devicer  r   from_raw_reprgrad)	r  meta_tensorr  r  dispatch_keys_rawr  r  r  rets	            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   )
shaperr  r=  __tensor_unflatten__r  r-  r  r   r  r  )r  r  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   r  )r  raw_reprs     r   _unpickle_dispatch_key_set-GuardsStatePickler._unpickle_dispatch_key_setC  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_interpreterG  s%     xx""//;;DAAr   c                .    [         R                  " U5      $ r   )r3  MappingProxyType)r  ds     r   _unpickle_mapping_proxy*GuardsStatePickler._unpickle_mapping_proxyM  s     %%a((r   c                J    [        [        R                  R                  U5      $ r   )r  r-  opsr  )r  r  s     r   _unpickle_c_op!GuardsStatePickler._unpickle_c_opS  s    uyy||T**r   c                   SS K n[        U[        R                  5      (       Gal  UR                  R
                  S:w  GaQ  SSKJn  U" U5      (       a  / nUR                  5       u  pVU H4  n[        X5      nU R                  U5      u  pUR                  XyU
45        M6     [        U 5      R                  [        R                  " USS9UR                  [        U5      [        R                  R                  U5      R!                  5       UU44$ [        U 5      R"                  [        R                  " USUR$                  S9UR                  [        U5      [        R                  R                  U5      R!                  5       UR&                  44$ [        U[        R(                  R*                  5      (       a  [        U5      R,                  [        U5      R.                  :X  a  [0        $ UR2                  R4                  [        R(                  R*                  R4                  :X  a&  [        U 5      R6                  UR5                  5       44$ GO[8        R:                  " U5      (       a"  [        U 5      R<                  UR.                  44$ [        U[        R                  R>                  5      (       a&  [        U 5      R@                  UR!                  5       44$ [        U[        R                  RB                  RD                  5      (       a&  [        U 5      RF                  URI                  5       44$ [8        RJ                  " U5      (       aW  [M        XRN                  5      (       a=  [Q        US5      (       a,  [Q        US5      (       d   eURR                  URT                  44$ [        U[        RV                  5      (       a  [Y        SU S	URZ                   S
35      e[        U[\        R^                  5      (       a&  [        U 5      R`                  URc                  5       44$ [        U[        Rd                  Rf                  5      (       aB  URh                  Rk                  S5      (       a"  [        U 5      Rl                  UR.                  44$ UR2                  Rn                  S:X  a"  UR2                  R.                  S:X  a  [p        S4$ [        U[\        Rr                  5      (       a  [p        S4$ [8        Rt                  " U5      (       aP  URv                  Rx                  [8        Rz                  -  (       a$  UR,                  UR.                  :w  d   e[p        S4$ [        U5      R,                  [        U5      R.                  :w  a?  [        R|                  R~                  R                  S[        U5       SU S3S-   S-   5      e[0        $ )Nr   meta)is_traceable_wrapper_subclass)r  )r  r  _torch_handler_name_torch_unpicklerzCannot serialize SymInt z (node: rZ  z_C::rV  	PyCapsuler   r  r  r  r  r  )Asympyr   r-  r.  r  r=  torch.utils._python_dispatchr9  r  r  reducer_overrider  r  
empty_liker  rx  r%  r  r  r  r1  r2  r   r   NotImplementedr   __getstate__r	  r  ismoduler"  r   r&  r}  r)  r,  	serializeisclassr  Functionrq  r;  r:  r  r  r   r3  r/  r1  rX  _opsOpOverloadPacket_qualified_op_name
startswithr5  r   r  r  
isfunctionr   co_flags	CO_NESTEDr  rR   PackageError)r   r  r=  r9  r  attrsr  r  innerfunc
args_tuples              r   r?  #GuardsStatePickler.reducer_overrideW  st    	c5<<((SZZ__-FR,S11  
 335
!D#C.E'+'<'<U'C$D%%t:&>? "
 DzFF$$S8JJIHH++C099;I   :..  V3CTCTU

S	'',5571   UXX__--Cy%%c););;%%}}))UXX__-I-IIDz22S5E5E5G4III J c"":55FFUXX4455:883<<>:KKKUXX00==>>:==?QQQ OOC  3//2333 23333''#*A*A)CCCU\\**!9#hsxxjPQRSSU3344:55
}DD,,
 
$$//77:,,s||o== MM$$
2&&+5 R<U^^,,R<$$#,,*?*?'BSBS*S##s||333R<9!!T#Y%7%77--##00S	{,se3DETUTU  r   )r  r  )r   r   r  r   r   r   )r  r   r   ztorch.nn.Module)r  torch.Tensorr  torch.devicer  r=  r  r'  r  rT  r   rT  )r  rT  r  rU  r  r=  r  r'  r  r   r  z5list[tuple[str, Callable[..., Any], tuple[Any, ...]]]r   rT  )r!  r   r   ztypes.ModuleType)r%  r'  r   ztorch._C.DispatchKeySet)r+  bytesr   z torch._C._functorch.CInterpreter)r0  r  r   z types.MappingProxyType[Any, Any])r  r   r   r   )r  r   r   z6Union[tuple[Callable[..., Any], tuple[Any, ...]], Any])r   r   r   r   r   r7  r	  r  r  r"  r&  r,  r1  r5  r?  r   r   r   s   @r   r  r    sj   T
  
 !  	
   
 ( !  	
   J 
 , . . ? ? BB	)B B
 ))	)) )
 + +^^	?^ ^r   r  c                   [         R                  " 5       n[        U5      n UR                  U 5        UR                  5       $ ! [         a8  n[
        R                  R                  R                  [        U5      5      UeS nAff = fr   )ioBytesIOr  dumpAttributeErrorr-  r  rR   rN  r   rr  )r  bufpicklerr  s       r   pickle_guards_stater^    si    
**,C %G<U <<>  <mm,,SV4!;<s   A 
B3B  Bc                      \ rS rSr%        S                 SS jjrSrS\S'           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)r  i  Nc
                <	  ^ ^^^ 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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+                  XXS5      u  mnSU4S jjnU" U Vs/ s H
  o" U5      PM     sn5      n[-        U5      [-        U5      :X  d   e[/        S	 U 5       5      (       d   e[1        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5      u  mnUT l        T R5                  TX5        TR6                  T R2                  l        [8        R;                  S
T R2                  5        TR6                  T R2                  l        SmUR<                  (       Gd  UR>                  (       d  T R2                  RA                  URB                  5      (       dB  [E        T R2                  URB                  [F        RH                  " 5       5      n[K        SU 35      e[L        b!  [M        T R2                  URB                  T5        [O        T R2                  RP                  URB                  S5      m[8        R;                  STS 5        [R        RT                  " S[W        T5      5        S T l,        U(       aF  SSK-J.n  [_        T R                  U5      (       d   e T Ra                  TUT R                  5      T l,        [        Rr                  Ru                  SUU 4S jS9  T R                  Rw                  5         S T l        g s  snf s  snnf ! [b        Rd                   a  n[        R                  R                   Rf                  (       d  U	(       a  UeT R                  Ri                  S[k        U5       3[l        Rn                  " 5       Rq                  S5      S9   S nANS nAff = f)NrO  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                h  > / n[        T" U 5      U 5       H  u  p#U(       d  UR                  S5        M  UR                  S;   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)rY  r  r  rY  z7%s guard on %s is dropped with caching_precompile=True.T)r  r  
guard_typederived_guard_typesr  r  
orig_guardr  )r   r  keeprc  _guard_filter_fns       r   guard_filter_fn6CheckFunctionManager.__init__.<locals>.guard_filter_fn  s    "#3F#;VDGD

5)(VV%)>)>>ULLLL--
 

5)

4(  E 
r   r   )r  Fc           
     ^  > [        5       n[        U R                  5      nUS:X  a  SnUnO TR                  U R                  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)Nro  FTr   )r  	has_valuer  rf  rg  	is_globalrh  )
objectstrip_local_scoper  re  r,   r5  r   create_fn_nameguard_typesr;  )rR  MISSINGr  rn  r  ro  builders         r   make_guard_filter_entry>CheckFunctionManager.__init__.<locals>.make_guard_filter_entry  s     ((42: %I#E	*
 !(EJJ 7$(	 353K3KLTXX	''$335494E4Ee//02'$
 
	* '$)	s   B$ $B,c              3  F   #    U  H  n[        U5      [        :H  v   M     g 7fr   )r=  r   )r  rx  s     r   r  0CheckFunctionManager.__init__.<locals>.<genexpr>1  s     ?1tAw$s   !%sg        zGuard check failed: rO   zGuard eval latency = %s us.2fguard_latency_usr   r  zGuard evaluation failed: r  )	tracebackdynamo_cpp_guards_strc                 *   > TR                    ST S S3$ )Nz
Guard latency = r{  z us)r\  )latencyr   s   r   r  rd    s    $"4"4!55GPS}TWXr   
payload_fn)r   zlist[GuardFilterEntry]r   z
list[bool])rR  r;   r   r   )<r   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesrb  rF  torch_function_mode_stackrK   r  r  r  rU  rD   r  r  r-  r  rP   caching_precompiler   r;   sort_keybuild_guardsr  r  rz  r\  compile_check_fnr   r  r  skip_guards_checkr1  rv  rl  get_guard_fail_reason_helperr8   r  r  r   r%   r   r6   increment_toplevelr'  guards_staterE  r   r   serialize_guardsrR   rN  strict_precompilebypass_packager   r}  
format_excr  _loggingtrace_structuredclear)r   rP  rb  r   r   rk  rF  rU  ri  strict_errorr   existing_diff_guard_sourcessorted_guardsr\  rv  rR  filter_resultsr>  reasonsr   r  rj  ru  r  s   `                    @@@r   r   CheckFunctionManager.__init__  s    )5$$$;= B+N 	$ ?K  ,,, !1
 7CL22 	& 3=,;E<'<FL($8!BCCKKST ==22.Q3P& v|@ &*%6%6FRW&"G]< -=JK]E(/]KN ~&#m*<<<<??????&/&>&>(!U.QRBS&>  
 "&!2!2'"
 +g}D .5-D-D*t112-4-D-D* ---l6I6I%%++L,D,DEE6&& ,,"557
 %';G9%EFF,8-&&(@(@' ,""'')A)A1G 9gc]L 112Dc'lS-1>d//====
$($9$9]D,=,=%! 	''#X 	( 	
 	 S L^ ## ==''99\G!!00/Ax8'224::4@ 1 s+   O8O=3O="P RA:RR)r>  r  rY  r  r  r  ztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPESc                  ^^^ U GH  nUR                  5       nUR                  (       a  [        UR                  5      OSnUS;   a;  UR                  (       a(  UR	                  UR
                  5      n[        U5        M{  M}  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                  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nU
R.                  R1                  5        VVs0 s H  u  pUT;   d  XR2                  ;   d  M  X_M      nnnU
R.                  T   R1                  5        VVs0 s H  u  pXR4                  ;   d  M  X_M     snnUT'   [6        R8                  " U
U
R:                  R1                  5        VVs0 s H  u  pUT;   d  XR<                  ;   d  M  X_M      snnU[        R>                  RA                  U Vs1 s H*  n[6        R8                  " US S U" URB                  5      S9iM,     sn5      [D        RF                  " [H        U
RJ                  5      SS	9n
[M        U
U R(                  S
9n[O        U5      $ s  snnf s  snnf s  snnf s  snf )Nr   )r8  r  z guard cannot be serialized.c              3  R   #    U  H  nU[         R                  ;   d  M  Uv   M     g 7fr   )r  r  )r  r>  s     r   r  8CheckFunctionManager.serialize_guards.<locals>.<genexpr>  s(      00VVV A0s   '	'c                  > [        U 5      =n(       a1  [        U[        5      (       d   eUT4;  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-   )r^  r  builtins_dict_nameused_global_varsused_local_varss     r   prune_variable=CheckFunctionManager.serialize_guards.<locals>.prune_variable  s}    -f55t5!$,,,,  244$((. 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   rN   r  r)  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   )rx  r   r   r   )r   	functoolspartialr;  r   keywordsr   rQ  )rx  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 )obj_weakrefguarded_class_weakrefr  T)rl  r   _guardsr  r  )rb  rF  )r^  r?   r   r   )rx  Callable[..., None]r   r  )(rr  rs  r;  r6  re  r  r  r  r  r-  r  rR   rN  next%name_of_builtins_dict_key_in_fglobalsr   dump_guards_stater   r5  rr   rF  r:  rc  r   r   r  r  r  r  rl  r  r  	GuardsSetr  r  tree_mapr  r  r  r^  )r   ru  r  rb  rR  rf  rg  r  failedr  output_graph_guards_stater^  r  r  r  global_scope_stater  r  r  r  s                    @@@r   r  %CheckFunctionManager.serialize_guards  sX    #E--/J>C>O>O%(9(9":UW <<((!++ejj1C*3/ )
 2XXXmm''44!l">?   0
    mm''44h:; 3 #: *OO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++ "/ "/  ''$(.2"5eoo"F	 "/
 +1//.)GG+ #/%
!2 #2!22

 #<00U

2
s*   8MM MMM$3M$1M*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                  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                  5       nU[        R                  L a  U R                  5       $ T(       d   eT" 5       nUc   eUR	                  U R                  5       5      $ r   )guard_sourcer>   CONSTANTr  r  )r^  r  	r_builder	w_builders      r   rR  5CheckFunctionManager.build_guards.<locals>.source_ref*  s]    !..0L{333{{}$9!I((($$V[[]33r   )rU  c                0    U " 5       nU(       a  S Ul         g g r   )rT  )weak_br  s     r   cleanup_builder:CheckFunctionManager.build_guards.<locals>.cleanup_builderB  s    A r   rO  r   r   r  )r^  r?   r   r   )r  zweakref.ref[GuardBuilder]r   r   )r   r   rD  rQ  rS  rl  r   rU  r  r)  rP   rj  rD   r6  r  r  r  )r   r  r  rP  rb  ri  r\  rR  ru  r  guard_on_nn_modulesrR  r  s               @r   r  !CheckFunctionManager.build_guards  s     ,-+F(		4 KK  $$%%!%!:!:
	 KK9	$55 
//;
 #E'2244 #%**4$EJJ655

9RLL! # %%r   c                
  ^^^ UR                   nUS/-  n[        R                  S5        / m/ m/ mU R                  c   e[	        U R                  5      nU R
                  R                  R                  [        [        R                  " 5       5      5        U R                  c   eU R                  R                  nU R
                  R                  R                  US/5        U R
                  R                  R                  U R                  S/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	R1                  U5      -   S
-   /5        [2        R4                  (       aD  UR6                  (       a3  [9        [:        [=        UR6                  6 5      u  pUR?                  X5        U R                  (       a  U R                  R@                  O/ nU GHf  n[C        U[D        5      (       as  URF                  nURH                  nURK                  5        SURK                  5        3n[M        URO                  U5      URO                  U5      U/5        U" US S5        M  [C        U[P        5      (       a  URR                   Vs/ s H  nURO                  U5      PM     nnURT                   Vs/ s H  nURO                  U5      PM     nnSS	R1                  S URR                   5       5       SS	R1                  S URT                   5       5       S3n[W        UUU/5        U" US S5        GM[  [Y        SU 35      e   URZ                   H)  n	U	R"                   H  n
U" XR$                  S5        M     M+     T(       a"  [\        R^                  Ra                  SU4S jS9  [b        Rd                  c  [b        Rf                  " 5       nUUURh                  US.[j        E[m        5       EnU R
                  Ro                  5         SURp                  S   0n[+        T5      S:X  d   eUU R
                  l9        X@R
                  l:        U R
                  Rw                  5         TU R
                  l<        UU R
                  l=        X0R
                  l>        S U R
                  l?        S U R
                  l@        XR
                  lA        g s  snf s  snf )Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()c                P  >^ ^ [        T T5      n[        R                  SU5        TR                  U U4S j5        [        R                  [        R                  5      (       a  SnSnTbz  TR                  (       a,  SSR                  TR                  R                  5       5       3nTR                  (       a,  SSR                  TR                  R                  5       5       3n[        R                  ST UU5        U(       d#  TR                  T 5        TR                  U5        g g )Nrz  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)rA  r  r  )r  rC   from_tracebackr  r  )r  rR  s   r   r  NCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>  sc    % !U[[ #11%++2E2E2GH! !U%5%5 #11%2B2BC "r   ro  z
Stack:
z
User stack:
zGuard: %s%s%s)r  r  r  r  verbose_guards_logisEnabledForloggingDEBUGr  r  formatr  )	r  rR  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   TrO   zcheck_no_aliasing(rY  rZ  r  zcheck_overlapping(overlapping=[c              3  @   #    U  H  oR                  5       v   M     g 7fr   r  r  r`  s     r   r  8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s     /\B[QB[   z], non_overlapping=[c              3  @   #    U  H  oR                  5       v   M     g 7fr   r  r  s     r   r  r    s     3dFcFFHHFcr  z])zUnknown GuardEnvExpr: dynamo_guardsc                 <   > T V s/ s H	  o " 5       PM     sn $ s  sn f r   r   )fr  s    r   r  7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    BV4WBVQQSBV4W4Ws   r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackrH  r   r   )r  r   rR  Optional[Guard]r  r   r   r   )Br\  r  r  r  $make_torch_function_mode_stack_guardr\  r   attach_compile_idr   r8   r  rb  global_state_guardadd_global_state_guard#add_torch_function_mode_stack_guardr   rA  r;  rR  r   r^  r  r    r_  r  rP   r  rh  r  r  r  r  aotautograd_guardsr   r:   input_source_ainput_source_br  r!   r  r@   overlapping_sourcesnon_overlapping_sourcesr"   r  r]  r-  r  r  rQ   initial_global_stateGlobalStateGuardrv  rI   r  r  rT  r   r   r  r   r   r   r   r   r   )r   ru  
guards_outr   largs"torch_function_mode_stack_check_fnglobal_stater  seengclrA  r^  check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsr  rR  source_ar  r  r`  overlapping_guard_managersnon_overlapping_guard_managersr   r  r   r  r   s                             @@@r   r  %CheckFunctionManager.compile_check_fn]  s$      '((#
CE--999-Q**.
*
 	111134	

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

 
  !
 	##% #W]]3%78 :!###*6'"'<<>0B-*>'+8( *.&)-&8P5E.2s   U	3Uc                |   [        U S5      (       a  [        U R                  [        5      (       d  U R                  R                  =nbq  U R                  R
                  =nbW  [        U[        5      (       d   e[        U[        5      (       d   eSU S3n[        U5      nUR                  X%5        XPl        g g g g g )Nr\  zCache line invalidated because z got deallocated)	rq  r   r\  r  r   r   r~   r   
invalidate)r   obj_strr   r   r  deleted_guard_managers         r   r  CheckFunctionManager.invalidate1  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	  )	rd  r  r  r)  r  r  r  r  r  )r   r  r	  s      r   rQ  CheckFunctionManager.id_refB  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)rd  r  )r   r  s     r   rS  $CheckFunctionManager.lookup_weakrefsQ  s(    c7dnn$>>"S'**r   )
r  r  r  r\  r  rb  rU  rF  r  r  )NNNNNFF)rP  r  rb  r   r   Optional[CacheEntry]r   %Optional[Callable[[GuardFail], None]]rk  z8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]rF  r  rU  r  ri  r   r  r   )ru  rD  r  list[Guard]rb  r   r   rV  )r  r  r  r  rP  r  rb  r   ri  r   r   z(tuple[GuardBuilder, GuardManagerWrapper])ru  rD  r  r  r   r  r   r   )r	  r   r   r   )r  rp  r	  r   r   r'  )r  rp  r   zOptional[weakref.ref[object]])r   r   r   r   r   r  r   r  r  r  r  rQ  rS  r   r   r   r   r  r    sJ   
 -1?C 599=!"O!O! -O! *	O!
 =O!
O! 3O! 7O! O! O!bH)+D y1y1 #y1 "	y1
 
y1v>&">& &5>& 	>&
 ->& >& 
2>&@RQRQ  RQ =	RQ
 
RQh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  e  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  RecursionErrorrk  r   rd  splicerr  )
r   closure_argsrB   r  
guard_bodyr  r  rR  make_guard_fnr  s
            @r   r  r  X  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#    s#    >>##--AA,OOr   c                 h    [         R                  R                  R                  R	                  S5      $ )Nr   r  r   r   r   is_recompiles_verbose_enabledr%    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      :w  d  M    g   gr4  )r   r  r  r=  )	cur_stacktymoder3  s      r   check_torch_function_mode_stackMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stack  sE    13	y>SZ'E9-HBT$Z . r   r   r   )r=  )initial_stackrx  r+  r3  s      @r   r  r    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__rO   rY  zDuplicate tensors found: )r   r   r  r  r  r   rd  r  r  r  r  )	r\  rT  r   ids_to_sourcert  	tensor_idr  duplicate_tensorsr  s	            r   1recompilation_reason_for_no_tensor_aliasing_guardr5    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)r`  r7  patterns      r   rq  rq    s     +G66'5!$$r   c                N   U R                   c   eU R                  c   eXR                   S   S.nUR                  U R                  5        / nSn/ nU R                  U5      nUR                  (       d+  UR
                  n[        U5      S:X  a  SUS   ;   a  SnOUn/ nU(       a  [        X5      nOU H  n[        U R                   5      n	XS	'   [        5           [        XU5      n
 SSS5        [        W
[        5      (       a	  U
(       d  Un
[        U
[        5      (       d  Mr  UR!                  U
5        [        5       (       a  M    O   U S
3SR#                  U5      -   n[%        U5      $ ! [         a    [        5       (       a   SSS5        M  e f = f! , (       d  f       N= f)z
Return the reason why `guard_manager` failed.
Updates `guard_failures` with the generated reason.
Only the first failed check of guard_manager is reported.
NrH  rF  FrO   zDuplicate tensor foundr   Tr1  rQ  z; )r   r   r  r{  resultr   r  r5  r   rM   r  	Exceptionr%  r   r   r   r  r  rq  )r\  f_locals
compile_idrT  r  no_tensor_aliasing_check_failedr   guard_debug_inforU  r   fail_reason
reason_strs               r   r  r    s    %%111%%111!;!;C!@AE	LL++,G&+#$&$228< ""-@@ !"a''+=a+@@26/,%'"&C
 'D : :;L15-./1"&t5"AK 2 +t,,["+s++{+466' '* <r"TYYw%77JZ((! ! 466  21 	 21s*   FE--FFFF
F$	c                x   [        U [        5      (       a  U SU R                   3$ [        XU5      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)NrQ  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   r<  r  r  )r\  rA  r=  r>  skip_loggingrB  s         r   get_guard_fail_reasonrE  	  s     -!;<<R A ABCC-mzRJ=&'..z:
&&2''*8(8-:MN   
d	
 
s   8B B98B9c                  ^	 / m	U b`  [        U R                  U R                  UR                  U R                  U5      nU(       a  T	R                  U5        U R                  n U b  M`  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)rW  rd  )r  r>  r  s      r   r  :get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>D  s2      #!3IA <(8??64+HH!3s   -/r  rH  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     SSS.$ )Nrecompile_reasonsr+  )r  encodingr   r   r   r   r  9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>[  s    '
r   c                    > T $ r   r   )r  s   r   r  rO  _  s    7r   )metadata_fnr  )rE  r\  rA  r=  r>  r  r  rP  r#  r%  rP   error_on_recompiler  rz  rW  rd  r  co_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logrR   RecompileErrorr-  r  r  )
r   framerD  r  rA  do_recompiles_logfailuresguard_failure_detailsmessager  s
            @r   'get_and_maybe_log_recompilation_reasonsr]  $  s    G

!&%%NN""
 NN6"!&& 
! <<D-/R3P3RF555(**{{ #!*7!3# H
  tyy'94@H<XJG 	 $DLL>d6F6F5GqI\I\H]]_4f=>@ 	 ,..&,,W5$$W-$$$$W--	NN##
 # $  Nr   c                   U n[        5       nU b:  UR                  U R                  R                  5       5        U R                  n U b  M:  Un U b;  X R                  l        U R                  R                  5         U R                  n U b  M;  U$ r   )rK   r  r\  r   r  r   r	  )r   first_cache_entryacc_diff_guard_sourcess      r   r  r  e  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  rJ  zlambda rY  z and
  rG  zMalformed guard:
)
printr  rS  rT  r  r   r   r   r  r   )r\  rA  r=  r  lastrl  rR  s          r   guard_error_hookre    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  rx  s      r   uniquerh    s+     5D=GHHQK s   33c                H   U(       a  X:w  a  [        U5      n[        U 5      n[        U5      (       d  [        U 5      (       a8  [        R                  " U R	                  5        SUR	                  5        S35      eX#:X  a#  [
        R                  " [        R                  US9$ g )Nz is aliasing zC. This is not supported. Please do a clone for corresponding input.)r  )	r0   r/   rR   UnsafeScriptObjectErrorr  r  r  rD  r  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardro    s     {02;?.z:/
 
1*==--??$%];3C3C3E2F G> ?  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   )TracingContextrO   )collect_debug_stackrp  N)torch._guardsrr  r  r  r  r  r  re  guards_contextr  r   r   r;   r2   r5  )rp  r   rr  rs  r   rR  s         r   install_guardrv    s     -$11 8		(	(	7  



-
-
;
;
?
?C%''''$U%=%=>>EJ r   )r  r   r   rT  )r   zset[str])r   r  )r   r  r   r   )r  r   rR  r  r   r   r   )r   zUnion[str, list[str]]rR  r  r  r  r   r  )r  r   r   zOptional[int])r  z	list[Any]r   list[Optional[int]])r  rT  r  r   r  rw  r  rw  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^  z3Union[DictGetItemSource, DictSubclassGetItemSource]r,  r   r-  r   r#  r   r$  r  r   r   )rR  r;   r   r   )rA  r  r   r  )r  r  r   rV  )r   r  r  r   r   ztuple[str, str]r-  )r.  z'list[torch.overrides.TorchFunctionMode]r   zCallable[[], bool])r\  r   rT  r/  r   r  )r`  r   r   r   )r\  r   r=  r  r>  zOptional[CompileId]r   r   r   )r\  r   rA  r  r=  r  r>  r9   rD  r   r   r   )r   r  rX  r   rD  r   r   r  )r   r  r   r  )r\  r   rA  r  r=  r  r  r'  rd  r   r   r   )rg  zSequence[T]r   zGenerator[T, None, None])rk  r?   rl  r?   r   z Optional[functools.partial[Any]])r   r;   rp  r'  r   r   (  r  
__future__r   r  rV  r  r  r  r  r  r  rX  r  r  pickler  rW  r}  r3  r  r  
contextlibr   rX  r   r   typingr   r   r	   r
   r   r   r   ImportErrortyping_extensionsr   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   rt  r8   r9   r:   r;   r<   r=   r>   r?   r@   r  rB   torch._loggingrC   torch._utils_internalrD   %torch.fx.experimental.symbolic_shapesrE   rF   rG   rH   rI   torch.utilsrJ   r  torch.utils._ordered_setrK   torch.utils._tracebackrL   rM   torch.utils.weakrN   ro  rP   rQ   rR   
eval_framerS   r^  rT   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   numpyr  ModuleNotFoundErrorcollections.abcr   r   r   r=  r   torch._Cr   rE  r   r   r   	getLoggerr   r  r  getArtifactLoggerr  rV  rU  r  r9  r   r   r  cacher  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2  r8  r:  r  r  rB  rD  r  r  r  rQ  r  r  Picklerr  r^  r  r  r#  r%  r  r   r   rp  r/  r5  rq  r  rE  r]  r  re  rh  ro  rv  r   r   r   <module>r     s  " # 
        	    
      %    J J0$ 5 !    >      8   H
 
 
 1 % 1  * / O * ( ( ,+ + + + + + + + + + +X      , KO G N
 =='NCL!^^--hA
11(LI99"  ^^55h@PQ " ,~ ,@ @FT 
. 
. .2* 1</ hh&&:: %6 %)% " 	&'K
  !	
  " 	*31 d#! ! $!*?*(* * 	*
 )* *Z
G   
tyy 
 8 8s
# s
N>R8 R8j$!4 $ $ $ $ / / /
	 	n nbN
 N
b);XPX
+:++( 	gtCK012&2/422&
%B)&B)B) $B) 		B)T &
   	
  	< >%>> > 	>B"%""600
0  0 	0
 0 
0. % &!!%+!%!H /0 K KqD  0//0|  	Bs$   5T
 -T 
TTT)(T)