
    9i                   	   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mZ ddlmZ ddl
mZ ddlmZmZmZmZmZ 	 ddlm Z  n# e!$ r	 ddl"m Z  Y nw xY wdd	l"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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP ddlQmRZRmSZS ddlTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z] ddl^m_Z_ ddl`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lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ erddlmZ dZd ed!<   	 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  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ZddTZdd]ZddaZdddZddgZddiZ ej        djk           G dl dm                      ZddvZddxZej         G dy dz                      Z G d{ dtej                  Zej        dd|            Z G d} d~eY          Z G d d          ZddZ  G d de          Zej         G d d                      Zej         G d d                      Z G d d          Zej        dd            Z G d dej                  ZddZ G d d          Z	ddZ
ddZddZddZ e#deeef                   ZddZddZddZ	 dddZ	 dddZddZddZ e{e           ddZddZddÜddńZ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NoReturnOptionalTYPE_CHECKINGUnion)LiteralString)TypeAliasTypeTypeVar)ReferenceType)code_framelocals_names)check_obj_idcheck_type_idClosureGuardAccessorCodeGuardAccessordict_versionDictGetItemGuardAccessorDictGuardManagerFuncDefaultsGuardAccessorFuncKwDefaultsGuardAccessorGetAttrGuardAccessorGetGenericDictGuardAccessorGuardAccessorGuardDebugInfoGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardinstall_symbolic_shape_guard	LeafGuardprofile_guard_managerRelationalGuardRootGuardManagerTupleGetItemGuardAccessorTypeDictGuardAccessorTypeGuardAccessorTypeMROGuardAccessor)
get_global_source_nameget_local_source_nameIndexedSource$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceis_from_skip_guard_source.is_from_unspecialized_builtin_nn_module_sourceTensorPropertyTensorPropertySource)CompileEventLoggerget_metrics_context)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlapIndentedBuffer)is_opaque_value_type)
structured)justknobs_check)_CppShapeGuardsHelper_ShapeGuardsHelperEqualityConstraintis_symbolicSYMPY_INTERP)_pytree)
OrderedSet)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexc)set_guard_error_hook)-AttrProxySource
AttrSourceCallFunctionNoArgsSourceCallMethodItemSourceChainedSourceClosureSource
CodeSourceCollectionsSourceConstantSourceConstDictKeySourceCurrentStreamSourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceDynamicScalarSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceListGetItemSourceLocalSourceNamedTupleFieldsSourceNNModuleSourceNonSerializableSetGetItemSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTorchSourceTupleIteratorGetItemSourceTypeDictSourceTypeMROSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntryDynamoFrameType
ExtraStateGuardedCode	GuardFailGuardFilterEntryGuardFn)builtin_dict_keyscommon_constant_typesdataclass_fields	dict_keysget_current_streamget_custom_getattrget_torch_function_mode_stack get_torch_function_mode_stack_atguard_failuresistype	key_is_id	key_to_idnormalize_range_iterorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenunpatched_nn_module_getattrverify_guard_fn_signature)Callablez(Optional[Callable[[Any, Any, Any], Any]]guard_manager_testing_hook_fn)	GeneratorKeysViewSequence)Symbol)DispatchKeySet)OutputGraphCommonOutputGraphGuardsStateTguards
recompilesrecompiles_verboseverbose_guards)__defaults____kwdefaults____code____closure____annotations____func____mro__codetypes.CodeTypevar_namestrreturnintc                t    t          |           }t          |          |                    |          z
  dz
  }|S NrO   )&code_framelocals_names_reversed_cachedlenindex)r   r   framelocals_names_reversedframelocals_idxs       G/var/www/icac/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Optional[RootGuardManager]r   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_guardsrK   diff_guard_sources)r   r   s     r   __init__zGuardManagerWrapper.__init__  s    <(**DIIDI;?6:)-	%'7;6:DH1515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_managerN  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>.visit\  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_sources6  s    	& 	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	& 	&	' 	' 	' 	' 	' 	' 	' 	di&&r   c                    t           j        r#t          d          r|                                  |                                  d S )Nz3pytorch/compiler:use_recursive_dict_tags_for_guards)rP   "use_recursive_dict_tags_for_guardsrD   find_tag_safe_rootsprepare_diff_guard_managerr   s    r   finalizezGuardManagerWrapper.finalizeg  sM    4 	'A:
 :
 	' $$&&&'')))))r   c                V    |                                   |                                  d S r   )r  populate_diff_guard_managerr   s    r   r  z.GuardManagerWrapper.prepare_diff_guard_managern  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classmethodrP   )assume_dunder_attributes_remain_unchangedr   r   r   r   r   r/  dunder_attrs_assumed_constantsCellTypetupler   endswithr'   typer(   r*   )	r   r)  r  r  r  r*  r  r  r   s	          r   r  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$  r1  r5  r6  mark_tag_safe_root)r   r)  r   r  r   r   r  s      @@@@r   r  z'GuardManagerWrapper.find_tag_safe_rootsr  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_managerL  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   )rI  rG  s    r   	filter_fnz@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fn\  s    &&((N::r   )rI  r   r   r   )r   clone_manager)r   rG  rK  s    ` r   rE  z-GuardManagerWrapper.clone_with_chosen_sourcesY  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>d  s#    <<<dd"T)<<<r   )r   r   r   )r   rM  partsrT  s      @r   get_guard_linesz#GuardManagerWrapper.get_guard_linesa  s<    _-
((**<<<<e<<<r   guard_managerr   accessor_strOptional[str]r   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   rX  rY  sourcetss         r   get_manager_linez$GuardManagerWrapper.get_manager_lineg  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   indentrb  construct_manager_string)r   r  rc  idxr   r   s         r   construct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_strings  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=)re  get_leaf_guardsr  r%   r   r   
writelinesrW  r   r   r   rh  r  r  r  r   rb  reprrf  )r   r  rc  rM  r  r  s         r   rf  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 )NrO    T)r   zTREE_GUARD_MANAGER:r&   get_epilogue_lambda_guards)r   r   r   r   rf  r   hasattrro  rk  rW  getvalue)r   rc  rM  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   rs  s     r   ru  zGuardManagerWrapper.check  s    yq!!!r   r   c                6    | j                             |          S r   )r   check_verboserv  s     r   rx  z!GuardManagerWrapper.check_verbose  s    y&&q)))r   c                d     t                      d
dd fd	  j                   d S )N
leaf_guardr#   r   rN  c                    g }|                                  D ]D}|                    d          d                                         }|                    |           E|S )N#r   )r   splitrstripappend)rz  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   )rj  r  r%   r   r&  r   r  )r  rM  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   )rz  r#   r   rN  )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   )rG  r   r   r&   )rM  r#   r   rN  )rX  r   rY  rZ  r   r   )r  r   rc  r   r   r   )r  r   rc  r   r   r   r   rs  r   r   r   )rs  r   r   r   )r   r   r   __doc__r   r   r   r  r  r  r  r  rE  rW  rb  rh  rf  rr  ru  rx  r  rR  r   r   r   r     s        @ @ @ @ @, 3 3 3 ^3/' /' /' /'b* * * *+ + + +X* X* X* X*t> > > >2 2 2 2    JN
 
 
 
 
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   )r1  	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 rR  )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&  )r1  modsr  s      r   uninteresting_filesr    si    ''''""""M(%-*ABDAAAAAA 	KK"###------r   Optional[dict[str, object]]_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d dt          dt          dt          j        dt           d nt           j        dt#          d          dt$          j        t(          j        j        t(          j        t0          t(          j        t(          t4          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_range_iter___tuple_iterator_getitem___dataclass_fields___namedtuple_fieldsc                    | j         S r   _fieldsrs  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_tensorr1  r  )r  r   r   collectionsOrderedDict__getitem__r   r   r   r   r   r   r   r   mathisnanr  float	importlibimport_moduler1  utils_devicer  r  _as_tensor_fullprecr  rR  r   r   _get_closure_varsr    s5   

|
  7 C
 I	

 |
  D D
 $%7
 &';
 ()?
 "#3
 #$7$7
 23S
 $%7
 DJ
 RZTTRX
  5<<!
" Y4#
$ "K/l'!5/
 
 
2 r   r   ast.ASTc                R    t          j        |                               dd          S )N
rn  )astunparsereplace)r   s    r   _ast_unparser    s"    ;t$$T2...r   r  rM  Optional[Guard]c                   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 )
Nrn  z  # T)r   i   r   z  # <unknown>z<60)
user_stackreversedfilenamer  rL   r   stacksummary)r  rM  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   Union[str, list[str]]recompile_hintrZ  rN  c                v    t          | t                    s| g} fd| D             }rfd|D             }|S )Nc                0    g | ]}t          |          S rR  )r  )r  r  rM  s     r   rU  z*get_verbose_code_parts.<locals>.<listcomp>4  s1       4=i//  r   c                     g | ]
}| d  dS z (HINT: r]  rR  r  rS  r  s     r   rU  z*get_verbose_code_parts.<locals>.<listcomp>8  s7     
 
 
37t..^...
 
 
r   )r  list)r   rM  r  r   s    `` r   get_verbose_code_partsr  ,  s    
 j$'' " \
   AK    

 
 
 
;M
 
 
 r   dimOptional[int]c                    | d S t          |           s| S t          | t          j                  sJ | j                                        S r   )rH   r  r1  SymIntr   maybe_as_int)r  s    r   convert_int_to_concrete_valuesr  ?  sM    
{ts '
#u|,,,,,x$$&&&r   size_or_stride	list[Any]list[Optional[int]]c                    d | D             S )Nc                ,    g | ]}t          |          S rR  )r  )r  r  s     r   rU  z.convert_to_concrete_values.<locals>.<listcomp>J  s!    JJJC*3//JJJr   rR  )r  s    r   convert_to_concrete_valuesr  I  s    JJ>JJJJr   valuenamesizesstridespytyperA  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]  )	r1  _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  M  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  b  s)    
 !#&&''--c222r   r_  r   c                    d|  d| dS )Nlist(dict.keys())[]rR  )r_  r   s     r   get_key_index_sourcer  j  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).)	TypeErrorrA  )r  s    r   raise_local_type_errorr  n  sB    
=S		==s===
L	M
L	M  r   r   c                    t          | t          j        j                  o!t          j        pt          |           t          u S r   )r  r1  r5  r6  rP   inline_inbuilt_nn_modulesr   r   )r  s    r   $should_optimize_getattr_on_nn_moduler  v  s<     eUX_-- ( 	De$$(CC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_dictNrZ  l1_keyl2_key)r   r   r   r   r   r!  r"  rR  r   r   r  r    sL          %*)))) !F     !F      r   r  3Union[DictGetItemSource, DictSubclassGetItemSource]base_guard_managerr   base_example_valueexample_valueguard_manager_enumGuardManagerTyper   c                r   | 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                    sG|                    ||| j        t          j                                      | j        | d|g           |                    ||	||          S )N[r  r   r_  r&  r'   == )baser  r  r   r]   r%  r  r  r  r   r   r   get_key_managerr(  GUARD_MANAGERadd_equals_match_guardget_value_manager)
r_  r$  r%  r&  r'  base_source_namer   
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerr6    sj    {'&, 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D
 
 
 //#-	 0   r   r:   c                    | j         }t          |t                    rdS |                                 rdS |                                ot          |t
                     S NFT)originating_sourcer  rr   is_specialized_nn_moduleis_dict_keyrl   )rM  r_  s     r   match_on_id_for_tensorr<    sa    %F &+,, u%%'' tF
6:(F(F$FFr   c                  $    e Zd ZU ded<   ded<   dS )GuardCodeListrN  	code_listr:   rM  Nr   r   r   r   rR  r   r   r>  r>    s%         LLLLLr   r>  c                      e Zd ZdZdZdS )r(  rO      N)r   r   r   r/  DICT_GUARD_MANAGERrR  r   r   r(  r(    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	 	 	 d|d}dZd~dZdd!Zedd$            Zdd/Zdd1Z	dd3Z
dd5Zdd6Zdd7Zdd8Z	 	 ddd?Z	 dddBZddDZddHZddIZ	 dddKZddLZddMZddPZddQZddRZddSZdddVZ	 dddWZdddXZddYZddZZdd[Z dd\Z!dd]Z"dd^Z#ddd_Z$dd`Z%ddaZ&ddbZ'ddcZ(dddZ)ddeZ*ddfZ+ddgZ,ddhZ-ddiZ.ddkZ/ddlZ0ddmZ1ddnZ2ddoZ3ddpZ4ddqZ5ddrZ6ddsZ7ddtZ8dduZ9ddvZ:dddwZ;	 	 ddd{Z<dS )GuardBuilderFNf_coder   id_refCallable[[object, str], int]
source_refCallable[[Source], str]lookup_weakrefs1Callable[[object], Optional[weakref.ref[object]]]local_scoper  r   rX  r   check_fn_managerCheckFunctionManagersave_guardsr   runtime_global_scoper  source_get_cacheOptional[dict[str, Any]]r   r   c                @   || _         || _        || _        || _        ||d| _        t          j                    | _        |
p|| _        |pi | _	        t          j                                        | j        d<   t          j        j        j                                        D ]]\  }}|                    dd                              dd                              dd          }|| j        d         |<   || j        |<   ^|| _        g | _        g | _        g | _        g | _        g | _        || _        i | _        |	| _        t9                      | _        | j        j        J | j        j        j        D ]T}|                      |          }| j        r|| j	        |j!        <   | j        "                    tG          |                     Ui | _$        i | _%        t9                      | _&        g | _'        tP          j)        otU          d          | _)        tW                      | _,        d S )	NLG__builtins__>_<._dot_!pytorch/compiler:guard_nn_modules)-rG  rH  rJ  rL  scopeweakrefWeakKeyDictionarysrc_get_value_cacherR  rS  builtins__dict__copyr1  packagepackage_importer_package_imported_modulesr   r  rX  argnamesr   shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managersrO  guard_tree_valuesrQ  r   key_order_guarded_dict_idsoutput_graphguard_on_key_ordergetr  r   idr   _cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codesrP   guard_nn_modulesrD   rK   already_added_code_parts)r   rG  rH  rJ  rL  rN  r   rX  rO  rQ  rR  rS  r  package_moduler_  dict_objs                   r   r   zGuardBuilder.__init__  s)    $.9D<3X3X
%'' 	  %9$HL! 0 6B%-%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 >5=%fk2+//8====
 BD @B#DGEE+BD( & 7 !
O/=
 =
 :D%%%r   r&  r  rM  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   r*  r  r	  r_  r&  r'  )
get_guard_managerr  r   NotImplementedErrorr  r9  r   ra   get_guard_manager_typedict_getitem_manager)	r   r&  rM  dict_mgrdict_sourcer	  r  r5  r'  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                ^   |                      |          }t          |t                    st          d|j                   t          |t                    sJ t          t          |                    D ]\  }}t          |j        |          }|                    |||t          j
                  }t          |          rB|                     ||          }|                    |t          d| d| d|                     |                    |t          | d||                     d S )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r+  z__check_obj_id(r\  r]  r,  )r}  r  r   r~  r  	enumerater   r  r.  r(  r/  r   rH  add_id_match_guardr  r0  )	r   r  rM  r  rg  r	  r3  key_managerid_vals	            r   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_orderK  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/:0J0J30J0JERR   '	 	r   r   Optional[Any]c                    t           j        r<t          j        dk    r,t          j        dk     rt	          j        dt                     d S | S )N)      )r  r  rO   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)rP   issue_3_13_0_warningsysversion_infowarningswarnRuntimeWarning)r&  s    r   '_get_generic_dict_manager_example_valuez4GuardBuilder._get_generic_dict_manager_example_valueq  sR     '		 G++ :--M_   4r   r_  rU   r$  r   r%  r2  r   source_namer'  r(  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   r%  r&  r'  r(  r   c                <   t          | t                    rot          ||          }d| d|d}|                     |||t          j                                      || d|g           |                     ||||          S |                     ||||          S )Nr  r  r  r+  r,  r|  )	r  r   r  r.  r(  r/  r0  r1  r  )r  r	  r  r%  r&  r'  r   r3  s           r   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr  s     #/00  &&8#>> J{IIuIII
##%"%'7'E	 $  
 )(*/I/I#/I/I.JKKK ,,&"/'9	 -    //&"/'9	 0   r   FNT_parameters_buffers_modulesattrr_  r&  r'  	.__dict__r_  r&  r'  )r  r	  r  r%  r&  r'  )r  r   r	  r   r  r   r%  r   r&  r   r'  r(  r   r   )memberre  r   r  getmror   updatekeysr  r   getattr_managerr!  r"  rU   r-  r  r  get_generic_dict_managerr  r(  r/  )r   r_  r$  r%  r&  r2  r  r'  r  	attr_namemod_dictall_class_attribute_namesrs  accessor_infor!  r"  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_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  	%16K6W6W6W** .'/"*'<    Mr   r>   c                v    |j         }|dk    rdS t          |                     |                    }|| j        v S )Nrn  F)r  rs  rr  ro  )r   r_  r  obj_ids       r   requires_key_order_guardingz(GuardBuilder.requires_key_order_guarding  s@    k"5DHHV$$%%888r   HOptional[Union[KeysView[Any], set[Any], frozenset[Any], dict[Any, Any]]]c                $   t           j        }|                     |          rnt          |t                    rt           j        }nLt          |t          t          f          rt           j        }n#t          |t                    sJ t           j        }|S r   )	r(  r/  r  r  r   rC  r   	frozensetr%  )r   r_  r&  r'  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   )r(  rC  )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 )NrX  )	f_globalsr_  r&  r'  )rX  r   globals_dict_managerrR  r`  r(  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        |||          }
nSt          t0                    r2|                                                     j        |||          }
nt          t4                    r|S t          t6                    r|S t          t8                    r|sJ |                    |||          }	nt          t<                    r|sJ |                    |||          }	nxt          t@                    r|sJ |!                    |||          }	nEt          tD          tF          tH          tJ          tL          f          r|sJ |}	nt          tN                    r|(                    d |||          }nt          tR                    r|(                    d |||          }nt          tT                    r|(                    fd|||          }nzt          tV                    r|(                    fd	|||          }nGt          tX                    r|sJ |-                    |||          }nt          t\                    r$|sJ |/                    j0        |||
          }nt          tb          td          f          rk|sJ t          tb                    sJ tg          |          r!|sJ | 4                    ||||||          }nt|5                    j0        |||
          }nTt          tl          tn          f          r|sJ t          |tp          tr          j:        f          sJ t          tl          tn          f          sJ t          |tv                    r,| <                    |	          sJ t{          ||||          }nt          j>        t~                    rt          d          |                    j>        |||          }nit          t                    rD t          |djC        j        D                                 d          jE        |||          }nt          t                    r$|sJ |G                    jE        |||          }nt          t                    r$|sJ |I                    j>        |||          }nt          t                    r|sJ t          |tp          tr          j:        f          r
J d            t          |t                    r'jL        s |I                    j>        |||          }nt          |t                    r'jL        s |N                    j>        |||          }nj>        }jL        rO                                }|P                    ||||          }nt          t                    r|sJ |sJ t          |          sJ jS        sE|T                    ||jU        t          j	                  P                    jV        |||          }n+|jW        }|J |dz   }|X                    ||t          j	                  }t          |tv                    rJ |                    jV        |||          }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 |b                    j>        |||          }nt          t~                    rDt          |tv                    st          d          |d                    j>        |||          }nt          t                    r$|sJ |f                    j>        |||          }nt          t                    r|sJ |h                    |||          }nMt          t                    r|sJ |j                    |||          }nt          t                    r|sJ |(                    d |||          }nt          t                    r|sJ |(                    d |||          }nt          t                    r|sJ |n                    |||          }nt          t                    r|sJ |p                    |||          }nNt          t                    r|sJ |(                    d |||          }nt          d dj                   || j        j        <   |S )Nrn  r|  )global_namer_  r&  r'  r  c                    t           S r   )r1  r[  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s     r   )python_lambdar_  r&  r'  c                    t           S r   )r  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s     r   c                F    t                                                    S r   )r   
_get_indexr[  r_  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s!    (H%%'') ) r   c                ,    t          j                  S r   )r   r  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  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)rg  r_  r&  r'  zUse DictGetItemSourcez.__kwdefaults__c                6    |                                  d         S r   __tensor_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>d  s    (<(<(>(>q(A r   c                *    |                                  S r   )__obj_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>l  s    (9(9(;(; r   c                N    |                                                                  S r   )_typequalified_namer  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>t  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   )r1  r  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (A!(D(D r   r+  z4ConstDictKeySource can only work on DictGuardManagerc                     t          |           S r   )r   r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (8(;(; r   c                    | j         S r   r  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  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 - )rrX  r   r  rt  rr  rn  rs  r  r(  r/  r  rX   r-  get_guard_manager_from_sourcer   rn   r   rG  
local_nameframelocals_managerri   r  r  r  rk   global_weakref_managerrj   ru   r|   type_managerrz   type_dict_managerr{   type_mro_managerrs   rp   r~   r}   rf   rx   lambda_managerr[   rw   r^   rl   grad_managerrg   generic_getattr_managerr  rU   r   r  r  r  ra   rb   r%  r  r  r   r  r6  r   r]   RuntimeErrorr4   getattrproplowerrg  r-   indexed_managerrm   list_getitem_managerrh   r  index_is_slicer?  tuple_getitem_managerunpack_slicegetitem_managerr`   callableis_kwfunc_defaults_managerr   idx_keyr   func_kwdefaults_managerrr   r  rv   rd   rt   rT   rW   re   ry   tuple_iterator_getitem_managerAssertionErrorr.  rq   set_getitem_managerr   weakref_call_managerrV   call_function_no_args_managerr_   ro   rZ   code_managerrY   closure_managerrc   )r   r_  root_guard_managerr&  r  r'  r2  r%  r$  base_guard_manager_enumr   outr   
kwdefaults	kw_sourcer  s    `              r   r  z*GuardBuilder.get_guard_manager_from_sourceF  sg   !/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)) x	 //11FF&"+#5	 G  CC F/00 n	//11HH"."+#5	 I  CC F-.. g	 &%FN++ c	%%FJ'' a	%%%%$11"+#5 2  CC
 FN++ Z	%%%%$66"+#5 7  CC
 FM** S	%%%%$55"+#5 6  CC
 +2"	
 	
 L	 &%%%$CCFK(( @	$33-o"+#5	 4  CC F-.. y	$3333"+#5	 4  CC F899 r	$33    #+#5 4  CC F/00 i	$33IIII"+#5	 4  CC FJ'' b	%%%%$11"+#5 2  CC
 F-.. [	%%%%$<<]"+#5	 =  CC FZ)GHII S	%%%%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  r9  r   rM  s     r   r}  zGuardBuilder.get_guard_manager  s    11%2JKKKr   Tr   rN  r   r   is_epiloguec                   |t                      }d                    |                                          }t          ||          \  }}i }d| j        d         i}	t
                              d|           t          ||	|            |d         |                                 }
|r"| j	        j
                            |
|           d S | j	        j
                            |
|           d S )Nr\  rX  zPython shape guard function:
%s___make_guard_fn)r  joinr  build_guard_functionr`  
guards_logdebugexecr'  rX  r   add_epilogue_lambda_guardadd_lambda_guard)r   r   r   r   r  make_guard_fn_args_guard_bodypycoder   globals_for_guard_fnguard_fns              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 	S #==,     #44X?QRRRRRr   guard_or_sourceGuard | Sourcec                   |j         }t          |t                    r|}n|j        }| j        r|| j        v r| j        |         S |t                      }|                    | j        || j                  }| j	        rd|v r
|| j        |<   |S )Nz.__closure__)
r  r  r>   r9  rS  r  	get_valuer`  rc  rQ  )r   r  r   r  srcrets         r   rr  zGuardBuilder.get  s    
 #ov.. 	5!CC!4C  	3t,,,,T22,..LmmDJd6NOO 	.$ 6 6*-D!$'
r   Union[str, Guard]c                6   t          |t                    r|}n|j        }t          |          }|| j        vrat
          j        j                            |          }|r;|dk    rt          
                    d|           | j                            |           |S )NrB  zinvalid var name: %s)r  r   r  strip_function_callrj  r1  r  r  is_valid_var_namelogwarningr  )r   rM  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  r  (Callable[[GuardBuilderBase, Guard], Any]c                    |dk    rt          |j                  }nt          |j        |          }t          |||j        |j                  }|                    |            d S )Nr   )r  r  )rZ   r9  rU   r:   r  r  create)r   rM  r  r  attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attribute7  sq     
""$U%=>>KK$U%=yIIKAQ
 
 
	 	r   c           	        |j         }t          |t                    r|j        }t          |t                    rd S t          |t
                    sJ d|j                     |j        }|j        }|j        }|                     |          }t          | 
                    |          |          }d }|r
d| d|d}n	d| d|d}|| j        v rd S |                     ||g| 
                    |                     |                     |          }	|r| 
                    |          }
| 
                    |          }|                     ||
          }t          |          r!|                     ||	||
||j        |           nC|	                    ||j        |
|           n$|	                    |t'          ||                     | j                            |           d S )Nzinvalid source hasattr(r\  r]  znot hasattr()provided_guarded_objectr  )r9  r  rp   r-  rZ   rU   r  r  r"  rp  rr  rx  _set_guard_export_infor  r  r  r  r  add_no_hasattr_guardr  r   )r   rM  r_  base_sourcer-  r  refvalr   base_managerr&  r%  r'  s                r   HASATTRzGuardBuilder.HASATTRH  s<   )fn-- 	![Ffj)) 	F&*--MM/M/M/MMMMk}ll4  dhh{++T22 	3.c..T...DD2#22222D4000F##D6488K3H3H 	$ 	
 	
 	
 99+FF 	Y !HHV,,M!%+!6!6!%!<!<V]!S!S 44FGG )) &!K&    ,, :"/'9	 -     --d4J4QV4W4WXXX%))$/////r   r  c                   |J |                      |          }|                     |          }|                     |          }d|d| d}|| j        v rd S |j         d}|                    ||                     |j                  t          j	                  }|
                    d|t          ||                     | j                            |           d S )Nznot ___dict_contains(r\  z
.__dict__)r  r  F)r"  rr  r}  rx  r  r  r  re  r(  r/  add_dict_contains_guardr  r   )	r   rM  r  r/  r0  r1  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/e<<	
 	
 	
 	%))$/////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 S )NTtype(r]  z___check_type_id(r\  ), type=)rr  r  r1  _subclasses
FakeTensorr  rA  r   r   _unserializablerH  r  rl  r"  r,  r}  add_type_match_guardr  )r   rM  r  r`  r  	type_reprr   s          r   
TYPE_MATCHzGuardBuilder.TYPE_MATCH  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%%::*477	
 	
 	
 	
 	
r   c                J   |                      |          }|                     |          }t          |                     |                    }d| d| }|                     ||g           |                     |                              |t          ||                     d S )Nz___dict_version() == )r"  rr  r   r,  r}  add_dict_version_guardr  )r   rM  r/  r0  versionr   s         r   DICT_VERSIONzGuardBuilder.DICT_VERSION  s    ll5!!hhuootxx//5#55G55##ED6222 	u%%<<'e44	
 	
 	
 	
 	
r   r	  invertc                <   |                      |          }|rdnd}| d|d| d}|| j        v rd S |                     ||g           |                     |                              | |t          ||                     | j                            |           d S )Nnot rn  z___dict_contains(r\  r]  )r"  rx  r,  r}  r4  r  r   )r   rM  r	  rD  dict_ref	maybe_notr   s          r   DICT_CONTAINSzGuardBuilder.DICT_CONTAINS  s    <<&&$,FF"	BBcBBxBBB4000F##ED6222u%%==J3D%@@	
 	
 	
 	%))$/////r   c                4   |                      |          }|}| }d| d|d}|| j        v rd S |                     ||g           |                     |                              ||t          ||                     | j                            |           d S )Nzset.__contains__(r\  r]  )r"  rx  r,  r}  add_set_contains_guardr  r   )r   rM  r	  rD  set_refr  containsr   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%%<<d24??	
 	
 	
 	%))$/////r   c                   |                      |          }|                     |          }t          |t                    sJ | d|g}|                     ||           |r8|                     |                              t          ||                     d S |                     |                              t          ||                     d S )Nr,  )	r"  rr  r   r   r,  r}  add_true_match_guardr  add_false_match_guardr   rM  r/  r0  r   s        r   
BOOL_MATCHzGuardBuilder.BOOL_MATCH  s    ll5!!hhuooc4     ##C##$##E4000 	""5))>>&tU33     ""5))??&tU33    r   c                   |                      |          }|                     |          }|J | dg}|                     ||           |                     |                              t          ||                     d S )Nz is None)r"  rr  r,  r}  add_none_match_guardr  rR  s        r   
NONE_MATCHzGuardBuilder.NONE_MATCH  s    ll5!!hhuoo{{{   !##E4000u%%::"4//	
 	
 	
 	
 	
r   r  rZ  c                .    |                      ||          S r   )id_match_unchecked)r   rM  r  s      r   ID_MATCHzGuardBuilder.ID_MATCH  s     &&un===r   c                4   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%          |||                     t          |j        t&                    rNt          |t(          j        j                  r1|j        j        }|                     |          }	|	|	| j        |<   d S d S d S d S )Nr\  rZ  z___check_obj_id(r\  r8  rY  )provided_func_name)r  r9  r|   r>  r:   r-  rF  r"  rr  rH  r  rl  	ExceptionrA  r   r,  r}  r  r  rn   r1  r5  r6  r  rL  r   )
r   rM  r  r/  r0  r  r=  r   r  weak_ids
             r   rX  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GG	
 	
 	
 e.<< 	? #ux// ?"5@
..s33&7>D(444	? 	?? ? '&s   B( ("CCc                6   |                      |          }|                     |          }t          |t          j                  sJ | d}|                     ||g           |                     |                              t          ||                     d S Nz is not None)	r"  rr  r  r1  r2  r,  r}  add_not_none_guardr  )r   rM  r  r/  r0  r   s         r   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH(  s    ll5!!hhuoo#u|,,,,,#####ED6222u%%88"4//	
 	
 	
 	
 	
r   c                   |                      |          }|                     |          }t          |t          j        j                  sJ | d|d}|                     |                              |t          ||                     d S )Nz.raw_repr() == z.raw_repr())	r"  rr  r  r1  r  r   r}  add_dispatch_key_set_guardr  )r   rM  r/  r0  r   s        r   DISPATCH_KEY_SET_MATCHz#GuardBuilder.DISPATCH_KEY_SET_MATCH3  s    ll5!!hhuoo#ux677777>>C>>>
u%%@@'
E::	
 	
 	
 	
 	
r   c                    | j         j        J | j         j        j        }d| g}|                     ||           | j        j                            |t          ||                     d S )Nz,torch.autograd.forward_ad._current_level == )rO  rp  
dual_levelr,  rX  r   add_dual_level_match_guardr  )r   rM  rf  r   s       r   
DUAL_LEVELzGuardBuilder.DUAL_LEVEL=  s     $1===*7B
KzKKL##E4000::.tU;;	
 	
 	
 	
 	
r   c                0   | j         j        J | j         j        j        }d |D             d dg}|                     ||           t          j        j        j        d	fd}| j        j	        
                    |t          ||                     d S )
Nc                6    g | ]}|                                 S rR  )	get_state)r  cis     r   rU  z6GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.<listcomp>M  s     ///R",,..///r   z5torch._functorch.pyfunctorch.compare_functorch_state(r]  rs  r   r   r   c                               S r   rR  )rs  
compare_fnstatess    r   fnz.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fnT  s    :f%%%r   r  )rO  rp  functorch_layersr,  r1  
_functorchpyfunctorchcompare_functorch_staterX  r   r  r  )r   rM  cisr   rp  rn  ro  s        @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCHH  s     $1===#0A//3///QQQQR##E4000 %1I
	& 	& 	& 	& 	& 	& 	& 	00&tU33	
 	
 	
 	
 	
r   c                P   t           j        j        j        j        t           j        j        j        j        dfd                        d g}|                     ||           dfd
}| j        j        	                    |t          ||                     d S )NhooksCtuple[Callable[[torch.Tensor], Any], Callable[[Any], torch.Tensor]]r   Optional[tuple[int, ...]]c                b     |           sd S t          t          t          |                     S r   )r?  maprs  )rx  are_inline_hookss    r   hooks_ids_fnz?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fna  s3     $#E** tR(((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == rs  r   r   c                2                            k    S r   rR  )rs  	get_hooksguard_hooks_idsr~  s    r   rp  z5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fnp  s    "ll99;;&?&???r   )rx  ry  r   rz  r  )r1  rr  _aot_autogradr  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineabler,  rX  r   r  r  )r   rM  r   rp  r}  r  r  r~  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKSz)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS[  s    $28P	*0S 		) 	) 	) 	) 	) 	) ',yy{{33 dRacc
 	##E4000	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	00&tU33	
 	
 	
 	
 	
r   c                   |                      |          }t          |                      |                                          d                   t          |d          r&t	          |           t          |          dfd}ndfd}d	t          |           d
t          j                     }| 	                    |          
                    |t          ||                     d S )NrO   __metadata_guard__rs  r   r   r   c                `                         |                                 d                   S r   )r  r  )rs  clsoriginal_metadatas    r   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker~  s1    --%q';';'='=a'@  r   c                @    |                                  d         k    S r   r  )rs  r  s    r   r  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s     ++--a04EEEr   ___check_metadata__cr  )rr  r   r  rp  r   rA  rs  r7   current_compile_idr}  r  r  )r   rM  r  r  r  r  r  s        @@r   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCHw  s   $TXXe__%G%G%I%I!%LMM5.// 	F%e,,,u++C       F F F F F F i2.>+?+?hh>CdCfCfhhu%%664[%HH	
 	
 	
 	
 	
r   c                    t          |                     |                    dfd}dt          |           }|                     |                              |t          ||                     d S )Nrs  r   r   r   c                2    |                      d          S )NT)skip_shapes)_check_equals)rs  r  s    r   r  z1GuardBuilder.DTENSOR_SPEC_MATCH.<locals>.guard_fn  s    ??5d?;;;r   __dtensor_spec_r  )r   rr  rs  r}  r  r  )r   rM  r  r   r  s       @r   DTENSOR_SPEC_MATCHzGuardBuilder.DTENSOR_SPEC_MATCH  s     %))	< 	< 	< 	< 	< 	< 0H//u%%66,T599	
 	
 	
 	
 	
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} ddl m!}	m"}
m#}m$} ||||
||	fz   }ddl%m&} ||fz   }dd l'm(c m)} tU          ||          sS |j+        t%          |                    s6tY          t%          |                    sJ dt%          |                       t[          |t\                    rlt_          j0        |          rXd| d| d	g}| 1                    ||           | 2                    |          3                    ti          ||                     d S t[          |tj                    rlt          j0        |          rXd| d
| d	g}| 1                    ||           | 2                    |          6                    ti          ||                     d S | d|g}t[          ||          rto          |          }ti          ||          }rfd|D             }| 2                    |          8                    ||           | 1                    ||           d S )NrR  r   )
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  rR  r  s     r   rU  z-GuardBuilder.EQUALS_MATCH.<locals>.<listcomp>  s7     " " "7;422222" " "r   )9r"  rr  r  int8int16int32int64uint8uint16uint32uint64float16float32float64r  r   r?  r   rA  r  sliceranger   r1  SizeStreamcudastreamsdistributedis_availabletorch.distributed.device_meshr  (torch.distributed.tensor.placement_typesr  r  r  r  torch.export.dynamic_shapesr  torch.utils._pytreer  rJ   r  is_constant_classrB   r   r  r  r  r,  r}  add_float_is_nan_guardr  complexadd_complex_is_nan_guardr   r0  )r   rM  r  r/  r0  np_typesok_mutable_typesok_typesr  r  r  r  r  r  pytreer   r   s     `              r   EQUALS_MATCHzGuardBuilder.EQUALS_MATCH  s   ll5!!hhuoo 				


/HH H #;!

")  "
 
" ))++ 	@@@@@@             # 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%%<<SBTUUU##E4000r   c                F   |                      |          }t          |t                    r|                     |           d S ||                     |           d S t          |t
          j                  r|                     |           d S |                     |           d S r   )	rr  r   r   rS  rV  r7  CodeTyperY  r  r   rM  r0  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCH	  s    hhuoo#t 	%OOE"""""[OOE"""""C(( 	%MM%     e$$$$$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.Modulern  zKAttempted to setup an NN_MODULE guard on uninitialized nn.Module subclass `z`.zIEnsure the `nn.Module` subclass instance has called `super().__init__()`.)gb_typecontextexplanationhints)rY  rr  rp  r   r  r   rw  r(  rF  r  rR   unimplementedrA  r  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 )z0things like torch.add and user defined functions)rY  r  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH$	  s     }}U###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)rr  r  isclassr  r  rX  r  s      r   CLASS_MATCHzGuardBuilder.CLASS_MATCH)	  s_    hhuoos## 	 :GGG   	&&&&&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)rr  r  ismoduler  r  rX  r  s      r   MODULE_MATCHzGuardBuilder.MODULE_MATCH2	  s`    hhuoo$$ 	 :III   	&&&&&r   c                8   |                      |          }t          |          t          j        u rTt	          |d          rD|                     |dt          j                   |                     |dt          j                   dS | 	                    |           dS )z!matches a closure by __code__ id.r   N)
rr  rA  r7  r8  rp  r(  rF  r2  r  r  r  s      r   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH;	  s     hhuoo99***wsJ/G/G*$$UJ8LMMM$$UJ8STTTTT&&&&&r   c                    | j         rCt          |j        t                    r)| j        j                            |j        j                   |                     |          S r   )	rQ  r  r9  ra   rO  used_builtin_varsr   r   rX  r  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCHF	  s`     	%24EFF %7;;,2   &&u---r   c                   |                      |          }|                     |          }t          |t                    s|                     |           g }t          |          dk    r|                    d|            n(|                    d| dt          |                      |                     ||           t          |t                    rF|                     |          	                    t          |          t          ||                     d S |                     |                              t          |          t          ||                     d S )Nr   rF  zlen(r@  )r"  rr  r  r%  r>  r   r  r,  r}  add_dict_length_check_guardr  add_length_check_guardr   rM  r/  r  r   s        r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTHO	  sV    ll5!!%&& 	#OOE"""u::??KKs%%%%KK5s55U55666##E4000eT"" 	""5))EEE

24??     ""5))@@E

24??    r   c                   |                      |          }|                     |          }t          |          }g }|                    d| dt	          |                      |                     ||           t          |          }|                     |d|j         d          }|                     |          	                    t	          |          |t          ||                     d S )Nz___tuple_iterator_len(r@  r7  r]  )r"  rr  rA  r  r   r,  rH  r  r}  add_tuple_iterator_length_guardr  )r   rM  r/  r  r`  r   r  s          r   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LENi	  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%%v/EdE/R/R	
 	
 	
 	
 	
r   c           
        |                      |          }|                     |          }t          |          }g }t          |          }|                    d| d|            |                     ||           t          |          }|                     |d|j         d          }|\  }}	}
|                     |          	                    ||	|
|t          ||                     d S )Nz___normalize_range_iter(r@  r7  r]  )r"  rr  rA  r   r  r,  rH  r  r}  add_range_iterator_match_guardr  )r   rM  r/  r  r`  r   normalized_range_iterr  startstopsteps              r   RANGE_ITERATOR_MATCHz!GuardBuilder.RANGE_ITERATOR_MATCHy	  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v'=dE'J'J	
 	
 	
 	
 	
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!          ||                     d S )N is r   )r1   r9  rQ  r,   rO  additional_used_local_varsr   r+   additional_used_global_varsr"  r  r0   ru  r,  rP   #use_lamba_guard_for_object_aliasingr  rv  r  r    r}  r  )
r   rM  r  r  ref_aref_br	  r   r  r  s
             r   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT	  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g}|                     ||           |                     |                              t	          ||                     d S r_  )r"  r,  r}  r`  r  r   rM  r   s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE	  sr    <<&&4445##E4000u%%88"4//	
 	
 	
 	
 	
r   c           	     P   |                      |          }|                     |          }g }|                    d| dt          |                                                      |                     ||           |                     |                              ||           dS )z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)r"  rr  r  r  r  r,  r}  add_mapping_keys_guardr  s        r   MAPPING_KEYS_CHECKzGuardBuilder.MAPPING_KEYS_CHECK	  s    ll5!!ACAAT%**,,-?-?AABBB##E4000u%%<<UDIIIIIr   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)) == )r"  rr  r1  r  rJ   SUPPORTED_NODESrC  r  r  r  r   r,  r  r9  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                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)rP   skip_nnmodule_hook_guardsr  r  s     r   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT	  s,    + 	FU#####r   c                    d S r   rR  r  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODE	      r   c                    d S r   rR  r  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS	  r  r   c                    d S r   rR  r  s     r   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE	  r  r   c                    | j         j        }|J |j        }|| j         _        | j        j                            |dg           d S )Nz___check_global_state())rO  rp  global_state_guardglobal_staterX  r   add_global_state_guard)r   rM  rp  r  s       r   GLOBAL_STATEzGuardBuilder.GLOBAL_STATE	  s]    ,9'''#6-9*6645	
 	
 	
 	
 	
r   c                    | j         j        J t          | j         j                  | j         _        | j        j                            | j         j        dg           d S )Nz$___check_torch_function_mode_stack())rO  torch_function_mode_stack$make_torch_function_mode_stack_guard"torch_function_mode_stack_check_fnrX  r   #add_torch_function_mode_stack_guardr  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE	  sn    $>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          ||                     dS )z/Guard on CURRENT_DEVICE per torch.utils._deviceNzutils_device.CURRENT_DEVICE == )
r_  r=   GLOBALrO  rp  current_devicer,  r}  add_default_device_guardr  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//	
 	
 	
 	
 	
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%                   d S # t"          jC        jD        jE        $ r Y nw xY w|j%        r9 F                    |j%        |j%        i tZ          t]                                 d S d S )(Nr   r   rn  c                    g | ]	}|j         
S rR  )symbolic_contextr  r  s     r   rU  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 rR  )r4   r3   SIZE)r  r_  r  s     r   rU  z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>1
  s:         )1DcJJ  r   )tracked_fakes_id_to_source)r  r  rp  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 rR  )faker  s     r   rU  zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>Z
  s    (((QV(((r   c                    g | ]	}|j         
S rR  )r_  r  s     r   rU  zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>[
  s    ***!QX***r   )input_contextsequalities_inputsrJ  ignore_staticr$  )	shape_envproduce_guards_verboserJ  export)r$  r,  r  r+  rp  r   s    r   _get_code_partsz/GuardBuilder.SHAPE_ENV.<locals>._get_code_partsW
  s_    #-DD((R(((**r***#1&7# (4':#: E 
 
 
r   )pythonverbose_pythoncppT)r2  r3  cpp_code_parts)python_code_partsr   r5  python_fallbackshape_env_sources)r   )CppCodeCachec                \    g | ](\  }}                     t          ||                    )S rR  )r  r-   )r  ir_  r   s      r   rU  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  NrR  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  NrR  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&  )Gtorch._dynamo.output_graphr   r  rO  rp  shape_code_partsr6  r   r5  r7  r  r.  tracked_fakesexport_constraintsr   r  r  r1  r0  dynamic_shapes_process_equalitiesr  r   rG   r  r'  rP    enable_cpp_symbolic_shape_guardsOverflowErrorfreezerQ  localsrr  rE   source_to_symbolr  ShapeCodePartsexprsr,  r7   try_getshape_env_guardsr&  r   r\   rI   r  r   r  r  ctypestorch._inductor.codecacher9  r%  r  r  textwrapdedentr
  r  loadcastrM  c_void_pr  r"   r   	_inductorrR   InvalidCxxCompilerr  )'r   rM  r   rB  r6  r   r5  r7  r  namesr  r   r!  r"  
constraintr1  maybe_cpp_code_partsmaybe_shape_env_sourcesr   compile_contextint_source_to_symbolfloat_source_to_symbolr   rK  r_  r>  r&  rP  r9  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardr,  r  r+  rp  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 +/ J	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
 -",--.//&,    ?&9   " " 	55!'"(DD0A0C0CD 6     	 	s%   .F   FF6DS? ?TT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|            nj| &                    |          }t           j'        r3tC          |t          j        j                  sbtQ          |j                  sNt          |j        tR                    s4| j*        $                    |           | j+        $                    |           | j        j        }|j,        |j                 }t[          |d                   }t[          |d                   }t]          t_          ||||||          |          }|0                    |||||||           t          |t          j        j                  s$| j1        j2        3                    |j4                   |j5        J tm          |d|j                  \  }}|sto          |d          r`|j8        }d| d| d| d}|$                    |           | &                    |          9                    |t]          ||                     nRd| d}|$                    |           | &                    |          :                    dt]          ||                     tw          |          dk    r| <                    ||           d S d S )Nparam_numelparam_bytesparam_countrO   )r  r  r  
ndimensionrk  zndimension()zstr(r]  r@  r,  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)r*  z%, '_dynamo_dynamic_indices') == Falser   )=rP   _unsafe_skip_fsdp_module_guardsis_fsdp_moduler<  rY  r  rN   rr  rA  r1  r  _dispatch_keysr9  r:  r  r  r2  log_compilation_metricsr5  	Parameterr6   in_progress	incrementnumelnbytesr"  rO  rp  r0  r>  rU   r9  rV   r   r  r  r  r   r}  ,skip_no_tensor_aliasing_guards_on_parametersr2   rr   rl  rm  input_source_to_sizes_stridesr  r  r  add_tensor_match_guardrX  r   r   r  r_  r   rp  rp  add_dynamic_indices_guardr-  r   r,  )r   rM  r  r  r  metrics_contexttensor_namer   termstermterm_src
real_valuerX  rp  metadatarl  rm  r   static_reasondynamic_indicesr  s                         r   TENSOR_MATCHzGuardBuilder.TENSOR_MATCH  s   1 	e6J6J6L6L 	F "%(( u	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 M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')?	5)Q)Q    V;UUU  KK	*****511FF1.y%@@   4yy1}}++E488888 }r   r?  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_backrG  co_namer   re  r  rr  ra  r/  rA  r  r  enumEnumr?  
ProxyTypesset_export_info)r   rM  r?  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)rG  r   rH  rI  rJ  rK  rL  rM  rN  r  r   r  rX  r   rO  rP  rQ  r   rR  r  rS  rT  r   r   )r&  r  rM  r:   r   r   )r  r  rM  r:   r   r   )r&  r   r   r  )r_  rU   r$  r   r%  r   r&  r   r2  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   )rM  r:   r   r   r"  )
r   rN  r   rN  r   r  r  r   r   r   r   )r  r  r   rT  r   r   )rM  r  r   r   )rM  r:   r  r   r  r#  r   r   )rM  r:   r   r   )rM  r:   r  r  r   r   )rM  r:   r	  r   rD  r   r   r   )rM  r:   r	  r   rD  r   r   r   )rM  r:   r  rZ  r   r   )rM  r:   r  r  r   r   )rM  r:   r  r>   r   r   )NN)
rM  r:   r?  rN  r+  r  r[  rZ  r   r   )=r   r   r   r   r  r  r:  r  r  r  r  r  r  r  r}  r  rr  r"  r(  r2  r5  r>  rC  rI  rN  rS  rV  rY  rX  ra  rd  rh  rv  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  rf  r  r,  rR  r   r   rF  rF    s-        "<@59OF OF OF OF OFb   <$ $ $ $L    \"Y Y Y Yv9 9 9 9" " " ",? ? ? ?
 
 
 
` ` ` `DL L L L 59 S S S S SL 26    2       "80 80 80 80v 370 0 0 0 02
 
 
 
,
 
 
 
0 0 0 00 0 0 0    "

 

 

 

> > > > > =A#? #? #? #? #?J	
 	
 	
 	
 	

 
 
 
	
 	
 	
 	

 
 
 
&
 
 
 
8
 
 
 
,
 
 
 
i i i i iV	% 	% 	% 	%   ($ $ $ $
' ' ' '' ' ' '	' 	' 	' 	'. . . .   4
 
 
 
 
 
 
 
&+ + + +Z
 
 
 
J J J JC C C C2$ $ $ $         
 
 
 


 

 

 


 
 
 
u u u un{9 {9 {9 {9 {9D 26,01
 1
 1
 1
 1
 1
 1
r   rF  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 )PyExprCSEPassrO   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_nameNr@  rR  r   r   Configr    s*         """"$$$$$$r   r  c                  (     e Zd Zd	dZd
 fdZ xZS )PyExprCSEPass.ExprCounterrP   r  r   r   c                    || _         d S r   )_config)r   rP   s     r   r   z"PyExprCSEPass.ExprCounter.__init__  s    !DLLLr   r   r  c                    t          |t          j                  r'| j        j        t          |          xx         dz  cc<   t                                          |           d S r   )r  r  ALLOWED_NODE_TYPESr  r  r  r   r   )r   r   r   s     r   r   zPyExprCSEPass.ExprCounter.visit"  s^    $ @AA A'T(:(:;;;q@;;;GGMM$r   )rP   r  r   r   )r   r  r   r   r   r   r   r   r   r   r   s   @r   ExprCounterr    sQ        	" 	" 	" 	"	  	  	  	  	  	  	  	  	  	 r   r  c                  ,     e Zd Zd fdZd fdZ xZS )PyExprCSEPass.ReplacerrP   r  gen_nameCallable[[], str]r   r   c                r    t                                                       || _        || _        g | _        d S r   )r   r   r  	_gen_namepreface)r   rP   r  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  r  r  r  r  r  USE_THRESHOLDr  r   r   r  r  r  r  NameLoad)r   r   exprnode_expr_r   r   s         r   r   zPyExprCSEPass.Replacer.visit2  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   )rP   r  r  r  r   r   )r   r  r   r   r  r   s   @r   Replacerr  '  s[        	) 	) 	) 	) 	) 	)	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r   r  r   r   c                r    d| _         |                     t          j        d           i           | _        d S )Nr   c                     dS r   rR  rR  r   r   r  z(PyExprCSEPass.__init__.<locals>.<lambda>O  s    q r   )r  r  )_counterr  r  defaultdictr  r   s    r   r   zPyExprCSEPass.__init__L  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_varR  s)    )$-))r   rM  rN  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)	r  r  r   r  parseSyntaxErrorr  	exceptionlineno)r   rM  countereexs        r   countzPyExprCSEPass.countW  s    ""4<00 	 	Acill++++   DbiQRSSS	 	s   'A
A9"A44A9r  tuple[list[str], str]c                    |                      | j        | j                  }|                    t	          j        |                    }|j        t          |          fS r   )r  r  r  r   r  r  r  r  )r   r  replacernew_nodes       r   r  zPyExprCSEPass.replace`  sH    ==t}==>>#)D//22h!7!777r   Nr  )r  )r   r   r   r   )rM  rN  r   r   r  r   r   r  )r   r   r   r  r  	AttributeCall	Subscriptr  dataclasses	dataclassr  NodeVisitorr  NodeTransformerr  r   r  r  r  rR  r   r   r  r    s        M -3=A% % % % % % % %         co      #' #' #' #' #'3& #' #' #'J
 
 
 
    
   8 8 8 8 8 8r   r  c                t    t          | j        t                    pt          j        o| j        t          j        u S r   )r  r9  r`   rP    guard_nn_modules_using_dict_tags	create_fnrF  r  )rM  s    r   must_add_nn_module_guardsr  f  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__u  s'    #)   r   c                    d | _         d S r   )r   r   s    r   r  z6DeletedGuardManagerWrapper.populate_diff_guard_managery  s    #r   )r  r   r   r   r  )r   r   r   r   r  r   r   s   @r   r  r  t  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 )rL  rF   r6  r   zOptional[_CppShapeGuardsHelper]r5  r   r7  r  r8  Nr@  rR  r   r   rL  rL  }  sN         ))))****3333######r   rL  c                  2    e Zd ZU ded<   ded<   dZded<   dS )GuardsStater   rp  Optional[ShapeCodeParts]rB  NrT  rS  )r   r   r   r   rS  rR  r   r   r  r    s<         ((((....15555555r   r  c                  0    e Zd ZdddZddZdd	ZddZdS )_MissingNr  rZ  r   r   c                    || _         d S r   r  )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   rr  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  rZ  r   r   r   )r   r   r  r   r   r   )r   r   r   r   r  rr  r  rR  r   r   r  r    si            + + + ++ + + +
     r   r  tuple[type, ...]c                     t           j        t          j        j        t
          j        f} 	 | t          j        j        j        fz  } n# t          $ r Y nw xY w| S r   )
r7  r  r1  r  r  ra  r   _distributed_c10dProcessGroupAttributeError)r  s    r   _get_unsupported_typesr    s^     	C
*799   Js   A 
AAc                  x    e Zd Zd@ fd
ZedAd            ZedBd            ZedCd            ZedDd            ZedEd"            Z	edFd&            Z
edGd*            ZedHd-            ZedId0            ZedJd3            ZedKd5            ZedLd8            ZedMd:            ZedNd<            ZdOd?Z xZS )PGuardsStatePicklerrn  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   r1  r9  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converterrn  r  r  )r   rn  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   )r1  r5  r6  __setstate__)r  r  mods      r   _unpickle_modulez#GuardsStatePickler._unpickle_module  s,    hoo
r   meta_tensorr  r  torch.devicer  rA  dispatch_keys_rawr   gradc           	        t           j                                        }t           j        j                                        }|                    ||||t           j        j                            |                    }||_	        |S r   )
r1  r9  r  r  r  from_meta_and_devicer  r   from_raw_reprr  )	r  r  r  r  r  r  r  r  r  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_data5list[tuple[str, Callable[..., Any], tuple[Any, ...]]]c                   i }|D ]\  }}	}
 |	|
 ||<   |j         |                                }}t          |                              ||||          }||_        t
          j        j                            |          |_	        |S r   )
shaperm  rA  __tensor_unflatten__r  r1  r  r   r	  r  )r  r  r  r  r  r  r  inner_tensorsr  unpickle_funcunpickle_func_args
outer_sizeouter_strider   s                 r   $_unpickle_traceable_wrapper_subclassz7GuardsStatePickler._unpickle_traceable_wrapper_subclass  s     7A 	E 	E3D-!3"/-1C"DM$#.#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   raw_reprtorch._C.DispatchKeySetc                J    t           j        j                            |          S r   )r1  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   )r1  r  rr  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   )r7  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   original_typetype[torch.nn.Module]c                h    t           j        j        j        j                                        |         S r   )r1  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   )r1  r5  parallelDistributedDataParallel__new__r6  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   )r  r1  opsr  )r  r  s     r   _unpickle_c_opz!GuardsStatePickler._unpickle_c_op  s    uy|T***r   funcr-  c                ,    t          j        ||          S r   )r7  r9  )r  rB  r-  s      r   _unpickle_bound_methodz)GuardsStatePickler._unpickle_bound_method  s    d+++r   torch.nn.attention.SDPBackendc                J    t          t          j        j        j        |           S r   )r  r1  r5  	attention
SDPBackendr  s    r   _unpickle_sdp_backendz(GuardsStatePickler._unpickle_sdp_backend  s     ux)4d;;;r   r0  c                <    dfd}|j         J |j         d         S )Nr   r   c                      S r   rR  )r0  s   r   r[  z,GuardsStatePickler._unpickle_cell.<locals>._&  s    Jr   r   )r   r   )r   )r  r0  r[  s    ` r   _unpickle_cellz!GuardsStatePickler._unpickle_cell$  s>    	 	 	 	 	 	 }(((}Qr   r  6Union[tuple[Callable[..., Any], tuple[Any, ...]], Any]c                $   dd l }t          |          | j        v r$t          |          j        t          |          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  ||          r g }|                                \  }}|D ]s}t          ||          }t          |t          j	                  r|| j        t          |          <   |                     |          \  }	}
|                    ||	|
f           tt          |           j        t          j        |d          |j
        t          |          t          j                            |                                          ||ffS t          |           j        t          j        |d|j                  |j
        t          |          t          j                            |                                          |j        ffS t          |t          j        j                  rt          |          | j        vr	t          dfS t          |t          j        j        j                  r)t          |           j        |                                ffS t          |          j         t          |          j!        k    rtD          S |j#        j        t          j        j        j        k    r)t          |           j$        |                                ffS ntK          j&        |          rt          |           j'        |j!        ffS t          |t          j        j(                  r)t          |           j)        |                                ffS t          |t          j        j*        j+                  r)t          |           j,        |-                                ffS tK          j.        |          rFt_          ||j0                  r1tc          |d	          r!tc          |d
          sJ |j2        |j3        ffS t          |t          j4                  rtk          d| d|j6         d          t          |tn          j8                  r)t          |           j9        |:                                ffS t          |t          j;        j<        j=                  r$t          |           j>        t          |          ffS t          |t          j@        jA                  r6|jB        C                    d          rt          |           jD        |j!        ffS |j#        jE        dk    r|j#        j!        dk    r	t          dfS t          |t                                r	t          dfS tK          jG        |          r|jH        jI        tJ          jJ        z  r	t          dfS |jE        t          jL        v rRt          jL        |jE                 }|j         M                    d          D ]}t          ||d           }||ur	t          dfS ntK          jN        |          r[|jO        }	|jP        }t          ||	j!                  }tK          jN        |          r|jO        }|	|urt          |           jQ        |	|ffS nNt          |t           d d          jR        d                             rt          |           jS        |jT        ffS tc          t          jU        d          rCt          |t          jU        jV        jW                  rt          |          | j        vr	t          dfS t          |t          j        jX        jY                  rt          |           jZ        |j[        ffS t          |          j         t          |          j!        k    r>t          j;        j\        ]                    dt          |           d| ddz   dz             tK          j.        |          rtc          t          jU        d          rt_          |t          jU        j^        j_        j`                  r|t          jU        j^        j_        j`        urv|ja        d         }t_          |t          j        j                  sJ |t          jU        j^        j_        j_        b                                v sJ t          |           jc        |ffS tD          S ) Nr   )zmissing valuesmeta)is_traceable_wrapper_subclass)ztensor guard tree)r  )r  r  )zmodule guard tree_torch_handler_name_torch_unpicklerzCannot serialize SymInt z (node: r]  z_C::rd  	PyCapsule)capsule)unsupported)znested functionr]  )zfqn mismatchc                      fdS )Nc                      S r   rR  r  s   r   r  zGGuardsStatePickler.reducer_override.<locals>.<lambda>.<locals>.<lambda>  s    Q r   rR  r  s   `r   r  z5GuardsStatePickler.reducer_override.<locals>.<lambda>  s    YYYY r   distributed_c10d)zdistributed_c10d.Workr  r  r  r  r  r2  rB  )dsympyrs  r  rA  r;  r  r  r  r1  r2  r  torch.utils._python_dispatchrQ  rn  r  r  reducer_overrider  r  
empty_liker  rs  r  r
  r  r  r5  r6  r9  r:  r>  __getstate__r   r   NotImplementedr   r  r  r  r  r   r  rr  r#  r%  	serializer  r#  Functionrp  rS  rR  r  r  r   r7  r)  r*  rf  r  r  r   r.  r  _opsOpOverloadPacket_qualified_op_name
startswithrA  r   r  
isfunctionr   co_flags	CO_NESTEDr  modulesr}  ismethodr   __self__rD  r   rM  r.  r  rY  WorkrG  rH  rJ  r  rR   PackageErrorr2  r3  
FSDPModuler   r4  r5  )r   r  rZ  rQ  r  attrsr  r  innerrB  
args_tuplefr  method_self
inner_funcr/  s                   r   r\  z#GuardsStatePickler.reducer_override-  s    	c77d'''99$tCyyl22c77d)))000c5<(( p	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! @ @D#C..E!%66 B<A.r%yy9'+'<'<U'C'C$D*%%tT:&>????DzzF$S888JIIH++C0099;;I   ::. V3CTUUU
S		'',,55771   UX_-- K	C#wwd444!777
 #ux0HII NDzz69I9I9K9K8MMMCyy%c);;;%%})UX_-IIIDzz2S5E5E5G5G4III J c"" <	C::5FFUX455 9	C::83<<>>:KKKUX0=>> 6	C::=?QQQ OC  3	C3//3	C 2333	C
 3 233333'#*A)CCCU\** +	CR#RRsxRRRSSSU344 (	C::5

}DDU]0:;; %	C::1DII<??,
 
 "	C$//77"	C ::,s|o== M$
22&+55 \))35566 	C---$$ 	C|$w'88 6!555~,,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-#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   )rn  r  r  r  r  r  r   r   r  r   r   r   )r  r   r   r  )r  r  r  r  r  rA  r  r   r  r  r   r  )r  r  r  r  r  rA  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/  r0  r   r0  )r  r6  r   r7  )r  r   r   r   )rB  r   r-  r   r   r   )r  r   r   rE  )r0  r   r   r   )r  r   r   rN  )r   r   r   r   r;  r  r
  r  r  r  r%  r*  r.  r5  r>  rA  rD  r:  rJ  rM  r\  r   r   s   @r   r  r    s       - - - - - -    [
    [(    [, . . . [. ? ? ? [? B B B [B
 ) ) ) [)
 + + + [+ 
 
 
 [
    [ + + + [+ , , , [, < < < \<       [ [ [ [ [ [ [ [ [r   r  r  rn  r  r   c                   t          j                    }i }i }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          ||||          }	 |                    |            nD# t          $ r7}	t           j        j                            t)          |	                    |	d }	~	ww xY w|                                S )Nrk  )ioBytesIOr  tree_leavesrp  rN  r  rj  rp  rk  rs  rA  r;  r  dumpr  r1  r  rR   rm  r   rq  )
r  rn  bufr  r  leavesleafr-  picklerr  s
             r   pickle_guards_stater~    sh   
*,,CLN 2 >??F , ,D!! 	,gdJ&?&? 	,=D$xx000JJ&&tDzz222-1LD**D 1 XX... (,N2d88$ !2L.RUVVG<U < < <m,,SVV44!;<<<>>s%   7AB99B=8D 
E2E

Ec                  l    e Zd ZU 	 	 	 	 	 	 	 	 d1d2dZdZded<   d3dZ	 d4d5d$Zd6d'Zd7d*Z	d8d.Z
d9d0ZdS ):rP  NFrG  r   rp  r   r   Optional[CacheEntry]r   %Optional[Callable[[GuardFail], None]]guard_filter_fn8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]rB  r  rR  rT  rQ  r   strict_errorrS  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        
          }|r                     ||||d|
          \  }d%fd |fd|D                       t1                    t1          |          k    sJ t3          d D                       sJ fdt5          |          D             }                     ||||||
          \  }| _                             ||           j         j        _        t<                              d j                   j         j        _        d|j         s|j!        s j        "                    |j#                  s@tI           j        |j#        tK          j&                    d           }tO          d|           tP          tQ           j        |j#                   tS           j        j*        |j#        d          t<                              dd           tW          j,        dt[                               d  _.        |rddl/m0} tc           j        |          sJ 	  2                    | j                   _.        n# tf          j4        $ rt}t           j        j        j5        s|	r| j        6                    dto          |           tq          j9                    :                    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 )TrR  )r  gs     r   rU  zCCheckFunctionManager.__init__.<locals>.<lambda>.<locals>.<listcomp>  s    >P>P>Pt>P>P>Pr   rR  )gss    r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>  s    >P>PR>P>P>P r   r   list[GuardFilterEntry]r   
list[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)rY  r  r  rC  rY  rC  z7%s guard on %s is dropped with caching_precompile=True.T)r  r  
guard_typederived_guard_typesr  r   
orig_guardr  )r   r  keepr  _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   rR  )r	  F)rS  rM  r:   r   c           	     X   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 )Nrn  FTrR  )r  	has_valuer  r  r  	is_globalr  )
objectstrip_local_scoper  rr  r+   r9  r   create_fn_nameguard_typesr?  )rM  MISSINGr  r  r  r  builders         r   make_guard_filter_entryz>CheckFunctionManager.__init__.<locals>.make_guard_filter_entryB  s     (((442:: %I#EE	*
 !(E 2 2$(		* '$)			253KLLTXX	''$3355494EMe/0002'$
 
 
 
s   A Ac                &    g | ]} |          S rR  rR  )r  rM  r  s     r   rU  z1CheckFunctionManager.__init__.<locals>.<listcomp>a  s%    KKKE((//KKKr   c              3  B   K   | ]}t          |          t          u V  d S r   )rA  r   r  rs  s     r   r  z0CheckFunctionManager.__init__.<locals>.<genexpr>d  s,      ??1tAww$??????r   c                *    g | ]\  }}|         |S rR  rR  )r  r;  rM  filter_resultss      r   rU  z1CheckFunctionManager.__init__.<locals>.<listcomp>e  s8       "!U.QRBS  r   %sg        )backendziGuard failed on the same frame it was created. This is a bug - please create an issue.Guard fail reason: rO   zGuard eval latency = %s us.2fguard_latency_usr   r  zGuard evaluation failed: r  )	tracebackdynamo_cpp_guards_strc                      j          d ddS )Nz
Guard latency = r  z us)rX  )latencyr   s   r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>  s    $"4XXXXXX r   
payload_fn)r   r  r   r  )rM  r:   r   r   )>r   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesrp  rB  r	  rK   r  r  r  rR  r  r  rD   r  r   r1  r  rP   caching_precompiler   r:   sort_keybuild_guardsr   r  r  rX  compile_check_fnr   r
  r  skip_guards_checkr0  ru  rN  get_guard_fail_reason_helperr7   r  r  r   r$   r   r5   increment_toplevelr   guards_staterA  r   r  serialize_guardsrR   rm  strict_precompilebypass_packager   r  
format_excr}  _loggingtrace_structuredclear)r   rG  rp  r   r   r  rB  rR  rQ  r  rS  r   existing_diff_guard_sourcessorted_guardsrX  reasonsr   r  r  r  r  r  r  s   `                 @@@@@r   r   zCheckFunctionManager.__init__  s)    )5>$$$;= B+NN 	$ :F ,,, !1
 7CLL22 	& 3=,,;E<<'<FLL($8!PTPT/BCC 	UKKSTTT =2 	.Q3P3P     4 v|@@@ 1	 &*%6%6+!1 &7 & &"G]     < -_KKKK]KKK N ~&&#m*<*<<<<<??????????   &/&>&>  M
 "&!2!2'- "3 "
 "
 +g}mDDD .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-1 	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   .!M OA*OO)rC  r  rY  r  r  r  r  r  ztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPESr  rF  r  list[Guard]r   r   c                N    |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        |j#                  }tI          ||j%                  S )NrR  )r>  r  z guard cannot be serialized.c              3  6   K   | ]}|t           j        v |V  d S r   )rP  r  )r  r;  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<genexpr>  s=        0VVV VVVV r   rn  r_  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,   )r_  r  builtins_dict_nameused_global_varsused_local_varss     r   prune_variablez=CheckFunctionManager.serialize_guards.<locals>.prune_variable  s    -f555t 	*!$,,,,, ---$((..... .-.v666 *!$,,,,,##D)))))* *r   rs  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 )Nrs  r   r   c                \    t          | t          t          j        f          r
 |             S | S r   )r  rN   ra  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   rR  )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 rR  rR  )r  kvr  s      r   
<dictcomp>zVCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>.<dictcomp>&  s'    JJJtq!4477JJJr   )rs  r   r   r   )r  	functoolspartialr?  r   keywordsr   rB  )rs  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 rR  )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 rR  )r  )r  r  r  r   s      r   r  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>0  s;     2
 2
 2
1 D***	 q +**r   c                6    i | ]\  }}|v s	|j         v ||S rR  )r  )r  r  r  r   r  s      r   r  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>9  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_weakrefr  )r  r  r  )r  rM  r  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<genexpr>@  sd           '$(.2"5"5eo"F"F	       r   T)rN  r   _guardsr{  r  )rp  rB  rS  )r_  r>   r   r   )rs  r  r   r  )&r  r  r?  r;  rr  r  rP  r  r1  r  rR   rm  next%name_of_builtins_dict_key_in_fglobalsr   dump_guards_stater  r9  ru   rB  r8  rq  r   r   r  r  rN  r  	GuardsSetrK   r  tree_mapr  r{  r  rS  r~  rn  )r   r  r  rp  rM  r  r  r  failedr  output_graph_guards_stater_  global_scope_stater  r  r  r  r  s   `             @@@@r   r  z%CheckFunctionManager.serialize_guards  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
1>"egg	2
 2
 2
-. %0$7%    5AGGII  
 ,M++     "/    
 
 +1/.)G+ + #/%
 %
 %
!2 #2!2$5
 
 
 #<1JKKKr   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 )Nr_  r>   r   r   c                    | j         }|t          j        u r| j        S sJ              }|J |                    | j                  S r   )guard_sourcer=   CONSTANTr  r"  )r_  r  	r_builder	w_builders      r   rJ  z5CheckFunctionManager.build_guards.<locals>.source_reff  sZ    !.L{333{"!	I((($$V[111r   )rR  rS  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   rx  )r_  r>   r   r   )r  r  r   r   )r   r   rF  rH  rL  rN  r   rR  ra  r/  rP   rw  rD   r:  r  r  r%  )r   r  r  rG  rp  rQ  rS  rX  rJ  r  r  guard_on_nn_modulesrM  r  s                @r   r  z!CheckFunctionManager.build_guardsX  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_outr   c                .   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    r0t#          j        |	dd                    |	          z   dz   g           t(          j        rAj        r:t/          t0          t3          j                   \  }}                    ||           | j        r| j        j        ng }|D ]6}t;          |t<                    re|j        }|j         }|j!         d|j!         }tE          #                    |          #                    |          |g            ||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           &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   rM  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  rC   from_tracebackr  r  )r  rM  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   rn  z
Stack:
z
User stack:
zGuard: %s%s%s)r  r
  r  r  verbose_guards_logisEnabledForloggingDEBUGr  r  formatr  )	r  rM  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   TrO   zcheck_no_aliasing(r\  r]  r  c                :    g | ]}                     |          S rR  r  r  ra  r  s     r   rU  z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>  s7     . . . 99!<<. . .r   c                :    g | ]}                     |          S rR  r  r  s     r   rU  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   rI  r  ra  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   rI  r  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>%  s$      3b3bqAF3b3b3b3b3b3br   z])zUnknown GuardEnvExpr: dynamo_guardsc                     d  D             S )Nc                "    g | ]} |            S rR  rR  )r  rr  s     r   rU  zKCheckFunctionManager.compile_check_fn.<locals>.<lambda>.<locals>.<listcomp>;  s    4W4W4WQQQSS4W4W4Wr   rR  )r  s   r   r  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>;  s    4W4WBV4W4W4W r   r  ru  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackrX  r   r   )r  r   rM  r  r  r   r   r   )Arj  r
  r  rX  r   attach_compile_idr   r7   r  r	  r   r   r?  rM  r   rl  r   r   rm  r  rP   r  rv  r|  r  r  r  rp  aotautograd_guardsr  r9   input_source_ainput_source_br  r    r  r?   overlapping_sourcesnon_overlapping_sourcesr!   r  rk  r1  r  r  rQ   initial_global_stateGlobalStateGuardru  r  r  r  rI   r  r  r`  r   r   r  r   r   r   r   r   r   )r   r  r  r   largsr   seengclr   rl  check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsr  rM  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  s`     '((###
CE 	1113344	
 	
 	

 *.& FK)	= )	= )	= )	= )	= )	= )	= )	= )	=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 )NrX  zCache line invalidated because z got deallocated)	rp  r  rX  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"  )	rs  r  ra  r/  r  r  r  r$  r  )r   r  r"  s      r   rH  zCheckFunctionManager.id_refs  s    
	#wwdn,, +2+c*:*:r#ww' *4?GLLL    	 	 	D	#wws   A-A0 0
A=<A=Optional[weakref.ref[object]]c                f    t          |          | j        v r| j        t          |                   S dS )zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)rs  r  )r   r  s     r   rL  z$CheckFunctionManager.lookup_weakrefs  s-    c77dn$$>"S''**tr   )NNNNNFFN)rG  r   rp  r   r   r  r   r  r  r  rB  r  rR  rT  rQ  r   r  r   rS  rT  )r  rF  r  r  rp  r   r   r   r   )r  r  r  r   rG  r   rp  r   rQ  r   rS  rT  r   r  )r  rF  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$  rH  rL  rR  r   r   rP  rP    s        
 -1?C 599=!"59c! c! c! c! c!J	H) 	 	 	 	zL zL zL zLF 6:@& @& @& @& @&DDQ DQ DQ DQL7 7 7 7&        r   rP  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@   r  r   r   r  c                .                         |           S r   )r  )r  csepasss    r   r  z%build_guard_function.<locals>.replace  s    ??4(((r   c                
    g | fS r   rR  )r  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   r  r  RecursionErrorrk  r   re  splicerq  )
r   r)  rA   r  
guard_bodyr  r  rM  make_guard_fnr-  s
            @r   r	  r	    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   r1  r  	_internal	log_stateis_artifact_enabledrR  r   r   is_recompiles_enabledr9    s    >#-AA,OOOr   c                 T    t           j        j        j                            d          S )Nr   r5  rR  r   r   is_recompiles_verbose_enabledr;    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 rR  )rA  r  s     r   rU  z8make_torch_function_mode_stack_guard.<locals>.<listcomp>  s    ,,,T!WW,,,r   r   r   c                     t                      } t          |           t                    k    rdS t          |           D ]\  }}|t          |          ur dS dS r8  )r   r   r  rA  )	cur_stackr<  moder7  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   rR  )r<  rD  r7  s     @r   r
  r
    s>     -,m,,,E
 
 
 
 
 
 +*r   ScoperX  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 )rO   )r   )r  r	  ids_to_sources     r   rU  zErecompilation_reason_for_no_tensor_aliasing_guard.<locals>.<listcomp>  s@       $'Cc@R<S<SVW<W<W=<W<W<Wr   r\  zDuplicate tensors found: )
r   r%  r  r  r  r   rs  evalr  r  )rX  r`  r   ro  	tensor_idduplicate_tensorsr  rJ  s          @r   1recompilation_reason_for_no_tensor_aliasing_guardrN    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   ra  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)ra  rP  patterns      r   r  r    s(     III+G66'5!$$$r   f_locals
compile_idOptional[CompileId]r  Optional[Callable]c                   | j         J | j        J || j         d         d}|                    | j                   g }d}| j        r| j        j        }d}g }|                     |          }	|	j        s,|	j        }t          |          dk    rd|d         v rd}n:|}g }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| d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.
    NrX  rV  FrO   zDuplicate tensor foundr   Ta  BACKEND_MATCH failure: torch.compile detected different backend callables. If this is unexpected, wrap your backend in functools.partial (or reuse the same cached backend) to avoid creating a new backend function each time. More details: https://github.com/pytorch/pytorch/issues/168373zUnexpected recompilation: runtime guards failed even though they passed during recompilation-reason analysis. Please open an issue with a minimal repro: https://github.com/pytorch/pytorchrH  rQ  z; )r   r   r  r   r  rx  resultr   r   r  rN  r%  rM   rK  r\  r;  r  r   r   r  r  )rX  rS  rT  r  r`  r  cache_entry_backendno_tensor_aliasing_check_failedr   guard_debug_infor  rS  r   fail_reason
reason_strs                  r   r  r    s    %111%111!;C!@AAE	LL+,,,G  @+7?&+#$&$228<< "  -@ !""a'''+=a+@@@26//,%'"		'	'N 	 	v2 	 	v& C5
 
 ' 	 	D :;;L15L-./11  "&t\5"A"AKK    466         	                 +t,, #[ #"+s++ {+++466 E"""TYYw%7%77JZ(((s6   ED'&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 )NrQ  zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r  r  r  r  r   r   r  r   r   r\  r  r  )rX  r   rS  rT  r  r^  r]  s          r   get_guard_fail_reasonr`  Q  s     -!;<< DCC ACCC-xW J  =&'..z:::
&2''*8(8-:MNN    
 
 
d	
 	
 	
 	
 	


 s   $7B $CCr   r  framer   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)rR  re  )r  r;  r  s      r   r  z:get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>  sV       # #Av )(((8?64+H+HH# # # # # #r   r  rd  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     dddS )Nrecompile_reasonsr  )r  encodingrR  rR  r   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    '
 
 r   c                      S r   rR  )r  s   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    7 r   )metadata_fnr  )r`  rX  r   rS  rT  r  r  rG  r9  r;  rP   error_on_recompiler  r  rR  re  r  co_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logrR   RecompileErrorr1  r  r  )r   ra  r  r^  r  r   do_recompiles_logfailuresguard_failure_detailsmessager  s             @r   'get_and_maybe_log_recompilation_reasonsrv  o  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##
 
 #??? $    Nr   r   c                    | }t                      }| 5|                    | j                                                   | j        } | 5|} | .|| j        _        | j                                         | j        } | .|S r   )rK   r  rX  r  r  r   r  )r   first_cache_entryacc_diff_guard_sourcess      r   r  r    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  re  zlambda r\  z and
  rW  zMalformed guard:
)
printr  rm  rn  r  r   r   r   rK  r   )rX  r   rS  r   rz  rN  rM  s          r   guard_error_hookr~    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   )r  r  rs  s      r   uniquer    sJ      55D  D==GGGHHQKKK r   
obj_sourcer>   dupe_source Optional[functools.partial[Any]]c                "   |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.   rR   UnsafeScriptObjectErrorr  r  r  rF  r  )r  r  ser_source_is_localsource_is_locals       r   make_dupe_guardr    s      Y{j002;??.z::/
 
 	1*==	 -? ? ?1A ? ? ?   /11 $\%AKXXXX4r   )skipr  c                l   ddl m} t                              t          j                  p#t                              t          j                  }|                                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   )TracingContextrO   )collect_debug_stackr  N)torch._guardsr  r
  r  r  r  r  rr  guards_contextr  r   r  r:   r1   r9  )r  r   r  r  r   rM  s         r   install_guardr    s     -,,,,,$11  8		(	(	7	7  




-
;
?C K K%'''''$U%=>> 	E':JJJJJ	K Kr   )r   r   r   r   r   r   )r  r   r   r  )r   r  )r   r  )r   r  r   r   )r  r   rM  r  r   r   r   )r   r  rM  r  r  rZ  r   rN  )r  r   r   r  )r  r  r   r  )r  r  r  r   r  r  r  r  r  rA  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   )rM  r:   r   r   )r   r   r   rN  )r   r  )r  r  rn  r  r   r   )r   rN  r)  r   r   r*  rE  )r<  r=  r   r>  )rX  r   r`  rF  r   rN  )ra  r   r   r   )
rX  r   rS  r  rT  rU  r  rV  r   r   r   )rX  r   r   r   rS  r  rT  r8   r  r   r^  r   r   r   )
r   r  ra  r   r  r   r^  r   r   rN  )r   r  r   r   )rX  r   r   r   rS  r  r   r   rz  r   r   r   )r  r  r   r  )r  r>   r  r>   r   r  )r   r:   r  r   r   r   (  r  
__future__r   r  rd  r  r  r  r  r  r  rv  r  r  pickler  rR  r  r7  r  ra  
contextlibr   rf  r   r   typingr   r   r	   r
   r   r   ImportErrortyping_extensionsr   r   r   r1  torch.overridestorch.utils._devicetorch._C._dynamo.eval_framer   torch._C._dynamo.guardsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   torch._dynamo.sourcer+   r,   r-   r.   r/   r0   r1   r2   r3   r4   torch._dynamo.utilsr5   r6   r  r7   r8   r9   r:   r;   r<   r=   r>   r?   r/  rA   torch._library.opaque_objectrB   torch._loggingrC   torch._utils_internalrD   %torch.fx.experimental.symbolic_shapesrE   rF   rG   rH   rI   torch.utilsrJ   r  torch.utils._ordered_setrK   torch.utils._tracebackrL   rM   torch.utils.weakrN   rn  rP   rQ   rR   
eval_framerS   r_  rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   collections.abcr   r   r   numpyr  ModuleNotFoundErrorr   r   r   rZ  r   torch._Cr   rA  r   r   r   	getLoggerr   r  r  getArtifactLoggerr
  rp  ro  r  r=  r   r   r   r  cacher  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6  r<  r>  r  r(  r   rF  r  r  r  rL  r  r  r  Picklerr  r~  rP  r	  r9  r;  r
  r%  r   r  rF  rN  r  r  r`  rv  r  r~  r  r  r  rR  r   r   <module>r     s    " # " " " " " 



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



         % % % % % %                   @ @ @ @ @ @ @ @ @ @ @ @ @ @0$$$$$$$ 0 0 0////////0 5 4 4 4 4 4 4 4 ! ! ! ! ! !          > > > > > >                                                       8                        H G G G G G G G
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1 0 0 0 0 0 = = = = = = % % % % % % 1 1 1 1 1 1              * ) ) ) ) ) / / / / / / O O O O O O O O * * * * * * ( ( ( ( ( ( ( ( ( ( , , , , , ,. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .^                                                          .  )(((((( KO  N N N N   	BBB  U==========''''''TTTTTTTTGCLLg!!^--hAA
11(LII99"   ^55h@PQQ "    , , , , ,~ , , ,@ @ @ @ @ @ @ @FT T T T . . . . .2 1 1 1 1   >/ / / / 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b 
 b 
 b 
 b 
 b 
# b 
 b 
 b 
lAR8 R8 R8 R8 R8 R8 R8 R8j   $ $ $ $ $!4 $ $ $ $ $ $ $ $ $ $ $ 6 6 6 6 6 6 6 6            \ \ \ \ \ \ \ \~   @[
 [
 [
 [
 [
 [
 [
 [
|); ); ); );XP P P PX X X X
+ + + +( 	gtCK0112 2 2 2&
% 
% 
% 
%Y) Y) Y) Y)D     D 	@ @ @ @ @F" " " "60 0 0 0.  % & & &   ! ! ! !H /0 K K K K K K K Ks$   3A: :BBH H"!H"