
    a,jrI                      U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddl
mZ ddlmZmZmZmZ ddl m!Z!m"Z"m#Z# dd	lm$Z$ ddl%Z%ddl&Z%ddl'Z%dd
l(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD ddlEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO ddlPmQZQmRZR ddlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ ddl]m^Z^ ddl_m`Z`maZa ddlbmcZc ddldmeZe ddlfmgZgmhZhmiZimjZjmkZk ddllmmZn ddlompZp ddlqmrZrmsZs ddltmuZu ddlvmwZwmxZxmyZy ddlzm{Z{ ddl|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ erddlmZ dZded <    e ej                              Z	 ddlZn# e$ r dZY nw xY wer$dd!lmZmZmZ dd"lmZ dd#lmZ dd$lmZmZ dd%lmZ  e#d&          Z ej        eܦ          Ze%j                            ed'          Ze%j                            ed(          Ze%j                            ed)          Ze%j                            ed*          Zd+Zdd2Z G d3 d4e^          Z G d5 d6          Zdd:Zej        dd<            Zdad=ed><   dd@ZddCZe%j        j        j        ZddGZ	 dddMZddPZddSZddWZdd`ZdddZddfZddiZddkZ ej        dlm           G dn do                      ZddxZddzZej         G d{ d|                      Z G d} dvej                   Zej        dd~            Z G d de          Z e            ZddZddZddZddZ	ddZ
ddZddZddZddZddZd Zd Z G d d          Zd Z G d deX          Z G d d          ZddZ G d de          Zej         G d d                      Zej         G d d                      Z G d d          Zej        d d            Z G d dej                  ZddZddZ G d d          Z ddZ!ddZ"ddZ#ddZ$ e"de%e&ef                   Z'ddZ(ddZ)ddZ*d	dÄZ+	 d
ddȄZ,	 d
dd̈́Z-ddτZ.ddӄZ/ e{e/           ddׄZ0dd܄Z1ddݜdd߄Z2d  e3e          D             Z4ded<   d  e3e          D             Z5e5r% e6dd7                    e5           d          dS (  a  
Core guard system for Dynamo that detects when compiled code needs to be recompiled due to
changes in program state. Guards are conditions that must remain true for previously-compiled
code to be valid for reuse.

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

The guard system is critical for Dynamo's ability to efficiently reuse compiled code while
maintaining correctness by detecting when recompilation is necessary due to changes in
program state, tensor properties, or control flow.
    )annotationsN)contextmanagerdeepcopy)currentframe)Any
NamedTupleNoReturnTYPE_CHECKING)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)get_opaque_obj_info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CellContentsSourceChainedSourceClosureSource
CodeSourceConstantSourceConstDictKeySourceCurrentStreamSourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceDynamicScalarSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceImportSourceListGetItemSourceLocalSourceNamedTupleFieldsSourceNNModuleSourceNonSerializableSetGetItemSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSource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_torch_function_mode_stack get_torch_function_mode_stack_atguard_failuresistype	key_is_id	key_to_idnormalize_count_iternormalize_range_iterorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenverify_guard_fn_signature)Callablez%Callable[[Any, Any, Any], Any] | Noneguard_manager_testing_hook_fn)	GeneratorKeysViewSequence)Symbol)DispatchKeySet)OutputGraphCommonOutputGraphGuardsStateSerializedCodeTguards
recompilesrecompiles_verboseverbose_guards)__defaults____kwdefaults____code____closure____annotations____func____mro__codetypes.CodeTypevar_namestrreturnintc                t    t          |           }t          |          |                    |          z
  dz
  }|S NrP   )&code_framelocals_names_reversed_cachedlenindex)r   r   framelocals_names_reversedframelocals_idxs       T/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/torch/_dynamo/guards.pyget_framelocals_idxr      sF     "H!M!M&''*D*J*J8*T*TTWXX      c                  *     e Zd Zd
dZdd fd	Z xZS )IndentedBufferWithPrefixr   r   c                &    d| j         | j        z  z  S )Nz| )_indenttabwidthselfs    r   prefixzIndentedBufferWithPrefix.prefix   s    t|dm344r   Flineskip_prefixboolNonec                    |r#t                                          |           d S t                                          d|z              d S )Nz+- )super	writeline)r   r   r   	__class__s      r   r   z"IndentedBufferWithPrefix.writeline  sK     	,GGd#####GGedl+++++r   r   r   F)r   r   r   r   r   r   )__name__
__module____qualname__r   r   __classcell__r   s   @r   r   r      sV        5 5 5 5, , , , , , , , , , ,r   r   c                      e Zd ZdZd+d,dZed-d	            Zd.dZd/dZd/dZ	d/dZ
d/dZd0dZd1dZ	 d+d2dZd3d!Zd4d"Zd5d#Zd6d'Zd7d)Zd/d*ZdS )8GuardManagerWrappera  
    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++.
    NrootRootGuardManager | Noner   r   c                &   |t                      | _        n|| _        d | _        d | _        d | _        g | _        d | _        d | _        d | _        d | _	        d | _
        i | _        g | _        t                      | _        t                      | _        d S N)r&   r   diff_guard_rootclosure_varsargs
code_partsverbose_code_partsglobal_scopeguard_fail_fncache_entryextra_stateid_matched_objsno_tensor_aliasing_sourcessetprinted_relational_guardsrL   diff_guard_sources)r   r   s     r   __init__zGuardManagerWrapper.__init__  s    <(**DIIDI8<37&*	%'4837AE.2.2AC57'?Buu&3=<<r   Generator[None, None, None]c              #     K   t                      | _        	 d V  t                      | _        d S # t                      | _        w xY wr   )r   r   r   s    r   #_preserve_printed_relational_guardsz7GuardManagerWrapper._preserve_printed_relational_guards(  sJ      ),&	3EEE-0UUD***SUUD*2222s	   0 AOrderedSet[str]c                b     d	 fdd
 fdd
fd  j                     j        S )Nnoder   r   r   c                v   |                                  j        v p|                                 dk    }t          |                                                                           D ]"\  }\  }}| |           |          z  z  }#|r,j                            |                                             |S Nr   )
get_sourcer   
fail_countsortedget_key_value_managersitemsadd)r   is_diff_guard_node_idxkey_mgrval_mgrr   visits        r   visit_dict_managerzJGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_dict_manager;  s    !!T%<<U@Q@QTU@U  -3++--3355- - F F((w #eeGnnuuW~~&EE""! ?'++DOO,=,=>>>%%r   r   c                B   t          | t                    rJ |                                 j        v p|                                 dk    }|                                 D ]}| |          z  }|r,j                            |                                            |S r   )
isinstancer   r   r   r   get_child_managersr   )r   r   	child_mgrr   r   s      r   visit_managerzEGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_managerI  s    !$(899999 !!T%<<U@Q@QTU@U  "4466 7 7	"eeI&6&66""! ?'++DOO,=,=>>>%%r   c                b    | dS t          | t                    r |           S  |           S NFr  r   r   r  r  s    r   r   z=GuardManagerWrapper.collect_diff_guard_sources.<locals>.visitW  sA    |u$ 011 0))$/// =&&&r   )r   r   r   r   )r   r   r   r   )r   r   )r   r   r  r  s   `@@@r   collect_diff_guard_sourcesz.GuardManagerWrapper.collect_diff_guard_sources1  s    	& 	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	& 	&	' 	' 	' 	' 	' 	' 	' 	di&&r   c                    t           j        r#t          d          r|                                  |                                  d S )Nz3pytorch/compiler:use_recursive_dict_tags_for_guards)rQ   "use_recursive_dict_tags_for_guardsrE   find_tag_safe_rootsprepare_diff_guard_managerr   s    r   finalizezGuardManagerWrapper.finalizeb  sM    4 	'A:
 :
 	' $$&&&'')))))r   c                V    |                                   |                                  d S r   )r  populate_diff_guard_managerr   s    r   r  z.GuardManagerWrapper.prepare_diff_guard_manageri  s,    '')))((*****r   c                    dddfd
dfddfd | j                   }|D ]G}t          |                                t          j        j                  r|                                 HdS )uB  
        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.
        r   r   accepted_accessorstuple[type[GuardAccessor], ...]r   r   c                    |                                  }|                                 }t          fdt          ||          D                       S )Nc              3  f   K   | ]+\  }}t          |          o|                                V  ,d S r   )r  is_tag_safe).0accessormgrr  s      r   	<genexpr>zTGuardManagerWrapper.find_tag_safe_roots.<locals>.check_tag_safety.<locals>.<genexpr>  sU        !Hc 8%788NS__=N=N     r   )get_accessorsr  allzip)r   r  	accessors
child_mgrss    `  r   check_tag_safetyzAGuardManagerWrapper.find_tag_safe_roots.<locals>.check_tag_safety  si     **,,I0022J    %(J%?%?     r   r   list[GuardManager]c                   t          |                                 t                    sJ g }d}t          |                                                                           D ]5\  }\  }}| |           ||                     |                     6|                                                                 D ]7\  }}|r||                                z  }|r||                                z  }8|r| 	                                 |S 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  zCGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_dict_manager  s9    d<<>>EEEEEN"& -3++--3355- - : :((w &E'NNN&"))%%..999$($?$?$A$A$H$H$J$J A A  A'7+>+>+@+@@' A'7+>+>+@+@@'" %""$$$!!r   c                   t          | t                    rJ g }|                                 D ] }|                     |                     !|                                 rt          |                                 t          j                  r>| 	                                r(| 
                                s|                                  n8|                                  n"t          |                                 t                    rg|                                 }|                                 }t          d t          ||          D                       }|r|                                  nt          |                                 t          j        j                  r3 | t$          t&          f          }|r|                                  | gS n0|                                 t(          j        t(          j        t.          t0          fv rt2          j        r | t6          t8          t:          t<          t>          f          }|                                 D ]5}t          |t>                    r||                                 tB          v z  }6|r|                                  n`t          |                                 t(          j"                  rW | t>          f          }|t          d |                                 D                       z  }|r|                                  nt          |                                 tF                    ra| $                                %                    tB                    r5t2          j        r) | tL          f          }|r|                                  nUt          |                                 tN                    r. | tP          tR          f          }|r|                                  |S )Nc              3  n   K   | ]0\  }}t          |t                    o|                                V  1d S r   )r  r   r  )r  r  r  s      r   r  zQGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager.<locals>.<genexpr>  sT       * *%# x)ABBXsGXGX* * * * * *r   c              3  p   K   | ]1}t          |t                    o|                                d k    V  2dS )cell_contentsN)r  r   get_attr_name)r  r  s     r   r  zQGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager.<locals>.<genexpr>  s]       + + ! x)=>> D ..00OC+ + + + + +r   )*r  r   r  r)  is_guarded_value_immutabler&  r'  torchTensorhas_no_accessorshas_object_aliasing_guardr+  r(  r  r  r  nnModuler   r)   typesFunctionType
MethodTypestaticmethodclassmethodrQ   )assume_dunder_attributes_remain_unchangedr   r   r   r   r   r2  dunder_attrs_assumed_constantsCellTypetupler   endswithr'   typer(   r*   )	r   r,  r  r   r!  r-  r  r"  r   s	          r   r  z>GuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager  s=   !$(899999  N!4466 8 8	%%eeI&6&67777..00 b) d<<>>MM ),,.. -t7U7U7W7W -**,,,&&((((D::<<dCC Y) ..00	!4466
&) * *),Y
)C)C* * * ' '# ' )&&(((D::<<ehoNN P)&6&668IJ' '# ' &&(((  	 ..00&$ 	  D '7&6),13,	' 	'# !% 2 2 4 4  H!(,@AA +$22448VV+ ' )&&(((D::<<enMM ")&6&6t>R=T&U&U##s + + %)$6$6$8$8+ + + ( ( #
 ' )&&(((499;;UCC)OO%%../MNN) D) '7&646' '# ' )&&(((D::<<dCC )&6&602FG' '# ' )&&(((!!r   c                b    | g S t          | t                    r |           S  |           S r   r	  r
  s    r   r   z6GuardManagerWrapper.find_tag_safe_roots.<locals>.visit;  sA    |	$ 011 0))$/// =&&&r   N)r   r   r  r  r   r   )r   r   r   r#  )r   r   r   r#  )r   r&  r'  r4  r8  r9  mark_tag_safe_root)r   r,  r   r"  r   r  r  s      @@@@r   r  z'GuardManagerWrapper.find_tag_safe_rootsm  s    t	 	 	 		" 	" 	" 	" 	" 	"8l	" l	" l	" l	" l	" l	" l	"\	' 	' 	' 	' 	' 	' 	' ty))" 	* 	*D$88::EHOLL *'')))	* 	*r   c                    |                      | j                  | _        | j        r| j                                         d S d S r   )clone_with_chosen_sourcesr   r   r   update_diff_guard_root_managerr   s    r   r  z/GuardManagerWrapper.populate_diff_guard_managerG  sM    #==d>UVV  	>;;=====	> 	>r   chosen_sourcesr&   c                D    dfd}| j                             |          S )Nnode_mgrr   r   r   c                0    |                                  v S r   )r   )rL  rJ  s    r   	filter_fnz@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fnW  s    &&((N::r   )rL  r   r   r   )r   clone_manager)r   rJ  rN  s    ` r   rH  z-GuardManagerWrapper.clone_with_chosen_sourcesT  s9    	; 	; 	; 	; 	; 	; y&&y111r   guardr#   	list[str]c                d    |j         j        |                                }fd|D             }|S )Nc                     g | ]
}d z   |z   S ):  )r  part
guard_names     r   
<listcomp>z7GuardManagerWrapper.get_guard_lines.<locals>.<listcomp>_  s#    <<<dd"T)<<<r   )r   r   r   )r   rP  partsrW  s      @r   get_guard_linesz#GuardManagerWrapper.get_guard_lines\  s<    _-
((**<<<<e<<<r   guard_managerr   accessor_str
str | Noner   c                    |                                 }|j        j        }|dz   |z   }|r|d|z   z  }|d|                                 z  }|d|                                 d|                                 dz  }|S )Nz	: source=, z, type=z, tag_safe=())r   r   r   r'  r  is_tag_safe_root)r   r[  r\  sourcetss         r   get_manager_linez$GuardManagerWrapper.get_manager_lineb  s     ))++#,Of$ 	%$$A	B}>>@@BBB	^M5577^^=;Y;Y;[;[^^^^r   r  r   bodyr   c                   t          |                                                                          D ]\  }\  }}|                    d|            |                                5  |rA|                    d|                     |                      |                     ||           |rA|                    d|                     |                      |                     ||           d d d            n# 1 swxY w Y   d S )NzKeyValueManager pair at index=zKeyManager: zValueManager: )r   r   r   r   indentre  construct_manager_string)r   r  rf  idxr   r   s         r   construct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_stringn  sk    (.c.H.H.J.J.P.P.R.R'S'S 		A 		A#C#'7NNACAABBB A A ANN#R$2G2G2P2P#R#RSSS11'4@@@ ANN#TD4I4I'4R4R#T#TUUU11'4@@@A A A A A A A A A A A A A A A		A 		As   (BC;;C?	C?	c           
     V   |                                 5  |                                D ]}t          |t                    rm|| j        vrC| j                            |           |                    |                     |                     c|                    |j        j	        g           |                    |                     |                     t          |t                    r|                     ||           t          |                                |                                          D ]Y\  }}|                    |                     |d|                                                      |                     ||           Z	 d d d            d S # 1 swxY w Y   d S )Nzaccessed_by=)rh  get_leaf_guardsr  r%   r   r   
writelinesrZ  r   r   r   rk  r  r  r  r   re  reprri  )r   r  rf  rP  r  r  s         r   ri  z,GuardManagerWrapper.construct_manager_string|  s    [[]] 	? 	?,,.. A Ae_55 AD$BBB6::5AAA(<(<U(C(CDDDD % 8    OOD$8$8$?$?@@@@ #/00 >223=== (+!!##S%;%;%=%=( ( ? ?#) )))5UHMMOO5U5UVV   --i>>>>?+	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   E;FF"%F"c                   |                                  5  t                      }d|_        |                    dd           |                    dd           |                    d           |                     | j        |           t          | j        d          rD| j                                        D ]*}|                    | 	                    |                     +|
                                cd d d            S # 1 swxY w Y   d S )NrP    T)r   zTREE_GUARD_MANAGER:r&   get_epilogue_lambda_guards)r   r   r   r   ri  r   hasattrrr  rn  rZ  getvalue)r   rf  rP  s      r   __str__zGuardManagerWrapper.__str__  sE   5577 
	# 
	#+--DDMNN24N000NN0dNCCCNN-...))$)T:::ty">?? A!YAACC A AEOOD$8$8$?$?@@@@==??
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	#s   C DD	Dxr   r   c                6    | j                             |          S r   )r   checkr   rv  s     r   rx  zGuardManagerWrapper.check  s    yq!!!r   r   c                6    | j                             |          S r   )r   check_verbosery  s     r   r{  z!GuardManagerWrapper.check_verbose  s    y&&q)))r   c                d     t                      d
dd fd	  j                   d S )N
leaf_guardr#   r   rQ  c                    g }|                                  D ]D}|                    d          d                                         }|                    |           E|S )N#r   )r   splitrstripappend)r}  r   verbose_code_part	code_parts       r   get_code_partszMGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.get_code_parts  sd    J%/%B%B%D%D - -!-33C88;BBDD	!!),,,,r   r  r   r   c                d   |                                  D ]w}t          |t                    r=|vr8j                             |                                         |           Tj                             |                     x|                                 D ]} |           d S r   )rm  r  r%   r   r)  r   r  )r  rP  r  r  relational_guards_seenr   r   s      r   r   zDGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.visit  s    ,,.. B Be_55 B$:::..~~e/D/DEEE.225999O**>>%+@+@AAAA 3355 ! !	i    ! !r   )r}  r#   r   rQ  )r  r   r   r   )r   r   )r   r  r  r   s   `@@@r   !populate_code_parts_for_debuggingz5GuardManagerWrapper.populate_code_parts_for_debugging  sk    !$	 	 	 		! 	! 	! 	! 	! 	! 	! 	! 	! 	dir   r   )r   r   r   r   )r   r   )r   r   r   r   )rJ  r   r   r&   )rP  r#   r   rQ  )r[  r   r\  r]  r   r   )r  r   rf  r   r   r   )r  r   rf  r   r   r   r   rv  r   r   r   )rv  r   r   r   )r   r   r   __doc__r   r   r   r  r  r  r  r  rH  rZ  re  rk  ri  ru  rx  r{  r  rU  r   r   r   r   
  s        @ @ @ @ @, 3 3 3 ^3/' /' /' /'b* * * *+ + + +X* X* X* X*t> > > >2 2 2 2    GK
 
 
 
 
A A A A? ? ? ?@# # # #" " " "* * * *     r   r   ar   torch.Tensorc                    t           j                                        5  t          | t          j        t          j        f          rt          j        |           n| cd d d            S # 1 swxY w Y   d S r   )r4  	overrides_enable_torch_functionr  npgenericndarray	as_tensor)r  s    r   
from_numpyr    s     
	/	/	1	1 T T%/BJ
3K%L%LSuq!!!RST T T T T T T T T T T T T T T T T Ts   <A((A,/A,set[str]c                     dd l } dd l} | j        j        | j        j        g}ddlm} |                    |           d |D             S )Nr   )POLYFILLED_MODULESc                6    h | ]}t          j        |          S rU  )inspectgetfile)r  ms     r   	<setcomp>z&uninteresting_files.<locals>.<setcomp>  s"    ---1GOA---r   )torch._dynamo.external_utilstorch._dynamo.polyfills_dynamoexternal_utils	polyfillstorch._dynamo.polyfills.loaderr  r)  )r4  modsr  s      r   uninteresting_filesr    si    ''''""""M(%-*ABDAAAAAA 	KK"###------r   dict[str, object] | None_CLOSURE_VARSdict[str, object]c            	        t           i dt          dt          dt          j        j        dt          dt          dd dt          d	t          d
t          dt          dt          dd dt          dt          dt          j        dt"          d nt"          j        dt%          d          t&          j        t*          j        j        t*          j        t2          t*          j        t*          t6          da t           S )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                8    t                               ||           S r   )r(  __contains__)r  bs     r   <lambda>z#_get_closure_vars.<locals>.<lambda>  s    T->->q!-D-D r   ___tuple_iterator_len___normalize_count_iter___normalize_range_iter___tuple_iterator_getitem___dataclass_fields___namedtuple_fieldsc                    | j         S r   _fieldsrv  s    r   r  z#_get_closure_vars.<locals>.<lambda>  s    ai r   #___get_torch_function_mode_stack_at___get_current_stream__math_isnan__numpy_isnaninf)__load_moduleutils_devicedevice___from_numpy___as_tensorr4  r  )r  r   r   collectionsOrderedDict__getitem__r   r   r   r   r   r   r   r   r   mathisnanr  float	importlibimport_moduler4  utils_devicer  r  _as_tensor_fullprecr  rU  r   r   _get_closure_varsr    s9   

|
  7 C
 I	

 |
  D D
 $%7
 &';
 &';
 ()?
 "#3
 #$7$7
 23S
 $%7
 DJ
  RZTTRX!
" 5<<#
$ '4!K/l'!51
 
 
4 r   r   ast.ASTc                R    t          j        |                               dd          S )N
rq  )astunparsereplace)r   s    r   _ast_unparser    s"    ;t$$T2...r   r  rP  Guard | Nonec                   d}||j         rht          |j                   D ]R}|j        t                      vr;dt	          |d           }t          |          dk    rdt	          |           } nSnN|j        rG|j                                        }t          |          dk    rdt	          |d                    }nd}| d	| S )
Nrq  z  # T)r   i   r   z  # <unknown>z<60)
user_stackreversedfilenamer  rM   r   stacksummary)r  rP  extrafsr  s        r   get_verbose_code_partr    s    E 	(u/00 
 
;&9&;&;;;@<#>#>#>@@E5zzD(( !:|B'7'7 9 9E < [ 	(k))++G7||a:|GBK88::'$$U$$$r   r   str | list[str]recompile_hintr]  rQ  c                    t          | t                    s| g} fd| D             }!t          j                  }|rr| d n|rfd|D             }|S )Nc                0    g | ]}t          |          S rU  )r  )r  r  rP  s     r   rX  z*get_verbose_code_parts.<locals>.<listcomp>/  s1       4=i//  r   r_  c                     g | ]
}| d  dS z (HINT: r`  rU  r  rV  r  s     r   rX  z*get_verbose_code_parts.<locals>.<listcomp>>  s7     
 
 
37t..^...
 
 
r   )r  list_get_closure_var_hintoriginating_source)r   rP  r  r   closure_hints    ``  r   get_verbose_code_partsr  '  s    
 j$'' " \
   AK   ,U-EFF 	7EW<33>333<   

 
 
 
;M
 
 
 r   rb  Source | Nonec                    | dS | j         }| }|et          |t                    r0|j        r)|t	          |j                   d         }d|j         d| S t          |t
                    r|j        nd}|edS )z
    Walk up the source chain to find a CellContentsSource ancestor.
    Returns a hint like 'guard on "varname".attr' or None if not found.
    Nz
guard on "")namer  rY   freevar_namer   rZ   base)rb  	full_namecurrentpath_suffixs       r   r  r  E  s    
 ~tI#G

g122 	Ew7K 	E
 $C$5$5$7$78KD 4DD{DDD",Wm"D"DN',,$ 
 4r   dim
int | Nonec                    | d S t          |           s| S t          | t          j                  sJ | j                                        S r   )rI   r  r4  SymIntr   maybe_as_int)r  s    r   convert_int_to_concrete_valuesr   [  sM    
{ts '
#u|,,,,,x$$&&&r   size_or_stride	list[Any]list[int | None]c                    d | D             S )Nc                ,    g | ]}t          |          S rU  )r   )r  r  s     r   rX  z.convert_to_concrete_values.<locals>.<listcomp>f  s!    JJJC*3//JJJr   rU  )r  s    r   convert_to_concrete_valuesr  e  s    JJ>JJJJr   valuer  sizesstridespytyperD  dispatch_keysr   c                    |t           j                                        z  t           j                                        z
  }| j        }| j        j        }| j        }	d| d|j         d| d| d| d|	 d| d| d}
|
S )Nzcheck_tensor(r_  z	, device=z, requires_grad=z, size=z	, stride=r`  )	r4  _C_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper  r   requires_gradr   )r  r  r  r	  r
  r  dispatch_keyr  device_indexr  	guard_strs              r   get_tensor_guard_code_partr  i  s     	@@BBB00223L KE<%L'M	a 	a 	a 3 	a 	a| 	a 	au 	a 	a	a 	a0=	a 	aFK	a 	aV]	a 	a 	a  r   dctdict[Any, Any]keyc                `    t          t          |                                         |          S r   )r  r   r   )r  r  s     r   get_key_indexr  ~  s)    
 !#&&''--c222r   r   c                    d|  d| dS )Nlist(dict.keys())[]rU  )rb  r   s     r   get_key_index_sourcer    s    0V000000r   objr
   c                T    t          dt          |            d|  ddz   dz             )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).)	TypeErrorrD  )r   s    r   raise_local_type_errorr(    sB    
=S		==s===
L	M
L	M  r   r   c                @    t          | t          j        j                  S r   )r  r4  r8  r9  )r  s    r   $should_optimize_getattr_on_nn_moduler*    s    eUX_---r   T)frozenc                  :    e Zd ZU dZded<   dZded<   dZded<   dS )NNModuleAttrAccessorInfoFr   present_in_generic_dictNr]  l1_keyl2_key)r   r   r   r.  r   r/  r0  rU  r   r   r-  r-    sL          %*)))) F Fr   r-  -DictGetItemSource | DictSubclassGetItemSourcebase_guard_managerr   base_example_valueexample_valueguard_manager_enumGuardManagerTyper   c                t   | j         j        }t          | j        t                    r| j        j        }n,t          |t
                    sJ t          || j                  }t          ||          }t          t          |                    |         }t          |t          t          f          r	| d|d}	n| d| d}	t          | j        t                    sH|                    ||| j        t          j                                      | j        | d|gd            |                    ||	||          S )N[r  r   rb  r4  r5   == )r  r  r  r   r^   r(  r  r  r  r   r   r   get_key_managerr6  GUARD_MANAGERadd_equals_match_guardget_value_manager)
rb  r2  r3  r4  r5  base_source_namer   
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerrC    sl    {'&, 233 @",d333330&,??%&6>>J ./ABBCCEJ#c3Z00 ;*CC->CCC*::Z:::fl$677 

 	** ,/=	 	+ 	
 	

 !
 LjCC.?CCDd
 
 
 //#-	 0   r   r:   c                    | j         }t          |t                    rdS |                                 rdS |                                ot          |t
                     S NFT)r  r  rt   is_specialized_nn_moduleis_dict_keyrm   )rP  rb  s     r   match_on_id_for_tensorrH    sa    %F &+,, u%%'' tF
6:(F(F$FFr   c                  $    e Zd ZU ded<   ded<   dS )GuardCodeListrQ  	code_listr:   rP  Nr   r   r   r   rU  r   r   rJ  rJ    s%         LLLLLr   rJ  c                      e Zd ZdZdZdS )r6  rP      N)r   r   r   r<  DICT_GUARD_MANAGERrU  r   r   r6  r6    s        Mr   c                T    t          t          t          |                               S r   )r  r  r   )r   s    r   r   r     s!    /5566777r   c                  (    e Zd ZU dZded<   ded<   dS )GuardCheckSpecu^  Lightweight guard evaluation for subgraph reuse during tracing.

    WHY IS THIS NEEDED?
    Normal guards are collected during tracing, installed via GuardBuilder, and
    evaluated in C++ at runtime. GuardCheckSpec serves a different purpose: we
    want to evaluate a guard *during tracing* to check whether a previously
    traced partial subgraph can be reused. The guard is collected during the
    first trace of subgraph and then evaluated with a new source value before we
    begin tracing the second subgraph.

    Existing C++ guards don't satisfy this need because they're designed for
    runtime evaluation, not mid-trace comparisons with different source values.

    NB - This separate spec table *increases maintenance burden*, but each
    handler is small and the number of guard types is finite, so it's tractable.

    get_metadata_fn: (guard, value) -> metadata  — captures the minimum
        information from the guarded value at build time.
    eval_fn: (value, metadata) -> bool  — re-evaluates the guard at lookup
        time using a fresh value and the previously saved metadata.
    r   get_metadata_fneval_fnN)r   r   r   r  r   rU  r   r   rR  rR    s1          , LLLLLr   rR  rc  tuple[Any, ...]c                \    | j         |                                 | j        | j        | j        fS r   )shapestrider  r  r  )rc  s    r   extract_tensor_metadatarY    s#    GQXXZZ!(AODDr   c                    t          |                                d                   }t          |          }t          |d          }|||fS )NrP   __metadata_guard__)r   __tensor_flatten__rD  rs  )rP  r  metadataclshas_custom_guards        r   extract_subclass_metadatar`    sJ    00221566H
u++Cu&:;;c+,,r   r]  c                    |\  }}}|r.|                     ||                                 d                   S |                                 d         |k    S r   r[  r\  )r  r]  saved_metadatar^  r_  s        r   check_subclass_metadatard    s\    ,4)NC) U%%ne6N6N6P6PQR6STTT##%%a(N::r   c                     t          |          S r   r   rP  r  s     r   extract_dtensor_specrg  %  s    E??r   c                0    |                      |d          S )NT)skip_shapes)_check_equalsr  r]  s     r   check_dtensor_specrl  *  s    xT:::r   c                    t          t          |                    }|r|j        sd S t          |                    |                    S r   )rB   rD  guard_fnr   )rP  r  opaque_infos      r   extract_opaque_objrp  /  sH    %d5kk22K k2 tK((//000r   c                    |dS t          t          |                     }|r|j        s|d u S |                    |           |k    S r%  )rB   rD  rn  )r  r]  ro  s      r   check_opaque_objrr  7  sV    t%d5kk22K  k2  4&&(22r   c                    t          |          t          j        u rt          |d          r|j        S t          |          S Nr   rD  r:  r;  rs  r   idrf  s     r   extract_closurerw  A  s9    E{{e(((WUJ-G-G(~e99r   c                    t          |           t          j        u rt          | d          r	| j        |u S t          |           |k    S rt  ru  rk  s     r   check_closurery  H  sC    E{{e(((WUJ-G-G(~))e99  r   c                    ddl m} |D ]}t          | |          r ||           c S  t          dt	          |                      )zBExtract the base constant value from a constant subclass instance.rP   _CONSTANT_BASE_TYPESzNot a constant subclass: )variables.user_definedr|  r  r'  rD  )r  r|  rc  s      r   _constant_subclass_base_valuer~  N  sh    <<<<<<!  eQ 	1U88OOO	
=U==
>
>>r   c                4    t          | |          fd}|S )z<Attach a GuardCheckSpec to a guard method for auto-dispatch.rS  rT  c                    | _         | S r   )guard_check_spec)fnhandlers    r   	decoratorz,register_guard_check_spec.<locals>.decorator_  s    %	r   )rR  )rS  rT  r  r  s      @r   register_guard_check_specr  X  s8    
 _gNNNG     r   c                    t           | _        | S )z:Mark a guard method as skipped during auto-cache dispatch.)
SKIP_GUARDr  r  s    r   skip_guard_check_specr  f  s    $BIr   c                  F    e Zd ZdZd
dZed             Zed             Zd	S )UnsupportedGuardCheckSpeczSentinel for guards with no check spec yet.

    Raises NotImplementedError if get_metadata_fn/eval_fn are accidentally called.
    r  r   r   r   c                    || _         d S r   )_name)r   r  s     r   r   z"UnsupportedGuardCheckSpec.__init__r  s    


r   c                0    t          d| j                   Nz%Guard check spec not implemented for NotImplementedErrorr  r   s    r   rS  z)UnsupportedGuardCheckSpec.get_metadata_fnu      !"V$*"V"VWWWr   c                0    t          d| j                   r  r  r   s    r   rT  z!UnsupportedGuardCheckSpec.eval_fny  r  r   N)r  r   r   r   )r   r   r   r  r   propertyrS  rT  rU  r   r   r  r  l  sp         
    X X XX X X XX X Xr   r  c                8    t          | j                  | _        | S )z;Mark a guard method as unsupported for auto-cache dispatch.)r  r   r  r  s    r   unsupported_guard_check_specr  ~  s    3BK@@BIr   c                  R   e Zd Z	 	 	 dddZddZdd!Zedd$            Zdd/Zdd1Z	dd3Z
dd5Zdd6Zdd7Zdd8Z	 	 ddd?Z	 dddCZddEZddIZ edJ dK L          dddO            Z edP dQ L          	 dddR            Z edS dT L          ddU            ZeddV            Z edW dX L          ddZ            Z ed[ d\ L          dd]            Z ed^ d_ L          dd`            Z eda db L          ddc            Z edd de L          ddf            Z edg dh L          ddi            Z edj dk L          dddm            Z	 dddnZ  edo dp L          dddq            Z! edr ds L          ddt            Z"e#ddu            Z$e#ddv            Z%e#ddw            Z& ee'e(L          ddx            Z) ee*e+L          ddy            Z, ee-e.L          ddz            Z/ ed{ d| L          ddd}            Z0 ed~ d L          dd            Z1 ed d L          dd            Z2 ed d L          dd            Z3 ed d L          dd            Z4 ed d L          dd            Z5 ed d L          dd            Z6 ee7e8L          dd            Z9 ed d L          dd            Z: ed d L          dd            Z; ed d L          dd            Z< ed d L          dd            Z= ed d L          dd            Z>e#dd            Z? ed d L          dd            Z@ ed d L          dd            ZA ed d L          dd            ZB ed d L          dd            ZCe#dd            ZDe#dd            ZEe#dd            ZFe#dd            ZGe#dd            ZHe#dd            ZIe#dd            ZJ ed d L          ddd            ZK	 	 dddZLdS )GuardBuilderFNf_coder   id_refCallable[[object, str], int]
source_refCallable[[Source], str]lookup_weakrefs.Callable[[object], weakref.ref[object] | None]local_scoper  r   r[  r   check_fn_managerCheckFunctionManagersave_guardsr   runtime_global_scoper  guard_filter_fn=Callable[[Sequence[GuardFilterEntry]], Sequence[bool]] | Noner   r   c                   || _         || _        || _        || _        ||d| _        i | _        |
p|| _        t          j        	                                | j        d<   t          j        j        j                                        D ]]\  }}|                    dd                              dd                              dd          }|| j        d         |<   || j        |<   ^|| _        g | _        g | _        g | _        g | _        g | _        || _        i | _        |	| _        || _        t5                      | _        | j        j        J | j        j        j        D ]>}|                     |          }| j                            tA          |                     ?i | _!        i | _"        t5                      | _#        g | _$        tJ          j&        otO          d          | _&        tQ                      | _)        d S )	NLG__builtins__>_<._dot_!pytorch/compiler:guard_nn_modules)*r  r  r  r  scopesrc_get_value_cacher  builtins__dict__copyr4  packagepackage_importer_package_imported_modulesr   r  r[  argnamesr   shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managersr  guard_tree_valuesr  r  r   key_order_guarded_dict_idsoutput_graphguard_on_key_ordergetr   rv  r   _cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codesrQ   guard_nn_modulesrE   rL   already_added_code_parts)r   r  r  r  r  r  r   r[  r  r  r  r  r  package_modulerb  dict_objs                   r   r   zGuardBuilder.__init__  s    $.9D<3X3X
9; $8$HL!%-%6%;%;%=%=
>" ]+EKKMM	. 	. 
<<S))11#s;;CCCQQD/=DJ~&t,-DJt*#%)+	
 46 46%EG.6F13&. +.%%'$1===+8K 	> 	>Fxx''H+//8====
 BD @B#DGEE+BD( & 7 !
O/=
 =
 :D%%%r   r4  r  rP  r:   c                j   |                      |          }t          |t                    rt          d|j                   |j        j        }t          |          D ]U}||         }t          |j        |          }|                     ||          }|	                    || d|d||           Vd S )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )r   r8  r  r  rb  r4  r5  )
get_guard_managerr  r   r  r  r  r   rb   get_guard_manager_typedict_getitem_manager)	r   r4  rP  dict_mgrdict_sourcer  r  rB  r5  s	            r   #guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_order  s     ))%00h 011 	%SFKjS S   .3 %]33 	 	C!#&E,U-ESQQQL!%!<!<m" " ))%00000##5	 *    	 	r   r  c                v   |                      |          }t          |t                    st          d|j                   t          |t                    sJ t          t          |                    D ]\  }}t          |j        |          }|                    |||t          j
                  }t          |          rH|                     ||          }|                    |t          d| d| d|          |j                   |                    |t          | d||          |j                   d S )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r9  z__check_obj_id(r_  r`  r:  )r  r  r   r  r  	enumerater   r  r;  r6  r<  r   r  add_id_match_guardr  r  r=  )	r   r  rP  r  rj  r  r@  key_managerid_vals	            r   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_order  s    ))%00($455 	%H;@:H H   ($455555 ""3E":":;; 	 	HC-ej#>>J"22!!#3#A	 3  K ~~ S*55..*A*AAAAA5  $    22*j+E+Ec+E+EuMM$   )	 	r   r   
Any | Nonec                    t           j        r<t          j        dk    r,t          j        dk     rt	          j        dt                     d S | S )N)      )r  r  rP   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)rQ   issue_3_13_0_warningsysversion_infowarningswarnRuntimeWarning)r4  s    r   '_get_generic_dict_manager_example_valuez4GuardBuilder._get_generic_dict_manager_example_value  sR     '		 G++ :--M_   4r   rb  rV   r2  r   r3  r?  r   source_namer5  r6  c                $   dd}|j         }	|j        }
t                      }t          j        |j                  D ].}|                    |j                                                   /t          ddd          }|	|
v rt          d|	d          }ncd|
v r|	|
d         v rt          dd|	          }nCd|
v r|	|
d         v rt          dd|	          }n#|	|vrd|
v r|	|
d         v rt          dd|	          }|j	        s|
                    |j         |||          S |j        sJ |j        }|j        }| d}dx}}dx}}dx}}|rUt          |j        |          }|j        }|
|         }|                     ||          }|}|}|                     ||          }n|}|}|                     ||          }|                    ||                     |
          t&          j                  } |||||
||          }|r||J  |||||||          S |S )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__.
        r  r   r  r   r  r   r3  r4  r5  r6  r   c                >   t          | t                    rpt          ||          }d| d|d}|                     |||t          j                                      || d|gd            |                     ||||          S |                     ||||          S )Nr  r  r  r9  r:  r  )	r  r   r  r;  r6  r<  r=  r>  r  )r  r  r  r3  r4  r5  r   r@  s           r   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgrG  s     #/00  &&8#>> J{IIuIII
##%"%'7'E	 $  
 )(*/I/I#/I/I.JDQQQ ,,&"/'9	 -    //&"/'9	 0   r   FNT_parameters_buffers_modulesattrrb  r4  r5  	.__dict__rb  r4  r5  )r  r  r  r3  r4  r5  )r  r   r  r   r  r   r3  r   r4  r   r5  r6  r   r   )memberr  r   r  getmror   updatekeysr-  r.  getattr_managerr/  r0  rV   r  r  r  get_generic_dict_managerr  r6  r<  )r   rb  r2  r3  r4  r?  r  r5  r  	attr_namemod_dictall_class_attribute_namesrv  accessor_infor/  r0  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_modulez!GuardBuilder.getattr_on_nn_module,  s   6#	 #	 #	 #	J M	%..1ee! 2 <== 	@ 	@A%,,QZ__->->????0dCC  4T9dKKMMh&&98O+O+O4T=)TTMM8##	Xj5I(I(I4T:yQQMM666h&&Xj111 5T:yQQM4 B	 &55]"+#5	 6    !''''")F")F "2<<<O.22N^"&&Hx<@@!$9 &v{F;;	!*#F+ )-(C(CIx(X(X%!,((,(C(CM) )%% "-((,(C(CM) )% (:'R'R&"JJ8TT#3#A (S ( ($ )(,*#+&#8  F  	%16K6W6WW** .'/"*'<    Mr   r>   c                v    |j         }|dk    rdS t          |                     |                    }|| j        v S )Nrq  F)r  rv  r  r  )r   rb  r  obj_ids       r   requires_key_order_guardingz(GuardBuilder.requires_key_order_guarding  s@    k"5DHHV$$%%888r   AKeysView[Any] | set[Any] | frozenset[Any] | dict[Any, Any] | Nonec                $   t           j        }|                     |          rnt          |t                    rt           j        }nLt          |t          t          f          rt           j        }n#t          |t                    sJ t           j        }|S r   )	r6  r<  r  r  r   rO  r   	frozensetr(  )r   rb  r4  r5  s       r   r  z#GuardBuilder.get_guard_manager_type  s     .;++F33 	I-33 	I%5%H""MC+;<< I &6%C""!-66666%5%H"!!r   mgr_enumc                "    |t           j        k    S r   )r6  rO  )r   r
  s     r   manager_guards_on_keysz#GuardBuilder.manager_guards_on_keys  s    +>>>r   c                |    | j         j                            | j        d| j        d         t
          j                  S )Nr  )	f_globalsrb  r4  r5  )r[  r   globals_dict_managerr  r  r6  r<  r   s    r   get_global_guard_managerz%GuardBuilder.get_global_guard_manager  s=    !&;;/*S//=	 < 
 
 	
r   c           	        | j         j        }d }j        }|dk    r|| j        v r| j        |         S |dk    r,|                               }|| j        t          |          <   |                     |          }d }d }d }t          j	        }	t          t                    r[j        j        }|                     j                  }|                     j                  }|                     j        |          }	t          t                    r<t!          | j        j                  }
|                    j        |
f|||          }
nt          t(                    r2|                                                     j        |||          }
nCt          t0                    r2|                                                     j        |||          }	nt          t4                    r|S t          t6                    r|S t          t8                    r|sJ |                    |||          }	nt          t<                    r|sJ |                    |||          }	nht          t@                    r|sJ |!                    |||          }	n5t          tD          tF          tH          tJ          tL          f          r|sJ |}nt          tN                    r7tQ          j)        j*                  }|+                    |fd|||          }nt          tX                    r|+                    fd|||          }nt          tZ                    r|+                    fd|||          }nMt          t\                    r|sJ |/                    |||          }nt          t`                    r$|sJ |1                    j2        |||	          }nt          tf          th          tj          f          rk|sJ t          tf                    sJ tm          |          r!|sJ | 7                    ||||||          }nt|8                    j2        |||	          }nTt          tr          tt          f          r|sJ t          |tv          tx          j=        f          sJ t          tr          tt          f          sJ t          |t|                    r,| ?                    |	          sJ t          ||||          }nt          jA        t                    rt          d
          |                    jA        |||          }nit          t                    rD t          |djF        j        G                                 d          jH        |||          }nt          t                    r$|sJ |J                    jH        |||          }nt          t                    r$|sJ |L                    jA        |||          }nt          t                    r|sJ t          |tv          tx          j=        f          r
J d            t          |t                    r'jO        s |L                    jA        |||          }nt          |t                    r'jO        s |Q                    jA        |||          }njA        }jO        rR                                }|S                    ||||          }nt          t                    r|sJ |sJ t          |          sJ jV        sE|W                    ||jX        t          j	                  S                    jY        |||          }n+|jZ        }|J |dz   }|[                    ||t          j	                  }t          |t|                    rJ |                    jY        |||          }nt          t                    r$|sJ |+                    t          |||          }nt          t                    r |sJ |+                    d |||          }nTt          t                    r |sJ |+                    d |||          }nt          t                    r |sJ |+                    d |||          }nt          t                    r |sJ |+                    d |||          }nt          t                    r |sJ |+                    d |||          }nt          t                    r |sJ |+                    d |||          }nKt          t                    r$|sJ |e                    jA        |||          }nt          t                    rDt          |t|                    st          d          |g                    jA        |||          }nt          t                    r$|sJ |i                    jA        |||          }nt          t                    r|sJ |k                    |||          }nMt          t                    r|sJ |m                    |||          }nt          t                    r|sJ |+                    d |||          }nt          t                    r|sJ |+                    d |||          }nt          t                    r|sJ |q                    |||          }nt          t                    r|sJ |s                    |||          }nNt          t                    r|sJ |+                    d |||          }nt          d dj                   || j        j        <   |S )Nrq  r  )global_namerb  r4  r5  r  c                    |S r   rU  )r  r  s     r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>Q  s    ! r   )python_lambdarb  r4  r5  c                F    t                                                    S r   )r   
_get_indexr  rb  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>X  s!    (H%%'') ) r   c                ,    t          j                  S r   )r   r  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>a  s    (:6=(I(I r   r  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_ordertensor_property__manager)rj  rb  r4  r5  zUse DictGetItemSourcez.__kwdefaults__c                6    |                                  d         S r   r\  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (<(<(>(>q(A r   c                *    |                                  S r   )__obj_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (9(9(;(; r   c                N    |                                                                  S r   )_typequalified_namer  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    		(@(@(B(B r   c                *    |                                  S r   )get_baser  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>#  s    

 r   c                *    |                                  S r   )itemr  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>+  s     r   c                *    t          j        |           S r   )r4  r  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>3  s    (A!(D(D r   r9  z4ConstDictKeySource can only work on DictGuardManagerc                     t          |           S r   )r   r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>d  s    (8(;(; r   c                    | j         S r   r  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>l  s    	 r   c                     t          |           S r   )r   r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    A r   zmissing guard manager builder z - )ur[  r   r  r  r  r  rv  r  r6  r<  r  rZ   r  get_guard_manager_from_sourcer   rp   r   r  
local_nameframelocals_managerrj   r  r  r  rl   global_weakref_managerrk   rw   r}   type_managerr{   type_dict_managerr|   type_mro_managerru   rr   r   r~   rg   rn   r  r  module_namelambda_managerry   r_   rm   grad_managerrh   generic_getattr_managerr  rV   rY   r   r*  r  r  rb   rc   r(  r  r  r   r  rC  r   r^   RuntimeErrorr4   getattrproplowerrj  r-   indexed_managerro   list_getitem_managerri   r  index_is_slicerB  tuple_getitem_managerunpack_slicegetitem_managerra   callableis_kwfunc_defaults_managerr   idx_keyr   func_kwdefaults_managerrt   r  rx   re   rv   rU   rX   rf   rz   tuple_iterator_getitem_managerAssertionErrorr;  rs   set_getitem_managerr   weakref_call_managerrW   call_function_no_args_managerr`   rq   r\   code_managerr[   closure_managerrd   )r   rb  root_guard_managerr4  r  r5  r?  r3  r2  base_guard_manager_enumr   outmoduler   
kwdefaults	kw_sourcer  s    `               r   r*  z*GuardBuilder.get_guard_manager_from_source  sJ   !/4k"0K!K!K.{;;" HHV,,M8ED"2m#4#45!88OO  !!"2"@fm,, 	%{/!%&+!6!6!%!C!CFK!P!P&*&A&A/' '#
 &+&& |	1$+v?PQQO$88&8"+#5	 9  CC FL)) t	 //11FF&"+#5	 G  CC F/00 j	//11HH"."+#5	 I  CC F-.. c	 &%FN++ _	%%FJ'' ]	%%%%$11"+#5 2  CC
 FN++ V	%%%%$66"+#5 7  CC
 FM** O	%%%%$55"+#5 6  CC
 +2"	
 	
 H	 &%%%$CCFL)) |	,V-?@@F$33*0333"+#5	 4  CC F899 t	$33    #+#5 4  CC F/00 k	$33IIII"+#5	 4  CC FJ'' d	%%%%$11"+#5 2  CC
 F-.. ]	%%%%$<<]"+#5	 =  CC Z!35ST
 
 U	 &%%%fj1111134FGG ''''//&&!$&  )88&"/'9	 9   F.0IJKK ~	%%%%049P2QRRRRRf'8:S&TUUUUU,.>?? 223JKKKKK-&&!&  fl,>?? &8   )==&"/'9	 >   F011 e	'"E6;#3#9#9#;#;EEE  J"+#5  CC FM** [	%%%%$44J"+#5	 5  CC F-.. R	%%%%$99L"+#5	 :  CC FM** J	%%%%!"T;+B$C  ' '&' '  ,d33 F<Q (==&"/'9	 >   .66 v?T (>>&"/'9	 ?   ( 2"//11E(88&"/'9	 9   FN++ m	%%%%####./////< (>>+"4"A'7'E ?   "/&"/'9	 "  	  0>
'333,/@@	 .EE$",'7'E F  
 &h0@AAAAA33&"/'9	 4   F-.. J	%%%%$33("+#5	 4  CC F233 B	%%%%$33AA"+#5	 4  CC F566 z	%%%%$33;;"+#5	 4  CC F;<< r	%%%%$33BB"+#5	 4  CC FO,, j	%%%%$3344"+#5	 4  CC F011 b	%%%%$3300"+#5	 4  CC F-.. Z	%%%%$33DD"+#5	 4  CC F677 R	%%%%$CCl"+#5	 D  CC  233 J	02BCC $J   %44l"+#5	 5  CC F;<< ?	%%%%$88l"+#5	 9  CC F-.. 7	%%%%$99"+#5 :  CC
 F455 0	%%%%$BB"+#5 C  CC
 F122 )	%%%%$33;;"+#5	 4  CC F233 !	%%%%$3311"+#5	 4  CC FJ'' 	%%%%$11"+#5 2  CC
 FM** 	%%%%$44"+#5 5  CC
 F/00 	%%%%$33.."+#5	 4  CC !IIIFKII   47#FK0
r   c                6    |                      |j                  S r   )r*  r  r   rP  s     r   r  zGuardBuilder.get_guard_manager  s    11%2JKKKr   Tr   rQ  r   r   is_epiloguec                   |t                      }d                    |                                          }t          ||          \  }}i }d| j        d         i}	t
                              d|           t          ||	|            |d         |                                 }
|r#| j	        j
                            |
|d            d S | j	        j
                            |
|d            d S )Nr_  r  zPython shape guard function:
%s___make_guard_fn)r  joinr  build_guard_functionr  
guards_logdebugexecr*  r[  r   add_epilogue_lambda_guardadd_lambda_guard)r   r   r   r   rS  make_guard_fn_args_guard_bodypycoderM  globals_for_guard_fnrn  s              r   $add_python_lambda_leaf_guard_to_rootz1GuardBuilder.add_python_lambda_leaf_guard_to_root  s    ,..L "YY|'8'8':':;;2:?QRRV  #TZ_5;VDDDV)3///*3)*L,?,?,A,AB 
	Y #=="     #44X?QSWXXXXXr   guard_or_sourceGuard | Sourcedict[str, Any] | Nonec                    t          |t                    r|}n|j        }|t                      }|                    | j        || j                  }|S r   )r  r>   r  r  	get_valuer  r  )r   rb  r   srcrets        r   r  zGuardBuilder.get  sU    
 ov.. 	5!CC!4C,..LmmDJd6NOO
r   str | Guardc                6   t          |t                    r|}n|j        }t          |          }|| j        vrat
          j        j                            |          }|r;|dk    rt          
                    d|           | j                            |           |S )NrN  zinvalid var name: %s)r  r   r  strip_function_callr  r4  r  r  is_valid_var_namelogwarningr  )r   rP  r  r  is_valids        r   arg_refzGuardBuilder.arg_ref  s    eS!! 	DD:D"4((t}$$x'99$??H +q==KK 6>>>$$T***r   r  rn  (Callable[[GuardBuilderBase, Guard], Any]c                    |dk    rt          |j                  }nt          |j        |          }t          |||j        |j                  }|                    |            d S )Nr   )r  r  )r\   r  rV   r:   r  r  create)r   rP  r  rn  attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attribute  sq     
""$U%=>>KK$U%=yIIKAQ
 
 
	 	r   c                f    | j         j        d         t          || j         j        d                   fS Nr  )	create_fnkeywordsrs  rf  s     r   r  zGuardBuilder.<lambda>  s-    O$V,E5?3F;<<.
 r   c                B    t          | |d                   |d         k    S Nr   rP   )rs  rk  s     r   r  zGuardBuilder.<lambda>  s    x{(C(CxPQ{(R r   r  r  r]  c           	     ^   |J |j         }t          |t                    r|j        }|                     |          }t          |                     |          |          }d }|r
d| d|d}n	d| d|d}|| j        v rd S |                     ||g|                     |                     | 	                    |          }|rt          ||          }|                     |          }	|                     |          }
|                     ||	          }t          |
          r&|                     |||
|	|j        |j        |           nI|                    ||j        |	|           n*|                    |t#          ||          |j                   | j                            |           d S )Nhasattr(r_  r`  znot hasattr()provided_guarded_objectr  )r  r  rr   r  rp  rs  r  r  _set_guard_export_infor*  rV   r  r*  r  r  r  add_no_hasattr_guardr  r  r   )r   rP  r  rb  refvalr   base_managerrt  r4  r3  r5  s               r   HASATTRzGuardBuilder.HASATTR  s    )fn-- 	![Fll5!!dhhuoot,, 	3.c..T...DD2#22222D4000F##D6488E?? 	$ 	
 	
 	
 99&AA 	 %VT22K HH[11M!%%!%!<!<[-!X!X 44FGG )) &!K$&    ,, :"/'9	 -     --,T5995;K   	%))$/////r   c                &    | j         j        d         S rx  ry  rz  rf  s     r   r  zGuardBuilder.<lambda>+  s    U_-Ef-M r   c                    || j         vS r   )r  rk  s     r   r  zGuardBuilder.<lambda>,  s    (F r   c                   |J |                      |          }|                     |          }|                     |          }d|d| d}|| j        v rd S |j         d}|                    ||                     |j                  t          j	                  }|
                    d|t          ||          |j                   | j                            |           d S )Nnot ___dict_contains(r_  z
.__dict__)r  r  F)rp  r  r  r  r  r  r  r  r6  r<  add_dict_contains_guardr  r  r   )	r   rP  r  r  r  r  r   r  r  s	            r   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT*  s    ll5!!hhuoo--e44@t@@@@@4000F"Z222#/#H#H"FFs|TT/= $I $
 $
  	!88"4//		
 	
 	
 	%))$/////r   c                     t          |          S r   rD  rf  s     r   r  zGuardBuilder.<lambda>K  s    T%[[ r   c                $    t          |           |u S r   r  rk  s     r   r  zGuardBuilder.<lambda>L  s    Ux(? r   c           	     ,   |                      |          }t          |t          j        j                  r|j        r|j        }nt          |          }|j        |j        k    rd|_	        | 
                    |d|j         d          }t          |          }d|                     |           d| d| }|                     ||g           |                     |                              |t#          ||d|j                   |j                   d S )	NTtype(r`  z___check_type_id(r_  ), type=ztype )r  )r  r  r4  _subclasses
FakeTensorr
  rD  r   r   _unserializabler  r  ro  rp  r  r  add_type_match_guardr  r  )r   rP  r  rc  r  	type_reprr   s          r   
TYPE_MATCHzGuardBuilder.TYPE_MATCHJ  s-    eU.9:: 	u| 	AAUA>QZ'' %)E!Q 5
 5 5 566GG	U4<<#6#6UU&UU)UU##ED6222u%%::"e,DAN,D,D   	
 	
 	
 	
 	
r   c                V   |                      |          }|                     |          }t          |                     |                    }d| d| }|                     ||g           |                     |                              |t          ||          |j                   d S )Nz___dict_version() == )rp  r  r   r  r  add_dict_version_guardr  r  )r   rP  r  r  versionr   s         r   DICT_VERSIONzGuardBuilder.DICT_VERSIONj  s     ll5!!hhuootxx//5#55G55##ED6222 	u%%<<'e44e6F	
 	
 	
 	
 	
r   c                &    | j         j        d         S Nr  r  rf  s     r   r  zGuardBuilder.<lambda>z      U_-Ee-L r   c                
    || v S r   rU  rk  s     r   r  zGuardBuilder.<lambda>{      E(9 r   r  c                6   |                      |          }d|d| d}|| j        v rd S |                     ||g           |                     |                              d|t          ||          |j                   | j                            |           d S )Nz___dict_contains(r_  r`  Trp  r  r  r  r  r  r  r   r   rP  r  dict_refr   s        r   DICT_CONTAINSzGuardBuilder.DICT_CONTAINSy  s    
 <<&&7377H7774000F##ED6222u%%=="4//		
 	
 	
 	%))$/////r   c                &    | j         j        d         S r  r  rf  s     r   r  zGuardBuilder.<lambda>  r  r   c                
    || vS r   rU  rk  s     r   r  zGuardBuilder.<lambda>      (= r   c                6   |                      |          }d|d| d}|| j        v rd S |                     ||g           |                     |                              d|t          ||          |j                   | j                            |           d S )Nr  r_  r`  Fr  r  s        r   DICT_NOT_CONTAINSzGuardBuilder.DICT_NOT_CONTAINS  s    
 <<&&;s;;;;;4000F##ED6222u%%=="4//		
 	
 	
 	%))$/////r   c                &    | j         j        d         S r  r  rf  s     r   r  zGuardBuilder.<lambda>  r  r   c                
    || v S r   rU  rk  s     r   r  zGuardBuilder.<lambda>  r  r   c                :   |                      |          }|}d| d|d}|| j        v rd S |                     ||g           |                     |                              d|t          ||          |j                   | j                            |           d S )Nzset.__contains__(r_  r`  Trp  r  r  r  add_set_contains_guardr  r  r   r   rP  r  set_refr%  r   s         r   SET_CONTAINSzGuardBuilder.SET_CONTAINS  s    
 ,,u%%7777d7774000F##ED6222u%%<<"4//		
 	
 	
 	%))$/////r   c                &    | j         j        d         S r  r  rf  s     r   r  zGuardBuilder.<lambda>  r  r   c                
    || vS r   rU  rk  s     r   r  zGuardBuilder.<lambda>  r  r   c                :   |                      |          }|}d| d|d}|| j        v rd S |                     ||g           |                     |                              d|t          ||          |j                   | j                            |           d S )Nznot set.__contains__(r_  r`  Fr  r  s         r   SET_NOT_CONTAINSzGuardBuilder.SET_NOT_CONTAINS  s    
 ,,u%%;w;;$;;;4000F##ED6222u%%<<"4//		
 	
 	
 	%))$/////r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>      U r   c                    | |k    S r   rU  rk  s     r   r  zGuardBuilder.<lambda>      (9 r   c                   |                      |          }|                     |          }t          |t                    sJ | d|g}|                     ||           |r>|                     |                              t          ||          |j                   d S |                     |          	                    t          ||          |j                   d S )Nr:  )
rp  r  r   r   r  r  add_true_match_guardr  r  add_false_match_guardr   rP  r  r  r   s        r   
BOOL_MATCHzGuardBuilder.BOOL_MATCH  s     ll5!!hhuooc4     ##C##$##E4000 	""5))>>&tU33U5E     ""5))??&tU33U5E    r   c                    d S r   rU  rf  s     r   r  zGuardBuilder.<lambda>      T r   c                
    | d u S r   rU  rk  s     r   r  zGuardBuilder.<lambda>  s
     r   c                   |                      |          }|                     |          }|J | dg}|                     ||           |                     |                              t          ||          |j                   d S )Nz is None)rp  r  r  r  add_none_match_guardr  r  r  s        r   
NONE_MATCHzGuardBuilder.NONE_MATCH  s     ll5!!hhuoo{{{   !##E4000u%%::"4//1A	
 	
 	
 	
 	
r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>  r  r   c                
    | |u S r   rU  rk  s     r   r  zGuardBuilder.<lambda>      (9 r   r  c                .    |                      ||          S r   )id_match_unchecked)r   rP  r  s      r   ID_MATCHzGuardBuilder.ID_MATCH  s     &&un===r   c                @   t          |j        t                    r7|                     t	          |j        j        t          j                            S |                     |          }|                     |          }| 	                    ||j
                  }	 t          |          }n(# t          $ r dt          |          j         d}Y nw xY wd| d| d| }|                     ||gd           |                     |                              |t%          |||          |j                   t          |j        t(                    rNt          |t*          j        j                  r1|j        j        }|                     |          }	|	|	| j        |<   d S d S d S d S )Nr  r  z___check_obj_id(r_  r  r  )provided_func_name)r  r  r}   r  r:   r  r  rp  r  r  r  ro  	ExceptionrD  r   r  r  r  r  r  rp   r4  r8  r9  r+  r  r   )
r   rP  r  r  r  r  r  r   r+  weak_ids
             r   r  zGuardBuilder.id_match_unchecked  s    e.
;; 	??e.3\5LMM   ll5!!hhuooS%*--	2S		II 	2 	2 	2 2DII.111III	2 E#DDDDDD##ED6j#QQQu%%88"4??	
 	
 	
 e.<< 	? #ux// ?"5@
..s33&7>D(444	? 	?? ? '&s   B( ("CCc                    d S r   rU  rf  s     r   r  zGuardBuilder.<lambda>'	  r  r   c                
    | d uS r   rU  rk  s     r   r  zGuardBuilder.<lambda>(	      T(9 r   c                B   |                      |          }|                     |          }t          |t          j                  sJ | d}|                     ||g           |                     |                              t          ||          |j	                   d S Nz is not None)
rp  r  r  r4  r5  r  r  add_not_none_guardr  r  )r   rP  r  r  r  r   s         r   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH&	  s    
 ll5!!hhuoo#u|,,,,,#####ED6222u%%88"4//1A	
 	
 	
 	
 	
r   c                *    |                                 S r   raw_reprrf  s     r   r  zGuardBuilder.<lambda>6	  s    U^^-=-= r   c                2    |                                  |k    S r   r  rk  s     r   r  zGuardBuilder.<lambda>7	  s    (8(8H(D r   c                &   |                      |          }|                     |          }t          |t          j        j                  sJ | d|d}|                     |                              |t          ||          |j	                   d S )Nz.raw_repr() == z.raw_repr())
rp  r  r  r4  r  r   r  add_dispatch_key_set_guardr  r  )r   rP  r  r  r   s        r   DISPATCH_KEY_SET_MATCHz#GuardBuilder.DISPATCH_KEY_SET_MATCH5	  s    
 ll5!!hhuoo#ux677777>>C>>>
u%%@@":u55	
 	
 	
 	
 	
r   c                    | j         j        J | j         j        j        }d| g}|                     ||           | j        j                            |t          ||          |j                   d S )Nz,torch.autograd.forward_ad._current_level == )	r  r  
dual_levelr  r[  r   add_dual_level_match_guardr  r  )r   rP  r  r   s       r   
DUAL_LEVELzGuardBuilder.DUAL_LEVELF	  s     $1===*7B
KzKKL##E4000::"4//	
 	
 	
 	
 	
r   c                <   | j         j        J | j         j        j        }d |D             d dg}|                     ||           t          j        j        j        d	fd}| j        j	        
                    |t          ||          |j                   d S )
Nc                6    g | ]}|                                 S rU  )	get_state)r  cis     r   rX  z6GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.<listcomp>[	  s     ///R",,..///r   z5torch._functorch.pyfunctorch.compare_functorch_state(r`  rv  r   r   r   c                               S r   rU  )rv  
compare_fnstatess    r   r  z.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fnb	  s    :f%%%r   r  )r  r  functorch_layersr  r4  
_functorchpyfunctorchcompare_functorch_stater[  r   r\  r  r  )r   rP  cisr   r  r  r  s        @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCHU	  s     $1===#0A//3///QQQQR##E4000 %1I
	& 	& 	& 	& 	& 	& 	& 	00&tU33U5E	
 	
 	
 	
 	
r   c                \   t           j        j        j        j        t           j        j        j        j        dfd                        d g}|                     ||           dfd
}| j        j        	                    |t          ||          |j                   d S )NhooksCtuple[Callable[[torch.Tensor], Any], Callable[[Any], torch.Tensor]]r   tuple[int, ...] | Nonec                b     |           sd S t          t          t          |                     S r   )rB  maprv  )r  are_inline_hookss    r   hooks_ids_fnz?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fnq	  s3     $#E** tR(((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == rv  r   r   c                2                            k    S r   rU  )rv  	get_hooksguard_hooks_idsr  s    r   r  z5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fn	  s    "ll99;;&?&???r   )r  r  r   r  r  )r4  r  _aot_autogradr  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineabler  r[  r   r\  r  r  )r   rP  r   r  r  r  r  r  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKSz)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKSj	  s    $28P	*0S 		) 	) 	) 	) 	) 	) ',yy{{33 dRacc
 	##E4000	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	00&tU33U5E	
 	
 	
 	
 	
r   c                "   |                      |          } G d d          |                                d         }t          t          j        t
          j        fd|                    t          |d          r&t          |           t          |          dfd
}ndfd}dt          |           dt          j                     }|                     |                              |t          ||          |j                   d S )Nc                      e Zd ZddZddZdS )	@GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>._AnyCompareotherobjectr   r   c                    dS r%  rU  r   r  s     r   __eq__zGGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>._AnyCompare.__eq__	  s    tr   c                    dS r  rU  r  s     r   __ne__zGGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>._AnyCompare.__ne__	  s    ur   N)r  r  r   r   )r   r   r   r  r	  rU  r   r   _AnyComparer  	  s<                r   r
  rP   c                                 S r   rU  )r  r
  s    r   r  z=GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.<lambda>	  s     r   r[  rv  r   r   r   c                `                         |                                 d                   S r   rb  )rv  r^  original_metadatas    r   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker	  s1    --%q';';'='=a'@  r   c                @    |                                  d         k    S r   r  )rv  r  s    r   r  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker	  s     ++--a04EEEr   ___check_metadata__cr  )r  r\  r   pytreetree_map_onlyr4  r  rs  r   rD  rv  r7   current_compile_idr  r\  r  r  )	r   rP  r  r]  r  r  r
  r^  r  s	         @@@r   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH	  so   
 	 	 	 	 	 	 	 	 ++--a0$ /F/F/F/FQQ
 
 5.// 	F%e,,,u++C       F F F F F F i2.>+?+?hh>CdCfCfhhu%%66";66	
 	
 	
 	
 	
r   c                    t          ||                     |                    dfd}dt          |           }|                     |                              |t          ||          |j                   d S )Nrv  r   r   r   c                $    t          |           S r   )rl  rv  expecteds    r   rn  z1GuardBuilder.DTENSOR_SPEC_MATCH.<locals>.guard_fn	  s    %a222r   __dtensor_spec_r  )rg  r  rv  r  r\  r  r  )r   rP  rn  r   r  s       @r   DTENSOR_SPEC_MATCHzGuardBuilder.DTENSOR_SPEC_MATCH	  s     (txx??	3 	3 	3 	3 	3 	3 0H//u%%66,T5995;K	
 	
 	
 	
 	
r   c                ,   |                      |          }t          ||          dS d	fd}dt          |           dt          j                     }|                     |                              |t          ||          |j                   dS )
z=Guard on the values returned by the opaque object's guard_fn.Nrv  r   r   r   c                $    t          |           S r   )rr  )rv  original_valuess    r   opaque_guard_checkerzDGuardBuilder.OPAQUE_OBJ_GUARD_FN_MATCH.<locals>.opaque_guard_checker	  s    #A777r   ___check_opaque_guard_fn_r  r  )	r  rp  rv  r7   r  r  r\  r  r  )r   rP  r  r  r  r  s        @r   OPAQUE_OBJ_GUARD_FN_MATCHz&GuardBuilder.OPAQUE_OBJ_GUARD_FN_MATCH	  s     ,UE::"F	8 	8 	8 	8 	8 	8 t"5I2J2JssnNoNqNqssu%%66 ";66	
 	
 	
 	
 	
r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>	  r  r   c                    | |k    S r   rU  rk  s     r   r  zGuardBuilder.<lambda>	  r  r   c                   |                      |          }|                     |          }t          r|t          j        t          j        t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        f}nd}t          t          f}t!          t"          t$          t           t&          t(          t*          t,          t.          j        t.          j        t.          j        j        j        h	||z            }t.          j                                        rddlm}m }	 ddl!m"}
m#}m$}m%} |||||	|
|fz   }ddl&m'} ||fz   }dd l(m)c m*} tW          ||          sS |j,        t%          |                    s6t[          t%          |                    sJ dt%          |                       t]          |t^                    rrta          j1        |          r^d| d| d	g}| 2                    ||           | 3                    |          4                    tk          ||          |j6                   d S t]          |tn                    rrt          j1        |          r^d| d
| d	g}| 2                    ||           | 3                    |          8                    tk          ||          |j6                   d S | d|g}t]          ||          rts          |          }tk          ||          }rfd|D             }| 3                    |          :                    |||j6                   | 2                    ||           d S )NrU  r   )_MeshLayout
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z(type(z) is float and __math_isnan(z))z) is complex and __numpy_isnan(r:  c                     g | ]
}| d  dS r  rU  r  s     r   rX  z-GuardBuilder.EQUALS_MATCH.<locals>.<listcomp>B
  s7     " " "7;422222" " "r   );rp  r  r  int8int16int32int64uint8uint16uint32uint64float16float32float64r  r   rB  r   rD  r	  sliceranger   r4  SizeStreamcudastreamsdistributedis_availabletorch.distributed.device_meshr%  r&  (torch.distributed.tensor.placement_typesr'  r(  r)  r*  torch.export.dynamic_shapesr+  torch.utils._pytreer  rK   r  is_constant_classrC   r   r  r  r  r  r  add_float_is_nan_guardr  r  complexadd_complex_is_nan_guardr   r=  )r   rP  r  r  r  np_typesok_mutable_typesok_typesr%  r&  r'  r(  r)  r*  r+  r  r   r   s     `               r   EQUALS_MATCHzGuardBuilder.EQUALS_MATCH	  s   
 ll5!!hhuoo 				


/HH H #;!

")  "
 
" ))++ 	MMMMMMMM             # H 	<;;;;;{n,,,,,,,,,, sH%%	*'v'S		22	* $DII..	* 	* *d3ii))		* 	*/ #u 	$*S// 	ESEEcEEEFD''t444""5))@@&tU33    F #w 	BHSMM 	HSHHHHHID''t444""5))BB&tU33    F ##C##$#'(( 	  3--C3D%@@ 	" " " "?Q" " " 	u%%<<#U%5	
 	
 	
 	##E4000r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>M
  r  r   c                    | |k    S r   rU  rk  s     r   r  zGuardBuilder.<lambda>N
  r  r   c                F   |                      |          }t          |t                    r|                     |           d S ||                     |           d S t          |t
          j                  r|                     |           d S |                     |           d S r   )	r  r   r   r  r  r:  CodeTyper  rK  r   rP  r  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCHL
  s    
 hhuoo#t 	%OOE"""""[OOE"""""C(( 	%MM%     e$$$$$r   c                     t          |          S r   r~  rf  s     r   r  zGuardBuilder.<lambda>\
  s    -J5-Q-Q r   c                (    t          |           |k    S r   rS  rk  s     r   r  zGuardBuilder.<lambda>]
  s    (Ee(L(L) r   c                f  	 ddl m} |                     |          }|                     |          }d|D ]}t	          ||          r| nJ  |          	j         d| d	g}d	fd
}|                     |                              |t          ||          |j	                   dS )zGuard for subclasses of constant types (int, float, str, etc.).

        Extracts the base value using the base type's converter (e.g.,
        int.__int__) to avoid calling user-overridden __eq__.
        rP   r{  N(r  rv  r   r   r   c                "     |           k    S r   rU  )rv  	base_type
base_values    r   check_fnz6GuardBuilder.CONSTANT_SUBCLASS_MATCH.<locals>.check_fnv
  s    9Q<<:--r   r  )
r}  r|  r  rp  r  r   r  r\  r  r  )
r   rP  r|  r  r  rc  r   rZ  rX  rY  s
           @@r   CONSTANT_SUBCLASS_MATCHz$GuardBuilder.CONSTANT_SUBCLASS_MATCH[
  s    	A@@@@@hhuooll5!! 	% 	 	A#q!! 	 $$$Ys^^
%@@@@*@@A	. 	. 	. 	. 	. 	. 	. 	u%%66"4//	
 	
 	
 	
 	
r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>
  r  r   c                
    | |u S r   rU  rk  s     r   r  zGuardBuilder.<lambda>
  r  r   c                `   |                      |d           |                     |          }t          |d          rHt          |j        t
                    sJ | j        s#|                     |dt          j	                   d S d S t          j        dddt          |           ddg           d S )	Nz%[inline-inbuilt-nn-modules-candidate]trainingz-Attempted to guard on uninitialized nn.Modulerq  zKAttempted to setup an NN_MODULE guard on uninitialized nn.Module subclass `z`.zIEnsure the `nn.Module` subclass instance has called `super().__init__()`.)gb_typecontextexplanationhints)r  r  rs  r   r_  r   r  rv  r  rQ  rS   unimplementedrD  rP  s      r   	NN_MODULEzGuardBuilder.NN_MODULE
  s     	eDEEEhhuoo3
## 	#,-----( Y((
L<WXXXXXY Y G5'+Cyy5 5 5 `     r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>
  r  r   c                
    | |u S r   rU  rk  s     r   r  zGuardBuilder.<lambda>
  r  r   c                ,    |                      |          S )z0things like torch.add and user defined functions)r  rR  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH
  s     }}U###r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>
  r  r   c                
    | |u S r   rU  rk  s     r   r  zGuardBuilder.<lambda>
  r  r   c                    |                      |          }t          j        |          st          |j         d          |                     |           dS )zNEquals ID_MATCH on classes - better readability than directly calling ID_MATCHz( is not a class, but CLASS_MATCH is usedN)r  r  isclassrE  r  r  rP  s      r   CLASS_MATCHzGuardBuilder.CLASS_MATCH
  sa     hhuoos## 	 :GGG   	&&&&&r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>
  r  r   c                
    | |u S r   rU  rk  s     r   r  zGuardBuilder.<lambda>
  r  r   c                    |                      |          }t          j        |          st          |j         d          |                     |           dS )zNEquals ID_MATCH on modules - better readability than directly calling ID_MATCHz* is not a module, but MODULE_MATCH is usedN)r  r  ismodulerE  r  r  rP  s      r   MODULE_MATCHzGuardBuilder.MODULE_MATCH
  sb     hhuoo$$ 	 :III   	&&&&&r   c                    |                      |          }t          |          t          j        u r3t	          |d          r#|                     |dt          j                   dS |                     |           dS )z!matches a closure by __code__ id.r   N)	r  rD  r:  r;  rs  rv  r  rQ  ri  rP  s      r   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH
  ss     hhuoo99***wsJ/G/G* $$UJ8STTTTT&&&&&r   c                    |S r   rU  rf  s     r   r  zGuardBuilder.<lambda>
  r  r   c                
    | |u S r   rU  rk  s     r   r  zGuardBuilder.<lambda>
  r  r   c                    | j         rCt          |j        t                    r)| j        j                            |j        j                   |                     |          S r   )	r  r  r  rb   r  used_builtin_varsr   r   r  rR  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCH
  sb    
  	%24EFF %7;;,2   &&u---r   c                     t          |          S r   r   rf  s     r   r  zGuardBuilder.<lambda>
  s    SZZ r   c                (    t          |           |k    S r   r|  rk  s     r   r  zGuardBuilder.<lambda>
  s    E

h(> r   c                   |                      |          }|                     |          }t          |t                    s|                     |           g }t          |          dk    r|                    d|            n(|                    d| dt          |                      |                     ||           t          |t                    rL|                     |          	                    t          |          t          ||          |j                   d S |                     |                              t          |          t          ||          |j                   d S )Nr   znot zlen(r  )rp  r  r  r(  r  r   r  r  r  add_dict_length_check_guardr  r  add_length_check_guardr   rP  r  r  r   s        r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTH
  sb    ll5!!%&& 	#OOE"""u::??KKs%%%%KK5s55U55666##E4000eT"" 	""5))EEE

&tU33      ""5))@@E

&tU33     r   c                     t          |          S r   r   rf  s     r   r  zGuardBuilder.<lambda>
  s    -?-F-F r   c                (    t          |           |k    S r   r  rk  s     r   r  zGuardBuilder.<lambda>
  s    (:5(A(AX(M r   c                   |                      |          }|                     |          }t          |          }g }|                    d| dt	          |                      |                     ||           t          |          }|                     |d|j         d          }|                     |          	                    t	          |          |t          ||          |j                   d S )Nz___tuple_iterator_len(r  r  r`  )rp  r  rD  r  r   r  r  r  r  add_tuple_iterator_length_guardr  r  )r   rP  r  r  rc  r   r  s          r   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LEN
  s    
 ll5!!KKRSRR7I%7P7PRRSSS##E4000KKQ 5
 5 5 566u%%EEu%%"4//		
 	
 	
 	
 	
r   c                     t          |          S r   r   rf  s     r   r  zGuardBuilder.<lambda>  s    -A%-H-H r   c                (    t          |           |k    S r   r  rk  s     r   r  zGuardBuilder.<lambda>  s    (<U(C(Cx(O r   c           
        |                      |          }|                     |          }t          |          }g }t          |          }|                    d| d|            |                     ||           t          |          }|                     |d|j         d          }|\  }}	}
|                     |          	                    ||	|
|t          ||          |j                   d S )Nz___normalize_range_iter(r  r  r`  )rp  r  rD  r   r  r  r  r  r  add_range_iterator_match_guardr  r  )r   rP  r  r  rc  r   normalized_range_iterr  startstopsteps              r   RANGE_ITERATOR_MATCHz!GuardBuilder.RANGE_ITERATOR_MATCH  s   
 ll5!!KK 4U ; ;PsPP9NPPQQQ##E4000KKQ 5
 5 5 5661tTu%%DD"4//	
 	
 	
 	
 	
r   c                >    t          |          t          |          fS r   rD  r   rf  s     r   r  zGuardBuilder.<lambda>,  s    d5kk;OPU;V;V-W r   c                b    t          |           |d         u ot          |           |d         k    S r|  r  rk  s     r   r  zGuardBuilder.<lambda>-  s1    KK8A;&U+?+F+F(ST++U r   c                `   |                      |          }|                     |          }t          |          t          |          dfd}d| d g}|                     ||           |                     |                              |t          ||          |j                   d S )	Nrv  r   r   r   c                L    t          |           u ot          |           k    S r   r  )rv  
count_typenormalized_count_iters    r   rn  z3GuardBuilder.COUNT_ITERATOR_MATCH.<locals>.guard_fn7  s-    Q:% E(++/DDr   z___normalize_count_iter(r  r  )	rp  r  rD  r   r  r  r\  r  r  )r   rP  r  r  rn  r   r  r  s         @@r   COUNT_ITERATOR_MATCHz!GuardBuilder.COUNT_ITERATOR_MATCH+  s     ll5!!%[[
 4U ; ;	 	 	 	 	 	 	 M3LL5JLLM##E4000u%%66,T5995;K	
 	
 	
 	
 	
r   source_bc                   t          |j                  st          |          rd S | j        r`t          |          x}r| j        j                            |           t          |          x}r| j        j                            |           | 	                    |          }| 	                    |j
                  }t          |j                  st          |          rd S ||f}|| j        v rd S | j                            ||f           | j                            ||f           | d| g}|                     ||           t          j        r<|d         }t!          ||          d         }	| j                            ||	f           d S t'          |                     |          |                     |          t!          ||          |j                   d S )N is r   )r1   r  r  r,   r  additional_used_local_varsr   r+   additional_used_global_varsrp  r  r0   r  r  rQ   #use_lamba_guard_for_object_aliasingr  r  r  r    r  r*  r  )
r   rP  r  r  ref_aref_br  r   r  r  s
             r   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUTF  s   $$
 
 	&x00	 F 	L,X666t K%@DDTJJJ-h777t L%AEEdKKKU##X]++#$
 
 	%h//	 F en$555F+//???+//???%%e%%&##E40005 	 QI 6y% H H K,33Y@Q4RSSSSS)&&u--228<<&tU33 	    r   c                    d S r   rU  rf  s     r   r  zGuardBuilder.<lambda>v  r  r   c                
    | d uS r   rU  rk  s     r   r  zGuardBuilder.<lambda>w  r  r   c                    |                      |           dg}|                     ||           |                     |                              t	          ||          |j                   d S r  )rp  r  r  r  r  r  r   rP  r   s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVEu  sy    
 <<&&4445##E4000u%%88"4//1A	
 	
 	
 	
 	
r   c                D    t          |                                          S r   r  r  rf  s     r   r  zGuardBuilder.<lambda>  s    T%**,,-?-? r   c                L    t          |                                           |k    S r   r  rk  s     r   r  zGuardBuilder.<lambda>  s    UZZ\\(:(:h(F r   c           	     \   |                      |          }|                     |          }g }|                    d| dt          |                                                      |                     ||           |                     |                              |||j                   dS )z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	rp  r  r  r  r  r  r  add_mapping_keys_guardr  r  s        r   MAPPING_KEYS_CHECKzGuardBuilder.MAPPING_KEYS_CHECK  s     ll5!!ACAAT%**,,-?-?AABBB##E4000u%%<<4)	
 	
 	
 	
 	
r   c                P    t          t                              |                    S r   r  r(  r  rf  s     r   r  zGuardBuilder.<lambda>  s    T$))E2B2B-C-C r   c                X    t          t                              |                     |k    S r   r  rk  s     r   r  zGuardBuilder.<lambda>  s    TYYu-=-=(>(>((J r   c           
        |                      |          }|                     |          }|t          j        j        j        u r|                     |           dS |                     |           g }|                    d| dt          t          |                               |                     ||           |                     |j                  r|                     ||           dS |                     ||           dS )z6Insert guard to check that the keys of a dict are sameNr  z)) == )rp  r  r4  r  rK   SUPPORTED_NODESr  r  r  r  r   r  r  r  r  r  r  s        r   DICT_KEYS_MATCHzGuardBuilder.DICT_KEYS_MATCH  s    ll5!!EK'777e$$$FU###
 	ScSS6G6N6N1O1OSSTTT##E4000++E,DEE 	C--eU;;;;;44UEBBBBBr   c                    d S r   rU  rf  s     r   r  zGuardBuilder.<lambda>  r  r   c                (    t          |           dk    S r   r|  rk  s     r   r  zGuardBuilder.<lambda>  s    E

a r   c                L    t           j        rdS |                     |           dS )z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)rQ   skip_nnmodule_hook_guardsr  rR  s     r   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s.     + 	FU#####r   c                    d S r   rU  rR  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODE      r   c                    d S r   rU  rR  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS  r  r   c                    d S r   rU  rR  s     r   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE  r  r   c                    | j         j        }|J |j        }|| j         _        d| j         j                                         g}| j        j                            |||j                   d S )Nz ___check_global_state() against )	r  r  global_state_guardglobal_state__getstate__r[  r   add_global_state_guardr  )r   rP  r  r  r   s        r   GLOBAL_STATEzGuardBuilder.GLOBAL_STATE  s    ,9'''#6-9* ct/D/Q/^/^/`/`bb
 	66$ 0	
 	
 	
 	
 	
r   c                    | j         j        J t          | j         j                  | j         _        | j        j                            | j         j        dg|j                   d S )Nz$___check_torch_function_mode_stack())r  torch_function_mode_stack$make_torch_function_mode_stack_guard"torch_function_mode_stack_check_fnr[  r   #add_torch_function_mode_stack_guardr  rR  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE  st    $>JJJ0%?  	@
 	CC!;34	
 	
 	
 	
 	
r   c                   |j         t          j        u sJ | j        j        J d| j        j        j        g}|                     ||           |                     |                              t          ||          |j
                   dS )z/Guard on CURRENT_DEVICE per torch.utils._deviceNzutils_device.CURRENT_DEVICE == )rb  r=   GLOBALr  r  current_devicer  r  add_default_device_guardr  r  r  s      r   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE  s     |{11111$1===cd.C.P._cc
 	##E4000u%%>>"4//1A	
 	
 	
 	
 	
r   c                
   #$%& ddl m} |j        dk    sJ  j        j        &&J  j        j        1 j        j        }|j        }|j        }|j        |j        }|j	        }njt          &|          sJ &j        J &j        j        pg $d $D             %d&&fd
}&j        ri }	g }
g }i }t                      }&j        D ][}|j        &j        v r1t"          j        j                            ||&j        |	|
|||           At*                              d           \t/          |
|t1          |                                          |d          #nd #d'#$%& fd}t4          j        r3	  |d          \  }}}d}n0# t8          $ r d} |d          \  }}Y nw xY wd} |d          \  }}&j        s&j                                          j        rt?                                           d          }|t          |tB                    sJ |g n%t1          |j"        #                                          }tI          |||||           j        _        |j%        D ]} &                    ||g           tO          j(                    x}r|j)        *                    |j%                   g }g }|s|sJ |j%        |j"        }}|sd S |+                                D ]\  }}t          |tX                    rd}                      |i tZ          t]                                }t          |t^                    r|0                    ||f           vt          |tb                    r|0                    ||f           d}|sdd l2}ddl3m4} |sJ |j%        |j"        }}tk          ||z             }	  fdtm          |          D             }d7                    d tm          |          D                       }d7                    d tm          |          D                       }|rd| d}|rd| d}tq          j9        d | d!| d"d#7                    |           d$          } tt          ;                    d%| |j%                   |<                    |           }!|=                    |!j>        |j?                  j@        }"|"sJ 	 t          |t          |          t          |          |"|!|j%        |jC                   d S # t"          jD        jE        jF        $ r Y nw xY w|j%        r9 G                    |j%        |j%        i tZ          t]                                 d S d S )(Nr   r   rq  c                    g | ]	}|j         
S rU  )symbolic_contextr  r  s     r   rX  z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>  s    ===Qa0===r   t_idr   r  r   list[Source]c                8    fdj         |          D             S )Nc                F    g | ]}t          |t          j                  S rU  )r4   r3   SIZE)r  rb  r  s     r   rX  z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>  s:         )1DcJJ  r   )tracked_fakes_id_to_source)r  r  r  s    `r   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources  s9        #/"I$"O   r   z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlylangstuple[str, ...]list[_ShapeGuardsHelper]c           	         j                             d D             d D             j        j         |           S )Nc                    g | ]	}|j         
S rU  )faker  s     r   rX  zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp><  s    (((QV(((r   c                    g | ]	}|j         
S rU  )rb  r  s     r   rX  zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>=  s    ***!QX***r   )input_contextsequalities_inputsr  ignore_staticr  )	shape_envproduce_guards_verboser  export)r  r  r  r  r  r   s    r   _get_code_partsz/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts9  s_    #-DD((R(((**r***#1&7# (4':#: E 
 
 
r   )pythonverbose_pythoncppT)r  r  cpp_code_parts)python_code_partsr   r  python_fallbackshape_env_sources)r   )CppCodeCachec                \    g | ](\  }}                     t          ||                    )S rU  )r*  r-   )r  irb  r   s      r   rX  z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>  sE     " " "!6 66}VQ7O7OPP" " "r   r_  c              3  2   K   | ]\  }\  }}| d | dV  dS )z = int_values[r  NrU  r  r  r  symbols       r   r  z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  sO       , ,&;Av 11Q111, , , , , ,r   c              3  2   K   | ]\  }\  }}| d | dV  dS )z = float_values[r  NrU  r  s       r   r  z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  sO       . .&;Av 33q333. . . . . .r   zint64_t ;zdouble a  
                #include <algorithm>
                #include <cstdint>
                #include <cmath>
                #include <c10/util/generic_math.h>

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

                EXTERN_DLL_EXPORT int8_t guard(int64_t *int_values, double *float_values) {
                  z
                  z
                  return (z) && (z%);
                }
                zC++ shape guard function: %s %s)r  r   r  r   r   r  )r  r  r   r  )Htorch._dynamo.output_graphr   r  r  r  shape_code_partsr  r   r  r  r  r  tracked_fakesexport_constraintsr   r  r  r4  r  dynamic_shapes_process_equalitiesrm  rn  rH   r  r*  rQ    enable_cpp_symbolic_shape_guardsOverflowErrorfreezer  localsr  rF   source_to_symbolr  ShapeCodePartsexprsr  r7   try_getshape_env_guardsr)  r   r]   rJ   r  r   r  r  ctypestorch._inductor.codecacher  r(  r  rV  textwrapdedentrX  rY  loadcastrP  c_void_pr  r"   r   r  	_inductorrS   InvalidCxxCompilerra  )'r   rP  r   r  r  r   r  r  r  namesr  r  r  r  
constraintr  maybe_cpp_code_partsmaybe_shape_env_sourcesr   compile_contextint_source_to_symbolfloat_source_to_symbolr   r
  rb  r  r4  r  r  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardr  r  r  r  s'   `                                  @@@@r   	SHAPE_ENVzGuardBuilder.SHAPE_ENV  s   @@@@@@zR,9''' 1=#4E 0 B!1!D.:!1!@.>OO l,=>>>>>)555'5;B=="===N      . )46<>  # 68/2uu"."A S SJ!,*QQQ3GG&'(2!(.++	 	 	 	 $QRRRR$6!-'9$()?)?)A)A$B$B$3#% % %!! %)!          6  ((KLL J%'9> ',OO$   &*O<KO4= =9%'9'9'9 #'8G09 95!#5  & 0&--/// 	 $*88<<0@#A#A '/:$&;4 4// 
 (/ .?DDFFGG $
 6D"3#53 /"96 6 6D!2 &+ 	7 	7D''v6666 -4666? 	N,334F4LMMM!!# 	/!!!> $/	 )J  "2"8"8":": / /fn55 /&*OO$(HH%L%L8I8K8K%L %- % %M "-55 /,33VV4DEEEE#M599 /.55vv6FGGGG +/ K	MMM>>>>>>!!!> $/	 )J  $$8;Q$QRR=" " " "%./?%@%@" " "
 #')) , ,*34H*I*I, , , # # %)II . .*34J*K*K. . . % %!
 # D&C&C&C&CO$ G(F2C(F(F(F%#? #  %  $==44   (   5&,  
 $((22TZAAGv
 -",--.//&,$    ?&9   $ " 	55!'"(DD0A0C0CD 6     	 	s%   .F   FF6DT T! T!c                     t          |          S r   )rY  rf  s     r   r  zGuardBuilder.<lambda>  s    -DU-K-K r   c                \    t          | t          j                  ot          |           |k    S r   )r  r4  r5  rY  rk  s     r   r  zGuardBuilder.<lambda>  s+    uel++ ;'..(: r   c                   t           j        r|                                rd S t          |          r|                     |           d S t          |t                    r
 |            }||n|                     |          }t          |          }t          j
                            |          }t          |t          j        j                  r|j        |j        }|j        |j        }t          |t          j                  sJ t           j        rt          |t          j        j                  r{t)                      }|                                rY|                    d|                                           |                    d|j                   |                    dd           |                     |          }g }| j        j        J | j        j        j        r|                     |           g d}|D ]}	t=          |j        |	          }
|	dk    rd}	tA          |
          }
|                     |
          }tC          |t          j"        t          j#        f          r,|$                    d| d	|	 d
tK          |                     |$                    | d	|	 d|            nr| &                    |          }t           j'        r3tC          |t          j        j                  sbtQ          |j                  sNt          |j        tR                    s4| j*        $                    |           | j+        $                    |           | j        j        }|j,        |j                 }t[          |d                   }t[          |d                   }t]          t_          ||||||          |          }|j0        }|1                    ||||||||           t          |t          j        j                  s$| j2        j3        4                    |j5                   |j6        J to          |d|j                  \  }}|stq          |d          rf|j9        }d| d| d| d}|$                    |           | &                    |          :                    |t]          ||          |j0                   nXd| d}|$                    |           | &                    |          ;                    dt]          ||          |j0                   tq          |d          rrty          |dd           }d| d|d| d}|$                    |           | &                    |          =                    |fdt]          ||          |j0                   tq          |d          rrty          |dd           }d| d|d| d}|$                    |           | &                    |          =                    |fd t]          ||          |j0                   t}          |          d!k    r| ?                    ||           d S d S )"Nparam_numelparam_bytesparam_countrP   )r  r  r  
ndimensionr,  zndimension()zstr(r  r  r:  sizerX  T)	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') == False_dynamo_unbacked_indices_dynamo_shape_idsz
((getattr(z , '_dynamo_shape_ids', None) == z) if hasattr(z(, '_dynamo_unbacked_indices') else True)c                P    t          | d          rt          | dd           |k    ndS )Nr1  r2  Trs  r6  r  s     r   r  z+GuardBuilder.TENSOR_MATCH.<locals>.<lambda>  s4    &q*DEE&GA':DAAXMM!% r   _dynamo_unbacked_boundsz&, '_dynamo_unbacked_bounds', None) == c                P    t          | d          rt          | dd           |k    ndS )Nr1  r5  Tr4  r  s     r   r  z+GuardBuilder.TENSOR_MATCH.<locals>.<lambda>  s4    &q*DEE&GA'@$GG8SS!% r   r   )@rQ   _unsafe_skip_fsdp_module_guardsis_fsdp_modulerH  r  r  rO   r  rD  r4  r  _dispatch_keysr  r  r
  r  r5  log_compilation_metricsr8  	Parameterr6   in_progress	incrementnumelnbytesrp  r  r  r  r  rV   r  rW   r   r  r  r  r   r  ,skip_no_tensor_aliasing_guards_on_parametersr2   rt   r  r  input_source_to_sizes_stridesr  r  r  r  add_tensor_match_guardr[  r   r   r  rb  r   rs  r0  add_dynamic_indices_guardr  r6  r\  r   r  )r   rP  r  r
  r  metrics_contexttensor_namer   termstermterm_src
real_valuer[  r  r]  r-  rX  r   r  static_reasondynamic_indicesr  	shape_idsunbacked_boundss                            r   TENSOR_MATCHzGuardBuilder.TENSOR_MATCH  sG    1 	e6J6J6L6L 	F "%(( c	9MM%     %//  ".EEDHHUOOE%[[F!H33E::M%!2!=>> 8<+"\F&2$)$7MeU\22222- @*UEHDV2W2W @"5"7"7"..00 @#--mU[[]]KKK#--mU\JJJ#--mQ???,,u--K, !D(5AAA$18 OJ&&&   " 
M 
MD)%*BDIIH|++-#;H#E#E!%(!3!3Jj5<*EFF M$W;$W$W$W$WC
OO$W$WXXXX{$K$KT$K$Kz$K$KLLLL
M !% 6 6u = = GQ ueh&899Q J!4 	Q %U%=?PQQQ 188EEE:AA-PPP#4A'E, 2(62BCC3HX4FGG%;.#%  
& 
&" #-
44&!	 	 	 "%);<< J&9==ejIII< <+++<U5M  OFG  ;5";<< &+&CO !h[  !h  !hTc  !h  !hs~  !h  !h  !hIKK	*****511KK'.y%@@(    V;UUU  KK	*****511FF1.y%@@(   5"<==  '/BD I II !j[  !j  !jZc  !j  !jt  !j  !j  !jIKK	*****511BB+4   
 /y%@@(   5"<== &-e5NPT&U&UO !v[  !v  !v`o  !v  !v  AL  !v  !v  !vIKK	*****511BB+:   
 /y%@@(   4yy1}}++E488888 }r   rK  r  r  c                   t                      }|J |j        }~|J |p|j        j        }~|| j        j        v sJ d|             |!|j        }|sd n|                     |          }	n|}	|	!t          j	        t          |	                    nd }
d }t          |	j        dd          dk    }|r@t          |	t          j        t          t          j        f          st          j	        |	          }|                    ||
||           d S )NzH_produce_guard_code must be called from inside GuardedCode. Called from __weakrefoffset__r   )r   f_backr  co_namer   r  r  r  weakrefr  rD  r6  r  enumEnumrB  
ProxyTypesset_export_info)r   rP  rK  r  r  	cur_framecaller	func_namer  guarded_objectguarded_object_typeobj_refsupports_weakrefs                r   r  z#GuardBuilder._set_guard_export_info  sS    !NN	$$$!!!!&?&-*?	DN3333bW`bb 433
 #*:D)-BTT488E??NN4N 2@1KGK^,,---QU 	  N,.A1EEJ 	  	2JTYw/AB%
 %
 	2 k.11G		
 	
 	
 	
 	
r   )FNN)r  r   r  r  r  r  r  r  r  r  r   r  r[  r   r  r  r  r   r  r  r  r  r   r   )r4  r  rP  r:   r   r   )r  r  rP  r:   r   r   )r4  r   r   r  )rb  rV   r2  r   r3  r   r4  r   r?  r   r  r   r5  r6  r   r   )rb  r>   r   r   )rb  r>   r4  r  r   r6  )r
  r6  r   r   )r   r   )rb  r>   r   r   )rP  r:   r   r   r%  )
r   rQ  r   rQ  r   r  rS  r   r   r   r   )rb  rc  r   rd  r   r   )rP  ri  r   r   )rP  r:   r  r   rn  rq  r   r   )rP  r:   r  r]  r   r   )rP  r:   r  r  r   r   )rP  r:   r   r   )rP  r:   r  r   r   r   )rP  r:   r  r   r   r   )rP  r:   r  r]  r   r   )rP  r:   r  r  r   r   )rP  r:   r  r>   r   r   )NN)
rP  r:   rK  rQ  r  r  r  r]  r   r   )Mr   r   r   r   r  r  r=  r  r  r  r  r  r  r*  r  ra  r  rp  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r`  rd  r  rg  rl  r  rp  rr  r!  rK  rQ  r[  re  ri  rn  rs  rw  ry  ru  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  rO  r  rU  r   r   r  r    s        "9=LF LF LF LF LF\   <' ' ' 'R    \"Y Y Y Yv9 9 9 9" " " "0? ? ? ?
 
 
 
\ \ \ \|L L L L 26 Y Y Y Y YP /3    &       $ 
 
 SR  50 50 50 50 50n MMFF  
 040 0 0 0	 08 88??  
 
 
	 
8 "
 
 
 "!
 LL99  0 0 0	 0  LL==  0 0 0	 0  LL99  0 0 0	 0$ LL==  0 0 0	 0$ 2299    	 " 1155  

 

 

	 

 2299  > > > >	 > :>%? %? %? %? %?N 1199  	
 	
 	
 	
	 	
 ==DD  

 

 

	 

 
 
 
 
 
 
 
 
( 
 
 
 
8 1'  #
 #
 #
	 #
J ,"  
 
 
	 
 *   
 
 
	 
& 2299  n n n n	 n` 2299  	% 	% 	%	 	% QQ   

 
 
 

> 2299    	 ( 2299  $ $ $	 $
 2299  ' ' '	 ' 2299  ' ' '	 ' '  
' 
' 
'	 
' 2299  . . .	 . 77>>    	 < FFMM  
 
 
	 
& HHOO  
 
 
	 
. WW
 
  
 
 
 
* , , , ,\ 1199  
 
 
	 
 ??FF  

 

 

	 

 CCJJ  C C C	 C2 1177  $ $ $	 $             
 
 
 
 
 
 
 
 
 
 
 
 w w w wr KK
 
  h9 h9 h9 h9 h9^ /3)-1
 1
 1
 1
 1
 1
 1
r   r  c                      e Zd ZdZej        ej        ej        fZe	j
         G d d                      Z G d dej                  Z G d dej                  Zdd
ZdddZddZddZdS )PyExprCSEPassrP   c                  $    e Zd ZU ded<   ded<   dS )PyExprCSEPass.Configzdict[str, int]
expr_countzdict[str, str]expr_to_nameNrL  rU  r   r   Configrc  0  s*         """"$$$$$$r   rf  c                  (     e Zd Zd	dZd
 fdZ xZS )PyExprCSEPass.ExprCounterrQ   rc  r   r   c                    || _         d S r   )_config)r   rQ   s     r   r   z"PyExprCSEPass.ExprCounter.__init__6  s    !DLLLr   r   r  c                    t          |t          j                  r'| j        j        t          |          xx         dz  cc<   t                                          |           d S r   )r  ra  ALLOWED_NODE_TYPESrj  rd  r  r   r   )r   r   r   s     r   r   zPyExprCSEPass.ExprCounter.visit9  s^    $ @AA A'T(:(:;;;q@;;;GGMM$r   )rQ   rc  r   r   )r   r  r   r   r   r   r   r   r   r   r   s   @r   ExprCounterrh  5  sQ        	" 	" 	" 	"	  	  	  	  	  	  	  	  	  	 r   rn  c                  ,     e Zd Zd fdZd fdZ xZS )PyExprCSEPass.ReplacerrQ   rc  gen_nameCallable[[], str]r   r   c                r    t                                                       || _        || _        g | _        d S r   )r   r   rj  	_gen_namepreface)r   rQ   rq  r   s      r   r   zPyExprCSEPass.Replacer.__init__?  s4    
 GG!DL%DN&(DLLLr   r   r  r   c                J   t          |t          j                  rt          |          }| j        j        |         t          j        k    r|| j        j        vrst                      	                    |          }t          |          }| 
                                }| j                            | d|            || j        j        |<   n| j        j        |         }t          j        |t          j                              S t                      	                    |          S )Nz = )r  ra  rl  r  rj  rd  USE_THRESHOLDre  r   r   rt  ru  r  r  NameLoad)r   r   exprnode_expr_r   r   s         r   r   zPyExprCSEPass.Replacer.visitI  s    $ @AA :#D)) <*40=3NNN4<#<<< !&d 3 3 ,U 3 3#'>>#3#3++x,C,CE,C,CDDD:B1$77#'<#<T#B8Hchjj99977==&&&r   )rQ   rc  rq  rr  r   r   )r   r  r   r   rm  r   s   @r   Replacerrp  >  s[        	) 	) 	) 	) 	) 	)	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r   r}  r   r   c                r    d| _         |                     t          j        d           i           | _        d S )Nr   c                     dS r   rU  rU  r   r   r  z(PyExprCSEPass.__init__.<locals>.<lambda>f  s    q r   )rd  re  )_counterrf  r  defaultdictrj  r   s    r   r   zPyExprCSEPass.__init__c  s9    {{".yy99 # 
 
r   _varr   r   c                <    | | j          }| xj         dz  c_         |S r   )r  )r   r   r  s      r   _new_varzPyExprCSEPass._new_vari  s)    )$-))r   r  rQ  c                    |                      | j                  }|D ]^}	 |                    t          j        |                     +# t
          $ r'}t                              d|j        |            d }~ww xY wd S )Nz#Failed to visit expr at line %s.
%s)	rn  rj  r   r  parseSyntaxErrorrm  	exceptionlineno)r   r  countereexs        r   countzPyExprCSEPass.countn  s    ""4<00 	 	Acill++++   DbiQRSSS	 	s   'A
A9"A44A9rz  tuple[list[str], str]c                    |                      | j        | j                  }|                    t	          j        |                    }|j        t          |          fS r   )r}  rj  r  r   r  r  ru  r  )r   rz  replacernew_nodes       r   r  zPyExprCSEPass.replacew  sH    ==t}==>>#)D//22h!7!777r   Nr  )r  )r   r   r   r   )r  rQ  r   r   rz  r   r   r  )r   r   r   rw  r  	AttributeCall	Subscriptrl  dataclasses	dataclassrf  NodeVisitorrn  NodeTransformerr}  r   r  r  r  rU  r   r   ra  ra  (  s        M -3=A% % % % % % % %         co      #' #' #' #' #'3& #' #' #'J
 
 
 
    
   8 8 8 8 8 8r   ra  c                t    t          | j        t                    pt          j        o| j        t          j        u S r   )r  r  ra   rQ    guard_nn_modules_using_dict_tagsry  r  re  )rP  s    r   must_add_nn_module_guardsr  }  s8    
 	5+^<< 	
 3 :<#99r   c                  (     e Zd Zd fdZddZ xZS )	DeletedGuardManagerWrapperreasonr   r   r   c                V    t                                                       || _        d S r   )r   r   invalidation_reason)r   r  r   s     r   r   z#DeletedGuardManagerWrapper.__init__  s'    #)   r   c                    d | _         d S r   )r   r   s    r   r  z6DeletedGuardManagerWrapper.populate_diff_guard_manager  s    #r   )r  r   r   r   r  )r   r   r   r   r  r   r   s   @r   r  r    sQ        * * * * * *$ $ $ $ $ $ $ $r   r  c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
S )r  rG   r  r   z_CppShapeGuardsHelper | Noner  r   r  r  r  NrL  rU  r   r   r  r    sN         ))))****0000######r   r  c                  $    e Zd ZU ded<   ded<   dS )GuardsStater   r  ShapeCodeParts | Noner  NrL  rU  r   r   r  r    s*         ((((++++++r   r  c                  0    e Zd ZdddZddZdd	ZddZdS )_MissingNr  r]  r   r   c                    || _         d S r   rK  )r   r  s     r   r   z_Missing.__init__  s    r   r   c                    d| j          dS Nz	_Missing(r`  r  r   s    r   __repr__z_Missing.__repr__      *4<****r   c                    d| j          dS r  r  r   s    r   ru  z_Missing.__str__  r  r   r   r   kwargsc                    t                      S r   )r  )r   r   r  s      r   __call__z_Missing.__call__  s    zzr   r   )r  r]  r   r   r   )r   r   r  r   r   r   )r   r   r   r   r  ru  r  rU  r   r   r  r    si            + + + ++ + + +
     r   r  tuple[type, ...]c                     t           j        j        t          j        f} 	 | t           j        j        j        fz  } n# t          $ r Y nw xY w| S r   )r4  r  r;  rT  r   _distributed_c10dProcessGroupAttributeError)rh  s    r   _get_unsupported_typesr    sY     	C*799   Js   : 
AAc                      e Zd ZdY fd
ZedZd            Zed[d            Zed\d            Zed]d            Zed^d"            Z	ed_d&            Z
ed`d*            Zedad-            Zedbd1            Zedcd4            Zeddd7            Zeded9            Zedfd=            Zedgd@            ZedhdB            ZedidD            ZedjdH            ZedkdL            ZedldU            ZdmdXZ xZS )nGuardsStatePicklerr  dict[int, Any]empty_valuesmissing_valuesr   r   r  r   r   c                     t                      j        |i | t          j                                        | _        t          j        j                                        | _        || _	        || _
        || _        d S r   )r   r   r4  r  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converterr  r  r  )r   r  r  r  r   r  r   s         r   r   zGuardsStatePickler.__init__  so     	$)&)))*99;; % 1 = Q Q S S!2(,r   statetorch.nn.Modulec                l    t           j                                        }|                    |           |S r   )r4  r8  r9  __setstate__)r^  r  mods      r   _unpickle_modulez#GuardsStatePickler._unpickle_module  s,    hoo
r   meta_tensorr  r  torch.devicer
  rD  dispatch_keys_rawr   gradc           	        t           j                                        }t           j        j                                        }|                    ||||t           j        j                            |                    }||_	        |S r   )
r4  r  r  r  r  from_meta_and_devicer  r   from_raw_reprr  )	r^  r  r  r
  r  r  r  r  rh  s	            r   _unpickle_tensorz#GuardsStatePickler._unpickle_tensor  sv     %4466	 ,8LLNN33H#112CDD
 
 
r   ctx
inner_datalist[tuple[str, Any]]c                   t          |          }|j        |                                }	}t          |                              ||||	          }
||
_        t          j        j        	                    |          |
_
        |
S r   )r(  rW  rX  rD  __tensor_unflatten__r
  r4  r  r   r  r  )r^  r  r  r
  r  r  r  inner_tensors
outer_sizeouter_striderM  s              r   $_unpickle_traceable_wrapper_subclassz7GuardsStatePickler._unpickle_traceable_wrapper_subclass  sy     Z((#.#4k6H6H6J6JL
;443
L
 
 
!H3AABSTT
r   aliasr   types.ModuleTypec                *    t          j        |          S r   )r  r  )r^  r  s     r   _unpickle_python_modulez*GuardsStatePickler._unpickle_python_module   s    &u---r   r  torch._C.DispatchKeySetc                J    t           j        j                            |          S r   )r4  r  r   r  )r^  r  s     r   _unpickle_dispatch_key_setz-GuardsStatePickler._unpickle_dispatch_key_set  s    x&44X>>>r   jsonbytes torch._C._functorch.CInterpreterc                T    t           j        j        j                            |          S r   )r4  r  r  CInterpreterdeserialize)r^  r  s     r   _unpickle_functorch_interpreterz2GuardsStatePickler._unpickle_functorch_interpreter  s      x"/;;DAAAr   dr   types.MappingProxyType[Any, Any]c                *    t          j        |          S r   )r:  MappingProxyType)r^  r  s     r   _unpickle_mapping_proxyz*GuardsStatePickler._unpickle_mapping_proxy  s     %a(((r   elemsr  c                Z    t                               |                                          S r   )r(  fromkeysr  )r^  r  s     r   _unpickle_dict_keysz&GuardsStatePickler._unpickle_dict_keys  s     }}U##((***r   r%  r  itertools.count[int]c                ,    t          j        ||          S r   )	itertoolsr  )r^  r%  r  s      r   _unpickle_count_iterz'GuardsStatePickler._unpickle_count_iter  s    tT***r   original_typetype[torch.nn.Module]c                h    t           j        j        j        j                                        |         S r   )r4  r>  fsdp_fully_shardget_cls_to_fsdp_cls)r^  r  s     r   _unpickle_fsdp_module_typez-GuardsStatePickler._unpickle_fsdp_module_type  s,      %2?SSUU
 	
r   dict[str, Any])torch.nn.parallel.DistributedDataParallelc                    t           j        j        j        }|                    |          }t           j        j                            ||           |S r   )r4  r8  parallelDistributedDataParallel__new__r9  r  )r^  r  tyddps       r   _unpickle_ddp_modulez'GuardsStatePickler._unpickle_ddp_module$  s?     X6jjnn$$S%000
r   r  c                @    t          t          j        j        |          S r   )r6  r4  opsr  )r^  r  s     r   _unpickle_c_opz!GuardsStatePickler._unpickle_c_op-  s    uy|T***r   	namespaceopnameoverloadnamec                n    t          t          t          t          j        |          |          |          S r   )r6  r4  r  )r^  r	  r
  r  s       r   _unpickle_opzGuardsStatePickler._unpickle_op1  s(    wwuy)<<fEE|TTTr   funcr  c                ,    t          j        ||          S r   )r:  r<  )r^  r  r  s      r   _unpickle_bound_methodz)GuardsStatePickler._unpickle_bound_method5  s    d+++r   torch.nn.attention.SDPBackendc                J    t          t          j        j        j        |           S r   )r6  r4  r8  	attention
SDPBackendr  s    r   _unpickle_sdp_backendz(GuardsStatePickler._unpickle_sdp_backend9  s     ux)4d;;;r   r  c                <    dfd}|j         J |j         d         S )Nr   r   c                      S r   rU  )r  s   r   r  z,GuardsStatePickler._unpickle_cell.<locals>._@  s    Jr   r   )r   r   )r   )r^  r  r  s    ` r   _unpickle_cellz!GuardsStatePickler._unpickle_cell>  s>    	 	 	 	 	 	 }(((}Qr   fieldsr  type[NamedTuple]c                ,    t          j        ||          S r   )r  
namedtuple)r^  r  r  s      r   _unpickle_named_tuple_typez-GuardsStatePickler._unpickle_named_tuple_typeF  s    
 %dF333r   serialized_coder   r   c                .    ddl m}  |j        |          S )Nr   r   )torch._dynamo.packager   to_code_object)r^  r  r   s      r   _unpickle_codez!GuardsStatePickler._unpickle_codeM  s'    888888,~,_===r   r   rN  qualnameargdefstuple[object, ...] | Noneclosure!tuple[types.CellType, ...] | Nonetypes.FunctionTypec                d    t          j        |          j        }t          j        |||||          S r   )r  r  r  r:  r;  )r^  r   rN  r$  r%  r'  r  s          r   _unpickle_nested_functionz,GuardsStatePickler._unpickle_nested_functionS  s0     +F33<	!$	8WgNNNr   r   0tuple[Callable[..., Any], tuple[Any, ...]] | Anyc                ^   dd l }t          |          | j        v r$t          |          j        t          |          ffS t          j        |          r+ddlm} t          |           j	         |j
        |          ffS t          |          | j        v r	t          dfS t          |t          j                  r|j        j        dk    rddlm} t          |          | j        vr	t          dfS  ||          rg }|                                \  }}|D ]Z}t+          ||          }	t          |	t          j                  r|	| j        t          |	          <   |                    ||	f           [t          |           j        t          j        |d          |j        t          |          t          j                            |                                          ||ffS t          |          }
t          |t          j        j                  r|j        |j        nt          j        }
t          |           j        t          j        |d|j                   |j        |
t          j                            |                                          |j!        ffS t          |t          j"        j#                  rrt          |          | j        vr	t          d	fS |j$        %                                D ]l}t          |t          j        t          j"        j#        f          r.t          |          | j        v rEtM          |          rU|| j        t          |          <   mt          |t          j"        j'        j(                  r)t          |           j)        |*                                ffS t          |          j+        t          |          j,        k    rtZ          S |j.        j*        t          j"        j#        j*        k    r)t          |           j/        |*                                ffS nt          j0        |          rt          |           j1        |j,        ffS t          |t          j        j2                  r)t          |           j3        |                                ffS t          |t          j        j4        j5                  r)t          |           j6        |7                                ffS t          j8        |          rFts          ||j:                  r1tw          |d
          r!tw          |d          sJ |j<        |j=        ffS t          j8        |          rWts          |t|                    rBtw          |d          r2|j+        |j,        k    r"t          |           j?        |j,        |j@        ffS t          |t          jA                  rt          d| d|jC         d          t          |t          jE                  r)t          |           jF        |G                                ffS t          |          t          u r>t          |          \  }}|tZ          ur!|tZ          urt          |           jJ        ||ffS nt          |t          jK        jL        jM                  r$t          |           jN        t          |          ffS t          |t          jP        jQ                  r6|jR        S                    d          rt          |           jT        |j,        ffS t          |t          jP        jU                  r(t          |           jV        |jW        |jX        |jY        ffS |j.        jZ        dk    r|j.        j,        dk    r	t          dfS t          |t                                r	t          dfS t          j\        |          rd|j+        v r4t          |           j]        |j^        |jZ        |j+        |j_        |j`        ffS |jZ        t          jb        v rRt          jb        |jZ                 }|j+        c                    d          D ]}t+          ||d           }||ur	t          dfS nt          jd        |          r[|je        }|jf        }t+          ||j,                  }t          jd        |          r|je        }||urt          |           jg        ||ffS nNt          |t           d d          j`        d                             rt          |           jh        |ji        ffS tw          t          jj        d          rCt          |t          jj        jk        jl                  rt          |          | j        vr	t          dfS t          |t          j"        jm        jn                  rt          |           jo        |jp        ffS t          |          j+        t          |          j,        k    rSt          |t|                    s>t          jK        jq        r                    dt          |           d| ddz   dz             t          j8        |          rtw          t          jj        d           rts          |t          jj        js        jt        ju                  r|t          jj        js        jt        ju        urv|jv        d!         }ts          |t          j"        j#                  sJ |t          jj        js        jt        jt        w                                v sJ t          |           jx        |ffS tZ          S )"Nr   r   )zmissing valuesmeta)is_traceable_wrapper_subclass)ztensor guard tree)r  )r  r  )zmodule guard tree_torch_handler_name_torch_unpicklerr  zCannot serialize SymInt z (node: r`  z_C::r  	PyCapsule)capsule)unsupportedz<locals>r  )zfqn mismatchc                      fdS )Nc                      S r   rU  r  s   r   r  zGGuardsStatePickler.reducer_override.<locals>.<lambda>.<locals>.<lambda>  s    Q r   rU  r  s   `r   r  z5GuardsStatePickler.reducer_override.<locals>.<lambda>  s    YYYY r   distributed_c10d)zdistributed_c10d.Workr"  r#  r$  r%  r&  r  rN  )ysympyrv  r  rD  r  r  iscoder!  r   r#  from_code_objectr  r  r  r4  r5  r  torch.utils._python_dispatchr/  r  r\  r6  r  r  
empty_liker  r9  r  r  r  r
  r  r  r  r8  r9  r  r*  r?  r   r  r  r  r   r   NotImplementedr   r  rr  r  r   r  r  r  r  	serializerm  r&  Functionrs  r1  r0  rB  r  r  r  r5  r   r:  r  r  r  _COUNT_ITERATOR_TYPEr   r  r  r  r   r  r  _opsOpOverloadPacket_qualified_op_name
startswithr  
OpOverloadr  r	  _opname_overloadnamer   r  
isfunctionr+  r   r   r   r  modulesr  ismethodr   __self__r  r  r1  r>  r7  Workr  r  r  r  rS   PackageErrorr  r  
FSDPModuler   r  r  )r   r   r8  r   r/  r  attrsr  r  innerr
  r%  r  fr  r  method_self
inner_funcr  s                      r   reducer_overridez#GuardsStatePickler.reducer_override`  s
    	c77d'''99$tCyyl22># 	V<<<<<<::,/N~/Ns/S/S.UUUc77d)))000c5<(( Y	CSZ_-F-FRRRRRR#wwd444!777,,S11   
 3355
s! 5 5D#C..E!%66 B<A.r%yy9%%tUm4444DzzF$S888JIIH++C0099;;I   #YYF#u0;<< P'*z'=5<::. V3CTUUU
'',,55771   UX_-- n	C#wwd444!777++-- 5 5dU\58?$CDD d88t555D>> 04#BtHH--
 #ux0HII NDzz69I9I9K9K8MMMCyy%c);;;%%})UX_-IIIDzz2S5E5E5G5G4III J c"" V	C::5FFUX455 S	C::83<<>>:KKKUX0=>> P	C::=?QQQ OC  M	C3//M	C 233M	C
 3 233333'#*A)CCC OC  E	C3&&E	C Y''E	C  CL00::83<:UUUU\** =	CR#RRsxRRRSSSU344 :	C::5

}DD#YY...-c22JD$>))d..H.HDzz6tDDU]0:;; 2	C::1DII<??,
 
 /	C$//77/	C ::,s|o==UZ233 *	C::*!-   M$
22&+55 \))35566 	C---$$ 	CS---Dzz;LN$$O>   ~,,K/,22377 / /D4..AAC<<#%666c"" 
	C<D,K dm<<J
++ 1'0
:%%Dzz84:MMM & T#6#6#6":":"Fq"IJJKK 	C::,s/@.BBB5$&899 	<j"38?
 ?
 	< #wwd444!;;;c58-899 	A::3ch[@@99!T#YY%777
3PU@V@V7-#00ES		EEsEEETUTU   OC  	O)622	O 3 1 6 C NOO	O
 %+0=HHH #A!-AAAAA!(-:G[[]]^ ^ ^ ^ Dzz<}>NNNr   )r  r  r  r  r  r  r   r   r  r   r   r   )r  r   r   r  )r  r  r  r  r
  rD  r  r   r  r  r   r  )r  r  r  r  r
  rD  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   )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   rN  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+  rT  r   r   s   @r   r  r    s       - - - - - -    [
    [(    [& . . . [. ? ? ? [? B B B [B
 ) ) ) [)
 + + + [+ + + + [+ 
 
 
 [
    [ + + + [+ U U U [U , , , [, < < < \<       [  4 4 4 [4 > > > [>
 	O 	O 	O [	OI I I I I I I Ir   r  builderr   c           	     V   t                      }t          | j                  }|dk    rd}|}n$	 |                    |           }d}n#  |}d}Y nxY wt	          | j                  d u}t          ||||                                 | j        rt          | j                  nd||           S )Nrq  FTrU  )r  	has_valuer  
guard_typederived_guard_types	is_global
orig_guard)
r  strip_local_scoper  r  r+   r  r   create_fn_nameguard_typesrB  )rP  rU  MISSINGr  rW  r  rZ  s          r   make_guard_filter_entryr`  ,  s    hhGUZ((Drzz			
 KK&&EII	EIII&u'?@@LI''))9>9JRU5#4555PR   s   A Ar  r  c                   t          j                    }i }i }j        }t          j        | j        j                  }|D ]}t          j        |          rst          |d          rc|j
        }t          |          |vrJ	 t          |                              t          |                     ||t          |          <   #  Y xY wt          |          |vr||t          |          <   t          ||||          }	t          t           j                            fd| j        j        D                                 r$t)                      | j        _        i | j        _        	 |	                    |            nD# t0          $ r7}
t           j        j                            t9          |
                    |
d }
~
ww xY w|                                S )NrK  c                0    g | ]}t          |          S rU  r`  r  rP  rU  s     r   rX  z'pickle_guards_state.<locals>.<listcomp>d  s3        (w77  r   )ioBytesIOr  r  tree_leavesr  r  r  rJ  rs  rK  rv  rD  r  r  r  r4  compilerkeep_portable_guards_unsafer   r   r  r   dumpr  r  rS   rM  r   rt  )r  rU  bufr  r  r  leavesleafr  picklerr  s    `         r   pickle_guards_statero  I  s    *,,CLN1 2 >??F , ,D!! 	,gdJ&?&? 	,=D$xx000JJ&&tDzz222-1LD**D 1 XX... (,N2d88$ !2L.RUVVG
22   "/6  	
 	
  
- 14-*,'<U < < <m,,SVV44!;<<<>>s%   ?ACC&E< <
F=2F88F=c                  j    e Zd ZU 	 	 	 	 	 	 	 d0d1dZdZded<   d2dZ	 d3d4d$Zd5d&Zd6d)Z	d7d-Z
d8d/ZdS )9r  NFr  r   r  r   r   CacheEntry | Noner   "Callable[[GuardFail], None] | Noner  r  r  r  r  rd  r  r   strict_errorr   r   c
           	         |r|j         nd }
i  _        t          |          }| _         j        J | _        |r|j        nd  _        t                       _        t                       _        t                       _	        | _
        d  _        d  _        t          d          st                              d           t           j        j        j        r|pd d fd}t)          |
pd	t*          j        
          }t           j                                        5  |r                     ||||d          \  } |fd|D                       t5                    t5          |          k    sJ t7          d D                       sJ fdt9          |          D             }                     ||||||          \  }| _                             ||           d d d            n# 1 swxY w Y   j         j        _        t@          !                    d j                   j         j        _        d|j"        s|j#        s j        $                    |j%                  s@tM           j        |j%        tO          j(                    d           }tS          d|           tT          tU           j        |j%                   tW           j        j,        |j%        d          t@          !                    dd           t[          j.        dt_                               d  _0        |rddl1m2} tg           j        |          sJ 	  4                    | j                   _0        n# tj          j6        $ rt}t           j        j        j7        s|	r| j        8                    dts          |           tu          j;                    <                    d                     Y d }~nd }~ww xY wt           j=        >                    d fd            j        ?                                 d  _        d S )!Nr  z9guard_nn_modules is turned off using justknobs killswitchc                    d | D             S )Nc                    g | ]}d S )TrU  )r  gs     r   rX  zCCheckFunctionManager.__init__.<locals>.<lambda>.<locals>.<listcomp>  s    >P>P>Pt>P>P>Pr   rU  )gss    r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>  s    >P>PR>P>P>P r   r   Sequence[GuardFilterEntry]r   Sequence[bool]c                \   g }t           |           |           D ]\  }}|s|                    d           |j        dv sd|j        v s	d|j        v rAt                              d|j        |j        j                   |                    d           y|                    d           |S )NF)r  ru  r  r  r  r  z7%s guard on %s is dropped with caching_precompile=True.T)r  r  rX  rY  rm  rn  r[  r  )r   rh  keeprw  _guard_filter_fns       r   r  z6CheckFunctionManager.__init__.<locals>.guard_filter_fn  s    "#3#3F#;#;VDD ) )GD! )

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

5))))

4((((
r   rU  )r  Fc                0    g | ]}t          |          S rU  rc  rd  s     r   rX  z1CheckFunctionManager.__init__.<locals>.<listcomp>  s$    XXX,UG<<XXXr   c              3  B   K   | ]}t          |          t          u V  d S r   )rD  r   r  rv  s     r   r  z0CheckFunctionManager.__init__.<locals>.<genexpr>  s,      CCq477d?CCCCCCr   c                *    g | ]\  }}|         |S rU  rU  )r  r  rP  filter_resultss      r   rX  z1CheckFunctionManager.__init__.<locals>.<listcomp>  s8     ! ! !&anUVFW!! ! !r   )r  %sg        )backendziGuard failed on the same frame it was created. This is a bug - please create an issue.Guard fail reason: rP   zGuard eval latency = %s us.2fguard_latency_usr   r  zGuard evaluation failed: r  )	tracebackdynamo_cpp_guards_strc                      j          d ddS )Nz
Guard latency = r  z us)r[  )latencyr   s   r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>7  s    $"4XXXXXX r   
payload_fn)r   ry  r   rz  )@r   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesr  r  r  rL   ry  r  r  r  r  r  rE   rm  rn  r4  r  rQ   caching_precompiler   r:   sort_keyr  DisableTorchFunctionbuild_guardsr   r  r  r[  compile_check_fnr   rX  rY  skip_guards_checkr  rx  r  get_guard_fail_reason_helperr7   r  rE  r   r$   r   r5   increment_toplevelr   guards_stater   r   r  serialize_guardsrS   rM  strict_precompilebypass_packager   r  
format_excr  _loggingtrace_structuredclear)r   r  r  r   r   r  r  r  r  rs  r   existing_diff_guard_sourcessorted_guardsr[  reasonsr   r  r}  rU  r  r  s   `                @@@@r   r   zCheckFunctionManager.__init__{  s    )5>$$$;= B+NN 	$ 7C ,,, !1
 7CLL22 	& 3=,,;E<<'<FLL($8!MQMQ/BCC 	UKKSTTT =2 	.Q3P3P     4 v|@@@ X**,,  	I  	I  *.):):!/ * *& "1XXXX-XXX" " >**c-.@.@@@@@CCNCCCCCCCC! ! ! !*3M*B*B! ! !
 &*%6%6+ / &7 & &"G] "/D!!'=-HHHA 	I  	I  	I  	I  	I  	I  	I  	I  	I  	I  	I  	I  	I  	I  	IT .5-D*t1222-4-D* - %	Tl6I %	T%++L,DEE 
6& ,"577 	   %4*14 4  
 -8-&(@'   ,"')A1 G 9g;K;KLLL 12Dc'llSSS*. 	DDDDDDd/1BCCCCC
$($9$9]D,=% %!! #   ='9 \ G!008A88'244::4@@ 1         	''#XXXXX 	( 	
 	
 	
 	 s,   !C
G77G;>G;!M= =P A*O;;P )r  re  r  ri  rn  rs  ru  r  ztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPESrU  r  r  list[Guard]r  c                8    |D ]}|                                 }|j        rt          |j                  nd}|dv r,|j        r$|                    |          }t          |           c|t          j        v r't          j	        j
                            | d          t          d |D             d           x}r't          j	        j
                            | d          |j        pdt                      t                      dfd
}	|                                }
|D ]P}t!          |j        t$                    r$ j        sJ  j        j        D ]} |	|           @ |	|j                   Q|j        D ]} |	|           dd fd|
j                                        D             } fd|
j                                                 D             |<   t1          j        |
 fd|
j                                        D             |t          j                            t;          fd|D                                 t=          j        t@          |
j!                  d          }
tE          |
 j                  }tG          ||          S )NrU  )r  rz  z guard cannot be serialized.c              3  6   K   | ]}|t           j        v |V  d S r   )r  r  )r  r  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<genexpr>g  s=        0VVV VVVV r   rq  rb  r>   r   r   c                   t          |           x}r6t          |t                    sJ |k    r                    |           d S d S t	          |           x}r.t          |t                    sJ                     |           d S d S r   )r+   r  r   r   r,   )rb  r  builtins_dict_nameused_global_varsused_local_varss     r   prune_variablez=CheckFunctionManager.serialize_guards.<locals>.prune_variablew  s    -f555t 	*!$,,,,, ---$((..... .-.v666 *!$,,,,,##D)))))* *r   rv  Callable[..., None]c                   t          | t          j                  rcddt          fd| j        D                       }fd| j                                        D             }t          j        | j        g|R i |S | S )Nrv  r   r   c                \    t          | t          t          j        f          r
 |             S | S r   )r  rO   rT  r  r  s    r   _refzPCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>._ref  s+    !!mW[%ABB # qss
Hr   c              3  .   K   | ]} |          V  d S r   rU  )r  r  r  s     r   r  zUCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>.<genexpr>  s+       9 9Qa 9 9 9 9 9 9r   c                .    i | ]\  }}| |          S rU  rU  )r  kvr  s      r   
<dictcomp>zVCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>.<dictcomp>  s'    JJJtq!4477JJJr   )rv  r   r   r   )r  	functoolspartialrB  r   rz  r   r  )rv  new_argsnew_keywordsr  s      @r   normalize_create_fnzBCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn  s    !Y.// 	L   
 ! 9 9 9 9!& 9 9 999JJJJqz7G7G7I7IJJJ (K(KKKlKKKHr   c                6    i | ]\  }}|v s	|j         v ||S rU  )r  )r  r  r  r   r  s      r   r  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>  sB     
 
 
1$$$T-M(M(M q(M(M(Mr   c                .    i | ]\  }}|j         v ||S rU  )ry  )r  r  r  r   s      r   r  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>  s=     2
 2
 2
 1 D*** q
 +**r   c                6    i | ]\  }}|v s	|j         v ||S rU  )r  )r  r  r  r   r  s      r   r  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>  sA       Aq''10O+O+O 1+O+O+Or   c           	   3  d   K   | ]*}t          j        |d d  |j                            V  +d S )N)obj_weakrefguarded_class_weakrefry  )r  r  ry  )r  rP  r  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<genexpr>  sd           '$(.2"5"5eo"F"F	       r   T)r  r   _guardsrA  r  )r  r  )rb  r>   r   r   )rv  r  r   r  )$r]  r^  rB  r  r  r(  r  r  r4  r  rS   rM  next%name_of_builtins_dict_key_in_fglobalsr   dump_guards_stater  r  rw   r  r  r  r   r   r  r  r  r  	GuardsSetrL   r  tree_mapr   rA  r  ro  )r   rU  r  r  rP  rX  rY  r   failedr  output_graph_guards_staterb  global_scope_stater  r  r  r  r  s   `             @@@@r   r  z%CheckFunctionManager.serialize_guardsO  s    # 	 	E--//J>C>O"W%(9":":":UW <<<( 0!++e,,C*3///2XXXm'44!???     0  
     m'44;;;   *OUSU55%%
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* %1$B$B$D$D!" 	9 	9E%2NCC 9,,,,"3E + +F"N6****+ u78888"5 	# 	#FN6""""	 	 	 	
 
 
 
 
1>DDFF
 
 

2
 2
 2
 2
 2>"egg2
 2
 2
-. %0$7%    5AGGII  
 ,M++     "/    
 
 +1/.)G+ + #/%
 %
 %
!2 #2!2
 
 

 #<999r   r  r   r   (tuple[GuardBuilder, GuardManagerWrapper]c                   t                      }||_        d dfd}t          || j        || j        |j        |j        || || j        |          }	dd
}
t          j	        |	|
          t          j        ot          d          }|D ]U}|s<|                                r(d|j        vrd|j        vrt          j        s	d|j        vr@|                    |	           V|	|fS )Nrb  r>   r   r   c                    | j         }|t          j        u r| j        S sJ              }|J |                    | j                  S r   )guard_sourcer=   CONSTANTr  rp  )rb  r  	r_builder	w_builders      r   r  z5CheckFunctionManager.build_guards.<locals>.source_ref  sY    !.L{333{"9!	I((($$V[111r   )r  r  weak_bweakref.ref[GuardBuilder]r   c                0     |             }|r	d |_         d S d S r   )r  )r  r  s     r   cleanup_builderz:CheckFunctionManager.build_guards.<locals>.cleanup_builder  s*    A  r   r  r   r   r  )rb  r>   r   r   )r  r  r   r   )r   r   r  r  r  r  r   r  rT  r  rQ   r  rE   rF  r  r  rs  )r   r  r  r  r  r  r  r[  r  rU  r  guard_on_nn_modulesrP  r  s                @r   r  z!CheckFunctionManager.build_guards  sH    ,--+F(		2 	2 	2 	2 	2 	2 K $%!%!:+
 
 
	 	 	 	 K99	$5 
//;
 ;
 # 	" 	"E'	2244	
 #%*44$EJ665 79@
9R9RLL!!!!%%r   
guards_outc                4   j         }|dgz  }t                              d           g g g | j        j                            t          t          j                                         d | _	        	 d"d#fd}t                      }j        D ]7}|j        D ]-}||vr' |||j        d           |                    |           .8j        }	d }
d }t!          |	          dk    r1t#          j        |	dd                    |	          z   dz   gd            t(          j        rAj        r:t/          t0          t3          j                   \  }}                    ||           | j        r| j        j        ng }|D ]8}t;          |t<                    rf|j        }|j         }|j!         d|j!         }tE          #                    |          #                    |          |gd             ||d d           ~t;          |tH                    rfd|j%        D             }fd|j&        D             }dd                    d |j%        D                        dd                    d |j&        D                        d}tO          |||gd             ||d d           (tQ          d|           j)        D ]}|j        D ]} |||j        d           r$tT          j+        ,                    dfd           tZ          j.        t[          j/                    j0        }ntc          | j2        dd           }|
||| j3        dth          tk                      }| j        6                                 d j7        d          i}t!                    d!k    sJ || j        _8        || j        _9        | j        :                                 | j        _;        || j        _<        || j        _=        d | j        _>        d | j        _?        |	| j        _@        d S )$Nz**___kwargs_ignoredzGUARDS:Fr  r   rP  r  log_onlyr   r   r   c                V    t                     }t                              d|                                fd           t                              t          j                  rd}d}lj        r/dd	                    j        
                                           }j        r/dd	                    j        
                                           }t                              d ||           |s,                                                    |           d S d S )Nr  c                      r2j         r+t          j        j                                                   nd r j        rt          j        j                  nd dS )N)r   r  r  )r  rD   from_tracebackr  r  )r  rP  s   r   r  zNCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>.  sr    % !"%*["
1%+2E2E2G2GHHH! !"%*%5"
1%2BCCC!  r   rq  z
Stack:
z
User stack:
zGuard: %s%s%s)r  rX  rY  r  verbose_guards_logisEnabledForloggingDEBUGr  rV  formatr  )	r  rP  r  r  maybe_stackmaybe_user_stackr   structured_guard_fnsr   s	   ``    r   add_code_partz<CheckFunctionManager.compile_check_fn.<locals>.add_code_part'  s[    !6i G GT#4555 ''        "..w}==  #% ${ S&R2775;;M;M;O;O3P3P&R&R' Rbgge6F6M6M6O6O.P.PRR ) #((#$	    =!!),,,"))*;<<<<<= =r   TrP   zcheck_no_aliasing(r_  r`  r  c                :    g | ]}                     |          S rU  r*  r  rd  rU  s     r   rX  z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>  s7     . . . 99!<<. . .r   c                :    g | ]}                     |          S rU  r  r  s     r   rX  z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>  s7     2 2 2 99!<<2 2 2r   zcheck_overlapping(overlapping=[c              3  $   K   | ]}|j         V  d S r   r  r  rd  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s$      /Z/Z1/Z/Z/Z/Z/Z/Zr   z], non_overlapping=[c              3  $   K   | ]}|j         V  d S r   r  r  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s$      3b3bqAF3b3b3b3b3b3br   z])zUnknown GuardEnvExpr: dynamo_guardsc                     d  D             S )Nc                "    g | ]} |            S rU  rU  )r  rQ  s     r   rX  zKCheckFunctionManager.compile_check_fn.<locals>.<lambda>.<locals>.<listcomp>  s    4W4W4WQQQSS4W4W4Wr   rU  )r  s   r   r  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    4W4WBV4W4W4W r   r  rx  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr  r   r   )r  r   rP  r  r  r   r   r   )Ar  rX  rY  r[  r   attach_compile_idr   r7   r  r  r   r   rK  rP  r   r  r   r   r  rV  rQ   r  r  r  r  r  ra  r  aotautograd_guardsr  r9   input_source_ainput_source_br  r    r*  r?   overlapping_sourcesnon_overlapping_sourcesr!   r5  r  r4  r  r  rR   initial_global_stateGlobalStateGuardrx  r6  r  r  rJ   r  r  r  r   r   r  r   r   r   r   r   r   )r   rU  r  r   largsr  seengclr   r  check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsr  rP  source_ar  r  overlapping_guard_managersnon_overlapping_guard_managerscheck_global_stater   r`  r   r  r   s    `                      @@@r   r  z%CheckFunctionManager.compile_check_fn  sk     '((### 
CE 	1113344	
 	
 	

 *.& CH)	= )	= )	= )	= )	= )	= )	= )	= )	=V uu< 	# 	#C # #t## "M$	4888HHTNNN# $+#C #' '((1,, -9(%		2J(K(KKcQR	  " 6		3		 @Cc7>?@ @<!< 88#%@  
 594EMD002 	 ( "	E "	EE%11 !E / /'}AA(-AA	-99(CC99(CCK	   it4444E>22 E. . . ."6. . .*2 2 2 2":2 2 2.
i&*ii/Z/Z@Y/Z/Z/Z&Z&Zi i*.))3b3bEDa3b3b3b*b*bi i i 
 2.2K	   it4444"#CE#C#CDDD ) 	5 	5C 5 5 dCIt44445   	N++,W,W,W,W ,    -5!.!?!A!A!G!():GT!J!J 0(@%7262Y	
 

 
  !!
 	##%%% #W]3%78 :!####*6'"'<<>>>0B-*>'+8( *.&)-&8P555r   obj_strr   c                b   t          | d          rt          | j        t                    s| j        j        x}t| j        j        x}ht          |t                    sJ t          |t                    sJ d| d}t          |          }|                    ||           || _        d S d S d S d S d S )Nr[  zCache line invalidated because z got deallocated)	rs  r  r[  r  r   r   r   r   
invalidate)r   r  r   r   r  deleted_guard_managers         r   r  zCheckFunctionManager.invalidate  s    
 D/**	7t13MNN	7 !% 2 >>K $ 2 >>Kk:66666k:66666PwPPPF$>v$F$F!"";0EFFF!6D	7 	7 	7 	7 LKKKr   r   r  r   c                   	 t          |          | j        vrWt          j        |          | j        t          |          <   t          j        |t          j        | j        |                     n# t          $ r Y nw xY wt          |          S )zadd a weakref, return the id)r  )	rv  r  rT  r  r  r  r  r  r'  )r   r   r  s      r   r  zCheckFunctionManager.id_ref  s    
	#wwdn,, +2+c*:*:r#ww' *4?GLLL    	 	 	D	#wws   A-A0 0
A=<A=weakref.ref[object] | Nonec                f    t          |          | j        v r| j        t          |                   S dS )zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)rv  r  )r   r   s     r   r  z$CheckFunctionManager.lookup_weakrefs  s-    c77dn$$>"S''**tr   )NNNNNFF)r  r   r  r   r   rq  r   rr  r  r  r  r  r  rd  r  r   rs  r   r   r   )rU  r  r  r  r  r   r   r  r   )r  r  r  r   r  r   r  r   r  r   r  r  r   r  )rU  r  r  r  r   rr  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  rU  r   r   r  r  z  s         
 *.<@266:!"G! G! G! G! G!R	H) 	 	 	 	z: z: z: z:H A& A& A& A& A&FHQ HQ HQ HQT7 7 7 7&        r   r  closure_argstuple[str, str]c                  	 ddl m} t                      		 	                    |            d	fd}n# t          $ r dd}Y nw xY w |            }| D ]} ||          \  }}|                    |           |                    d	| d
           |                                5  |                    d           d d d            n# 1 swxY w Y    |            }|                    d           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y    |            }|                    d| d
           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y   |	                                |	                                fS )Nr   r@   rz  r   r   r  c                .                         |           S r   )r  )rz  csepasss    r   r  z%build_guard_function.<locals>.replace  s    ??4(((r   c                
    g | fS r   rU  )rz  s    r   r  z%build_guard_function.<locals>.replace  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   ra  r  RecursionErrorrn  r   rh  splicert  )
r   r  rA   r  
guard_bodyrz  ru  rP  make_guard_fnr  s
            @r   rW  rW    s   444444ooG
j!!!	) 	) 	) 	) 	) 	) 	)    	 	 	 	 	 	  !!J 1 1g&&&0000111   	1 	1  000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 NE	OOO$$$	 ' 'Z   &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' #N$$MDLDDDEEE					 0 0U###///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   -"8"8":":::sE   3 AA%CC	C	+D==EE?+F66F:=F:c                 T    t           j        j        j                            d          S )Nr   r4  r  	_internal	log_stateis_artifact_enabledrU  r   r   is_recompiles_enabledr  -  s    >#-AA,OOOr   c                 T    t           j        j        j                            d          S )Nr   r  rU  r   r   is_recompiles_verbose_enabledr  1  s    >#-AABVWWWr   initial_stack'list[torch.overrides.TorchFunctionMode]Callable[[], bool]c                ,    d | D             dfd}|S )Nc                ,    g | ]}t          |          S rU  r  r  s     r   rX  z8make_torch_function_mode_stack_guard.<locals>.<listcomp>9  s    ,,,T!WW,,,r   r   r   c                     t                      } t          |           t                    k    rdS t          |           D ]\  }}|t          |          ur dS dS rE  )r   r   r  rD  )	cur_stackr  moder:  s      r   check_torch_function_mode_stackzMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stack;  sk    133	y>>SZZ''5E9-- 	 	HBd##uu $ tr   r   r   rU  )r  r&  r:  s     @r   r  r  6  s>     -,m,,,E
 
 
 
 
 
 +*r   Scoper[  r  c                R   | j         J t          | j                   }t          j        t                    | j        D ]@}||d<   t          t          |||                    }|                             |           AfdD             }d	                    |          }d| gS )N__compile_source__c                T    g | ]$}t          |                   d k    |          %S )rP   r|  )r  r  ids_to_sources     r   rX  zErecompilation_reason_for_no_tensor_aliasing_guard.<locals>.<listcomp>X  s@       $'Cc@R<S<SVW<W<W=<W<W<Wr   r_  zDuplicate tensors found: )
r   r(  r  r  r  r   rv  evalr  rV  )r[  r  r   r/  	tensor_idduplicate_tensorsr  r,  s          @r   1recompilation_reason_for_no_tensor_aliasing_guardr0  M  s     %111233L+D11M&A 7 7-:)*tM<??@@	i ''6666   +8   YY())F00011r   rd  c                <    ddl }d}|                    |d|           S )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)rd  r2  patterns      r   r\  r\  `  s(     III+G66'5!$$$r   r  traceback.StackSummary | Nonec           	     F   | t          |           dk    rdS g }| D ]q}|j        }|j        }|j        }|j        r|j                                        nd}|                    d| d| d|            |r|                    d|            rd                    |          S )	z
    Format the user stack trace for display in guard failure messages.

    Returns a formatted string representation of the stack trace,
    or an empty string if no user stack is available.
    Nr   rq  z  File "z", line z, in     r  )r   r  r  r  r   stripr  rV  )r  linesframer  r  r  source_lines          r   format_user_stack_tracer<  m  s     S__11rE / />z,1J>ej&&(((BEEE&EEtEEFFF 	/LL---...99Ur   f_locals
compile_idCompileId | Noner  Callable | Nonec                ^   | j         J | j        J || j         d         d}|                    | j                   g }d}| j        r| j        j        }d}g }|                     |          }	d}
|	j        sG|	j        }t          |          dk    rd|d         v rd	}n|}g }|	j	        rt          |	j	                  }
n5||k    rd
}|                    |           nd}|                    |           |rt          | |          }n|D ]}t          | j                   }||d<   t                      5  	 t          |||          }n*# t           $ r t#                      rY ddd           b w xY w	 ddd           n# 1 swxY w Y   t%          |t&                    r|s|}t%          |t(                    r%|                    |           t#                      s nt          |          dk    r| d|d          }n| dd                    |          z   }|
r|d|
 z  }t-          |          S )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.
    Nr  r  Frq  rP   zDuplicate tensor foundr   Ta  BACKEND_MATCH failure: torch.compile detected different backend callables. If this is unexpected, wrap your backend in functools.partial (or reuse the same cached backend) to avoid creating a new backend function each time. More details: https://github.com/pytorch/pytorch/issues/168373zUnexpected recompilation: runtime guards failed even though they passed during recompilation-reason analysis. Please open an issue with a minimal repro: https://github.com/pytorch/pytorchr*  rT  z; z
User stack trace:
)r   r   r  r   r  r{  resultr   r   r  r<  r  r0  r(  rN   r-  r  r  r  r   r   rV  r\  )r[  r=  r>  r  r  r  cache_entry_backendno_tensor_aliasing_check_failedr   guard_debug_infouser_stack_strr  rV  r   fail_reason
reason_strs                   r   r  r    s8    %111%111!;C!@AAE	LL+,,,G  @+7?&+#$&$228<<N
 " $-@ !""a'''+=a+@@@26//,%'" & 	R45E5PQQN		'	'N 	 	v2 	 	v& C5
 
 ' 	 	D :;;L15L-./11  "&t\5"A"AKK    466         	                 +t,, #[ #"+s++ {+++466 E 7||q"22gaj22

"&&&7););;
 ?>n>>>
Z(((s6   0E;2EE;E+E;)E++E;;E?	E?	Fr8   r   skip_loggingc                   t          | t                    r| d| j         S t          | |||          }|r|S t          t
          |                                      |           	 | j        0|                     t          |pdt
          |                              n*# t          $ r t                              d           Y nw xY w|S )NrT  zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r  r  r  r  r   r   r  r   r   r  rm  r  )r[  r   r=  r>  r  rI  rH  s          r   get_guard_fail_reasonrK    s     -!;<< DCC ACCC-xW J  =&'..z:::
&2''*8(8-:MNN    
 
 
d	
 	
 	
 	
 	


 s   $7B $CCr   rq  r:  r   c                P  
 g 
| Ht          | j        | j        |j        | j        ||          }|r
                    |           | j        } | H|j        }|r
S t                      pt                      }|st          j        rt                      r-d                    d t          
          D                       }n(t          j        d                    
          d          }d| }d|j         d|j         d	|j         dt          j        |d
           }	|rCt                      rt&                              |	           nt*                              |	           t          j        rt-          j        |	          t0          j                            dd 
fd           
S )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.
    Nz

c              3  T   K   | ]#\  }}d | dt          j        |d          z   V  $dS )zguard z failures:
- N)r  rh  )r  r  r  s      r   r  z:get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>3  sV       # #Av )(((8?64+H+HH# # # # # #r   r  rN  z-triggered by the following guard failure(s):
zRecompiling function z in :r7  artifactc                     dddS )Nrecompile_reasonsr  )r  encodingrU  rU  r   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>J  s    '
 
 r   c                 >    t                     dk    r d         n S )NrP   r   r|  )r  s   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>N  s    W):):71:: r   )metadata_fnr  )rK  r[  r   r=  r>  r  r  r  r  r  rQ   error_on_recompilerV  r  r  rh  rS  co_filenameco_firstlinenorecompiles_verbose_logrY  recompiles_logrS   RecompileErrorr4  r  r  )r   r:  r  rI  r  r   do_recompiles_logfailuresguard_failure_detailsmessager  s             @r   'get_and_maybe_log_recompilation_reasonsr`    s    G

!&%N"
 
  	#NN6"""!& 
! <D -//R3P3R3R .F5 .(** 	A{{ # #!*7!3!3# # #  HH
  tyy'9'94@@HGXGG 	@DL @ @d6F @ @I\ @ @4f==@ @ 	  	.,.. .&,,W5555$$W---$ 	.$W---	N##
 
 HGGG $    Nr   r   c                    | }t                      }| 5|                    | j                                                   | j        } | 5|} | .|| j        _        | j                                         | j        } | .|S r   )rL   r  r[  r  r  r   r  )r   first_cache_entryacc_diff_guard_sourcess      r   r  r  T  s     $
 /9ll

!%%%@@BB	
 	
 	
 "&	 
! $K

!7M!4!==???!& 
! "!r   r   lastr   c                   t          d|j         d|j         d|j                    t          dd                    | j                  z   dz              t          dd                    | j                             t          |            d|i| j        }| j        D ]2}	 t          || j	        |           #  t          d|            Y 0xY wd S )	NzERROR RUNNING GUARDS  rO  zlambda r_  z and
  r  zMalformed guard:
)
printrS  rW  rX  rV  r   r   r   r-  r   )r[  r   r=  r   rd  r  rP  s          r   guard_error_hookrh  o  s     
WWWt/?WW$BUWW   
)dii 233
3c
9:::	#z}788999	-?M$>?K) 0 0	02K@@@@	0.u../////	0 0s   !B88CseqSequence[T]Generator[T, None, None]c              #  j   K   t                      }| D ]}||vr|V  |                    |            d S r   )r   r   )ri  r  rv  s      r   uniquerm    sJ      55D  D==GGGHHQKKK r   
obj_sourcer>   dupe_sourcefunctools.partial[Any] | Nonec                "   |r|| k    rt          |          }t          |           }t          |          st          |           r$t          j        | j         d|j         d          ||k    r t          j        t          j        |          S d S )Nz is aliasing zC. This is not supported. Please do a clone for corresponding input.)r  )	r/   r.   rS   UnsafeScriptObjectErrorr  r  r  r  r  )rn  ro  ser_source_is_localsource_is_locals       r   make_dupe_guardru    s      Y{j002;??.z::/
 
 	1*==	 -? ? ?1A ? ? ?   /11 $\%AKXXXX4r   )skiprv  c                   ddl m} |                                j        }|j        rdS t
                              t          j                  p#t                              t          j                  }|j
        j        }|D ]?}t          |t                    sJ t          |j                  r. |||| dz              @dS )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   )TracingContextNrP   )collect_debug_stackrv  )torch._guardsrx  r  guards_contextskip_installrX  r  r  r  r  r  r   r  r:   r1   r  )rv  r   rx  r{  ry  r   rP  s          r   install_guardr}    s     -,,,,,#''))8N" $11  8		(	(	7	7  
&
*C K K%'''''$U%=>> 	E':JJJJJ	K Kr   c                l    i | ]1}t          t          t          |          d d          xa	 )|t          2S )r  N)r6  r  r  )r  r  s     r   r  r    sQ     < < <7<668JDQQQ 	'  r   z"dict[str, GuardCheckSpec | object]GUARD_VALUE_DISPATCHc           	        g | ]}|d                                           r|                    d          st          t          t          |d          xa          rft          t          t          j	        t
                    j
                  xa          dk    r(t          d         dk    t          t
          d          |S )r   r  NrN  rP   rP  r  )isupperrD  r?  r6  r  _methodr   r  r  	signature
parameters_paramsrs  )r  r  s     r   rX  rX    s     	 	 	Qx	 S!!		
 	GL%>>>??	 	tG-g66ABBBGCCqHH
gG/00 	 
 	r   z9GuardBuilder methods missing guard_check_spec decorator: r_  z[. Use @register_guard_check_spec, @skip_guard_check_spec, or @unsupported_guard_check_spec.)r   r   r   r   r   r   )r  r   r   r  )r   r  )r   r  )r   r  r   r   )r  r   rP  r  r   r   r   )r   r  rP  r  r  r]  r   rQ  )rb  r  r   r]  )r  r   r   r  )r  r  r   r  )r  r  r  r   r  r  r	  r  r
  rD  r  r   r   r   )r  r  r  r   r   r   )rb  r   r   r   r   r   )r   r   r   r
   )r  r   r   r   )rb  r1  r2  r   r3  r   r4  r   r5  r6  r   r   )rP  r:   r   r   )r   r   r   rQ  )rc  r  r   rU  )rP  r   r  r   r   rU  )r  r   r]  rU  r   r   )rP  r   r  r   r   r   )r  r   r]  r   r   r   )r  r   r   r   )r   r  )rP  r:   rU  r  r   r   )r  r  rU  r  r   r  )r   rQ  r  r   r   r  r'  )r  r  r   r   )r[  r   r  r(  r   rQ  )rd  r   r   r   )r  r5  r   r   )
r[  r   r=  r  r>  r?  r  r@  r   r   r   )r[  r   r   r   r=  r  r>  r8   r  r   rI  r   r   r   )
r   rq  r:  r   r  r   rI  r   r   rQ  )r   rq  r   r   )r[  r   r   r   r=  r  r   r   rd  r   r   r   )ri  rj  r   rk  )rn  r>   ro  r  r   rp  )r   r:   rv  r   r   r   (8  r  
__future__r   r  r  r  r  rU  r  r  r  re  r  r  r  pickler  r  r  r:  r  rT  
contextlibr   r  r   r   typingr   r	   r
   r   typing_extensionsr   r   r   r   r4  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   rz  r7   r8   r9   r:   r;   r<   r=   r>   r?   r  rA   torch._library.opaque_objectrB   rC   torch._loggingrD   torch._utils_internalrE   %torch.fx.experimental.symbolic_shapesrF   rG   rH   rI   rJ   torch.utilsrK   r  torch.utils._ordered_setrL   torch.utils._tracebackrM   rN   torch.utils.weakrO   rq  rQ   rR   rS   
eval_framerT   rb  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   rD  r  r@  numpyr  ModuleNotFoundErrorr   r   r   r8  r   torch._Cr   r   r   r   r!  r   r   	getLoggerr   rm  r  getArtifactLoggerrX  rZ  rY  r  r@  r   r   r   r  cacher  r  r  r  r  r  rk  r  r  r  r   r  r  r  r  r(  r*  r  r-  rC  rH  rJ  rV  r6  r   rR  r  r  rY  r`  rd  rg  rl  rp  rr  rw  ry  r~  r  r  r  r  r  ra  r  r  r  r  r  r  Picklerr  r`  ro  r  rW  r  r  r  r(  r   r(  r0  r\  r<  r  rK  r`  r  rh  rm  ru  r}  dirr  MISSING_GUARD_SPECSr5  rV  rU  r   r   <module>r     s    " # " " " " " 



                    				        



         % % % % % %                   ; ; ; ; ; ; ; ; ; ; ; ; C C C C C C C C C C ! ! ! ! ! !          > > > > > >                                                       8                        H G G G G G G G
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1 0 0 0 0 0 R R R R R R R R % % % % % % 1 1 1 1 1 1              * ) ) ) ) ) / / / / / / O O O O O O O O * * * * * * ( ( ( ( ( ( ( ( ( ( , , , , , ,. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .^                                                        ,  )(((((( HL  K K K KtOIO--..    	BBB  5==========''''''TTTTTTTT444444GCLLg!!^--hAA
11(LII99"   ^55h@PQQ "    , , , , ,~ , , ,       DT T T T . . . . +/ . . . .   @/ / / / h&: % % % %6 "&    <   ,' ' ' 'K K K K   *3 3 3 31 1 1 1   . . . . d###       $#* * * *Z
G 
G 
G 
G        
    ty   
 8 8 8 8    Z   6 VXX
E E E E
- - - -; ; ; ;   
; ; ; ;
1 1 1 13 3 3 3   ! ! ! !? ? ? ?    X X X X X X X X$  P&
 P&
 P&
 P&
 P&
# P&
 P&
 P&
HMR8 R8 R8 R8 R8 R8 R8 R8j   $ $ $ $ $!4 $ $ $ $ $ $ $ $ $ $ $ , , , , , , , ,
         
 
 
 
h h h h h h h hV   :) ) ) )bD
 D
 D
 D
 D
 D
 D
 D
N); ); ); );XP P P PX X X X
+ + + +( 	gtCK0112 2 2 2&
% 
% 
% 
%   0h) h) h) h)d     H B B B B BJ" " " "60 0 0 0.  % & & &   ! ! ! !H /0 K K K K K K8< <L!!< < <     	 	\""	 	 	   
,	E99())	E 	E 	E   s   H H%$H%