
    #Ki                   
   % 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   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.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErE  SSKFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrP  SSKQJRrRJSrS  SSKTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]  SSK^J_r_  SSK`Jara  SSKbJcrc  SSKdJere  SSKfJgrgJhrhJiriJjrjJkrk  SSKlJmrn  SSKoJprp  SSKqJrrrJsrs  SSKtJuru  SSKvJwrwJxrxJyry  SSKzJ{r{  SSK|J}r}J~r~JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJrJrJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  \(       a  SSKJr  SrS \S!'    SSKr\(       a  SS"KJrJrJr  SS#KJr  SS$KJr  SS%KJrJr  \$" S&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+rSnS, jr " S- S.\_5      r " S/ S05      rSoS1 jr\GR                  SpS2 j5       rSqS3\S4'   SqS5 jrSrS6 jr\&GR                  GR                  GR                  rSsS7 jr St       SuS8 jjrSvS9 jrSwS: jr              SxS; jrSyS< jrSzS= jrS{S> jrS|S? jr\GR                  " S@SA9 " SB SC5      5       r            S}SE jrS~SF jr\GR                   " SG SH5      5       r " SI SD\GR                  5      r\GR                  SSJ j5       r " SK SL\Y5      r " SM SN5      rS~SO jGr  " SP SQ\5      Gr\GR                   " SR SS5      5       Gr\GR                   " ST SU5      5       Gr " SV SW5      Gr\GR                  SSX j5       Gr " SY SZ\GR                  5      GrSS[ jGr " S\ S]5      Gr	SS^ jGr
SS_ jGrSS` jGr    SSa jGr\#" SbG\G\G\4   5      Gr      SSc jGrSSd jGr          SSe jGr S             SSf jjGr S         SSg jjGr    SSh jGr            SSi jGr\{" G\5        SSj jGr      SSk jGrSSl.SSm jjGrg! \! a
    SSK"J r    GNf = f! \ a    Sr GN^f = 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NoReturnOptionalTYPE_CHECKINGUnion)LiteralString)TypeAliasTypeTypeVar)ReferenceType)code_framelocals_names)check_obj_idcheck_type_idClosureGuardAccessorCodeGuardAccessordict_versionDictGetItemGuardAccessorDictGuardManagerFuncDefaultsGuardAccessorFuncKwDefaultsGuardAccessorGetAttrGuardAccessorGetGenericDictGuardAccessorGuardAccessorGuardDebugInfoGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardinstall_symbolic_shape_guard	LeafGuardprofile_guard_managerRelationalGuardRootGuardManagerTupleGetItemGuardAccessorTypeDictGuardAccessorTypeGuardAccessorTypeMROGuardAccessor)
get_global_source_nameget_local_source_nameIndexedSource$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceis_from_skip_guard_source.is_from_unspecialized_builtin_nn_module_sourceTensorPropertyTensorPropertySource)CompileEventLoggerget_metrics_context)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlapIndentedBuffer)is_opaque_value_type)
structured)justknobs_check)_CppShapeGuardsHelper_ShapeGuardsHelperEqualityConstraintis_symbolicSYMPY_INTERP)_pytree)
OrderedSet)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexc)set_guard_error_hook)-AttrProxySource
AttrSourceCallFunctionNoArgsSourceCallMethodItemSourceChainedSourceClosureSource
CodeSourceCollectionsSourceConstantSourceConstDictKeySourceCurrentStreamSourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceDynamicScalarSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceListGetItemSourceLocalSourceNamedTupleFieldsSourceNNModuleSourceNonSerializableSetGetItemSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTorchSourceTupleIteratorGetItemSourceTypeDictSourceTypeMROSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntryDynamoFrameType
ExtraStateGuardedCode	GuardFailGuardFilterEntryGuardFn)builtin_dict_keyscommon_constant_typesdataclass_fields	dict_keysget_current_streamget_custom_getattrget_torch_function_mode_stack get_torch_function_mode_stack_atguard_failuresistype	key_is_id	key_to_idnormalize_range_iterorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenunpatched_nn_module_getattrverify_guard_fn_signature)Callablez(Optional[Callable[[Any, Any, Any], Any]]guard_manager_testing_hook_fn)	GeneratorKeysViewSequence)Symbol)DispatchKeySet)OutputGraphCommonOutputGraphGuardsStateTguards
recompilesrecompiles_verboseverbose_guards)__defaults____kwdefaults____code____closure____annotations____func____mro__c                \    [        U 5      n[        U5      UR                  U5      -
  S-
  nU$ NrO   )&code_framelocals_names_reversed_cachedlenindex)codevar_nameframelocals_names_reversedframelocals_idxs       V/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/torch/_dynamo/guards.pyget_framelocals_idxr      s=     "H!M&'*D*J*J8*TTWXX      c                  :   ^  \ rS rSrSS jrSSU 4S jjjrSrU =r$ )IndentedBufferWithPrefixi  c                :    SU R                   U R                  -  -  $ )Nz| )_indenttabwidthselfs    r   prefixIndentedBufferWithPrefix.prefix  s    t||dmm344r   c                X   > U(       a  [         TU ]  U5        g [         TU ]  SU-   5        g )Nz+- )super	writeline)r   lineskip_prefix	__class__s      r   r   "IndentedBufferWithPrefix.writeline  s$    Gd#Gedl+r    returnstrF)r   r   r   boolr   None)__name__
__module____qualname____firstlineno__r   r   __static_attributes____classcell__r   s   @r   r   r     s    5, ,r   r   c                      \ rS rSrSrSSS jjr\SS j5       rSS jrSS jr	SS jr
SS	 jrSS
 jr    SS jrSS jr S     SS jjr      SS jr      SS jrSS jrS S jrS!S jrSS jrSrg)"GuardManagerWrapperi  z
A helper class that contains the root guard manager. An instance of this
class is stored in the Dynamo cache entry, so that the cache entry can
access the RootGuardManager stored in the "root" attribute and directly call
the check_nopybind from C++.
Nc                   Uc  [        5       U l        OXl        S U l        S U l        S U l        / U l        S U l        S U l        S U l        S U l	        S U l
        0 U l        / U l        [        5       U l        [        5       U l        g N)r&   rootdiff_guard_rootclosure_varsargs
code_partsverbose_code_partsglobal_scopeguard_fail_fncache_entryextra_stateid_matched_objsno_tensor_aliasing_sourcessetprinted_relational_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  -3++-335-((w #eGnuW~&EE"-
 "''++DOO,=>%%r   c                H  > [        U [        5      (       a   eU R                  5       TR                  ;   =(       d    U R	                  5       S:  nU R                  5        H  nUT" U5      -  nM     U(       a)  TR                  R                  U R                  5       5        U$ r   )
isinstancer   r   r   r   get_child_managersr   )r   r   	child_mgrr   r   s      r   visit_managerEGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_managerN  s    !$(89999 !T%<%<<U@QTU@U  "446	"eI&66" 7 "''++DOO,=>%%r   c                V   > U c  g[        U [        5      (       a  T" U 5      $ T" U 5      $ )NFr  r   r   r  r  s    r   r   =GuardManagerWrapper.collect_diff_guard_sources.<locals>.visit\  s/    |$ 011)$// &&r   )r   r   r   r   )r   r   r   r   )r   r   )r   r   r  r  s   `@@@r   collect_diff_guard_sources.GuardManagerWrapper.collect_diff_guard_sources6  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.finalizeg  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_managern  s    '')((*r   c                  ^^^^       SS jmSU4S jjmSUU4S jjmSUU4S jjmT" U R                   5      nU HL  n[        UR                  5       [        R                  R
                  5      (       d  M<  UR                  5         MN     g)	u	  
Identify ``tag safe nodes`` and ``tag safe roots`` within a guard tree.

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

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

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

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

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

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

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

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

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

issubclassget_type_of_guarded_valuedictr   r   r   extendvaluesr  mark_tag_safe)r   tag_safe_rootsis_subtree_tag_safer   r   r   r   s         r   r  CGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_dict_manager  s     d<<>EEEEN"& -3++-335-((w &'N&"))%.9- %)$?$?$A$H$H$J '+>+>+@@'7'+>+>+@@' %K #""$!!r   c                  > [        U [        5      (       a   e/ nU R                  5        H  nUR                  T" U5      5        M     U R	                  5       (       a|  [        U R                  5       [        R                  5      (       a<  U R                  5       (       a%  U R                  5       (       d  U R                  5         U$ U R                  5          U$ [        U R                  5       [        5      (       aT  U R                  5       nU R                  5       n[        S [        X45       5       5      nU(       a  U R                  5         U$ [        U R                  5       [        R                   R"                  5      (       a0  T" U [$        [&        45      nU(       a  U R                  5         U /$  U$ U R                  5       [(        R*                  [(        R,                  [.        [0        4;   a  [2        R4                  (       a  T" U [6        [8        [:        [<        [>        45      nU R                  5        H4  n[        U[>        5      (       d  M  UURA                  5       [B        ;   -  nM6     U(       a  U R                  5         U$ [        U R                  5       [(        RD                  5      (       aJ  T" U [>        45      nU[        S U R                  5        5       5      -  nU(       a  U R                  5         U$ [        U R                  5       [F        5      (       ad  U RI                  5       RK                  [B        5      (       a<  [2        R4                  (       a'  T" U [L        45      nU(       a  U R                  5         U$ [        U R                  5       [N        5      (       a*  T" U [P        [R        45      nU(       a  U R                  5         U$ )Nc              3  t   #    U  H.  u  p[        U[        5      =(       a    UR                  5       v   M0     g 7fr   )r  r   r  )r  r  r  s      r   r   QGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager.<locals>.<genexpr>  s0      *)C x)ABXsGXX)Cs   68c              3  v   #    U  H/  n[        U[        5      =(       a    UR                  5       S :H  v   M1     g7f)cell_contentsN)r  r   get_attr_name)r  r  s     r   r   r6    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_guardr0  r-  r"  r#  r$  nnModuler   r)   typesFunctionType
MethodTypestaticmethodclassmethodrP   )assume_dunder_attributes_remain_unchangedr   r   r   r   r   r9  dunder_attrs_assumed_constantsCellTypetupler   endswithr'   typer(   r*   )	r   r1  r  r%  r&  r2  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   rO  )r   r+  r,  r;  r?  r@  mark_tag_safe_root)r   r1  r   r'  r   r  r  s      @@@@r   r  'GuardManagerWrapper.find_tag_safe_rootsr  s    t		4S			"8l	" l	"\	' 	' tyy)"D$88:EHHOOLL'') #r   c                    U R                  U R                  5      U l        U R                  (       a  U R                  R	                  5         g g r   )clone_with_chosen_sourcesr   r   r   update_diff_guard_root_managerr   s    r   r  /GuardManagerWrapper.populate_diff_guard_managerL  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_fn\  s    &&(N::r   )rX  r   r   r   )r   clone_manager)r   rY  rZ  s    ` r   rS  -GuardManagerWrapper.clone_with_chosen_sourcesY  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_linesa  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_lineg  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   indentro  construct_manager_string)r   r  bodyidxr   r   s         r   construct_dict_manager_string1GuardManagerWrapper.construct_dict_manager_strings  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=)rr  get_leaf_guardsr  r%   r   r   
writelinesrd  r   r   r   rv  r$  r"  r  r   ro  reprrs  )r   r  rt  r`  r  r  s         r   rs  ,GuardManagerWrapper.construct_manager_string  s*    [[],,.e_55$B$BB66::5A(<(<U(CD % 8 8 OOD$8$8$?@ /  #/00223= (+!!#S%;%;%=(# )))|HMMOCT5UV --i>(+ ]]s   EE55
Fc                   U R                  5          [        5       nSUl        UR                  SSS9  UR                  SSS9  UR                  S5        U R	                  U R
                  U5        [        U R
                  S5      (       aA  U R
                  R                  5        H#  nUR                  U R                  U5      5        M%     UR                  5       sS S S 5        $ ! , (       d  f       g = f)NrO    T)r   zTREE_GUARD_MANAGER:r&   get_epilogue_lambda_guards)r   r   r   r   rs  r   hasattrr  rz  rd  getvalue)r   rt  r`  s      r   __str__GuardManagerWrapper.__str__  s    557+-DDMNN24N0NN0dNCNN-.))$))T:tyy">??!YYAACEOOD$8$8$?@ D==? 877s   C
C%%
C3c                8    U R                   R                  U5      $ r   )r   checkr   xs     r   r  GuardManagerWrapper.check  s    yyq!!r   c                8    U R                   R                  U5      $ r   )r   check_verboser  s     r   r  !GuardManagerWrapper.check_verbose  s    yy&&q))r   c                d   ^ ^^^ [        5       mSS jmSUUU U4S jjmT" T R                  5        g )Nc                    / nU R                  5        H6  nUR                  S5      S   R                  5       nUR                  U5        M8     U$ )N#r   )r   splitrstripappend)
leaf_guardr   verbose_code_part	code_parts       r   get_code_partsMGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.get_code_parts  sP    J%/%B%B%D!-33C8;BBD	!!), &E r   c                V  > U R                  5        Hu  n[        U[        5      (       a<  UT;  a4  TR                  R	                  T" U5      5        TR                  U5        MR  MT  TR                  R	                  T" U5      5        Mw     U R                  5        H  nT" U5        M     g r   )ry  r  r%   r   r.  r   r  )r  r`  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   )rY  r  r   r&   )r`  r#   r   r  )rj  r   rk  Optional[str]r   r   )r  r   rt  r   r   r   )r  r   rt  r   r   r   r   r  r   r   r   )r  r   r   r   )r   r   r   r   __doc__r   r   r   r  r  r  r  r  rS  rd  ro  rv  rs  r  r  r  r  r   r   r   r   r   r     s    @, 3 3/'b*+X*t>2-2	2 JN
)
9F
	
A#A+CA	A??'??	?@#"*r   r   c                   [         R                  R                  5          [        U [        R
                  [        R                  45      (       a  [         R                  " U 5      OU sS S S 5        $ ! , (       d  f       g = fr   )r;  	overrides_enable_torch_functionr  npgenericndarray	as_tensor)as    r   
from_numpyr    sH     
	/	/	1%/BJJ

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

 |
  D
 $%7
 &';
 ()?
 "#3
 #$7
 23S
 $%7
 DJJ
 RZTRXX
  5<!
" Y44#
$ "KK//ll'!55/
2 r   c                N    [         R                  " U 5      R                  SS5      $ )N
r~  )astunparsereplace)r   s    r   _ast_unparser    s    ;;t$$T2..r   c                   SnUb  UR                   (       aa  [        UR                   5       HG  nUR                  [        5       ;  d  M  S[	        USS9 3n[        U5      S:  a  S[	        U5       3n  OQ   ONUR                  (       a=  UR                  R                  5       n[        U5      S:  a  S[	        US   5       3nOSnU S	 U 3$ )
Nr~  z  # T)r   i   r   z  # <unknown>z<60)
user_stackreversedfilenamer  rL   r   stacksummary)r  r`  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: rh  )r  listr  )r   r`  recompile_hintr  r   rc  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  I  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(rg  z	, device=z, requires_grad=z, size=z	, stride=rh  )	r;  _C_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper  r   requires_gradr   )valuenamesizesstridespytypedispatch_keysdispatch_keyr  device_indexr  	guard_strs              r   get_tensor_guard_code_partr  M  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  b  s     
 !#&'--c22r   c                    SU  SU S3$ )Nlist(dict.keys())[]r   )rl  r   s     r   get_key_index_sourcer  j  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).)	TypeErrorrK  )objs    r   raise_local_type_errorr#  n  s8    

S	{,se+<=
L	M
L	M r   c                    [        U [        R                  R                  5      =(       a(    [        R
                  =(       d    [        U 5      [        L $ r   )r  r;  r?  r@  rP   inline_inbuilt_nn_modulesr   r   )r  s    r   $should_optimize_getattr_on_nn_moduler&  v  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)
NNModuleAttrAccessorInfoi  Fr   present_in_generic_dictNr  l1_keyl2_keyr   )	r   r   r   r   r*  r   r+  r,  r   r   r   r   r)  r)    s'     %*T) !FM  !FM r   r)  GuardManagerTypec                   U R                   R                  n[        U R                  [        5      (       a  U R                  R                  nO,[        U[
        5      (       d   e[        X R                  5      n[        XV5      n[        [        U5      5      U   n[        U[        [        45      (       a
  U SU< S3n	OU SU S3n	[        U R                  [        5      (       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   rl  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)
rl  base_guard_managerbase_example_valuer1  r2  base_source_namer   
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerr@    s?    {{''&,, 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  rr   is_specialized_nn_moduleis_dict_keyrl   )r`  rl  s     r   match_on_id_for_tensorrF    sP    %%F &+,,%%''F
6:(F$FFr   c                  *    \ rS rSr% S\S'   S\S'   Srg)GuardCodeListi  r  	code_listr:   r`  r   Nr   r   r   r   r   r   r   r   r   rH  rH    s    Lr   rH  c                      \ rS rSrSrSrSrg)r-  i  rO      r   N)r   r   r   r   r7  DICT_GUARD_MANAGERr   r   r   r   r-  r-    s    Mr   c                <    [        [        [        U 5      5      5      $ r   )r  r  r   )r   s    r   r   r     s    /5677r   c                  L   \ rS rSr   S=                       S>S jjr      S?S jrS@S jr\SAS j5       r                SBS jr	SCS jr
      SDS	 jrSES
 jrSFS jrSGS jrSHS jr  SI         SJS jjr SK     SLS jjrSMS jr        SNS jrSOS jr SK     SPS jjrSOS jrSOS jrSQS jrSRS jrSOS jrSOS jrSKSSS jjr SK     SSS jjrSKSTS jjrSOS jrSOS jr SOS jr!SOS  jr"SOS! jr#SOS" jr$SKSSS# jjr%SOS$ jr&SOS% jr'SOS& jr(SOS' jr)SOS( jr*SOS) jr+SOS* jr,SOS+ jr-SOS, jr.SOS- jr/SUS. jr0SOS/ jr1SOS0 jr2SOS1 jr3SOS2 jr4SOS3 jr5SOS4 jr6SOS5 jr7SOS6 jr8SOS7 jr9SOS8 jr:SOS9 jr;SKSTS: jjr<  SV         SWS; jjr=S<r>g)XGuardBuilderi  Nc                   Xl         X l        X0l        X@l        XVS.U l        [
        R                  " 5       U l        U
=(       d    UU l        U=(       d    0 U l	        [        R                  R                  5       U R                  S'   [        R                  R                  R                   R#                  5        HW  u  nnUR%                  SS5      R%                  SS5      R%                  SS5      nXR                  S   U'   XR                  U'   MY     Xpl        / U l        / U l        / U l        / U l        / U l        Xl        0 U l        Xl        [9        5       U l        U R2                  R<                  c   eU R2                  R<                  R>                   Ha  nU RA                  U5      nU R6                  (       a  XR                  URB                  '   U R:                  RE                  [G        U5      5        Mc     0 U l$        0 U l%        [9        5       U l&        / U l'        [P        RR                  =(       a    [U        S5      U l)        [W        5       U l,        g )	NLG__builtins__>_<._dot_!pytorch/compiler:guard_nn_modules)-f_codeid_ref
source_reflookup_weakrefsscopeweakrefWeakKeyDictionarysrc_get_value_cacheruntime_global_scopesource_get_cachebuiltins__dict__copyr;  packagepackage_importer_package_imported_modulesr   r  rj  argnamesr   shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managerguard_tree_valuessave_guardsr   key_order_guarded_dict_idsoutput_graphguard_on_key_ordergetr	  r   idr   _cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codesrP   guard_nn_modulesrD   rK   already_added_code_parts)r   r\  r]  r^  r_  local_scoper   rj  rp  rr  rd  re  r	  package_modulerl  dict_objs                   r   r   GuardBuilder.__init__  s    $.9D3X
%%' 	  %9$HL! 0 6B%-%6%6%;%;%=

>" ]]++EEKKM
<<S)11#s;CCCQD/=JJ~&t,-JJt N +#%)+	
 46 46%EG.6F13& +.%'$$11===++88KKFxx'H5=%%fkk2++//8=	 L BD @B#DGE+BD( & 7 7 !
O/=
 :D%r   c                T   U R                  U5      n[        U[        5      (       a  [        SUR                   35      eUR
                  R                  n[        U5       HE  nX   n[        UR
                  US9nU R                  Xq5      nUR                  UU SU< S3UUS9  MG     g )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )r   r/  r  r  rl  r1  r2  )
get_guard_managerr  r   NotImplementedErrorr	  rC  r   ra   get_guard_manager_typedict_getitem_manager)	r   r1  r`  dict_mgrdict_sourcer  r  r?  r2  s	            r   #guard_on_dict_keys_and_ignore_order0GuardBuilder.guard_on_dict_keys_and_ignore_order-  s     ))%0h 011%FFKjj\S  ..33 %]3C!&E,U-E-ESQL!%!<!<" ))%awa0##5	 *  4r   c                $   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 r0  z__check_obj_id(rg  rh  r3  )r  r  r   r  r	  	enumerater   r  r6  r-  r7  r   r]  add_id_match_guardr  r8  )	r   r  r`  r  ru  r  r=  key_managerid_vals	            r   guard_on_dict_keys_and_order)GuardBuilder.guard_on_dict_keys_and_orderK  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)r1  s    r   '_get_generic_dict_manager_example_value4GuardBuilder._get_generic_dict_manager_example_valueq  sF     ''  G+  :-MM_ r   c           	     L                 SS jnUR                   n	UR                  n
[        5       n[        R                  " UR
                  5       H,  nUR                  UR                  R                  5       5        M.     [        SSS5      nX;   a  [        SU	S5      nOXSU
;   a  XS   ;   a  [        SSU	5      nO<SU
;   a  XS   ;   a  [        SSU	5      nO X;  a  SU
;   a  XS   ;   a  [        SSU	5      nUR                  (       d  UR                  UR                   UUUS9$ UR                  (       d   eUR                  nUR                  nU S	3nS=nnS=nnS=nnU(       aN  [        UR                  U5      nUR                  nX   nU R!                  UU5      nUnUnU R!                  X5      nOUnUnU R!                  X5      nUR#                  UU R%                  U
5      [&        R(                  S
9nU" UUUU
UUS9nU(       a  Ub  Uc   eU" UUUUUUS9$ U$ )a  
This tries to avoid calling the expensive nn module custom getattr method by
checking if the attribute is accessible via __dict__. For attributes that
are not accessible via __dict__ (like descriptors), we fallback to
PyObject_GetAttr.

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

The most common and expensive case for nn module guards is of type
mod.submod1.submod2.submod3.training. We avoid the python getattr of nn
modules by going through the __dict__.
c                
   [        U [        5      (       a]  [        X15      nSU SU< S3nU R                  UUU[        R
                  S9R                  X SU< 3/5        U R                  UUUUS9$ U R                  UUUUS9$ )Nr  r  r  r0  r3  r  )	r  r   r  r6  r-  r7  r8  r9  r  )r  r  source_namer;  r1  r2  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attrrl  r1  r2  	.__dict__rl  r1  r2  )r  r  r  r;  r1  r2  )r  r   r  r   r  r   r;  r   r1  r   r2  r-  r   r   )memberrg  r   r  getmror   updatekeysr)  r*  getattr_managerr+  r,  rU   r4  r	  r  get_generic_dict_managerr  r-  r7  )r   rl  r:  r;  r1  r<  r  r2  r  	attr_namemod_dictall_class_attribute_namesr  accessor_infor+  r,  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_module!GuardBuilder.getattr_on_nn_module  s   6#	#	#	 #	 !$	#	
 #	 !1#	 #	J MM	%...1e! 2 < <=A%,,QZZ__->? > 1dC 4T9dKMh&98O+O4T=)TM8#	j5I(I4T:yQM6h&j11 5T:yQM44 &55]]"+#5	 6   !''''"))F"))F "2 2)<O.22N^"&&Hx<@@!$9&v{{F;	!*#+ )-(C(CIx(X%!,((,(C(C)% "-((,(C(C)% (:'R'R&"JJ8T#3#A#A (S ($ ),*#+&#8F %16K6WWW* .'/"*'<  Mr   c                x    UR                   nUS:X  a  g[        U R                  U5      5      nX0R                  ;   $ )Nr~  F)r	  rw  rv  rs  )r   rl  r  obj_ids       r   requires_key_order_guarding(GuardBuilder.requires_key_order_guarding  s8    kk"DHHV$%8888r   c                H   [         R                  nU R                  U5      (       a{  [        U[        5      (       a  [         R
                  nU$ [        U[        [        45      (       a  [         R                  nU$ [        U[        5      (       d   e[         R
                  nU$ r   )	r-  r7  r  r  r   rM  r   	frozensetr-  )r   rl  r1  r2  s       r   r  #GuardBuilder.get_guard_manager_type%  s     .;;++F33-33%5%H%H" "! MC+;<< &6%C%C" "! "-6666%5%H%H"!!r   c                (    U[         R                  :H  $ r   )r-  rM  )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$ )NrT  )	f_globalsrl  r1  r2  )rj  r   globals_dict_managerrd  r`  r-  r7  r   s    r   get_global_guard_manager%GuardBuilder.get_global_guard_manager>  sF    !!&&;;//**S//==	 < 
 	
r   c           	     <  ^ U R                   R                  nS nTR                  nUS:w  a  X@R                  ;   a  U R                  U   $ US:w  a(  U R	                  T5      nX0R
                  [        U5      '   U R                  TU5      nS nS nS n[        R                  n	[        T[        5      (       ah  TR                  R                  nU R	                  TR                  5      nU R                  TR                  5      nU R                  TR                  U5      n	[        T[        5      (       a@  [!        U R"                  TR$                  5      n
UR'                  TR$                  U
4UUUS9nG
O[        T[(        5      (       a,  U R+                  5       R-                  TR.                  UUUS9nG
OQ[        T[0        5      (       a,  U R+                  5       R3                  TR.                  UUUS9nG
O[        T[4        5      (       a  U$ [        T[6        5      (       a  U$ [        T[8        5      (       a  U(       d   eUR;                  UUUS9nG	O[        T[<        5      (       a  U(       d   eUR?                  UUUS9nG	O[        T[@        5      (       a  U(       d   eURC                  UUUS9nG	OO[        T[D        [F        [H        [J        [L        45      (       a  U(       d   eUnG	O[        T[N        5      (       a  URQ                  S UUUS9nGO[        T[R        5      (       a  URQ                  S UUUS9nGO[        T[T        5      (       a  URQ                  U4S jUUUS9nGO[        T[V        5      (       a  URQ                  U4S	 jUUUS9nGOj[        T[X        5      (       a  U(       d   eUR[                  UUUS9nGO9[        T[\        5      (       a'  U(       d   eUR_                  TR`                  UUUS
9nGO[        T[b        [d        45      (       ap  U(       d   e[        T[b        5      (       d   e[g        U5      (       a"  U(       d   eU Ri                  TUUUUUU5      nGOURk                  TR`                  UUUS
9nGOr[        T[l        [n        45      (       a  U(       d   e[        U[p        [r        Rt                  45      (       d   e[        T[l        [n        45      (       d   e[        U[v        5      (       a)  U Ry                  U	5      (       d   e[{        TUUUU5      nGO[        TR|                  [~        5      (       a  [        S5      eUR-                  TR|                  UUUS9nGO[        T[        5      (       aE  [        USTR                  R                  R                  5        S35      " TR                  UUUS9nGO*[        T[        5      (       a'  U(       d   eUR                  TR                  UUUS9nGO[        T[        5      (       a'  U(       d   eUR                  TR|                  UUUS9nGO[        T[        5      (       a  U(       d   e[        U[p        [r        Rt                  45      (       a   S5       e[        U[        5      (       a/  TR                  (       d  UR                  TR|                  UUUS9nGO$[        U[        5      (       a/  TR                  (       d  UR                  TR|                  UUUS9nGOTR|                  nTR                  (       a  TR                  5       nUR                  UUUUS9nGO[        T[        5      (       a  U(       d   eU(       d   e[        U5      (       d   eTR                  (       dE  UR                  UUR                  [        R                  S9R                  TR                  UUUS9nGOUR                  nUc   eUS-   nUR                  UU[        R                  S9n[        U[v        5      (       a   eUR-                  TR                  UUUS9nGO[        T[        5      (       a!  U(       d   eURQ                  [        UUUS9nGOp[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO=[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO
[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGOq[        T[        5      (       a  U(       d   eURQ                  S UUUS9nGO>[        T[        5      (       a'  U(       d   eUR                  TR|                  UUUS9nGO[        T[~        5      (       a>  [        U[v        5      (       d  [        S5      eUR                  TR|                  UUUS9nGO[        T[        5      (       a'  U(       d   eUR                  TR|                  UUUS9nGOs[        T[        5      (       a  U(       d   eUR                  UUUS9nGOB[        T[        5      (       a  U(       d   eUR                  UUUS9nGO[        T[        5      (       a  U(       d   eURQ                  S UUUS9nO[        T[        5      (       a  U(       d   eURQ                  S UUUS9nO[        T[        5      (       a  U(       d   eUR                  UUUS9nO}[        T[        5      (       a  U(       d   eUR                  UUUS9nOM[        T[        5      (       a  U(       d   eURQ                  S UUUS9nO[        ST STR                   35      eXR                  TR                  '   U$ )Nr~  r  )global_namerl  r1  r2  r  c                    [         $ r   )r;  rW  s    r   r  <GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    r   )python_lambdarl  r1  r2  c                    [         $ r   )r  r  s    r   r  r    s    r   c                6   > [        TR                  5       5      $ r   )r   
_get_indexrW  rl  s    r   r  r    s    (H%%')r   c                .   > [        TR                  5      $ r   )r   r  r  s    r   r  r    s    (:6==(Ir   r  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_ordertensor_property__manager)ru  rl  r1  r2  zUse DictGetItemSourcez.__kwdefaults__c                (    U R                  5       S   $ r   __tensor_flatten__r  s    r   r  r  d  s    (<(<(>q(Ar   c                "    U R                  5       $ r   )__obj_flatten__r  s    r   r  r  l  s    (9(9(;r   c                >    U R                  5       R                  5       $ r   )_typequalified_namer  s    r   r  r  t  s    	(@(@(Br   c                "    U R                  5       $ r   )get_baser  s    r   r  r  |  s
    

r   c                "    U R                  5       $ r   )itemr  s    r   r  r    s
    r   c                .    [         R                  " U 5      $ r   )r;  r  r  s    r   r  r    s    (A(A!(Dr   r0  z4ConstDictKeySource can only work on DictGuardManagerc                    [        U 5      $ r   )r   r  s    r   r  r    s
    (8(;r   c                    U R                   $ r   r  r  s    r   r  r    s    		r   c                    [        U 5      $ r   )r5  r  s    r   r  r    s    Ar   zmissing guard manager builder z - )rrj  r   r	  rx  rv  rq  rw  r  r-  r7  r  rX   r4  get_guard_manager_from_sourcer   rn   r   r\  
local_nameframelocals_managerri   r  r  r  rk   global_weakref_managerrj   ru   r|   type_managerrz   type_dict_managerr{   type_mro_managerrs   rp   r~   r}   rf   rx   lambda_managerr[   rw   r^   rl   grad_managerrg   generic_getattr_managerr  rU   r   r&  r  r  ra   rb   r-  r  r  r   r  r@  r   r]   RuntimeErrorr4   getattrproplowerru  r-   indexed_managerrm   list_getitem_managerrh   r  index_is_slicerI  tuple_getitem_managerunpack_slicegetitem_managerr`   callableis_kwfunc_defaults_managerr   idx_keyr   func_kwdefaults_managerrr   r  rv   rd   rt   rT   rW   re   ry   tuple_iterator_getitem_managerAssertionErrorr6  rq   set_getitem_managerr   weakref_call_managerrV   call_function_no_args_managerr_   ro   rZ   code_managerrY   closure_managerrc   )r   rl  root_guard_managerr1  r  r2  r<  r;  r:  base_guard_manager_enumr   outr   
kwdefaults	kw_sourcer  s    `              r   r  *GuardBuilder.get_guard_manager_from_sourceF  s   !//44kk"0K0K!K..{;;" HHV,M8E""2m#45!88O  !!"2"@"@fm,,%{{//!%&++!6!%!C!CFKK!P&*&A&A/'#
 &+&&1$++v?P?PQO$88&&8"+#5	 9 C FL)) //1FF&&"+#5	 G C F/00//1HH".."+#5	 I C F-.. &%FN++%%FJ''%%%$11"+#5 2 C
 FN++%%%$66"+#5 7 C
 FM**%%%$55"+#5 6 C
 +2"	
 	
 &%%$CFK(($33-"+#5	 4 C F-..$333"+#5	 4 C F899$33 #+#5 4 C F/00$33I"+#5	 4 C FJ''%%%$11"+#5 2 C
 F-..%%%$<<]]"+#5	 = C FZ)GHII%%%fj111134FGG'''//&&!$& )88&"/'9	 9  F.0IJKK%%%049P9P2QRRRRf'8:S&TUUUU,.>??223JKKKK-&&!& fll,>??&8  )==&"/'9	 >  F011""6;;#3#3#9#9#;"<HE JJ"+#5C FM**%%%$44JJ"+#5	 5 C F-..%%%$99LL"+#5	 : C FM**%%%!"T;+B+B$C  '&'  ,d33F<Q<Q(==&"/'9	 >  .66v?T?T(>>&"/'9	 ?  (("//1E(88&"/'9	 9  FN++%%%###.////<<(>>+"4"A"A'7'E'E ?  "/&"/'9	 " 	  0>>
'333,/@@	 .EE$",'7'E'E F 
 &h0@AAAA33&"/'9	 4  F-..%%%$33("+#5	 4 C F233%%%$33A"+#5	 4 C F566%%%$33;"+#5	 4 C F;<<%%%$33B"+#5	 4 C FO,,%%%$334"+#5	 4 C F011%%%$330"+#5	 4 C F-..%%%$33D"+#5	 4 C F677%%%$CCll"+#5	 D C  23302BCC$J  %44ll"+#5	 5 C F;<<%%%$88ll"+#5	 9 C F-..%%%$99"+#5 : C
 F455%%%$BB"+#5 C C
 F122%%%$33;"+#5	 4 C F233%%%$331"+#5	 4 C FJ''%%%$11"+#5 2 C
 FM**%%%$44"+#5 5 C
 F/00%%%$33."+#5	 4 C !0FKK=I  47##FKK0
r   c                8    U R                  UR                  5      $ r   )r  rC  r   r`  s     r   r  GuardBuilder.get_guard_manager  s    11%2J2JKKr   c                   Uc
  [        5       nSR                  UR                  5       5      n[        X5      u  pg0 nSU R                  S   0n	[
        R                  SU5        [        XyU5        US   " UR                  5       6 n
U(       a&  U R                  R                  R                  X5        g U R                  R                  R                  X5        g )Nrg  rT  zPython shape guard function:
%s___make_guard_fn)r  joinr  build_guard_functionr`  
guards_logdebugexecr/  rj  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                t   UR                   n[        U[        5      (       a  UnOUR                  nU R                  (       a  X0R                  ;   a  U R                  U   $ Uc
  [        5       nUR                  U R                  X R                  5      nU R                  (       a  SU;   a  XPR                  U'   U$ )Nz.__closure__)
r	  r  r>   rC  re  r  	get_valuer`  rc  rr  )r   guard_or_sourcer   r	  srcrets         r   rv  GuardBuilder.get  s    
 ##ov..!C!44C  ,,,,,T22,.LmmDJJ6N6NO$ 6*-!!$'
r   c                P   [        U[        5      (       a  UnOUR                  n[        U5      nX0R                  ;  ag  [
        R                  R                  R                  U5      nU(       a7  US:X  a  [        R                  SU5        U R                  R                  U5        U$ )NrL  zinvalid var name: %s)r  r   r	  strip_function_callrl  r;  r  r  is_valid_var_namelogwarningr  )r   r`  r	  r4  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   rC  rU   r:   r  r  create)r   r`  r  r#  attr_source	new_guards         r   _guard_on_attribute GuardBuilder._guard_on_attribute7  sY     
"$U%=%=>K$U%=%=yIKAQAQ
	 	r   c           	        UR                   n[        U[        5      (       a  UR                  n[        U[        5      (       a  g [        U[
        5      (       d   SUR                   35       eUR                  nUR                  nUR                  nU R                  U5      n[        U R                  U5      U5      nS nU(       a  SU SU< S3nO
SU SU< S3nXR                  ;   a  g U R                  X/U R                  U5      S9  U R                  U5      n	U(       a  U R                  U5      n
U R                  U5      nU R                  X*5      n[        U5      (       a"  U R!                  UU	UU
UUR                  U5        O8U	R#                  UUR                  U
US9  OU	R%                  U['        X5      5        U R                  R)                  U5        g )Nzinvalid source hasattr(rg  rh  znot hasattr()provided_guarded_objectr  )rC  r  rp   r4  rZ   rU   r	  r  r2  r  rv  r|  _set_guard_export_infor  r  r&  r  r  add_no_hasattr_guardr  r   )r   r`  rl  base_sourcer4  r  refvalr   base_managerr1  r;  r2  s                r   HASATTRGuardBuilder.HASATTRH  s   ))fn--[[Ffj))&*--M/MM-kk}}ll4 dhh{+T2cU"THA.D!#b2D000##6488K3H 	$ 	
 99+F !HHV,M!%+!6!%!<!<V!S 44FGG)) &!KK& ,, ::"/'9	 -  --d4J44WX%%))$/r   c                   Uc   eU R                  U5      nU R                  U5      nU R                  U5      nSU< SU S3nX`R                  ;   a  g UR                   S3nUR                  UU R                  UR                  5      [        R                  S9nUR                  SU[        Xa5      5        U R                  R                  U5        g )Nznot ___dict_contains(rg  z
.__dict__)r  r  F)r2  rv  r  r|  r	  r  r  rg  r-  r7  add_dict_contains_guardr  r   )	r   r`  r  r@  rA  rB  r   r  r  s	            r   NOT_PRESENT_IN_GENERIC_DICT(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT  s     ll5!hhuo--e4&thbZ@000"ZZL	2#/#H#H"FFs||T/== $I $
  	!884/<	
 	%%))$/r   c                   U R                  U5      n[        U[        R                  R                  5      (       a  UR
                  (       a  UR
                  nO[        U5      nUR                  UR                  :w  a  SUl	        U R                  USUR                   S35      n[        U5      nSU R                  U5       SU SU 3nU R                  X/5        U R                  U5      R!                  U[#        Xa5      5        g )NTtype(rh  z___check_type_id(rg  ), type=)rv  r  r;  _subclasses
FakeTensorr  rK  r   r   _unserializabler]  r	  r{  r2  r=  r  add_type_match_guardr  )r   r`  r  rm  r  	type_reprr   s          r   
TYPE_MATCHGuardBuilder.TYPE_MATCH  s    eU..99::u||AUA>>QZZ' %)E!Q%

|1 56G	"4<<#6"7r&)U##E62u%::*47	
r   c                   U R                  U5      nU R                  U5      n[        U R                  U5      5      nSU SU 3nU R                  X/5        U R	                  U5      R                  U[        XQ5      5        g )Nz___dict_version() == )r2  rv  r   r=  r  add_dict_version_guardr  )r   r`  r@  rA  versionr   s         r   DICT_VERSIONGuardBuilder.DICT_VERSION  sw    ll5!hhuotxx/!#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X`R                  ;   a  g U R                  X/5        U R                  U5      R	                  U(       + U[        Xa5      5        U R                  R                  U5        g )Nnot r~  z___dict_contains(rg  rh  )r2  r|  r=  r  rF  r  r   )r   r`  r  invertdict_ref	maybe_notr   s          r   DICT_CONTAINSGuardBuilder.DICT_CONTAINS  s    <<&$F"	-cWBxjB000##E62u%==J3D@	
 	%%))$/r   c                   U R                  U5      nUnU(       + nSU SU< S3nXpR                  ;   a  g U R                  X/5        U R                  U5      R	                  Xe[        Xq5      5        U R                  R                  U5        g )Nzset.__contains__(rg  rh  )r2  r|  r=  r  add_set_contains_guardr  r   )r   r`  r  r[  set_refr  containsr   s           r   SET_CONTAINSGuardBuilder.SET_CONTAINS  s    ,,u%:"7)2dXQ7000##E62u%<<24?	
 	%%))$/r   c                ^   U R                  U5      nU R                  U5      n[        U[        5      (       d   eU SU< 3/nU R	                  X5        U(       a*  U R                  U5      R                  [        XA5      5        g U R                  U5      R                  [        XA5      5        g )Nr3  )	r2  rv  r   r   r=  r  add_true_match_guardr  add_false_match_guardr   r`  r@  rA  r   s        r   
BOOL_MATCHGuardBuilder.BOOL_MATCH  s    ll5!hhuoc4    %tC7#$##E0""5)>>&t3 ""5)??&t3r   c                    U R                  U5      nU R                  U5      nUb   eU S3/nU R                  X5        U R                  U5      R	                  [        XA5      5        g )Nz is None)r2  rv  r=  r  add_none_match_guardr  ri  s        r   
NONE_MATCHGuardBuilder.NONE_MATCH  se    ll5!hhuo{{%x !##E0u%::"4/	
r   c                $    U R                  X5      $ r   )id_match_unchecked)r   r`  r  s      r   ID_MATCHGuardBuilder.ID_MATCH  s     &&u==r   c                4   [        UR                  [        5      (       a=  U R                  [	        UR                  R
                  [        R                  5      5      $ U R                  U5      nU R                  U5      nU R                  XAR                  5      n [        U5      nSU SU SU 3nU R                  X/SS9  U R!                  U5      R#                  U[%        XqU5      5        [        UR                  [&        5      (       ad  [        U[(        R*                  R,                  5      (       a:  UR                  R.                  nU R1                  U5      n	U	b  XR2                  U'   g g g g ! [         a    S[        U5      R                   S3n Nf = f)NrX  rV  z___check_obj_id(rg  rK  rr  )provided_func_name)r  rC  r|   rQ  r:   r4  rP  r2  rv  r]  r	  r{  	ExceptionrK  r   r=  r  r  r  rn   r;  r?  r@  r  r_  r   )
r   r`  r  r@  rA  r  rP  r   r  weak_ids
             r   rq  GuardBuilder.id_match_unchecked  sr    e..
;;??e..33\5L5LM  ll5!hhuoS**-	2S	I
 "#bD##E6j#Qu%88*4G	
 e..<< #uxx//"55@@
..s3&7>((4 ' 0	 =  	2 DI../q1I	2s   E1 1#FFc                
   U R                  U5      nU R                  U5      n[        U[        R                  5      (       d   eU S3nU R                  X/5        U R                  U5      R                  [        XQ5      5        g Nz is not None)	r2  rv  r  r;  r<  r=  r  add_not_none_guardr  )r   r`  r  r@  rA  r   s         r   NOT_NONE_MATCHGuardBuilder.NOT_NONE_MATCH(  sq    ll5!hhuo#u||,,,,l###E62u%88"4/	
r   c                   U R                  U5      nU R                  U5      n[        U[        R                  R
                  5      (       d   eU SU< S3nU R                  U5      R                  U[        XA5      5        g )Nz.raw_repr() == z.raw_repr())	r2  rv  r  r;  r  r   r  add_dispatch_key_set_guardr  )r   r`  r@  rA  r   s        r   DISPATCH_KEY_SET_MATCH#GuardBuilder.DISPATCH_KEY_SET_MATCH3  sp    ll5!hhuo#uxx667777uOC7+>
u%@@'
:	
r   c                   U R                   R                  c   eU R                   R                  R                  nSU 3/nU R                  X5        U R                  R
                  R                  U[        X15      5        g )Nz,torch.autograd.forward_ad._current_level == )rp  rt  
dual_levelr=  rj  r   add_dual_level_match_guardr  )r   r`  r  r   s       r   
DUAL_LEVELGuardBuilder.DUAL_LEVEL=  su     $$11===**77BB
>zlKL##E0::.t;	
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(rh  c                   > T" T5      $ r   r   )r  
compare_fnstatess    r   fn.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fnT  s    f%%r   r  )rp  rt  functorch_layers	get_stater=  r;  
_functorchpyfunctorchcompare_functorch_staterj  r   r  r  )r   r`  ciscir   r  r  r  s         @@r   FUNCTORCH_STACK_MATCH"GuardBuilder.FUNCTORCH_STACK_MATCHH  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                R   > T" U 5      (       d  g [        [        [        U 5      5      $ r   )rI  maprw  )hooksare_inline_hookss    r   hooks_ids_fn?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fna  s$     $E**R((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == c                $   > TT" T" 5       5      :H  $ r   r   )r  	get_hooksguard_hooks_idsr  s    r   r  5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fnp  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=  rj  r   r  r  )r   r`  r   r  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5      n[        U R                  U5      R                  5       S   5      m[        US5      (       a   [	        U5        [        U5      mSUU4S jjnOSU4S jjnS[        U5       S[        R                  " 5        3nU R                  U5      R                  U[        XA5      5        g )NrO   __metadata_guard__c                J   > TR                  TU R                  5       S   5      $ r   )r  r  )r  clsoriginal_metadatas    r   metadata_checkerEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker~  s)    --%q';';'=a'@ r   c                0   > U R                  5       S   T:H  $ r   r  )r  r  s    r   r  r    s    ++-a04EEEr   ___check_metadata__cr  )rv  r   r  r  r   rK  rw  r7   current_compile_idr  r  r  )r   r`  r  r  r  r  r  s        @@r   TENSOR_SUBCLASS_METADATA_MATCH+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCHw  s    $TXXe_%G%G%I!%LM5.//%e,u+C F +2.>+?*@>CdCdCfBghu%664[H	
r   c                   ^ [        U R                  U5      5      mSU4S jjnS[        U5       3nU R                  U5      R	                  U[        X15      5        g )Nc                $   > U R                  TSS9$ )NT)skip_shapes)_check_equals)r  r  s    r   r#  1GuardBuilder.DTENSOR_SPEC_MATCH.<locals>.guard_fn  s    ??5d?;;r   __dtensor_spec_r  )r   rv  rw  r  r  r  )r   r`  r#  r   r  s       @r   DTENSOR_SPEC_MATCHGuardBuilder.DTENSOR_SPEC_MATCH  sR     %)	< !H/u%66,T9	
r   c                   U R                  U5      nU R                  U5      n[        (       a  [        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  4nOSn[        [        4n[!        ["        [$        [         [&        [(        [*        [,        [.        R0                  [.        R2                  [.        R4                  R6                  R2                  1	UkUk-  5      n[.        R8                  R;                  5       (       a  SSKJn  SSK J!n	J"n
J#nJ$n  UUUU
UU	4-   nSSK%J&n  X}4-   nSS K'J(s  J)n  [U        XG5      (       dL  URV                  " [%        U5      5      (       d,  [Y        [%        U5      5      (       d   S[%        U5       35       e[[        U[\        5      (       a`  [^        R`                  " U5      (       aE  SU SU S	3/nU Rc                  X5        U Re                  U5      Rg                  [i        X5      5        g [[        U[j        5      (       a`  [        R`                  " U5      (       aE  SU S
U S	3/nU Rc                  X5        U Re                  U5      Rm                  [i        X5      5        g U SU< 3/n[[        XF5      (       a  [o        U5      n[i        X5      nU(       a  U Vs/ s H  nU SU S3PM     nnU Re                  U5      Rq                  UU5        U Rc                  X5        g s  snf )Nr   r   )
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z(type(z) is float and __math_isnan(z))z) is complex and __numpy_isnan(r3  r  rh  )9r2  rv  r  int8int16int32int64uint8uint16uint32uint64float16float32float64r  r   rI  r   rK  r  sliceranger   r;  SizeStreamcudastreamsdistributedis_availabletorch.distributed.device_meshr  (torch.distributed.tensor.placement_typesr  r  r  r  torch.export.dynamic_shapesr  torch.utils._pytreer  rJ   r  is_constant_classrB   r   r  r  r  r=  r  add_float_is_nan_guardr  complexadd_complex_is_nan_guardr   r8  )r   r`  r  r@  rA  np_typesok_mutable_typesok_typesr  r  r  r  r  r  pytreer   r   rc  s                     r   EQUALS_MATCHGuardBuilder.EQUALS_MATCH  s   ll5!hhuo2						





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



""))  "
" ))++@   # H 	<n,,, s%%''S	22#DI..	* d3i[)		*/ #u$**S//SE!=cU"EFD''4""5)@@&t3  #wBHHSMMSE!@RHID''4""5)BB&t3  %tC7#$#(( 3-C3D@?Q"?Qt4& 02?Q  " 	u%<<SBTU##E0"s   ,M3c                "   U R                  U5      n[        U[        5      (       a  U R                  U5        g Uc  U R	                  U5        g [        U[
        R                  5      (       a  U R                  U5        g U R                  U5        g r   )	rv  r   r   rj  rn  rA  CodeTyperr  r  r   r`  rA  s      r   CONSTANT_MATCHGuardBuilder.CONSTANT_MATCH	  sd    hhuo#tOOE"[OOE"C((MM% e$r   c                `   U R                  US5        U R                  U5      n[        US5      (       aU  [        UR                  [
        5      (       d   eU R                  (       d"  U R                  US[        R                  5        g g [        R                  " SSS[        U5       S3S/S9  g )	Nz%[inline-inbuilt-nn-modules-candidate]trainingz-Attempted to guard on uninitialized nn.Moduler~  zKAttempted to setup an NN_MODULE guard on uninitialized nn.Module subclass `z`.zIEnsure the `nn.Module` subclass instance has called `super().__init__()`.)gb_typecontextexplanationhints)rr  rv  r  r   r  r   r{  r8  rP  r  rR   unimplementedrK  r  s      r   	NN_MODULEGuardBuilder.NN_MODULE	  s    eDEhhuo3
###,,----((((
L<W<WX ) G''+Cyk5 `r   c                $    U R                  U5      $ )z0things like torch.add and user defined functions)rr  r  s     r   FUNCTION_MATCHGuardBuilder.FUNCTION_MATCH$	  s     }}U##r   c                    U R                  U5      n[        R                  " U5      (       d  [        UR                   S35      eU R                  U5        g)zNEquals ID_MATCH on classes - better readability than directly calling ID_MATCHz( is not a class, but CLASS_MATCH is usedN)rv  r  isclassr  r	  rq  r  s      r   CLASS_MATCHGuardBuilder.CLASS_MATCH)	  sJ    hhuos## ::,FG  	&r   c                    U R                  U5      n[        R                  " U5      (       d  [        UR                   S35      eU R                  U5        g)zNEquals ID_MATCH on modules - better readability than directly calling ID_MATCHz* is not a module, but MODULE_MATCH is usedN)rv  r  ismoduler  r	  rq  r  s      r   MODULE_MATCHGuardBuilder.MODULE_MATCH2	  sL    hhuo$$ ::,HI  	&r   c                (   U R                  U5      n[        U5      [        R                  L aT  [	        US5      (       aC  U R                  US[        R                  5        U R                  US[        R                  5        gU R                  U5        g)z!matches a closure by __code__ id.r   N)
rv  rK  rA  rB  r  r8  rP  rC  r  r  r  s      r   CLOSURE_MATCHGuardBuilder.CLOSURE_MATCH;	  sm     hhuo9***wsJ/G/G$$UJ8L8LM$$UJ8S8ST&r   c                    U R                   (       aX  [        UR                  [        5      (       a9  U R                  R
                  R                  UR                  R                  5        U R                  U5      $ r   )	rr  r  rC  ra   rp  used_builtin_varsr   r   rq  r  s     r   BUILTIN_MATCHGuardBuilder.BUILTIN_MATCHF	  s[    %224EFF%%77;;,,22 &&u--r   c                :   U R                  U5      nU R                  U5      n[        U[        5      (       d  U R	                  U5        / n[        U5      S:X  a  UR                  SU 35        O UR                  SU S[        U5       35        U R                  X5        [        U[        5      (       a4  U R                  U5      R                  [        U5      [        XA5      5        g U R                  U5      R                  [        U5      [        XA5      5        g )Nr   rZ  zlen(rT  )r2  rv  r  r-  rQ  r   r  r=  r  add_dict_length_check_guardr  add_length_check_guardr   r`  r@  r  r   s        r   SEQUENCE_LENGTHGuardBuilder.SEQUENCE_LENGTHO	  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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(rT  rJ  rh  )r2  rv  rK  r  r   r=  r]  r	  r  add_tuple_iterator_length_guardr  )r   r`  r@  r  rm  r   r  s          r   TUPLE_ITERATOR_LENGuardBuilder.TUPLE_ITERATOR_LENi	  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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(rT  rJ  rh  )r2  rv  rK  r   r  r=  r]  r	  r  add_range_iterator_match_guardr  )r   r`  r@  r  rm  r   normalized_range_iterr  startstopsteps              r   RANGE_ITERATOR_MATCH!GuardBuilder.RANGE_ITERATOR_MATCHy	  s    ll5!K 4U ;.se59N8OPQ##E0KQ%

|1 561Tu%DD'=d'J	
r   c                   [        UR                  5      (       d  [        U5      (       a  g U R                  (       an  [        U5      =n(       a%  U R                  R
                  R                  U5        [        U5      =n(       a%  U R                  R                  R                  U5        U R                  U5      nU R                  UR                  5      n[        UR                  5      (       d  [        U5      (       a  g XE4nX`R                  ;   a  g U R                  R                  XE45        U R                  R                  XT45        U SU 3/nU R                  X5        [        R                  (       a0  US   n[!        X5      S   n	U R"                  R%                  X45        g ['        U R)                  U5      U R+                  U5      [!        Xq5      5        g )N is r   )r1   rC  rr  r,   rp  additional_used_local_varsr   r+   additional_used_global_varsr2  r	  r0   ry  r=  rP   #use_lamba_guard_for_object_aliasingr  rz  r  r    r  r  )
r   r`  source_br	  ref_aref_br  r   r  r  s
             r   DUPLICATE_INPUTGuardBuilder.DUPLICATE_INPUT	  s   $$$
 
&x00,X66t6%%@@DDTJ-h77t7%%AAEEdKU#X]]+#$$
 
%h// n555++//?++//?'eW%&##E055 QI 6y H K,,33Y4RS)&&u-228<&t3r   c                    U R                  U5       S3/nU R                  X5        U R                  U5      R                  [	        X!5      5        g rz  )r2  r=  r  r{  r  r   r`  r   s      r   WEAKREF_ALIVEGuardBuilder.WEAKREF_ALIVE	  sJ    <<&'|45##E0u%88"4/	
r   c           	     
   U R                  U5      nU R                  U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)r2  rv  r  r  r  r=  r  add_mapping_keys_guardr  s        r   MAPPING_KEYS_CHECKGuardBuilder.MAPPING_KEYS_CHECK	  sn    ll5!eC5T%**,-?,@AB##E0u%<<UIr   c           
        U R                  U5      nU R                  U5      nU[        R                  R                  R
                  L a  U R                  U5        gU R                  U5        / nUR                  SU S[        [        U5      5      < 35        U R                  X5        U R                  UR                  5      (       a  U R                  X15        gU R                  X15        g)z6Insert guard to check that the keys of a dict are sameNr  z)) == )r2  rv  r;  r  rJ   SUPPORTED_NODESrW  r  r  r  r   r=  r  rC  r  r  r  s        r   DICT_KEYS_MATCHGuardBuilder.DICT_KEYS_MATCH	  s    ll5!EKK''777e$U#
 	ocU&6G6N1O0RST##E0++E,D,DEE--e;44UBr   c                R    [         R                  (       a  gU R                  U5        g)z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)rP   skip_nnmodule_hook_guardsr  r  s     r   EMPTY_NN_MODULE_HOOKS_DICT'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT	  s    ++U#r   c                    g r   r   r  s     r   	GRAD_MODEGuardBuilder.GRAD_MODE	      r   c                    g r   r   r  s     r   DETERMINISTIC_ALGORITHMS%GuardBuilder.DETERMINISTIC_ALGORITHMS	  r2  r   c                    g r   r   r  s     r   FSDP_TRAINING_STATE GuardBuilder.FSDP_TRAINING_STATE	  r2  r   c                    U R                   R                  nUc   eUR                  nX0R                   l        U R                  R
                  R                  US/5        g )Nz___check_global_state())rp  rt  global_state_guardglobal_staterj  r   add_global_state_guard)r   r`  rt  r;  s       r   GLOBAL_STATEGuardBuilder.GLOBAL_STATE	  sY    ,,99'''#66-9*6645	
r   c                   U R                   R                  c   e[        U R                   R                  5      U R                   l        U R                  R
                  R                  U R                   R                  S/5        g )Nz$___check_torch_function_mode_stack())rp  torch_function_mode_stack$make_torch_function_mode_stack_guard"torch_function_mode_stack_check_fnrj  r   #add_torch_function_mode_stack_guardr  s     r   TORCH_FUNCTION_STATE!GuardBuilder.TORCH_FUNCTION_STATE	  sp    $$>>JJJ0%%?? 	@
 	CC!!;;34	
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 == )
rl  r=   GLOBALrp  rt  current_devicer=  r  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                  ^ ^%^&^'^( SSK Jn  UR                  S:X  d   eT R                  R                  m(T(c   eT R                  R
                  bU  T R                  R
                  nUR                  nUR                  nUR                  b  UR                  nUR                  nGO[        T(U5      (       d   eT(R                  c   eT(R                  R                  =(       d    / m&T& Vs/ s H  oR                  PM     snm'SU(4S jjn	T(R                  (       a  0 n
/ n/ n0 n[        5       nT(R                   Hn  nUR                   T(R"                  ;   a<  [$        R&                  R(                  R+                  UU	T(R                  U
UUUU5        MY  [,        R/                  S5        Mp     [1        UU[3        UR5                  5       5      USS9m%OS m%SU%U&U'U(U 4S jjn[6        R8                  (       a   U" S	5      u  pEnSnOS
nU" S5      u  pET(R&                  (       d  T(R                  R=                  5         T R>                  (       aw  [A        5       RC                  S5      nUb  [        U[D        5      (       d   eUc  / O"[3        URF                  RI                  5       5      n[K        UUUUUS9T R                  l        URL                   H  nT RO                  UU/5        M     [P        RR                  " 5       =n(       a%  URT                  RW                  URL                  5        / n/ nU(       d  W(       d   eURL                  URF                  nnU(       d  g URY                  5        H  u  nn[        U[Z        5      (       a  S
nM  T RC                  U0 [\        E[_        5       ES9n[        U[`        5      (       a  URc                  UU45        Mi  [        U[d        5      (       a  URc                  UU45        M  S
nM     U(       Gd  SS K3nSSK4J5n  W(       d   eURL                  URF                  nn[m        UU-   5      n [o        U5       VVs/ s H!  u  nnT Rq                  [s        UU5      5      PM#     nnnSRu                  S [o        U5       5       5      n SRu                  S [o        U5       5       5      n!U (       a  SU  S3n U!(       a  SU! S3n![v        Rx                  " SU  SU! SSRu                  U5       S35      n"[z        R}                  SU"URL                  5        UR                  U"5      n#UR                  U#R                  UR                  5      R                  n$U$(       d   e [        U[        U5      [        U5      U$U#URL                  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Nf = fs  snnf ! [$        R                  R                  R                   a     Nf = f)Nr   r   r~  c                   > TR                   U     Vs/ s H  n[        U[        R                  U5      PM      sn$ s  snf r   )tracked_fakes_id_to_sourcer4   r3   SIZE)t_idr  rl  rt  s      r   get_sources+GuardBuilder.SHAPE_ENV.<locals>.get_sources.
  sG     #/"I"I$"O #P )1D1DcJ"O  s   %;z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlyc           
        > TR                   R                  T Vs/ s H  oR                  PM     snT Vs/ s H  oR                  PM     snTTTR                  TR
                  (       + U S9$ s  snf s  snf )N)input_contextsequalities_inputsr^  ignore_staticlangs)	shape_envproduce_guards_verbosefakerl  r^  export)r]  r  r[  r  rZ  rt  r   s     r   _get_code_parts/GuardBuilder.SHAPE_ENV.<locals>._get_code_partsW
  sn    #--DD%'(RVVR(')*r!XXr*#1&7# (4':':#: E 
 
(*s
   A.A3
)pythonverbose_pythoncppT)rd  re  cpp_code_parts)python_code_partsr   rg  python_fallbackshape_env_sources)r   )CppCodeCacherg  c              3  <   #    U  H  u  nu  p#U S U S3v   M     g7f)z = int_values[r  Nr   r  irW  symbols       r   r   )GuardBuilder.SHAPE_ENV.<locals>.<genexpr>
  s*      ,*I;A hnQCq1*I   c              3  <   #    U  H  u  nu  p#U S U S3v   M     g7f)z = float_values[r  Nr   rm  s       r   r   rp  
  s+      .*K;A h.qc3*Krq  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)rQ  r5  r  r5  r   list[Source])r]  ztuple[str, ...]r   zlist[_ShapeGuardsHelper])Jtorch._dynamo.output_graphr   r	  rp  rt  shape_code_partsrh  r   rg  ri  r  r^  tracked_fakessymbolic_contextexport_constraintsr   rQ  rO  r;  ra  dynamic_shapes_process_equalitiesr/  r0  rG   r  r/  rP    enable_cpp_symbolic_shape_guardsOverflowErrorfreezerr  localsrv  rE   source_to_symbolr  ShapeCodePartsexprsr=  r7   try_getshape_env_guardsr.  r   r\   rI   r  r5  r  r  ctypestorch._inductor.codecacherk  r-  r  r  r-   r  textwrapdedentr  r  loadcastr`  c_void_pr  r"   r   	_inductorrR   InvalidCxxCompilerr$  ))r   r`  r   rv  rh  r   rg  ri  r  rR  namesrT  rU  rV  rW  
constraintrb  maybe_cpp_code_partsmaybe_shape_env_sourcesr   compile_contextint_source_to_symbolfloat_source_to_symbolr   r  rl  ro  r1  r  rk  rn  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardr[  r  rZ  rt  s)   `                                    @@@@r   	SHAPE_ENVGuardBuilder.SHAPE_ENV
  s9   @zzR,,99'''  11=#44EE 0 B B!1!D!D..:!1!@!@.>>O l,=>>>>))555''55;B:<="Q00"=N ..46<>  # 68/2u"."A"AJ!,*Q*QQ33GG&'(22!(.++	 $QR #B %7!-'9$()?)?)A$B$3#%! %)!  66 ((KL J%> ',O #'8G095!  &&&&--/ $*8<<0@#A '/:$&;4 4  
 (/ .??DDFG $
 6D"3#53 /"96D!!2 &++D''v6 , -4466?6,,334F4L4LM!!#!!> $$//	 )J "2"8"8":fn55&*O$(HH%L%L8I8K%L %- %M "-55,33VV4DE#M599.55vv6FG +/ #;" >!!> $$//	 )J  $$8;Q$QR< &//?%@"%@	6 66}VQ7OP%@  "
 #')) ,*34H*I, # %)II .*34J*K. %!
 #(00A&CO$*12C1DA(F%#?? ## $$% &#==45 6(   5&,,
 $((2TZZAGGv
 -",-./&,, 
 ""55!''"((DD0A0CD 6  #w >@ % &*O<K4=9%'9v"^ ??&&99 s=   *W,4W1 X (X=C9X 1X
XX (X?>X?c                
   [         R                  (       a  UR                  5       (       a  g [        U5      (       a  U R	                  U5        g [        U[        5      (       a  U" 5       nUb  UOU R                  U5      n[        U5      n[        R                  R                  U5      n[        U[        R                  R                  5      (       a2  UR                  b  UR                  nUR                  b  UR                  n[        U[        R                   5      (       d   e[         R"                  (       a  [        U[        R$                  R&                  5      (       am  [)        5       nUR+                  5       (       aN  UR-                  SUR/                  5       5        UR-                  SUR0                  5        UR-                  SS5        U R3                  U5      n/ nU R4                  R6                  c   eU R4                  R6                  R8                  (       a  U R;                  U5        / SQnU H  n	[=        UR>                  U	5      n
U	S:X  a  Sn	[A        U
5      n
U R                  U
5      n[C        U[        RD                  [        RF                  45      (       a&  URI                  SU S	U	 S
[K        U5      < 35        M  URI                  U S	U	 SU 35        M     GOU RM                  U5      n[         RN                  (       aC  [C        U[        R$                  R&                  5      (       do  [Q        UR>                  5      (       dU  [        UR>                  [R        5      (       d6  U RT                  RI                  U5        U RV                  RI                  U5        U R4                  R6                  nURX                  UR>                     n[[        US   5      n[[        US   5      n[]        [_        UUUUUU5      U5      nURa                  UUUUUUU5        [        U[        R$                  R&                  5      (       d/  U Rb                  Rd                  Rg                  URh                  5        URj                  c   e[m        USUR>                  S9u  nnU(       d  [o        US5      (       aU  URp                  nSU SU SU S3nURI                  U5        U RM                  U5      Rs                  U[]        UU5      5        OBSU S3nURI                  U5        U RM                  U5      Ru                  S[]        UU5      5        [w        U5      S:  a  U Ry                  X5        g g )Nparam_numelparam_bytesparam_countrO   )r  r  r  
ndimensionr  zndimension()zstr(rY  rT  r3  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_modulerF  rr  r  rN   rv  rK  r;  r  _dispatch_keysrL  rM  r  r  r<  log_compilation_metricsr?  	Parameterr6   in_progress	incrementnumelnbytesr2  rp  rt  ra  rQ  rU   rC  rV   r   r  r  r  r   r  ,skip_no_tensor_aliasing_guards_on_parametersr2   rr   rn  ro  input_source_to_sizes_stridesr  r  r  add_tensor_match_guardrj  r   r   r	  rl  r   r  r  add_dynamic_indices_guardr>  r   r=  )r   r`  r  r  r  metrics_contexttensor_namer   termstermterm_src
real_valuerj  rt  metadatar  r  r   static_reasondynamic_indicesr  s                         r   TENSOR_MATCHGuardBuilder.TENSOR_MATCH  s   11e6J6J6L6L "%((MM% %//".EDHHUOE%[F!HH33E:M%!2!2!=!=>><<+"\\F&&2$)$7$7MeU\\2222--*UEHHDVDV2W2W"5"7"..00#--mU[[]K#--mU\\J#--mQ?,,u-K, !D((55AAA$$1188& "D)%*B*BDIH|+-#;H#E!%(!3Jj5<<*EFFd;-qeC
OCV$WX{m1TF$zl$KL " !% 6 6u = GGuehh&8&899I!44  %U%=%=?PQQ 1188E::AA-P#44AA'EE,, 2(62BC3HX4FG%;.#% 
&" 44&! "%););<<&&99==ejjI< <<+++<U5M5MOFG 5";<<&+&C&CO"$[M1STcSddrs~r  @g  !hIKK	***51KK')?	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_backr\  co_namer   rg  r	  rv  ra  r@  rK  r  r  enumEnumrI  
ProxyTypesset_export_info)r   r`  rI  r<  ru  	cur_framecaller	func_namer	  guarded_objectguarded_object_typeobj_refsupports_weakrefs                r   r=  #GuardBuilder._set_guard_export_info  s0    !N	$$$!!!!!&?&--*?*?	NN333 	
VW`Vab	
3
 #*::D)-T488E?N4N 2@1KGKK^,-QU 	  N,,.A1EJ 	 JTYYw/A/AB%
 %
 kk.1G		
r   )ry  rx  r|  rl  rp  r   r\  rj  r{  rq  r   r]  rs  r_  ro  rn  rz  rd  rr  r`  rm  re  r^  rc  )FNN)r\  types.CodeTyper]  zCallable[[object, str], int]r^  zCallable[[Source], str]r_  z1Callable[[object], Optional[weakref.ref[object]]]r}  dict[str, object]r   r  rj  r   rp  CheckFunctionManagerrr  r   rd  r  re  Optional[dict[str, Any]]r   r   )r1  dict[Any, Any]r`  r:   r   r   )r  r  r`  r:   r   r   )r1  r   r   Optional[Any])rl  rU   r:  r   r;  r   r1  r   r<  r   r  r   r2  r-  r   r   )rl  r>   r   r   )rl  r>   r1  zHOptional[Union[KeysView[Any], set[Any], frozenset[Any], dict[Any, Any]]]r   r-  )r  r-  r   r   )r   r   )rl  r>   r   r   )r`  r:   r   r   r*  )
r   r  r   r  r   r  r  r   r   r   r   )r(  zGuard | Sourcer   r  r   r   )r`  zUnion[str, Guard]r   r   )r`  r:   r  r   r#  z(Callable[[GuardBuilderBase, Guard], Any]r   r   )r`  r:   r   r   )r`  r:   r  r  r   r   )r`  r:   r  r   r[  r   r   r   )r`  r:   r  r   r[  r   r   r   )r`  r:   r  r  r   r   )r`  r:   r  r  r   r   )r`  r:   r  r>   r   r   )NN)
r`  r:   rI  r  r<  r  ru  r  r   r   )?r   r   r   r   r   r  r  rD  r  r  r  r  r  r  r  r  r$  rv  r2  r8  rC  rG  rQ  rW  r^  rd  rj  rn  rr  rq  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r)  r-  r0  r4  r7  r=  rD  rJ  r  r  r=  r   r   r   r   rP  rP    sd    "<@59OFOF -OF ,	OF
 KOF 'OF (OF +OF /OF OF :OF 3OF 
OFb+49	<$L  "YY )Y  	Y
 Y Y Y -Y 
Yv9""
" 
",?
`DL 59 SS &S 2	S
 S 
SL 26' / 
	2   ;	
 
"80v 3700"/0	02
,
00 "

> =A#?#?,9#?	#?J	

	

&
8
,
iV	%($
''	'.4
 
&+Z
JC2$



un{9D 26,01
1
 1
 "/	1

 *1
 
1
 1
r   rP  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   NrJ  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_r   r   s         r   r   PyExprCSEPass.Replacer.visit2  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>O  s    qr   )r  r  )_counterr  r  defaultdictr  r   s    r   r   PyExprCSEPass.__init__L  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_varR  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   r  countereexs        r   countPyExprCSEPass.countW  sd    ""4<<0Aciil+   DbiiQRSs   %A
A="A88A=c                    U R                  U R                  U R                  5      nUR                  [        R
                  " U5      5      nUR                  [        U5      4$ r   )r  r  r   r   r  r  r  r  )r   r  replacernew_nodes       r   r  PyExprCSEPass.replace`  sF    ==t}}=>>#))D/2h!777r   )r  r  Nr  )_var)r   r   r   r   )r  r  r   r   r  r   r   ztuple[list[str], str])r   r   r   r   r  r  	AttributeCall	Subscriptr  dataclasses	dataclassr  NodeVisitorr  NodeTransformerr  r   r   r
  r  r   r   r   r   r  r    sx     M --3==A% % % coo  #'3&& #'J

8r   r  c                    [        U R                  [        5      =(       d3    [        R                  =(       a    U R
                  [        R                  L $ r   )r  rC  r`   rP    guard_nn_modules_using_dict_tags	create_fnrP  r  )r`  s    r   must_add_nn_module_guardsr  f  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$ )DeletedGuardManagerWrapperit  c                .   > [         TU ]  5         Xl        g r   )r   r   invalidation_reason)r   reasonr   s     r   r   #DeletedGuardManagerWrapper.__init__u  s    #) r   c                    S U l         g r   )r   r   s    r   r  6DeletedGuardManagerWrapper.populate_diff_guard_managery  s
    #r   )r   r   )r!  r   r   r   r  )r   r   r   r   r   r  r   r   r   s   @r   r  r  t  s    *$ $r   r  c                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   Srg)r  i}  rF   rh  r   zOptional[_CppShapeGuardsHelper]rg  r   ri  rt  rj  r   NrJ  r   r   r   r  r  }  s     ))**33##r   r  c                  8    \ rS rSr% S\S'   S\S'   SrS\S'   S	rg)
GuardsStatei  r   rt  Optional[ShapeCodeParts]rv  Nr  re  r   )r   r   r   r   r   re  r   r   r   r   r'  r'    s    ((..15.5r   r'  c                  @    \ rS rSrSS	S jjrS
S jrS
S jrSS jrSrg)_Missingi  Nc                    Xl         g r   r  )r   r!  s     r   r   _Missing.__init__  s    r   c                "    SU R                    S3$ Nz	_Missing(rh  r,  r   s    r   __repr___Missing.__repr__      4<<.**r   c                "    SU R                    S3$ r/  r,  r   s    r   r  _Missing.__str__  r2  r   c                    [        5       $ r   )r*  )r   r   kwargss      r   __call___Missing.__call__  s
    zr   r,  r   )r!  r  r   r   r   )r   r   r6  r   r   r   )	r   r   r   r   r   r0  r  r7  r   r   r   r   r*  r*    s    ++
r   r*  c                     [         R                  [        R                  R                  [
        R                  4n  U [        R                  R                  R                  4-  n U $ ! [         a     U $ f = fr   )
rA  r  r;  r  r  ra  r   _distributed_c10dProcessGroupAttributeError)r*  s    r   _get_unsupported_typesr=    sh     	C
**7799 J  Js   (A% %
A32A3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5       r\    SS j5       r\SS j5       r\SS j5       r\S S j5       r\S!S j5       r    S"S jrSrU =r$ )#GuardsStatePickleri  c                   > [         TU ]  " U0 UD6  [        R                  R	                  5       U l        [        R                  R                  R                  5       U l        Xl	        X l
        X0l        g r   )r   r   r;  rL  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converterrq  empty_valuesmissing_values)r   rq  rF  rG  r   r6  r   s         r   r   GuardsStatePickler.__init__  s\     	$)&)**99; % 1 1 = = Q Q S!2(,r   c                d    [         R                  R                  5       nUR                  U5        U$ r   )r;  r?  r@  __setstate__)r  statemods      r   _unpickle_module#GuardsStatePickler._unpickle_module  s%    hhoo
r   c           	        [         R                  R                  5       n[         R                  R                  R	                  5       nUR                  UUUU[         R                  R                  R                  U5      5      nXXl	        U$ r   )
r;  rL  rA  rC  rD  from_meta_and_devicer  r   from_raw_reprgrad)	r  meta_tensorr  r  dispatch_keys_rawrR  rB  rE  r*  s	            r   _unpickle_tensor#GuardsStatePickler._unpickle_tensor  st     %%446	 ,,88LLN33HH##112CD
 
r   c                   0 nU H  u  pn
U	" U
6 Xx'   M     UR                   UR                  5       p[        U5      R                  XuX5      nX=l        [
        R                  R                  R                  U5      Ul	        U$ r   )
shaper  rK  __tensor_unflatten__r  r;  r  r   rQ  r  )r  rS  r  r  rT  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   rQ  )r  raw_reprs     r   _unpickle_dispatch_key_set-GuardsStatePickler._unpickle_dispatch_key_set  s    xx&&44X>>r   c                h    [         R                  R                  R                  R	                  U5      $ r   )r;  r  r  CInterpreterdeserialize)r  jsons     r   _unpickle_functorch_interpreter2GuardsStatePickler._unpickle_functorch_interpreter  s%     xx""//;;DAAr   c                .    [         R                  " U5      $ r   )rA  MappingProxyType)r  ds     r   _unpickle_mapping_proxy*GuardsStatePickler._unpickle_mapping_proxy  s     %%a((r   c                H    [         R                  U5      R                  5       $ r   )r-  fromkeysr  )r  elemss     r   _unpickle_dict_keys&GuardsStatePickler._unpickle_dict_keys  s    }}U#((**r   c                    [         R                  R                  R                  R                  R	                  5       U   $ r   )r;  r  fsdp_fully_shardget_cls_to_fsdp_cls)r  original_types     r   _unpickle_fsdp_module_type-GuardsStatePickler._unpickle_fsdp_module_type  s5       %%22??SSU
 	
r   c                    [         R                  R                  R                  nUR	                  U5      n[         R                  R
                  R                  X15        U$ r   )r;  r?  parallelDistributedDataParallel__new__r@  rJ  )r  rK  tyddps       r   _unpickle_ddp_module'GuardsStatePickler._unpickle_ddp_module  sA     XX66jjn$$S0
r   c                J    [        [        R                  R                  U5      $ r   )r  r;  opsr  )r  r	  s     r   _unpickle_c_op!GuardsStatePickler._unpickle_c_op  s    uyy||T**r   c                .    [         R                  " X5      $ r   )rA  rC  )r  funcr4  s      r   _unpickle_bound_method)GuardsStatePickler._unpickle_bound_method  s    ++r   c                ^    [        [        R                  R                  R                  U 5      $ r   )r  r;  r?  	attention
SDPBackendr	  s    r   _unpickle_sdp_backend(GuardsStatePickler._unpickle_sdp_backend  s!     uxx))44d;;r   c                P   ^ SU4S jjnUR                   c   eUR                   S   $ )Nc                    > T $ r   r   )rA  s   r   rW  ,GuardsStatePickler._unpickle_cell.<locals>._&  s    Jr   r   )r   r   )r   )r  rA  rW  s    ` r   _unpickle_cell!GuardsStatePickler._unpickle_cell$  s)    	 }}(((}}Qr   c                   SS K n[        U5      U R                  ;   a!  [        U5      R                  [        U5      44$ [        U5      U R
                  ;   a  [        S4$ [        U[        R                  5      (       Ga  UR                  R                  S:w  Ga  SSKJn  [        U5      U R                  ;  a  [        S4$ U" U5      (       a  / nUR                  5       u  pVU Hj  n[        X5      n[        U[        R                  5      (       a  XR                  [        U5      '   U R!                  U5      u  pUR#                  XyU
45        Ml     [        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R0                  S9UR                  [        U5      [        R(                  R+                  U5      R-                  5       UR2                  44$ [        U[        R4                  R6                  5      (       Ga  [        U5      U R                  ;  a  [        S4$ [        U[        R4                  R8                  R:                  5      (       a&  [        U 5      R<                  UR?                  5       44$ [        U5      R@                  [        U5      RB                  :X  a  [D        $ URF                  R>                  [        R4                  R6                  R>                  :X  a&  [        U 5      RH                  UR?                  5       44$ GO[J        RL                  " U5      (       a"  [        U 5      RN                  URB                  44$ [        U[        R(                  RP                  5      (       a&  [        U 5      RR                  UR-                  5       44$ [        U[        R(                  RT                  RV                  5      (       a&  [        U 5      RX                  UR[                  5       44$ [J        R\                  " U5      (       aW  [_        XR`                  5      (       a=  [c        US	5      (       a,  [c        US
5      (       d   eURd                  URf                  44$ [        U[        Rh                  5      (       a  [k        SU SURl                   S35      e[        U[n        Rp                  5      (       a&  [        U 5      Rr                  URu                  5       44$ [        U[        Rv                  Rx                  Rz                  5      (       a!  [        U 5      R|                  [        U5      44$ [        U[        R                  R                  5      (       aB  UR                  R                  S5      (       a"  [        U 5      R                  URB                  44$ URF                  R                  S:X  a"  URF                  RB                  S:X  a  [        S4$ [        U[        5       5      (       a  [        S4$ [J        R                  " U5      (       a  UR                  R                  [J        R                  -  (       a  [        S4$ UR                  [        R                  ;   aW  [        R                  UR                     nUR@                  R                  S5       H  n[        XS 5      nM     XLa  [        S4$ O[J        R                  " U5      (       aq  UR                  n	UR                  n[        XRB                  5      n[J        R                  " U5      (       a  UR                  nXLa  [        U 5      R                  X44$ OP[        U[        S " S5      R                  S   5      5      (       a"  [        U 5      R                  UR                  44$ [c        [        R                  S5      (       aT  [        U[        R                  R                  R                  5      (       a!  [        U5      U R                  ;  a  [        S4$ [        U[        R4                  R                  R                  5      (       a"  [        U 5      R                  UR                  44$ [        U5      R@                  [        U5      RB                  :w  a?  [        Rv                  R                  R                  S[        U5       SU S3S-   S-   5      e[J        R\                  " U5      (       Ga"  [c        [        R                  S5      (       Ga  [_        U[        R                  R                  R                  R                  5      (       a  U[        R                  R                  R                  R                  La  UR                  S   n[_        U[        R4                  R6                  5      (       d   eU[        R                  R                  R                  R                  R                  5       ;   d   e[        U 5      R                  U44$ [D        $ ) Nr   )zmissing valuesmeta)is_traceable_wrapper_subclass)ztensor guard tree)r  )r  r  )zmodule guard tree_torch_handler_name_torch_unpicklerzCannot serialize SymInt z (node: rh  z_C::rf  	PyCapsule)capsule)unsupported)znested functionrY  )zfqn mismatchc                   ^  U 4S j$ )Nc                    > T $ r   r   r  s   r   r  GGuardsStatePickler.reducer_override.<locals>.<lambda>.<locals>.<lambda>  s    Qr   r   r  s   `r   r  5GuardsStatePickler.reducer_override.<locals>.<lambda>  s    Yr   distributed_c10d)zdistributed_c10d.Workr  r  r  r  r   r|  rL  )dsympyrw  rF  rK  r  rG  r*  r  r;  r<  r  torch.utils._python_dispatchr  rq  r  r  reducer_overrider  ra  
empty_liker  r  rh  rU  r  rR  r?  r@  r  r  r  __getstate__r   r   NotImplementedr   rM  r  r  re  r   ri  r  rl  ro  	serializer  r+  Functionr  r  r  r  r  r   rA  rr  rt  rh  r  r  r   ry  r  _opsOpOverloadPacket_qualified_op_name
startswithr  r   r=  
isfunctionr   co_flags	CO_NESTEDr  modulesr  ismethodr   __self__r  r   r  r8  r  r  Workr  r  r  r	  rR   PackageErrorr|  r}  
FSDPModuler   r~  r  )r   r"  r  r  r[  attrsrZ  r  innerr  
args_tuplefr	  method_self
inner_funcr  s                   r   r  #GuardsStatePickler.reducer_override-  s    	c7d'''9$$tCyl22c7d)))000c5<<((SZZ__-FR#wd444!777,S11  
 335
!D#C.E!%66<A..r%y9'+'<'<U'C$D%%t:&>? " DzFF$$S8JJIHH++C099;I   :..  V3CTCTU

S	'',5571   UXX__--#wd444!777
 #uxx00HHIIDz669I9I9K8MMMCy%%c););;%%}}))UXX__-I-IIDz22S5E5E5G4III J c"":55FFUXX4455:883<<>:KKKUXX00==>>:==?QQQ OOC  3//2333 23333''#*A*A)CCCU\\**!9#hsxxjPQRSSU3344:55
}DDU]]00::;;:11DI<??,,
 
$$//77:,,s||o== MM$$
2&&+5 \))3566---$$||$$w'8'88!555~~,KK/,,2237D.A 8<#%666c""<<D,,K mm<J
++'00
%Dz884:MMM & T#6":"F"Fq"IJKK:,,s/@/@.BBB5$$&899j""3388?
 ?
 #wd444!;;;c588--8899:33chh[@@9!!T#Y%7%77--##00S	{,se3DETUTU  OOC  ))6223 1 1 6 6 C C N NOO%++00==HHH #A!-AAAA!((--::GG[[]^^ Dz<<}>NNNr   )rF  rB  rq  rG  rE  )rq  dict[int, Any]rF  r  rG  r  r   r   r6  r   r   r   )rK  r   r   ztorch.nn.Module)rS  torch.Tensorr  torch.devicer  rK  rT  r5  rR  r  r   r  )rS  r  r  r  r  rK  rT  r5  rZ  r   r[  z5list[tuple[str, Callable[..., Any], tuple[Any, ...]]]r   r  )rd  r   r   ztypes.ModuleType)rh  r5  r   ztorch._C.DispatchKeySet)rn  bytesr   z torch._C._functorch.CInterpreter)rs  r  r   z types.MappingProxyType[Any, Any])rx  	list[Any]r   r   )r  type[torch.nn.Module]r   r  )rK  zdict[str, Any]r   z)torch.nn.parallel.DistributedDataParallel)r	  r   r   r   )r  r   r4  r   r   r   )r	  r   r   ztorch.nn.attention.SDPBackend)rA  r   r   r   )r"  r   r   z6Union[tuple[Callable[..., Any], tuple[Any, ...]], Any])r   r   r   r   r   rE  rM  rU  ra  re  ri  ro  rt  ry  r  r  r  r  rD  r  r  r  r   r   r   s   @r   r?  r?    s;   -)- %- '	-
 - - 
-  
 !  	
   
 ( !  	
   J 
 , . . ? ? BB	)B B
 ))	)) )
 + + 
1
	
 
 "	2  + + , , < <    [[	?[ [r   r?  c                   [         R                  " 5       n0 n0 n[        R                  " U R                  R
                  5      nU H  n[        R                  " U5      (       aa  [        US5      (       aP  UR                  n[        U5      U;  a3   [        U5      R                  [        U5      5        Xs[        U5      '   M}  M  [        U5      U;  d  M  Xd[        U5      '   M     [        XXB5      n UR                  U 5        UR+                  5       $ !    M  = f! [         a8  n	[         R"                  R$                  R'                  [)        U	5      5      U	eS n	A	ff = f)Nr  )ioBytesIOr  tree_leavesrt  r}  r  r  r  r  rw  rK  r  r?  dumpr<  r;  r  rR   r  r   r  )
rK  rq  bufrF  rG  leavesleafr4  picklerr  s
             r   pickle_guards_stater    s#   
**,CLN 2 2 > >?FD!!gdJ&?&?==D$x00J&&tDz2-1D* 1 X.. (,2d8$  !!2.VG<U <<>  <mm,,SV4!;<s$   0D4D D
E'3EEc                      \ rS rSr%         S                   SS jjrSrS\S'           SS jr S             SS jjr        SS	 jr	SS
 jr
SS jrSS jrSrg)r  i  Nc           	     X	  ^ ^^^ U(       a  UR                   OS n0 T l        [        U5      nUT l        T R                  c   eUT l        U(       a  UR
                  OS T l        [        5       T l        [        5       T l        [        5       T l	        UT l
        S T l        S T l        [        S5      (       d  [        R                  S5        [         R"                  R$                  R&                  (       a  U=(       d    S mSU4S jjn[)        U=(       d    S[*        R,                  S9nU(       a  T R/                  UUUUSU
S9u  mnSU4S	 jjnU" U Vs/ s H  nU" U5      PM     sn5      n[1        U5      [1        U5      :X  d   e[3        S
 U 5       5      (       d   e[5        U5       VVs/ s H  u  nnUU   (       d  M  UPM     nnnT R/                  UUUUUU
S9u  mnUT l        T R9                  TX5        TR:                  T R6                  l        [<        R?                  ST R6                  5        TR:                  T R6                  l        SmUR@                  (       Gd  URB                  (       d  T R6                  RE                  URF                  5      (       dA  [I        T R6                  URF                  [J        RL                  " 5       S S9n[O        SU 35      e[P        b!  [Q        T R6                  URF                  T5        [S        T R6                  RT                  URF                  S5      m[<        R?                  STS 5        [V        RX                  " S[[        T5      5        S T l.        U(       aF  SSK/J0n  [c        T R                  U5      (       d   e T Re                  TUT R                  5      T l.        [         Rv                  Ry                  SUU 4S jS9  T R                  R{                  5         S T l        g s  snf s  snnf ! [f        Rh                   a  n[         R"                  R$                  Rj                  (       d  U	(       a  UeT R                  Rm                  S[o        U5       3[p        Rr                  " 5       Ru                  S5      S9   S nANS nAff = f)Nr[  z9guard_nn_modules is turned off using justknobs killswitchc                2    U  Vs/ s H  nSPM     sn$ s  snf r*  r   )gsgs     r   r  /CheckFunctionManager.__init__.<locals>.<lambda>  s    R>PRtR>P>Ps   c                  > / n[        T" U 5      U 5       H  u  p#U(       d  UR                  S5        M  UR                  S;   d   SUR                  ;   d  SUR                  ;   aH  [        R                  SUR                  UR                  R                  5        UR                  S5        M  UR                  S5        M     U$ )NF)rr  r  r!  rW  rr  rW  z7%s guard on %s is dropped with caching_precompile=True.T)r$  r  
guard_typederived_guard_typesr/  r0  
orig_guardr	  )r   r*  keepr  _guard_filter_fns       r   guard_filter_fn6CheckFunctionManager.__init__.<locals>.guard_filter_fn  s    "#3F#;VDGD

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

5)

4(+  E, 
r   r   )r  F)re  c           
     J  > [        5       n[        U R                  5      nUS:X  a  SnUnO TR                  U 5      nSn[	        U R
                  5      S Ln[        UUUU R                  5       U R                  (       a  [        U R                  5      OSUU S9$ !   UnSn Nb= f)Nr~  FTr   )r	  	has_valuer  r  r  	is_globalr  )
objectstrip_local_scoper	  rv  r+   rC  r   create_fn_nameguard_typesrI  )r`  MISSINGr	  r  r  r  builders         r   make_guard_filter_entry>CheckFunctionManager.__init__.<locals>.make_guard_filter_entryB  s     ((42: %I#E	*
 !(E 2$(	 353K3KLTXX	''$335494E4Ee//02'$
 
	* '$)	s   B B"c              3  D   #    U  H  n[        U5      [        L v   M     g 7fr   )rK  r   )r  r  s     r   r   0CheckFunctionManager.__init__.<locals>.<genexpr>d  s     ?1tAw$s    %sg        )backendziGuard failed on the same frame it was created. This is a bug - please create an issue.Guard fail reason: rO   zGuard eval latency = %s us.2fguard_latency_usr   rM  zGuard evaluation failed: r  )	tracebackdynamo_cpp_guards_strc                 *   > TR                    ST S S3$ )Nz
Guard latency = r  z us)rj  )latencyr   s   r   r  r    s    $"4"4!55GPS}TWXr   
payload_fn)r   zlist[GuardFilterEntry]r   z
list[bool])r`  r:   r   r   )>r   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesrt  rv  r@  rK   r   r  r  rd  r;  rB  rD   r/  r0  r;  r  rP   caching_precompiler   r:   sort_keybuild_guardsr   r#  r  rj  compile_check_fnr   r  r  skip_guards_checkra  r  r}  get_guard_fail_reason_helperr7   r  r  r   r$   r   r5   increment_toplevelr5  guards_stateru  r   r  serialize_guardsrR   r  strict_precompilebypass_packager   r  
format_excr  _loggingtrace_structuredclear)r   r\  rt  r   r   r  rv  rd  rr  strict_errorre  r   existing_diff_guard_sourcessorted_guardsrj  r  r`  filter_resultsrn  reasonsr   r  r  r  r  s   `                     @@@r   r   CheckFunctionManager.__init__  s2    )5$$$;= B+N 	$ :F  ,,, !1
 7CL22 	& 3=,;E<'<FL($8!PTPT/BCCKKST ==22.Q3P4 v|@ &*%6%6+!1 &7 &"G]< -=JK]E(/]KN ~&#m*<<<<??????&/&>&>(!U.QRBS&>  
 "&!2!2'- "3 "
 +g}D .5-D-D*t112-4-D-D* ---l6I6I%%++L,D,DEE6&& ,,"557 	 %**14 
 -8-&&(@(@' ,""'')A)A1G 9gc]L 112Dc'lS-1Dd//1BCCCC
$($9$9]D,=,=%! 	''#X 	( 	
 	 ] Lh ## ==''99\G!!00/Ax8'224::4@ 1 s+   P.PP"P R)%A:R$$R))rW  r  rr  r  r  r  r  r!  ztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPESc                  ^^^^ U H  nUR                  5       nUR                  (       a  [        UR                  5      OSnUS;   a1  UR                  (       a  UR	                  U5      n[        U5        Mp  Mr  U[        R                  ;   a,  [        R                  R                  R                  U S35      e[        S U 5       S 5      =n(       d  M  [        R                  R                  R                  U S35      e   UR                  =(       d    Sm[        5       m[        5       mSUUU4S jjn	UR                  5       n
U Hn  n[!        UR"                  [$        5      (       a:  U R&                  (       d   eU R&                  R(                   H  nU	" U5        M     M\  U	" UR"                  5        Mp     UR*                   H  nU	" U5        M     SS jmU
R,                  R/                  5        VVs0 s H  u  pUT;   d  XR0                  ;   d  M  X_M      nnnU
R,                  T   R/                  5        VVs0 s H  u  pXR2                  ;   d  M  X_M     snnUT'   [4        R6                  " U
U
R8                  R/                  5        VVs0 s H  u  pUT;   d  XR:                  ;   d  M  X_M      snnU[        R<                  R?                  [A        U4S jU 5       5      5      [B        RD                  " [F        U
RH                  5      S	S
9n
[K        U
U R&                  URL                  S9n[O        XRP                  5      $ s  snnf s  snnf s  snnf )Nr   )rQ  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  rn  s     r   r   8CheckFunctionManager.serialize_guards.<locals>.<genexpr>  s(      00VVV A0s   '	'r~  c                   > [        U 5      =n(       a0  [        U[        5      (       d   eUT:w  a  TR                  U5        g g [	        U 5      =n(       a)  [        U[        5      (       d   eTR                  U5        g g r   )r+   r  r   r   r,   )rl  r	  builtins_dict_nameused_global_varsused_local_varss     r   prune_variable=CheckFunctionManager.serialize_guards.<locals>.prune_variable  sz    -f55t5!$,,,, --$((. ..v666!$,,,,##D) 7r   c                L  ^ [        U [        R                  5      (       a}  SS jm[        U4S jU R                   5       5      nU R
                  R                  5        VVs0 s H  u  p#UT" U5      _M     nnn[        R                  " U R                  /UQ70 UD6$ U $ s  snnf )Nc                ^    [        U [        [        R                  45      (       a  U " 5       $ U $ r   )r  rN   ra  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   )r  r   r   r   )r  	functoolspartialrI  r   keywordsr   r  )r  new_argskvnew_keywordsr  s        @r   normalize_create_fnBCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn  s    !Y..//
 ! 9!&& 9978zz7G7G7IJ7Itq47
7IJ ((K(KlKKH  Ks   "B c           	   3  r   >#    U  H,  n[         R                  " US S T" UR                  5      S9v   M.     g 7f)N)obj_weakrefguarded_class_weakrefr  )r  r  r  )r  r`  r)  s     r   r   r  @  s<       "/  ''$(.2"5eoo"F	 "/s   47T)r}  r   _guardsr  r  )rt  rv  re  )rl  r>   r   r   )r  Callable[..., None]r   r/  ))r  r  rI  rN  rv  r#  r  r  r;  r  rR   r  next%name_of_builtins_dict_key_in_fglobalsr   dump_guards_stater  rC  ru   rv  rj  ru  r   r   r  r   r  r  r}  r  r.  	GuardsSetrK   r  tree_mapr  r  r'  re  r  rq  )r   r  r  rt  r`  r  r  r"  failedr  output_graph_guards_staterl  r&  r'  global_scope_stater  r  r)  r  r  s                   @@@@r   r  %CheckFunctionManager.serialize_guards  s:    #E--/J>C>O>O%(9(9":UW <<((!++e,C*3/ )
 2XXXmm''44!l">?   0
    mm''44h:; 3 #: *OOUSU5%
	* 
	* %1$B$B$D!"E%22NCC,,,,"33EEF"6* F u778 # #55F6" 6	  2>>DDF
F$$-M-M(M ADF 	 
 2>>"eg2
 ***	 AD2
-. %0$7$7% 6AAGGIIDA'10O0O+O I
 ,MM++  "/ 
 +1//.)GG+ #/%
!2 #2!22$55
 #<1J1JKKW

2
s$   7M	M	?MMM2Mc                <  ^ [        5       nX'l        S mSU4S jjn[        UU R                  UU R                  UR
                  UR                  UU UU R                  US9n	S	S jn
[        R                  " X5      m[        R                  =(       a    [        S5      nU Hw  nU(       d\  UR                  5       (       aG  SUR                  ;  a7  SUR                  ;  a'  [        R                  (       d  SUR                  ;  a  Mf  UR!                  U	5        My     X4$ )
Nc                   > U R                   nU[        R                  L a  U R                  $ T(       d   eT" 5       nUc   eUR	                  U R                  5      $ r   )guard_sourcer=   CONSTANTr	  r2  )rl  r;  	r_builder	w_builders      r   r^  5CheckFunctionManager.build_guards.<locals>.source_reff  sV    !..L{333{{"9!I((($$V[[11r   )rd  re  c                0    U " 5       nU(       a  S Ul         g g r   )r`  )weak_br  s     r   cleanup_builder:CheckFunctionManager.build_guards.<locals>.cleanup_builder  s    A r   r[  r   r   r  )rl  r>   r   r   )rA  zweakref.ref[GuardBuilder]r   r   )r   r   rP  r]  r_  r}  r   rd  ra  r@  rP   r{  rD   rD  r	  r,  r5  )r   r  r  r\  rt  rr  re  rj  r^  r  rB  guard_on_nn_modulesr`  r>  s                @r   r  !CheckFunctionManager.build_guardsX  s     ,-+F(		2 KK  $$%%!%!:!:-
	 KK9	$55 
//;
 #E'2244 #%**4$EJJ655

9RLL! # %%r   c                	  ^^^ UR                   nUS/-  n[        R                  S5        / m/ m/ mU R                  R                  R                  [        [        R                  " 5       5      5        S U l	         S       SUUU4S jjjn[        5       nUR                   HA  nUR                   H.  nX;  d  M
  U" XR                  S5        UR                  U5        M0     MC     UR                  n	S n
S n[!        U	5      S:  a-  [#        UR$                  U	SSR'                  U	5      -   S-   /5        [(        R*                  (       aD  UR,                  (       a3  [/        [0        [3        UR,                  6 5      u  pUR5                  X5        U R6                  (       a  U R6                  R8                  O/ nU GH^  n[;        U[<        5      (       ak  UR>                  nUR@                  nURB                   S	URB                   3n[E        URG                  U5      URG                  U5      U/5        U" US S5        M  [;        U[H        5      (       a  URJ                   Vs/ s H  nURG                  U5      PM     nnURL                   Vs/ s H  nURG                  U5      PM     nnS
SR'                  S URJ                   5       5       SSR'                  S URL                   5       5       S3n[O        UUU/5        U" US S5        GMS  [Q        SU 35      e   URR                   H)  nUR                   H  nU" XR                  S5        M     M+     T(       a"  [T        RV                  RY                  SU4S jS9  [Z        R\                  c   [Z        R^                  " 5       R`                  nO[c        U Rd                  SS 5      nU
UUU Rf                  S.[h        E[k        5       EnU R                  Rm                  5         SURn                  S   0n[!        T5      S:X  d   eUU R                  l8        X@R                  l9        U R                  Ru                  5         TU R                  l;        UU R                  l<        X0R                  l=        S U R                  l>        S U R                  l?        XR                  l@        g s  snf s  snf )Nz**___kwargs_ignoredzGUARDS:c                P  >^ ^ [        T T5      n[        R                  SU5        TR                  U U4S j5        [        R                  [        R                  5      (       a  SnSnTbz  TR                  (       a,  SSR                  TR                  R                  5       5       3nTR                  (       a,  SSR                  TR                  R                  5       5       3n[        R                  ST UU5        U(       d#  TR                  T 5        TR                  U5        g g )Nr  c                   > T T(       a?  TR                   (       a.  [        R                  " TR                   R                  5       5      OS T(       a3  TR                  (       a"  [        R                  " TR                  5      S.$ S S.$ )N)r   r  r  )r  rC   from_tracebackr  r  )r  r`  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   r~  z
Stack:
z
User stack:
zGuard: %s%s%s)r  r  r  r  verbose_guards_logisEnabledForloggingDEBUGr  r  formatr  )	r  r`  log_onlyr  maybe_stackmaybe_user_stackr   structured_guard_fnsr   s	   ``    r   add_code_part<CheckFunctionManager.compile_check_fn.<locals>.add_code_part  s     !6i GT#45 ''  "..w}}== #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!),"))*;< r   TrO   zcheck_no_aliasing(rg  rh  r  zcheck_overlapping(overlapping=[c              3  8   #    U  H  oR                   v   M     g 7fr   r  r  rn  s     r   r   8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>$  s     /Z@Y1@Y   z], non_overlapping=[c              3  8   #    U  H  oR                   v   M     g 7fr   r  rW  s     r   r   rX  %  s     3bDaqFFDarY  z])zUnknown GuardEnvExpr: dynamo_guardsc                 <   > T V s/ s H	  o " 5       PM     sn $ s  sn f r   r   )r  rS  s    r   r  7CheckFunctionManager.compile_check_fn.<locals>.<lambda>;  s    BV4WBVQQSBV4W4Ws   r  r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackrT  r   r   )r  r   r`  Optional[Guard]rP  r   r   r   )Arl  r  r  rj  r   attach_compile_idr   r7   r  r@  r   r   rI  r`  r   rn  r   r   ro  r  rP   r  rz  r  r  r$  r$  rt  aotautograd_guardsr  r9   input_source_ainput_source_br	  r    r  r?   overlapping_sourcesnon_overlapping_sourcesr!   r  rm  r;  r	  r
  rQ   initial_global_stateGlobalStateGuardr  r  r;  rB  rI   r  r  r`  r   r   r  r   r   r   r   r   r   )r   r  
guards_outr   largsrT  seengclr   rn  check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsrd  r`  source_ar  r  rn  overlapping_guard_managersnon_overlapping_guard_managerscheck_global_stater   r"  r   rS  r   s                            @@@r   r   %CheckFunctionManager.compile_check_fn  s      '((#
CE 	111134	

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

 
  !
 	##% #W]]3%78 :!###*6'"'<<>0B-*>'+8( *.&)-&8P5I.2s   S
Sc                |   [        U S5      (       a  [        U R                  [        5      (       d  U R                  R                  =nbq  U R                  R
                  =nbW  [        U[        5      (       d   e[        U[        5      (       d   eSU S3n[        U5      nUR                  X%5        XPl        g g g g g )Nrj  zCache line invalidated because z got deallocated)	r  r  rj  r  r   r   r   r   
invalidate)r   obj_strr   r   r!  deleted_guard_managers         r   ry  CheckFunctionManager.invalidate`  s    
 D/**t113MNN $ 2 2 > >>K $ 2 2 > >>Kk:6666k:66666wi?OPF$>v$F!"";F!6 L L O +r   c                ,    [        U5      U R                  ;  a`  [        R                  " U5      U R                  [        U5      '   [        R                  " U[
        R                  " U R                  US95        [        U5      $ ! [         a     Nf = f)zadd a weakref, return the id)rz  )	rw  r  ra  r@  r  r"  r#  ry  r!  )r   r"  rz  s      r   r]  CheckFunctionManager.id_refs  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)rw  r  )r   r"  s     r   r_  $CheckFunctionManager.lookup_weakrefs  s(    c7dnn$>>"S'**r   )r  r  r  r;  rj  r  rt  rd  rv  r@  rB  r   )NNNNNFFN)r\  r  rt  r   r   Optional[CacheEntry]r   %Optional[Callable[[GuardFail], None]]r  z8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]rv  r(  rd  r  rr  r   r  r   re  r  )r  rP  r  list[Guard]rt  r   r   r  r   )r  r  r  r  r\  r  rt  r   rr  r   re  r  r   z(tuple[GuardBuilder, GuardManagerWrapper])r  rP  rk  r  r   r  r   r   )rz  r   r   r   )r"  r  rz  r   r   r5  )r"  r  r   zOptional[weakref.ref[object]])r   r   r   r   r   r  r   r  r  r   ry  r]  r_  r   r   r   r   r  r    st   
 -1?C 599=!"59c!c! (c! *	c!
 =c!
c! 3c! 7c! c! c! 3c!J	H)+D 	zLzL #zL (	zL
 
zLF 6:@&"@& &5@& 	@&
 -@& @& 3@& 
2@&DDQDQ  DQ =	DQ
 
DQL7&r   r  c                V  ^	 SSK Jn  [        5       m	 T	R                  U 5        SU	4S jjnU" 5       nU  H]  nU" U5      u  peUR                  U5        UR                  SU S35        UR                  5          UR                  S5        S S S 5        M_     U" 5       nUR                  S5        UR                  5          UR                  U5        UR                  S	5        S S S 5        U" 5       nUR                  S
U S35        UR                  5          UR                  U5        UR                  S5        S S S 5        UR                  5       UR                  5       4$ ! [         a	    SS jn GNFf = f! , (       d  f       GMQ  = f! , (       d  f       N= f! , (       d  f       Nh= f)Nr   r@   c                &   > TR                  U 5      $ r   )r  )r  csepasss    r   r  %build_guard_function.<locals>.replace  s    ??4((r   c                
    / U 4$ r   r   )r  s    r   r  r    s    t8Or   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardr  )
torch._inductor.utilsrA   r  r
  RecursionErrorrz  r   rr  splicer  )
r   closure_argsrA   r  
guard_bodyr  r  r`  make_guard_fnr  s
            @r   r  r    sc   4oG
j!	)  !Jg&xvR01   0 ! 	  E	OOO$	Z & 
 #$M3L>DE				U#/ 
   -"8"8":::?  	 !  
 
 	s5   E  8E6>#F	#F E32E36
F		
F
F(c                 h    [         R                  R                  R                  R	                  S5      $ )Nr   r;  r	  	_internal	log_stateis_artifact_enabledr   r   r   is_recompiles_enabledr    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      Ld  M    g   grB  )r   r   r$  rK  )	cur_stackr  moderA  s      r   check_torch_function_mode_stackMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stack  sE    13	y>SZ'E9-HBd# . r   r   r   )rK  )initial_stackr  r  rA  s      @r   rA  rA    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   rg  zDuplicate tensors found: )r   r-  r  r  r  r   rw  evalr  r   r  )	rj  r`  r   ids_to_sourcer  	tensor_idr  duplicate_tensorsr!  s	            r   1recompilation_reason_for_no_tensor_aliasing_guardr    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)rn  r  patterns      r   r  r    s     +G66'5!$$r   c                   U R                   c   eU R                  c   eXR                   S   S.nUR                  U R                  5        / nSnU R                  (       a  U R                  R                  nSn/ nU R                  U5      n	U	R                  (       d,  U	R                  n[        U5      S:X  a  SUS   ;   a  SnO1Un/ nO,Xc:w  a  S	n
UR                  U
5        OS
n
UR                  U
5        U(       a  [        X5      nOU H  n[        U R                   5      nXS'   [        5           [        XU5      n SSS5        [!        W["        5      (       a	  U(       d  Un[!        U[$        5      (       d  Mr  UR                  U5        [        5       (       a  M    O   U 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.
NrT  rR  FrO   zDuplicate tensor foundr   Ta  BACKEND_MATCH failure: torch.compile detected different backend callables. If this is unexpected, wrap your backend in functools.partial (or reuse the same cached backend) to avoid creating a new backend function each time. More details: https://github.com/pytorch/pytorch/issues/168373zUnexpected recompilation: runtime guards failed even though they passed during recompilation-reason analysis. Please open an issue with a minimal repro: https://github.com/pytorch/pytorchr  r_  z; )r   r   r  r   r  r  resultr   r   r  r  r-  rM   r  rv  r  r  r   r   r  r  )rj  f_locals
compile_idr  r`  r  cache_entry_backendno_tensor_aliasing_check_failedr   guard_debug_infor!  rc  r   fail_reason
reason_strs                  r   r  r    s    %%111%%111!;!;C!@AE	LL++,G  +77??&+#$&$228< ""-@@ !"a''+=a+@@26/,%'"		'N 	 	v2 	 	v&C
 'D : :;L15-./1"&t5"AK 2 +t,,["+s++{+466' '* <r"TYYw%77JZ((! ! 466  21 	 21s*   /G,1GG)G,'G))G,,
G:	c                x   [        U [        5      (       a  U SU R                   3$ [        XX45      nU(       a  U$ [        [
        U      R                  U5         U R                  b+  U R                  [        U=(       d    S[
        U   5      5        U$ ! [         a    [        R                  S5         U$ f = f)Nr_  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   rv  r/  r  )rj  r   r  r  r  skip_loggingr  s          r   get_guard_fail_reasonr  Q  s     -!;<<R A ABCC-J =&'..z:
&&2''*8(8-:MN   
d	
 
s   8B B98B9c                  ^
 / m
U ba  [        U R                  U R                  UR                  U R                  UU5      nU(       a  T
R                  U5        U R                  n U b  Ma  UR                  nU(       a  T
$ [        5       =(       d
    [        5       nU(       d  [        R                  (       Ga	  [        5       (       a"  SR                  S [        T
5       5       5      nO&[        R                  " SR                  T
5      S5      nSU 3nSUR                    SUR"                   SUR$                   S[        R                  " US	5       3n	U(       a:  [        5       (       a  [&        R)                  U	5        O[*        R)                  U	5        [        R                  (       a  [,        R.                  " U	5      e[0        R2                  R5                  S
S U
4S jS9  T
$ )z
Return the list of guard failure reasons using cache_entry.
Logs the recompilation reason if `recompiles` logging is enabled.
Raises a RecompileError if `config.error_on_recompile` is enabled.
z

c              3  b   #    U  H%  u  pS U S3[         R                  " US5      -   v   M'     g7f)zguard z failures:
- N)r  rr  )r  rn  r!  s      r   r   :get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>  s2      #!3IA <(8??64+HH!3s   -/r  r  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     SSS.$ )Nrecompile_reasonsrn  )r	  encodingr   r   r   r   r  9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    '
r   c                    > T $ r   r   )r  s   r   r  r    s    7r   )metadata_fnr  )r  rj  r   r  r  r  r0  r\  r  r  rP   error_on_recompiler  r  r  rr  r  co_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logrR   RecompileErrorr;  r	  r
  )r   framer  r  r!  r   do_recompiles_logfailuresguard_failure_detailsmessager  s             @r   'get_and_maybe_log_recompilation_reasonsr  o  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  rj  r  r0  r   r  )r   first_cache_entryacc_diff_guard_sourcess      r   r  r    s     $
 /9l

!%%%%@@B	
 "&&	 
! $K

!7M!!4!!==?!&& 
! "!r   c                   [        SUR                   SUR                   SUR                   35        [        SSR	                  U R
                  5      -   S-   5        [        SSR	                  U R                  5      5        [        U 5        SU0U R                  EnU R                   H  n [        X`R                  U5        M     g !   [        SU 35         M2  = f)	NzERROR RUNNING GUARDS  r  zlambda rg  z and
  rS  zMalformed guard:
)
printr  r  r  r  r   r   r   r  r   )rj  r   r  r   lastr}  r`  s          r   guard_error_hookr    s     

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

Args:
    guards: guard(s) to add
    skip: number of stack frames to ignore for debug stack trace
r   )TracingContextrO   )collect_debug_stackr  N)torch._guardsr  r  rL  rM  rN  rK  rv  guards_contextr[  r   r  r:   r1   rC  )r  r   r  r  r   r`  s         r   install_guardr    s     -$11 8		(	(	7  



-
-
;
;
?
?C%''''$U%=%=>>EJ	 r   )r   r  r   r   r   r5  )r  r   r   r  )r   zset[str])r   r  )r   r  r   r   )r  r   r`  rb  r   r   r   )r   zUnion[str, list[str]]r`  rb  r  r  r   r  )r  r   r   zOptional[int])r   r  r   list[Optional[int]])r  r  r	  r   r
  r  r  r  r  rK  r  r   r   r   )r  r  r  r   r   r5  )rl  r   r   r   r   r   )r"  r   r   r   )r  r   r   r   )rl  z3Union[DictGetItemSource, DictSubclassGetItemSource]r:  r   r;  r   r1  r   r2  r-  r   r   )r`  r:   r   r   )r   r  r   r  )r   ztuple[type, ...])rK  r'  rq  r  r   r  )r   r  r  r   r   ztuple[str, str]r  )r  z'list[torch.overrides.TorchFunctionMode]r   zCallable[[], bool])rj  r   r`  r  r   r  )rn  r   r   r   )
rj  r   r  r  r  zOptional[CompileId]r  zOptional[Callable]r   r   r   )rj  r   r   r  r  r  r  r8   r  r   r  r   r   r   )
r   r  r  r   r  r   r  r   r   r  )r   r  r   r  )rj  r   r   r  r  r  r   r5  r  r   r   r   )r  zSequence[T]r   zGenerator[T, None, None])r  r>   r  r>   r   z Optional[functools.partial[Any]])r   r:   r  r5  r   r   (  r  
__future__r   r  rf  r  r  r  r"  r  r  r  rM  r  pickler  r  r  rA  r  ra  
contextlibr   rh  r   r   typingr   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.   r/   r0   r1   r2   r3   r4   torch._dynamo.utilsr5   r6   r  r7   r8   r9   r:   r;   r<   r=   r>   r?   r  rA   torch._library.opaque_objectrB   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   r~  rP   rQ   rR   
eval_framerS   rl  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   r   r   collections.abcr   r   r   numpyr  ModuleNotFoundErrorr   r   r   r  r   torch._Cr   ru  r   r   r   	getLoggerr   r/  r	  getArtifactLoggerr  r  r  rK  rG  r   r   r   r  cacher  r  r  r  r  r  r-  r  r  r  r  r  r  r  r#  r&  r  r)  r@  rF  rH  r  r-  r   rP  r  r  r  r  r'  r*  r=  Picklerr?  r  r  r  r  r  rA  r-  r   r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     sU  " # 
        	    
      %    @ @0$ 5 !    >      8   H
 
 
 1 = % 1  * / O * ( ( ,. . . . . . . . . . . .^       . ( KO G N
 =='T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b 
# b 
lAR8 R8j$!4 $ $ $ $ 6 6 6    \ \~@[
 [
|);XPX
+:++( 	gtCK012&2/422&
%Y)&Y)Y) $Y)  	Y)
 	Y)D &
   	
   	D 	@%@@ @ 	@
 @F"%""600
0  0 	0
 0 
0. % &!!%+!%!H /0 K KKO  0//0N  	Bs$   3U
 U 
UUU)(U)