
    /j                   	   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m Z  ddl!m"Z"m#Z#m$Z$ dd	lm%Z% ddl&Z&ddl'Z&ddl(Z&dd
l)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/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`maZambZb ddlcmdZd ddlemfZf ddlgmhZhmiZimjZjmkZkmlZl ddlmmnZo ddlpmqZq ddlrmsZsmtZt ddlumvZv ddlwmxZxmyZymzZz ddl{m|Z| ddl}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ 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 dd%lmZ  e$d&          Z ej        eۦ          Ze&j                            ed'          Ze&j                            ed(          Ze&j                            ed)          Ze&j                            ed*          Zd+Zdd2Z G d3 d4e_          Z G d5 d6          Zdd:Zej        dd<            Zdad=ed><   dd@ZddCZe&j        j        j        ZddGZ	 dddMZddPZddSZddWZdd`ZdddZddfZddiZddkZ ej        dlm           G dn do                      ZddxZddzZej         G d{ d|                      Z G d} dvej                  Z ej        dd~            Z G d deY          Z G d d          ZddZ G d de          Zej         G d d                      Zej         G d d                      Z G d d          Zej        dd            Z	 G d dej
                  Zdd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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
NamedTupleNoReturnOptionalTYPE_CHECKINGUnion)LiteralStringTypeAliasTypeTypeVar)ReferenceType)code_framelocals_names)check_obj_idcheck_type_idClosureGuardAccessorCodeGuardAccessordict_versionDictGetItemGuardAccessorDictGuardManagerFuncDefaultsGuardAccessorFuncKwDefaultsGuardAccessorGetAttrGuardAccessorGetGenericDictGuardAccessorGuardAccessorGuardDebugInfoGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardinstall_symbolic_shape_guard	LeafGuardprofile_guard_managerRelationalGuardRootGuardManagerTupleGetItemGuardAccessorTypeDictGuardAccessorTypeGuardAccessorTypeMROGuardAccessor)
get_global_source_nameget_local_source_nameIndexedSource$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceis_from_skip_guard_source.is_from_unspecialized_builtin_nn_module_sourceTensorPropertyTensorPropertySource)CompileEventLoggerget_metrics_context)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlapIndentedBuffer)get_opaque_obj_infois_opaque_value_type)
structured)justknobs_check)_CppShapeGuardsHelper_ShapeGuardsHelperEqualityConstraintis_symbolicSYMPY_INTERP)_pytree)
OrderedSet)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexc)set_guard_error_hook)-AttrProxySource
AttrSourceCallFunctionNoArgsSourceCallMethodItemSourceCellContentsSourceChainedSourceClosureSource
CodeSourceConstantSourceConstDictKeySourceCurrentStreamSourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceDynamicScalarSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceImportSourceListGetItemSourceLocalSourceNamedTupleFieldsSourceNNModuleSourceNonSerializableSetGetItemSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTupleIteratorGetItemSourceTypeDictSourceTypeMROSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntryDynamoFrameType
ExtraStateGuardedCode	GuardFailGuardFilterEntryGuardFn)builtin_dict_keyscommon_constant_typesdataclass_fields	dict_keysget_current_streamget_custom_getattrget_torch_function_mode_stack get_torch_function_mode_stack_atguard_failuresistype	key_is_id	key_to_idnormalize_range_iterorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenunpatched_nn_module_getattrverify_guard_fn_signature)Callablez(Optional[Callable[[Any, Any, Any], Any]]guard_manager_testing_hook_fn)	GeneratorKeysViewSequence)Symbol)DispatchKeySet)OutputGraphCommonOutputGraphGuardsStateSerializedCodeTguards
recompilesrecompiles_verboseverbose_guards)__defaults____kwdefaults____code____closure____annotations____func____mro__codetypes.CodeTypevar_namestrreturnintc                t    t          |           }t          |          |                    |          z
  dz
  }|S NrQ   )&code_framelocals_names_reversed_cachedlenindex)r   r   framelocals_names_reversedframelocals_idxs       Y/home/longshao/multi-rider-rag/.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_guardsrM   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_managerH  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>.visitV  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_sources0  s    	& 	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	& 	&	' 	' 	' 	' 	' 	' 	' 	di&&r   c                    t           j        r#t          d          r|                                  |                                  d S )Nz3pytorch/compiler:use_recursive_dict_tags_for_guards)rR   "use_recursive_dict_tags_for_guardsrF   find_tag_safe_rootsprepare_diff_guard_managerr   s    r   finalizezGuardManagerWrapper.finalizea  sM    4 	'A:
 :
 	' $$&&&'')))))r   c                V    |                                   |                                  d S r   )r  populate_diff_guard_managerr   s    r   r  z.GuardManagerWrapper.prepare_diff_guard_managerh  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classmethodrR   )assume_dunder_attributes_remain_unchangedr   r   r   r   r   r3  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(  r5  r9  r:  mark_tag_safe_root)r   r-  r   r#  r  r  r  s      @@@@r   r  z'GuardManagerWrapper.find_tag_safe_rootsl  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_managerF  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   )rM  rK  s    r   	filter_fnz@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fnV  s    &&((N::r   )rM  r   r   r   )r   clone_manager)r   rK  rO  s    ` r   rI  z-GuardManagerWrapper.clone_with_chosen_sourcesS  s9    	; 	; 	; 	; 	; 	; y&&y111r   guardr$   	list[str]c                d    |j         j        |                                }fd|D             }|S )Nc                     g | ]
}d z   |z   S ):  )r  part
guard_names     r   
<listcomp>z7GuardManagerWrapper.get_guard_lines.<locals>.<listcomp>^  s#    <<<dd"T)<<<r   )r   r   r   )r   rQ  partsrX  s      @r   get_guard_linesz#GuardManagerWrapper.get_guard_lines[  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   r\  r]  sourcetss         r   get_manager_linez$GuardManagerWrapper.get_manager_linea  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   indentrf  construct_manager_string)r   r  rg  idxr   r  s         r   construct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_stringm  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=)ri  get_leaf_guardsr  r&   r   r   
writelinesr[  r   r   r   rl  r   r  r  r   rf  reprrj  )r   r  rg  rQ  r  r  s         r   rj  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 )NrQ    T)r   zTREE_GUARD_MANAGER:r'   get_epilogue_lambda_guards)r   r   r   r   rj  r   hasattrrs  ro  r[  getvalue)r   rg  rQ  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   rw  s     r   ry  zGuardManagerWrapper.check  s    yq!!!r   r   c                6    | j                             |          S r   )r   check_verboserz  s     r   r|  z!GuardManagerWrapper.check_verbose  s    y&&q)))r   c                d     t                      d
dd fd	  j                   d S )N
leaf_guardr$   r   rR  c                    g }|                                  D ]D}|                    d          d                                         }|                    |           E|S )N#r   )r   splitrstripappend)r~  r   verbose_code_part	code_parts       r   get_code_partszMGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.get_code_parts  sd    J%/%B%B%D%D - -!-33C88;BBDD	!!),,,,r   r  r   r   c                d   |                                  D ]w}t          |t                    r=|vr8j                             |                                         |           Tj                             |                     x|                                 D ]} |           d S r   )rn  r  r&   r   r*  r   r  )r  rQ  r  r  relational_guards_seenr   r  s      r   r  zDGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.visit  s    ,,.. B Be_55 B$:::..~~e/D/DEEE.225999O**>>%+@+@AAAA 3355 ! !	i    ! !r   )r~  r$   r   rR  )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   )rK  r   r   r'   )rQ  r$   r   rR  )r\  r   r]  r^  r   r   )r  r   rg  r   r   r   )r  r   rg  r   r   r   r   rw  r   r   r   )rw  r   r   r   )r   r   r   __doc__r   r   r   r  r  r  r  r  rI  r[  rf  rl  rj  rv  ry  r|  r  rV  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   )r5  	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 rV  )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*  )r5  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rw  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_tensorr5  r  )r  r   r   collectionsOrderedDict__getitem__r   r   r   r   r   r   r   r   mathisnanr  float	importlibimport_moduler5  utils_devicer  r  _as_tensor_fullprecr  rV  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
rr  )astunparsereplace)r   s    r   _ast_unparser    s"    ;t$$T2...r   r  rQ  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 )
Nrr  z  # T)r   i   r   z  # <unknown>z<60)
user_stackreversedfilenamer  rN   r   stacksummary)r  rQ  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_hintr^  rR  c                    t          | t                    s| g} fd| D             }!t          j                  }|rr| d n|rfd|D             }|S )Nc                0    g | ]}t          |          S rV  )r  )r  r  rQ  s     r   rY  z*get_verbose_code_parts.<locals>.<listcomp>-  s1       4=i//  r   r`  c                     g | ]
}| d  dS z (HINT: ra  rV  r  rW  r  s     r   rY  z*get_verbose_code_parts.<locals>.<listcomp><  s7     
 
 
37t..^...
 
 
r   )r  list_get_closure_var_hintoriginating_source)r   rQ  r  r   closure_hints    ``  r   get_verbose_code_partsr  %  s    
 j$'' " \
   AK   ,U-EFF 	7EW<33>333<   

 
 
 
;M
 
 
 r   rc  Optional[Source]c                    | dS | j         }| }|et          |t                    r0|j        r)|t	          |j                   d         }d|j         d| S t          |t
                    r|j        nd}|edS )z
    Walk up the source chain to find a CellContentsSource ancestor.
    Returns a hint like 'guard on "varname".attr' or None if not found.
    Nz
guard on "")namer  rZ   freevar_namer   r[   base)rc  	full_namecurrentpath_suffixs       r   r  r  C  s    
 ~tI &G

g122 	Ew7K 	E
 $C$5$5$7$78KD 4DD{DDD",Wm"D"DN',,$ 
 4r   dimOptional[int]c                    | d S t          |           s| S t          | t          j                  sJ | j                                        S r   )rJ   r  r5  SymIntr   maybe_as_int)r  s    r   convert_int_to_concrete_valuesr   Y  sM    
{ts '
#u|,,,,,x$$&&&r   size_or_stride	list[Any]list[Optional[int]]c                    d | D             S )Nc                ,    g | ]}t          |          S rV  )r   )r  r  s     r   rY  z.convert_to_concrete_values.<locals>.<listcomp>d  s!    JJJC*3//JJJr   rV  )r  s    r   convert_to_concrete_valuesr  c  s    JJ>JJJJr   valuer  sizesstridespytyperE  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=ra  )	r5  _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  g  s     	@@BBB00223L KE<%L'M	a 	a 	a 3 	a 	a| 	a 	au 	a 	a	a 	a0=	a 	aFK	a 	aV]	a 	a 	a  r   dctdict[Any, Any]keyc                `    t          t          |                                         |          S r   )r  r   r   )r  r  s     r   get_key_indexr  |  s)    
 !#&&''--c222r   r   c                    d|  d| dS )Nlist(dict.keys())[]rV  )rc  r   s     r   get_key_index_sourcer    s    0V000000r   objr	   c                T    t          dt          |            d|  ddz   dz             )NType  for object  cannot be saved @into torch.compile() package since it's defined in local scope. @Please define the class at global scope (top level of a module).)	TypeErrorrE  )r   s    r   raise_local_type_errorr(    sB    
=S		==s===
L	M
L	M  r   r   c                    t          | t          j        j                  o!t          j        pt          |           t          u S r   )r  r5  r9  r:  rR   inline_inbuilt_nn_modulesr   r   )r  s    r   $should_optimize_getattr_on_nn_moduler+    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_dictNr^  l1_keyl2_key)r   r   r   r/  r   r0  r1  rV  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                t   | j         j        }t          | j        t                    r| j        j        }n,t          |t
                    sJ t          || j                  }t          ||          }t          t          |                    |         }t          |t          t          f          r	| d|d}	n| d| d}	t          | j        t                    sH|                    ||| j        t          j                                      | j        | d|gd            |                    ||	||          S )N[r  r   rc  r5  r6   == )r  r  r  r   r_   r)  r  r  r  r   r   r   get_key_managerr7  GUARD_MANAGERadd_equals_match_guardget_value_manager)
rc  r3  r4  r5  r6  base_source_namer   
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerrD    sl    {'&, 233 @",d333330&,??%&6>>J ./ABBCCEJ#c3Z00 ;*CC->CCC*::Z:::fl$677 

 	** ,/=	 	+ 	
 	

 !
 LjCC.?CCDd
 
 
 //#-	 0   r   r;   c                    | j         }t          |t                    rdS |                                 rdS |                                ot          |t
                     S NFT)r  r  ru   is_specialized_nn_moduleis_dict_keyrn   )rQ  rc  s     r   match_on_id_for_tensorrI    sa    %F &+,, u%%'' tF
6:(F(F$FFr   c                  $    e Zd ZU ded<   ded<   dS )GuardCodeListrR  	code_listr;   rQ  Nr   r   r   r   rV  r   r   rK  rK    s%         LLLLLr   rK  c                      e Zd ZdZdZdS )r7  rQ      N)r   r   r   r=  DICT_GUARD_MANAGERrV  r   r   r7  r7    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ddZdd!Zedd$            Zdd/Zdd1Z	dd3Z
dd5Zdd6Zdd7Zdd8Z	 	 ddd?Z	 dddCZddEZddIZddJZ	 dddLZddMZddNZddQZddRZddSZddTZdddWZ	 dddXZdddYZddZZdd[Zdd\Z dd]Z!dd^Z"dd_Z#dd`Z$dddaZ%ddbZ&ddcZ'dddZ(ddeZ)ddfZ*ddgZ+ddhZ,ddiZ-ddjZ.ddkZ/ddmZ0ddnZ1ddoZ2ddpZ3ddqZ4ddrZ5ddsZ6ddtZ7dduZ8ddvZ9ddwZ:ddxZ;dddy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   r\  r   check_fn_managerCheckFunctionManagersave_guardsr   runtime_global_scoper  guard_filter_fn=Callable[[Sequence[GuardFilterEntry]], Sequence[bool]] | Noner   r   c                   || _         || _        || _        || _        ||d| _        t          j                    | _        |
p|| _        t          j
                                        | j        d<   t          j        j        j                                        D ]]\  }}|                    dd                              dd                              dd          }|| j        d         |<   || j        |<   ^|| _        g | _        g | _        g | _        g | _        g | _        || _        i | _        |	| _        || _        t9                      | _        | j        j        J | j        j        j        D ]>}|                      |          }| j        !                    tE          |                     ?i | _#        i | _$        t9                      | _%        g | _&        tN          j(        otS          d          | _(        tU                      | _+        d S )	NLG__builtins__>_<._dot_!pytorch/compiler:guard_nn_modules),rT  rU  rW  rY  scopeweakrefWeakKeyDictionarysrc_get_value_cacher_  builtins__dict__copyr5  packagepackage_importer_package_imported_modulesr   r  r\  argnamesr   shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managersr\  guard_tree_valuesr^  r`  r   key_order_guarded_dict_idsoutput_graphguard_on_key_ordergetr   idr   _cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codesrR   guard_nn_modulesrF   rM   already_added_code_parts)r   rT  rU  rW  rY  r[  r   r\  r\  r^  r_  r`  r  package_modulerc  dict_objs                   r   r   zGuardBuilder.__init__  s
    $.9D<3X3X
%'' 	  %9$HL!%-%6%;%;%=%=
>" ]+EKKMM	. 	. 
<<S))11#s;;CCCQQD/=DJ~&t,-DJt*#%)+	
 46 46%EG.6F13&. +.%%'$1===+8K 	> 	>Fxx''H+//8====
 BD @B#DGEE+BD( & 7 !
O/=
 =
 :D%%%r   r5  r  rQ  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   r9  r  r  rc  r5  r6  )
get_guard_managerr  r   NotImplementedErrorr  r  r   rc   get_guard_manager_typedict_getitem_manager)	r   r5  rQ  dict_mgrdict_sourcer  r  rC  r6  s	            r   #guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_orderF  s     ))%00h 011 	%SFKjS S   .3 %]33 	 	C!#&E,U-ESQQQL!%!<!<m" " ))%00000##5	 *    	 	r   r  c                v   |                      |          }t          |t                    st          d|j                   t          |t                    sJ t          t          |                    D ]\  }}t          |j        |          }|                    |||t          j
                  }t          |          rH|                     ||          }|                    |t          d| d| d|          |j                   |                    |t          | d||          |j                   d S )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r:  z__check_obj_id(r`  ra  r;  )r  r  r   r  r  	enumerater   r  r<  r7  r=  r   rU  add_id_match_guardr  r  r>  )	r   r  rQ  r  rk  r  rA  key_managerid_vals	            r   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_orderd  s    ))%00($455 	%H;@:H H   ($455555 ""3E":":;; 	 	HC-ej#>>J"22!!#3#A	 3  K ~~ S*55..*A*AAAAA5  $    22*j+E+Ec+E+EuMM$   )	 	r   r   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  rQ   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)rR   issue_3_13_0_warningsysversion_infowarningswarnRuntimeWarning)r5  s    r   '_get_generic_dict_manager_example_valuez4GuardBuilder._get_generic_dict_manager_example_value  sR     '		 G++ :--M_   4r   rc  rW   r3  r   r4  r@  r   source_namer6  r7  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   r4  r5  r6  r7  r   c                >   t          | t                    rpt          ||          }d| d|d}|                     |||t          j                                      || d|gd            |                     ||||          S |                     ||||          S )Nr  r  r  r:  r;  r  )	r  r   r  r<  r7  r=  r>  r?  r  )r  r  r  r4  r5  r6  r   rA  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.JDQQQ ,,&"/'9	 -    //&"/'9	 0   r   FNT_parameters_buffers_modulesattrrc  r5  r6  	.__dict__rc  r5  r6  )r  r  r  r4  r5  r6  )r  r   r  r   r  r   r4  r   r5  r   r6  r7  r   r   )memberrr  r   r  getmror   updatekeysr.  r/  getattr_managerr0  r1  rW   r  r  r  get_generic_dict_managerr  r7  r=  )r   rc  r3  r4  r5  r@  r  r6  r  	attr_namemod_dictall_class_attribute_namesrw  accessor_infor0  r1  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_modulez!GuardBuilder.getattr_on_nn_module  s   6#	 #	 #	 #	J M	%..1ee! 2 <== 	@ 	@A%,,QZ__->->????0dCC  4T9dKKMMh&&98O+O+O4T=)TTMM8##	Xj5I(I(I4T:yQQMM666h&&Xj111 5T:yQQM4 B	 &55]"+#5	 6    !''''")F")F "2<<<O.22N^"&&Hx<@@!$9 &v{F;;	!*#F+ )-(C(CIx(X(X%!,((,(C(CM) )%% "-((,(C(CM) )% (:'R'R&"JJ8TT#3#A (S ( ($ )(,*#+&#8  F  	%16K6W6WW** .'/"*'<    Mr   r?   c                v    |j         }|dk    rdS t          |                     |                    }|| j        v S )Nrr  F)r  r  r  r|  )r   rc  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   )	r7  r=  r  r  r   rP  r   	frozensetr)  )r   rc  r5  r6  s       r   r  z#GuardBuilder.get_guard_manager_typeA  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   )r7  rP  )r   r  s     r   manager_guards_on_keysz#GuardBuilder.manager_guards_on_keysW  s    +>>>r   c                |    | j         j                            | j        d| j        d         t
          j                  S )Nre  )	f_globalsrc  r5  r6  )r\  r   globals_dict_managerr_  rm  r7  r=  r   s    r   get_global_guard_managerz%GuardBuilder.get_global_guard_managerZ  s=    !&;;/*S//=	 < 
 
 	
r   c           	        | j         j        }d }j        }|dk    r|| j        v r| j        |         S |dk    r,|                               }|| j        t          |          <   |                     |          }d }d }d }t          j	        }	t          t                    r[j        j        }|                     j                  }|                     j                  }|                     j        |          }	t          t                    r<t!          | j        j                  }
|                    j        |
f|||          }
nt          t(                    r2|                                                     j        |||          }
nCt          t0                    r2|                                                     j        |||          }	nt          t4                    r|S t          t6                    r|S t          t8                    r|sJ |                    |||          }	nt          t<                    r|sJ |                    |||          }	nht          t@                    r|sJ |!                    |||          }	n5t          tD          tF          tH          tJ          tL          f          r|sJ |}nt          tN                    r7tQ          j)        j*                  }|+                    |fd|||          }nt          tX                    r|+                    fd|||          }nt          tZ                    r|+                    fd|||          }nMt          t\                    r|sJ |/                    |||          }nt          t`                    r$|sJ |1                    j2        |||	          }nt          tf          th          tj          f          rk|sJ t          tf                    sJ tm          |          r!|sJ | 7                    ||||||          }nt|8                    j2        |||	          }nTt          tr          tt          f          r|sJ t          |tv          tx          j=        f          sJ t          tr          tt          f          sJ t          |t|                    r,| ?                    |	          sJ t          ||||          }nt          jA        t                    rt          d
          |                    jA        |||          }nit          t                    rD t          |djF        j        G                                 d          jH        |||          }nt          t                    r$|sJ |J                    jH        |||          }nt          t                    r$|sJ |L                    jA        |||          }nt          t                    r|sJ t          |tv          tx          j=        f          r
J d            t          |t                    r'jO        s |L                    jA        |||          }nt          |t                    r'jO        s |Q                    jA        |||          }njA        }jO        rR                                }|S                    ||||          }nt          t                    r|sJ |sJ t          |          sJ jV        sE|W                    ||jX        t          j	                  S                    jY        |||          }n+|jZ        }|J |dz   }|[                    ||t          j	                  }t          |t|                    rJ |                    jY        |||          }nt          t                    r$|sJ |+                    t          |||          }nt          t                    r |sJ |+                    d |||          }nTt          t                    r |sJ |+                    d |||          }nt          t                    r |sJ |+                    d |||          }nt          t                    r |sJ |+                    d |||          }nt          t                    r |sJ |+                    d |||          }nt          t                    r |sJ |+                    d |||          }nKt          t                    r$|sJ |e                    jA        |||          }nt          t                    rDt          |t|                    st          d          |g                    jA        |||          }nt          t                    r$|sJ |i                    jA        |||          }nt          t                    r|sJ |k                    |||          }nMt          t                    r|sJ |m                    |||          }nt          t                    r|sJ |+                    d |||          }nt          t                    r|sJ |+                    d |||          }nt          t                    r|sJ |q                    |||          }nt          t                    r|sJ |s                    |||          }nNt          t                    r|sJ |+                    d |||          }nt          d dj                   || j        j        <   |S )Nrr  r  )global_namerc  r5  r6  r  c                    |S r   rV  )rh  r  s     r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    ! r   )python_lambdarc  r5  r6  c                F    t                                                    S r   )r   
_get_indexrh  rc  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)rk  rc  r5  r6  zUse DictGetItemSourcez.__kwdefaults__c                6    |                                  d         S r   __tensor_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>|  s    (<(<(>(>q(A r   c                *    |                                  S r   )__obj_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (9(9(;(; r   c                N    |                                                                  S r   )_typequalified_namer  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    		(@(@(B(B r   c                *    |                                  S r   )get_baser  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    

 r   c                *    |                                  S r   )itemr  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s     r   c                *    t          j        |           S r   )r5  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 - )ur\  r   r  r  r  r{  r  r  r7  r=  r  r[   r  get_guard_manager_from_sourcer   rq   r   rT  
local_nameframelocals_managerrk   r  r  r  rm   global_weakref_managerrl   rx   r~   type_managerr|   type_dict_managerr}   type_mro_managerrv   rs   r   r   rh   ro   r  r  module_namelambda_managerrz   r`   rn   grad_managerri   generic_getattr_managerr  rW   rZ   r   r+  r  r  rc   rd   r)  r  r  r   r  rD  r   r_   RuntimeErrorr5   getattrproplowerrk  r.   indexed_managerrp   list_getitem_managerrj   r  index_is_slicerC  tuple_getitem_managerunpack_slicegetitem_managerrb   callableis_kwfunc_defaults_managerr   idx_keyr   func_kwdefaults_managerru   r  ry   rf   rw   rV   rY   rg   r{   tuple_iterator_getitem_managerAssertionErrorr<  rt   set_getitem_managerr   weakref_call_managerrX   call_function_no_args_managerra   rr   r]   code_managerr\   closure_managerre   )r   rc  root_guard_managerr5  r  r6  r@  r4  r3  base_guard_manager_enumr   outmoduler   
kwdefaults	kw_sourcer  s    `               r   r  z*GuardBuilder.get_guard_manager_from_sourceb  sJ   !/4k"0K!K!K.{;;" HHV,,M8ED"2m#4#45!88OO  !!"2"@fm,, 	%{/!%&+!6!6!%!C!CFK!P!P&*&A&A/' '#
 &+&& |	1$+v?PQQO$88&8"+#5	 9  CC FL)) t	 //11FF&"+#5	 G  CC F/00 j	//11HH"."+#5	 I  CC F-.. c	 &%FN++ _	%%FJ'' ]	%%%%$11"+#5 2  CC
 FN++ V	%%%%$66"+#5 7  CC
 FM** O	%%%%$55"+#5 6  CC
 +2"	
 	
 H	 &%%%$CCFL)) |	,V-?@@F$33*0333"+#5	 4  CC F899 t	$33    #+#5 4  CC F/00 k	$33IIII"+#5	 4  CC FJ'' d	%%%%$11"+#5 2  CC
 F-.. ]	%%%%$<<]"+#5	 =  CC Z!35ST
 
 U	 &%%%fj1111134FGG ''''//&&!$&  )88&"/'9	 9   F.0IJKK ~	%%%%049P2QRRRRRf'8:S&TUUUUU,.>?? 223JKKKKK-&&!&  fl,>?? &8   )==&"/'9	 >   F011 e	'"E6;#3#9#9#;#;EEE  J"+#5  CC FM** [	%%%%$44J"+#5	 5  CC F-.. R	%%%%$99L"+#5	 :  CC FM** J	%%%%!"T;+B$C  ' '&' '  ,d33 F<Q (==&"/'9	 >   .66 v?T (>>&"/'9	 ?   ( 2"//11E(88&"/'9	 9   FN++ m	%%%%####./////< (>>+"4"A'7'E ?   "/&"/'9	 "  	  0>
'333,/@@	 .EE$",'7'E F  
 &h0@AAAAA33&"/'9	 4   F-.. J	%%%%$33("+#5	 4  CC F233 B	%%%%$33AA"+#5	 4  CC F566 z	%%%%$33;;"+#5	 4  CC F;<< r	%%%%$33BB"+#5	 4  CC FO,, j	%%%%$3344"+#5	 4  CC F011 b	%%%%$3300"+#5	 4  CC F-.. Z	%%%%$33DD"+#5	 4  CC F677 R	%%%%$CCl"+#5	 D  CC  233 J	02BCC $J   %44l"+#5	 5  CC F;<< ?	%%%%$88l"+#5	 9  CC F-.. 7	%%%%$99"+#5 :  CC
 F455 0	%%%%$BB"+#5 C  CC
 F122 )	%%%%$33;;"+#5	 4  CC F233 !	%%%%$3311"+#5	 4  CC FJ'' 	%%%%$11"+#5 2  CC
 FM** 	%%%%$44"+#5 5  CC
 F/00 	%%%%$33.."+#5	 4  CC !IIIFKII   47#FK0
r   c                6    |                      |j                  S r   )r  r  r   rQ  s     r   r  zGuardBuilder.get_guard_manager   s    11%2JKKKr   Tr   rR  r   r   is_epiloguec                   |t                      }d                    |                                          }t          ||          \  }}i }d| j        d         i}	t
                              d|           t          ||	|            |d         |                                 }
|r#| j	        j
                            |
|d            d S | j	        j
                            |
|d            d S )Nr`  re  zPython shape guard function:
%s___make_guard_fn)r  joinr  build_guard_functionrm  
guards_logdebugexecr+  r\  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 
	Y #=="     #44X?QSWXXXXXr   guard_or_sourceGuard | SourceOptional[dict[str, Any]]c                    t          |t                    r|}n|j        }|t                      }|                    | j        || j                  }|S r   )r  r?   r  r  	get_valuerm  rp  )r   r"  r   srcrets        r   r  zGuardBuilder.get(  sU    
 ov.. 	5!CC!4C,..LmmDJd6NOO
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 )NrO  zinvalid var name: %s)r  r   r  strip_function_callrw  r5  r  r  is_valid_var_namelogwarningr  )r   rQ  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  )r]   r  rW   r;   r  r  create)r   rQ  r  r   attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attributeK  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        |           nI|	                    ||j        |
|           n*|	                    |t'          ||          |j                   | j                            |           d S )Nzinvalid source hasattr(r`  ra  znot hasattr()provided_guarded_objectr  )r  r  rs   r  r]   rW   r  r  r0  rt  r  r  _set_guard_export_infor  r  r+  r  r  add_no_hasattr_guardr  r  r   )r   rQ  rc  base_sourcer  r  refvalr   base_managerr5  r4  r6  s                r   HASATTRzGuardBuilder.HASATTR\  sH   )fn-- 	![Ffj)) 	F&*--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 	 !HHV,,M!%+!6!6!%!<!<V]!S!S 44FGG )) &!K&    ,, :"/'9	 -     --,T5995;K   	%))$/////r   r  c                   |J |                      |          }|                     |          }|                     |          }d|d| d}|| j        v rd S |j         d}|                    ||                     |j                  t          j	                  }|
                    d|t          ||          |j                   | j                            |           d S )Nznot ___dict_contains(r`  z
.__dict__)r  r  F)r0  r  r  r  r  r  r  rr  r7  r=  add_dict_contains_guardr  r  r   )	r   rQ  r  r=  r>  r?  r   r  r  s	            r   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT  s    ll5!!hhuoo--e44@t@@@@@4000F"Z222#/#H#H"FFs|TT/= $I $
 $
  	!88"4//		
 	
 	
 	%))$/////r   c           	     ,   |                      |          }t          |t          j        j                  r|j        r|j        }nt          |          }|j        |j        k    rd|_	        | 
                    |d|j         d          }t          |          }d|                     |           d| d| }|                     ||g           |                     |                              |t#          ||d|j                   |j                   d S )	NTtype(ra  z___check_type_id(r`  ), type=ztype )r  )r  r  r5  _subclasses
FakeTensorr
  rE  r   r   _unserializablerU  r  rp  r0  r:  r  add_type_match_guardr  r  )r   rQ  r  rd  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%%::"e,DAN,D,D   	
 	
 	
 	
 	
r   c                V   |                      |          }|                     |          }t          |                     |                    }d| d| }|                     ||g           |                     |                              |t          ||          |j                   d S )Nz___dict_version() == )r0  r  r   r:  r  add_dict_version_guardr  r  )r   rQ  r=  r>  versionr   s         r   DICT_VERSIONzGuardBuilder.DICT_VERSION  s    ll5!!hhuootxx//5#55G55##ED6222 	u%%<<'e44e6F	
 	
 	
 	
 	
r   r  invertc                H   |                      |          }|rdnd}| d|d| d}|| j        v rd S |                     ||g           |                     |                              | |t          ||          |j                   | j                            |           d S )Nnot rr  z___dict_contains(r`  ra  )r0  r  r:  r  rB  r  r  r   )r   rQ  r  rR  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"4//		
 	
 	
 	%))$/////r   c                @   |                      |          }|}| }d| d|d}|| j        v rd S |                     ||g           |                     |                              ||t          ||          |j                   | j                            |           d S )Nzset.__contains__(r`  ra  )r0  r  r:  r  add_set_contains_guardr  r  r   )r   rQ  r  rR  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%%<<"4//		
 	
 	
 	%))$/////r   c                   |                      |          }|                     |          }t          |t                    sJ | d|g}|                     ||           |r>|                     |                              t          ||          |j                   d S |                     |          	                    t          ||          |j                   d S )Nr;  )
r0  r  r   r   r:  r  add_true_match_guardr  r  add_false_match_guardr   rQ  r=  r>  r   s        r   
BOOL_MATCHzGuardBuilder.BOOL_MATCH   s    ll5!!hhuooc4     ##C##$##E4000 	""5))>>&tU33U5E     ""5))??&tU33U5E    r   c                   |                      |          }|                     |          }|J | dg}|                     ||           |                     |                              t          ||          |j                   d S )Nz is None)r0  r  r:  r  add_none_match_guardr  r  r`  s        r   
NONE_MATCHzGuardBuilder.NONE_MATCH  s    ll5!!hhuoo{{{   !##E4000u%%::"4//1A	
 	
 	
 	
 	
r   r  r^  c                .    |                      ||          S r   )id_match_unchecked)r   rQ  r  s      r   ID_MATCHzGuardBuilder.ID_MATCH  s     &&un===r   c                @   t          |j        t                    r7|                     t	          |j        j        t          j                            S |                     |          }|                     |          }| 	                    ||j
                  }	 t          |          }n(# t          $ r dt          |          j         d}Y nw xY wd| d| d| }|                     ||gd           |                     |                              |t%          |||          |j                   t          |j        t(                    rNt          |t*          j        j                  r1|j        j        }|                     |          }	|	|	| j        |<   d S d S d S d S )Nri  rg  z___check_obj_id(r`  rF  rg  )provided_func_name)r  r  r~   rL  r;   r  rS  r0  r  rU  r  rp  	ExceptionrE  r   r:  r  r  r  r  rq   r5  r9  r:  r  rY  r   )
r   rQ  r  r=  r>  r  rK  r   r  weak_ids
             r   rf  zGuardBuilder.id_match_unchecked&  s    e.
;; 	??e.3\5LMM   ll5!!hhuooS%*--	2S		II 	2 	2 	2 2DII.111III	2 E#DDDDDD##ED6j#QQQu%%88"4??	
 	
 	
 e.<< 	? #ux// ?"5@
..s33&7>D(444	? 	?? ? '&s   B( ("CCc                B   |                      |          }|                     |          }t          |t          j                  sJ | d}|                     ||g           |                     |                              t          ||          |j	                   d S Nz is not None)
r0  r  r  r5  r6  r:  r  add_not_none_guardr  r  )r   rQ  r  r=  r>  r   s         r   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCHM  s    ll5!!hhuoo#u|,,,,,#####ED6222u%%88"4//1A	
 	
 	
 	
 	
r   c                &   |                      |          }|                     |          }t          |t          j        j                  sJ | d|d}|                     |                              |t          ||          |j	                   d S )Nz.raw_repr() == z.raw_repr())
r0  r  r  r5  r  r   r  add_dispatch_key_set_guardr  r  )r   rQ  r=  r>  r   s        r   DISPATCH_KEY_SET_MATCHz#GuardBuilder.DISPATCH_KEY_SET_MATCHX  s    ll5!!hhuoo#ux677777>>C>>>
u%%@@":u55	
 	
 	
 	
 	
r   c                    | j         j        J | j         j        j        }d| g}|                     ||           | j        j                            |t          ||          |j                   d S )Nz,torch.autograd.forward_ad._current_level == )	r\  r}  
dual_levelr:  r\  r   add_dual_level_match_guardr  r  )r   rQ  rt  r   s       r   
DUAL_LEVELzGuardBuilder.DUAL_LEVELd  s     $1===*7B
KzKKL##E4000::"4//	
 	
 	
 	
 	
r   c                <   | j         j        J | j         j        j        }d |D             d dg}|                     ||           t          j        j        j        d	fd}| j        j	        
                    |t          ||          |j                   d S )
Nc                6    g | ]}|                                 S rV  )	get_state)r  cis     r   rY  z6GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.<listcomp>v  s     ///R",,..///r   z5torch._functorch.pyfunctorch.compare_functorch_state(ra  rw  r   r   r   c                               S r   rV  )rw  
compare_fnstatess    r   fnz.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn}  s    :f%%%r   r  )r\  r}  functorch_layersr:  r5  
_functorchpyfunctorchcompare_functorch_stater\  r   r  r  r  )r   rQ  cisr   r~  r|  r}  s        @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCHq  s     $1===#0A//3///QQQQR##E4000 %1I
	& 	& 	& 	& 	& 	& 	& 	00&tU33U5E	
 	
 	
 	
 	
r   c                \   t           j        j        j        j        t           j        j        j        j        dfd                        d g}|                     ||           dfd
}| j        j        	                    |t          ||          |j                   d S )NhooksCtuple[Callable[[torch.Tensor], Any], Callable[[Any], torch.Tensor]]r   Optional[tuple[int, ...]]c                b     |           sd S t          t          t          |                     S r   )rC  mapr  )r  are_inline_hookss    r   hooks_ids_fnz?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fn  s3     $#E** tR(((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == rw  r   r   c                2                            k    S r   rV  )rw  	get_hooksguard_hooks_idsr  s    r   r~  z5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fn  s    "ll99;;&?&???r   )r  r  r   r  r  )r5  r  _aot_autogradr  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineabler:  r\  r   r  r  r  )r   rQ  r   r~  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3U5E	
 	
 	
 	
 	
r   c                   |                      |          }t          |                      |                                          d                   t          |d          r&t	          |           t          |          dfd}ndfd}d	t          |           d
t          j                     }| 	                    |          
                    |t          ||          |j                   d S )NrQ   __metadata_guard__rw  r   r   r   c                `                         |                                 d                   S r   )r  r  )rw  clsoriginal_metadatas    r   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s1    --%q';';'='=a'@  r   c                @    |                                  d         k    S r   r  )rw  r  s    r   r  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s     ++--a04EEEr   ___check_metadata__cr  )r  r   r  rt  r   rE  r  r8   current_compile_idr  r  r  r  )r   rQ  r  r  r  r  r  s        @@r   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH  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";66	
 	
 	
 	
 	
r   c                    t          |                     |                    dfd}dt          |           }|                     |                              |t          ||          |j                   d S )Nrw  r   r   r   c                2    |                      d          S )NT)skip_shapes)_check_equals)rw  r  s    r   r   z1GuardBuilder.DTENSOR_SPEC_MATCH.<locals>.guard_fn  s    ??5d?;;;r   __dtensor_spec_r  )r   r  r  r  r  r  r  )r   rQ  r   r   r  s       @r   DTENSOR_SPEC_MATCHzGuardBuilder.DTENSOR_SPEC_MATCH  s     %))	< 	< 	< 	< 	< 	< 0H//u%%66,T5995;K	
 	
 	
 	
 	
r   c                   |                      |          }t          t          |                    rj        sdS t	                              |                    d	fd}dt          |           dt          j                     }|                     |          	                    |t          ||          |j                   dS )
z=Guard on the values returned by the opaque object's guard_fn.Nrw  r   r   r   c                :                         |           }|k    S r   )r   )rw  current_valuesopaque_infooriginal_valuess     r   opaque_guard_checkerzDGuardBuilder.OPAQUE_OBJ_GUARD_FN_MATCH.<locals>.opaque_guard_checker  s(    (11 N "_44r   ___check_opaque_guard_fn_r  r  )r  rC   rE  r   r   r  r8   r  r  r  r  r  )r   rQ  r  r  r  r  r  s        @@r   OPAQUE_OBJ_GUARD_FN_MATCHz&GuardBuilder.OPAQUE_OBJ_GUARD_FN_MATCH  s     )$u++66 	+"6 	F";#7#7#>#>??	5 	5 	5 	5 	5 	5 	5 t"5I2J2JssnNoNqNqssu%%66 ";66	
 	
 	
 	
 	
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\                    rrt_          j0        |          r^d| d| d	g}| 1                    ||           | 2                    |          3                    ti          ||          |j5                   d S t[          |tl                    rrt          j0        |          r^d| d
| d	g}| 1                    ||           | 2                    |          7                    ti          ||          |j5                   d S | d|g}t[          ||          rtq          |          }ti          ||          }rfd|D             }| 2                    |          9                    |||j5                   | 1                    ||           d S )NrV  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  rV  r  s     r   rY  z-GuardBuilder.EQUALS_MATCH.<locals>.<listcomp>B	  s7     " " "7;422222" " "r   ):r0  r  r  int8int16int32int64uint8uint16uint32uint64float16float32float64r  r   rC  r   rE  r  sliceranger   r5  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  rL   r  is_constant_classrD   r   r  r  r  r:  r  add_float_is_nan_guardr  r  complexadd_complex_is_nan_guardr   r>  )r   rQ  r  r=  r>  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%%<<#U%5	
 	
 	
 	##E4000r   c                F   |                      |          }t          |t                    r|                     |           d S ||                     |           d S t          |t
          j                  r|                     |           d S |                     |           d S r   )	r  r   r   ra  rd  r;  CodeTyperg  r  r   rQ  r>  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCHL	  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.Modulerr  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)rg  r  rt  r   r  r   r  r6  rS  r  rT   unimplementedrE  r  s      r   	NN_MODULEzGuardBuilder.NN_MODULEW	  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)rg  r  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCHk	  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)r  r  isclassr  r  rf  r  s      r   CLASS_MATCHzGuardBuilder.CLASS_MATCHp	  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)r  r  ismoduler  r  rf  r  s      r   MODULE_MATCHzGuardBuilder.MODULE_MATCHy	  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)
r  rE  r;  r<  rt  r6  rS  r@  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   )	r^  r  r  rc   r\  used_builtin_varsr   r   rf  r  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCH	  s`     	%24EFF %7;;,2   &&u---r   c                   |                      |          }|                     |          }t          |t                    s|                     |           g }t          |          dk    r|                    d|            n(|                    d| dt          |                      |                     ||           t          |t                    rL|                     |          	                    t          |          t          ||          |j                   d S |                     |                              t          |          t          ||          |j                   d S )Nr   rT  zlen(rN  )r0  r  r  r)  rL  r   r  r:  r  add_dict_length_check_guardr  r  add_length_check_guardr   rQ  r=  r  r   s        r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTH	  sb    ll5!!%&& 	#OOE"""u::??KKs%%%%KK5s55U55666##E4000eT"" 	""5))EEE

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

&tU33     r   c                   |                      |          }|                     |          }t          |          }g }|                    d| dt	          |                      |                     ||           t          |          }|                     |d|j         d          }|                     |          	                    t	          |          |t          ||          |j                   d S )Nz___tuple_iterator_len(rN  rE  ra  )r0  r  rE  r  r   r:  rU  r  r  add_tuple_iterator_length_guardr  r  )r   rQ  r=  r  rd  r   r  s          r   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LEN	  s    ll5!!KKRSRR7I%7P7PRRSSS##E4000KKQ 5
 5 5 566u%%EEu%%"4//		
 	
 	
 	
 	
r   c           
        |                      |          }|                     |          }t          |          }g }t          |          }|                    d| d|            |                     ||           t          |          }|                     |d|j         d          }|\  }}	}
|                     |          	                    ||	|
|t          ||          |j                   d S )Nz___normalize_range_iter(rN  rE  ra  )r0  r  rE  r   r  r:  rU  r  r  add_range_iterator_match_guardr  r  )r   rQ  r=  r  rd  r   normalized_range_iterr  startstopsteps              r   RANGE_ITERATOR_MATCHz!GuardBuilder.RANGE_ITERATOR_MATCH	  s   ll5!!KK 4U ; ;PsPP9NPPQQQ##E4000KKQ 5
 5 5 5661tTu%%DD"4//	
 	
 	
 	
 	
r   source_bc                   t          |j                  st          |          rd S | j        r`t          |          x}r| j        j                            |           t          |          x}r| j        j                            |           | 	                    |          }| 	                    |j
                  }t          |j                  st          |          rd S ||f}|| j        v rd S | j                            ||f           | j                            ||f           | d| g}|                     ||           t          j        r<|d         }t!          ||          d         }	| j                            ||	f           d S t'          |                     |          |                     |          t!          ||          |j                   d S )N is r   )r2   r  r^  r-   r\  additional_used_local_varsr   r,   additional_used_global_varsr0  r  r1   r  r:  rR   #use_lamba_guard_for_object_aliasingr  r  r  r!   r  r  r  )
r   rQ  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	          ||          |j                   d S rm  )r0  r:  r  rn  r  r  r   rQ  r   s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE
  sw    <<&&4445##E4000u%%88"4//1A	
 	
 	
 	
 	
r   c           	     \   |                      |          }|                     |          }g }|                    d| dt          |                                                      |                     ||           |                     |                              |||j                   dS )z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	r0  r  r  r  r  r:  r  add_mapping_keys_guardr  r  s        r   MAPPING_KEYS_CHECKzGuardBuilder.MAPPING_KEYS_CHECK
  s    ll5!!ACAAT%**,,-?-?AABBB##E4000u%%<<4)	
 	
 	
 	
 	
r   c           
        |                      |          }|                     |          }|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)) == )r0  r  r5  r  rL   SUPPORTED_NODESrQ  r  r  r  r   r:  r  r  r  r  r  s        r   DICT_KEYS_MATCHzGuardBuilder.DICT_KEYS_MATCH!
  s   ll5!!EK'777e$$$FU###
 	ScSS6G6N6N1O1OSSTTT##E4000++E,DEE 	C--eU;;;;;44UEBBBBBr   c                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)rR   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   rV  r  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODEA
      r   c                    d S r   rV  r  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMSD
  r  r   c                    d S r   rV  r  s     r   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATEG
  r  r   c                    | j         j        }|J |j        }|| j         _        d| j         j                                         g}| j        j                            |||j                   d S )Nz ___check_global_state() against )	r\  r}  global_state_guardglobal_state__getstate__r\  r   add_global_state_guardr  )r   rQ  r}  r  r   s        r   GLOBAL_STATEzGuardBuilder.GLOBAL_STATEJ
  s    ,9'''#6-9* ct/D/Q/^/^/`/`bb
 	66$ 0	
 	
 	
 	
 	
r   c                    | j         j        J t          | j         j                  | j         _        | j        j                            | j         j        dg|j                   d S )Nz$___check_torch_function_mode_stack())r\  torch_function_mode_stack$make_torch_function_mode_stack_guard"torch_function_mode_stack_check_fnr\  r   #add_torch_function_mode_stack_guardr  r  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATEX
  st    $>JJJ0%?  	@
 	CC!;34	
 	
 	
 	
 	
r   c                   |j         t          j        u sJ | j        j        J d| j        j        j        g}|                     ||           |                     |                              t          ||          |j
                   dS )z/Guard on CURRENT_DEVICE per torch.utils._deviceNzutils_device.CURRENT_DEVICE == )rc  r>   GLOBALr\  r}  current_devicer:  r  add_default_device_guardr  r  r  s      r   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICEe
  s    |{11111$1===cd.C.P._cc
 	##E4000u%%>>"4//1A	
 	
 	
 	
 	
r   c                
   #$%& ddl m} |j        dk    sJ  j        j        &&J  j        j        1 j        j        }|j        }|j        }|j        |j        }|j	        }njt          &|          sJ &j        J &j        j        pg $d $D             %d&&fd
}&j        ri }	g }
g }i }t                      }&j        D ][}|j        &j        v r1t"          j        j                            ||&j        |	|
|||           At*                              d           \t/          |
|t1          |                                          |d          #nd #d'#$%& fd}t4          j        r3	  |d          \  }}}d}n0# t8          $ r d} |d          \  }}Y nw xY wd} |d          \  }}&j        s&j                                          j        rt?                                           d          }|t          |tB                    sJ |g n%t1          |j"        #                                          }tI          |||||           j        _        |j%        D ]} &                    ||g           tO          j(                    x}r|j)        *                    |j%                   g }g }|s|sJ |j%        |j"        }}|sd S |+                                D ]\  }}t          |tX                    rd}                      |i tZ          t]                                }t          |t^                    r|0                    ||f           vt          |tb                    r|0                    ||f           d}|sdd l2}ddl3m4} |sJ |j%        |j"        }}tk          ||z             }	  fdtm          |          D             }d7                    d tm          |          D                       }d7                    d tm          |          D                       }|rd| d}|rd| d}tq          j9        d | d!| d"d#7                    |           d$          } tt          ;                    d%| |j%                   |<                    |           }!|=                    |!j>        |j?                  j@        }"|"sJ 	 t          |t          |          t          |          |"|!|j%        |jC                   d S # t"          jD        jE        jF        $ r Y nw xY w|j%        r9 G                    |j%        |j%        i tZ          t]                                 d S d S )(Nr   r   rr  c                    g | ]	}|j         
S rV  )symbolic_contextr  r  s     r   rY  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 rV  )r5   r4   SIZE)r  rc  r  s     r   rY  z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>
  s:         )1DcJJ  r   )tracked_fakes_id_to_source)r/  r  r}  s    `r   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources
  s9        #/"I$"O   r   z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlylangstuple[str, ...]list[_ShapeGuardsHelper]c           	         j                             d D             d D             j        j         |           S )Nc                    g | ]	}|j         
S rV  )faker.  s     r   rY  zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>
  s    (((QV(((r   c                    g | ]	}|j         
S rV  )rc  r.  s     r   rY  zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>
  s    ***!QX***r   )input_contextsequalities_inputsrW  ignore_staticr;  )	shape_envproduce_guards_verboserW  export)r;  rC  r  rB  r}  r   s    r   _get_code_partsz/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts
  s_    #-DD((R(((**r***#1&7# (4':#: E 
 
 
r   )pythonverbose_pythoncppT)rI  rJ  cpp_code_parts)python_code_partsr   rL  python_fallbackshape_env_sources)r   )CppCodeCachec                \    g | ](\  }}                     t          ||                    )S rV  )r  r.   )r  irc  r   s      r   rY  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  NrV  r  rR  rh  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  NrV  rT  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   r0  )r;  r<  r   r=  )Htorch._dynamo.output_graphr   r  r\  r}  shape_code_partsrM  r   rL  rN  r  rE  tracked_fakesexport_constraintsr   r/  r4  r5  rG  dynamic_shapes_process_equalitiesr-  r.  rI   r  r+  rR    enable_cpp_symbolic_shape_guardsOverflowErrorfreezer^  localsr  rG   source_to_symbolr  ShapeCodePartsexprsr:  r8   try_getshape_env_guardsr*  r   r^   rK   r  r   r  r  ctypestorch._inductor.codecacherP  r)  r  r  textwrapdedentr  r  loadcastrQ  c_void_pr  r#   r   r  	_inductorrT   InvalidCxxCompilerr!  )'r   rQ  r   rY  rM  r   rL  rN  r5  namesr6  r7  r8  r9  
constraintrH  maybe_cpp_code_partsmaybe_shape_env_sourcesr   compile_contextint_source_to_symbolfloat_source_to_symbolr   rb  rc  rU  r5  rg  rP  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardrC  r  rB  r}  s'   `                                  @@@@r   	SHAPE_ENVzGuardBuilder.SHAPE_ENVs
  s   @@@@@@zR,9''' 1=#4E 0 B!1!D.:!1!@.>OO l,=>>>>>)555'5;B=="===N      . )46<>  # 68/2uu"."A S SJ!,*QQQ3GG&'(2!(.++	 	 	 	 $QRRRR$6!-'9$()?)?)A)A$B$B$3#% % %!! %)!          6  ((KLL J%'9> ',OO$   &*O<KO4= =9%'9'9'9 #'8G09 95!#5  & 0&--/// 	 $*88<<0@#A#A '/:$&;4 4// 
 (/ .?DDFFGG $
 6D"3#53 /"96 6 6D!2 &+ 	7 	7D''v6666 -4666? 	N,334F4LMMM!!# 	/!!!> $/	 )J  "2"8"8":": / /fn55 /&*OO$(HH%L%L8I8K8K%L %- % %M "-55 /,33VV4DEEEE#M599 /.55vv6FGGGG +/ K	MMM>>>>>>!!!> $/	 )J  $$8;Q$QRR=" " " "%./?%@%@" " "
 #')) , ,*34H*I*I, , , # # %)II . .*34J*K*K. . . % %!
 # D&C&C&C&CO$ G(F2C(F(F(F%#? #  %  $==44   (   5&,  
 $((22TZAAGv
 -",--.//&,$    ?&9   $ " 	55!'"(DD0A0C0CD 6     	 	s%   .F   FF6DT T! T!c                r   t           j        r|                                rd S t          |          r|                     |           d S t          |t                    r
 |            }||n|                     |          }t          |          }t          j
                            |          }t          |t          j        j                  r|j        |j        }|j        |j        }t          |t          j                  sJ t           j        rt          |t          j        j                  r{t)                      }|                                rY|                    d|                                           |                    d|j                   |                    dd           |                     |          }g }| j        j        J | j        j        j        r|                     |           g d}|D ]}	t=          |j        |	          }
|	dk    rd}	tA          |
          }
|                     |
          }tC          |t          j"        t          j#        f          r,|$                    d| d	|	 d
tK          |                     |$                    | d	|	 d|            nr| &                    |          }t           j'        r3tC          |t          j        j                  sbtQ          |j                  sNt          |j        tR                    s4| j*        $                    |           | j+        $                    |           | j        j        }|j,        |j                 }t[          |d                   }t[          |d                   }t]          t_          ||||||          |          }|j0        }|1                    ||||||||           t          |t          j        j                  s$| j2        j3        4                    |j5                   |j6        J to          |d|j                  \  }}|sBtq          |d          rf|j9        }d| d| d| d}|$                    |           | &                    |          :                    |t]          ||          |j0                   nXd| d}|$                    |           | &                    |          ;                    dt]          ||          |j0                   ty          |dd           x}rad| d|d| d}|$                    |           | &                    |          =                    |fdt]          ||          |j0                   t}          |          dk    r| ?                    ||           d S d S )Nparam_numelparam_bytesparam_countrQ   )r  r  r  
ndimensionr  zndimension()zstr(rj  rN  r;  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)r8  z%, '_dynamo_dynamic_indices') == False_dynamo_shape_idsz
((getattr(z , '_dynamo_shape_ids', None) == z) if hasattr(z(, '_dynamo_unbacked_indices') else True)c                P    t          | d          rt          | dd           |k    ndS )N_dynamo_unbacked_indicesr  T)rt  r  )rw  expecteds     r   r  z+GuardBuilder.TENSOR_MATCH.<locals>.<lambda>3  s4    &q*DEE&GA':DAAXMM!% r   r   )@rR   _unsafe_skip_fsdp_module_guardsis_fsdp_modulerI  rg  r  rP   r  rE  r5  r  _dispatch_keysrG  rH  r
  r  r6  log_compilation_metricsr9  	Parameterr7   in_progress	incrementnumelnbytesr0  r\  r}  rG  rL  rW   r  rX   r   r  r  r  r   r  ,skip_no_tensor_aliasing_guards_on_parametersr3   ru   ry  rz  input_source_to_sizes_stridesr  r  r  r  add_tensor_match_guardr\  r   r   r  rc  r   rt  r  add_dynamic_indices_guardr;  r  r  r   r:  )r   rQ  r  r
  r  metrics_contexttensor_namer   termstermterm_src
real_valuer\  r}  metadatar  r  r   r  static_reasondynamic_indicesr  	shape_idss                           r   TENSOR_MATCHzGuardBuilder.TENSOR_MATCHl  su   1 	e6J6J6L6L 	F "%(( L	9MM%     %//  ".EEDHHUOOE%[[F!H33E::M%!2!=>> 8<+"\F&2$)$7MeU\22222- @*UEHDV2W2W @"5"7"7"..00 @#--mU[[]]KKK#--mU\JJJ#--mQ???,,u--K, !D(5AAA$18 OJ&&&   " 
M 
MD)%*BDIIH|++-#;H#E#E!%(!3!3Jj5<*EFF M$W;$W$W$W$WC
OO$W$WXXXX{$K$KT$K$Kz$K$KLLLL
M !% 6 6u = = GQ ueh&899Q J!4 	Q %U%=?PQQQ 188EEE:AA-PPP#4A'E, 2(62BCC3HX4FGG%;.#%  
& 
&" #-
44&!	 	 	 "%);<< J&9==ejIII< <+++<U5M  OFG  %5";<< &+&CO !h[  !h  !hTc  !h  !hs~  !h  !h  !hIKK	*****511KK'.y%@@(    V;UUU  KK	*****511FF1.y%@@(   !(/BD I II9  !j[  !j  !jZc  !j  !jt  !j  !j  !jIKK	*****511BB+4   
 /y%@@(   4yy1}}++E488888 }r   rL  r9  ri  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_backrT  co_namer   rr  r  r  rn  r=  rE  r  r  enumEnumrC  
ProxyTypesset_export_info)r   rQ  rL  r9  ri  	cur_framecaller	func_namer  guarded_objectguarded_object_typeobj_refsupports_weakrefs                r   r:  z#GuardBuilder._set_guard_export_infoA  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)rT  r   rU  rV  rW  rX  rY  rZ  r[  r  r   r  r\  r   r\  r]  r^  r   r_  r  r`  ra  r   r   )r5  r  rQ  r;   r   r   )r  r  rQ  r;   r   r   )r5  r   r   r  )rc  rW   r3  r   r4  r   r5  r   r@  r   r  r   r6  r7  r   r   )rc  r?   r   r   )rc  r?   r5  r  r   r7  )r  r7  r   r   )r   r   )rc  r?   r   r   )rQ  r;   r   r   r&  )
r   rR  r   rR  r   r  r  r   r   r   r   )r"  r#  r   r$  r   r   )rQ  r)  r   r   )rQ  r;   r  r   r   r1  r   r   )rQ  r;   r   r   )rQ  r;   r  r  r   r   )rQ  r;   r  r   rR  r   r   r   )rQ  r;   r  r   rR  r   r   r   )rQ  r;   r  r^  r   r   )rQ  r;   r  r  r   r   )rQ  r;   r  r?   r   r   )NN)
rQ  r;   rL  rR  r9  r  ri  r^  r   r   )>r   r   r   r   r  r  r>  r  r  r  r  r  r  r  r  r!  r  r0  r6  r@  rC  rL  rQ  rW  r\  ra  rd  rg  rf  ro  rr  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  r$  r)  r}  r  r:  rV  r   r   rS  rS    s=        "<@NF NF NF NF NF`   <' ' ' 'R    \"Y Y Y Yv9 9 9 9" " " ",? ? ? ?
 
 
 
\ \ \ \|L L L L 59 Y Y Y Y YP 26    &       ":0 :0 :0 :0z 370 0 0 0 08
 
 
 
4
 
 
 
0 0 0 0"0 0 0 0&   "

 

 

 

> > > > > =A%? %? %? %? %?N	
 	
 	
 	
 	


 

 

 


 
 
 

 
 
 
&
 
 
 
8
 
 
 
0
 
 
 

 
 
 
0m m m m m^	% 	% 	% 	%   ($ $ $ $
' ' ' '' ' ' '	' 	' 	' 	'. . . .   <
 
 
 
&
 
 
 
0, , , ,\
 
 
 


 

 

 

C C C C2$ $ $ $         
 
 
 

 
 
 

 
 
 
w w w wrR9 R9 R9 R9 R9r 26,01
 1
 1
 1
 1
 1
 1
r   rS  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 )PyExprCSEPassrQ   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_nameNrM  rV  r   r   Configr    s*         """"$$$$$$r   r  c                  (     e Zd Zd	dZd
 fdZ xZS )PyExprCSEPass.ExprCounterrR   r  r   r   c                    || _         d S r   )_config)r   rR   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   )rR   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.ReplacerrR   r  gen_nameCallable[[], str]r   r   c                r    t                                                       || _        || _        g | _        d S r   )r   r   r  	_gen_namepreface)r   rR   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.visit  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   )rR   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   rV  rV  r   r   r  z(PyExprCSEPass.__init__.<locals>.<lambda>  s    q r   )r  r  )_counterr  r  defaultdictr  r   s    r   r   zPyExprCSEPass.__init__  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_var  s)    )$-))r   rd  rR  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   rd  countereexs        r   countzPyExprCSEPass.count  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   )rd  rR  r   r   r  r   r   r  )r   r   r   r  r  	AttributeCall	Subscriptr  dataclasses	dataclassr  NodeVisitorr  NodeTransformerr  r   r  r  r  rV  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  r  rb   rR    guard_nn_modules_using_dict_tags	create_fnrS  r  )rQ  s    r   must_add_nn_module_guardsr    s8    
 	5+^<< 	
 3 :<#99r   c                  (     e Zd Zd fdZddZ xZS )	DeletedGuardManagerWrapperreasonr   r   r   c                V    t                                                       || _        d S r   )r   r   invalidation_reason)r   r  r   s     r   r   z#DeletedGuardManagerWrapper.__init__  s'    #)   r   c                    d | _         d S r   )r   r   s    r   r  z6DeletedGuardManagerWrapper.populate_diff_guard_manager  s    #r   )r  r   r   r   r  )r   r   r   r   r  r   r   s   @r   r  r    sQ        * * * * * *$ $ $ $ $ $ $ $r   r  c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
S )rc  rH   rM  r   zOptional[_CppShapeGuardsHelper]rL  r   rN  r0  rO  NrM  rV  r   r   rc  rc    sN         ))))****3333######r   rc  c                  $    e Zd ZU ded<   ded<   dS )GuardsStater   r}  Optional[ShapeCodeParts]rY  NrM  rV  r   r   r  r    s*         ((((......r   r  c                  0    e Zd ZdddZddZdd	ZddZdS )_MissingNr  r^  r   r   c                    || _         d S r   r  )r   r  s     r   r   z_Missing.__init__  s    r   r   c                    d| j          dS Nz	_Missing(ra  r  r   s    r   __repr__z_Missing.__repr__      *4<****r   c                    d| j          dS r  r  r   s    r   rv  z_Missing.__str__  r  r   r   r   kwargsc                    t                      S r   )r  )r   r   r  s      r   __call__z_Missing.__call__  s    zzr   r   )r  r^  r   r   r   )r   r   r  r   r   r   )r   r   r   r   r  rv  r  rV  r   r   r  r    si            + + + ++ + + +
     r   r  tuple[type, ...]c                     t           j        j        t          j        f} 	 | t           j        j        j        fz  } n# t          $ r Y nw xY w| S r   )r5  r  r  rn  r   _distributed_c10dProcessGroupAttributeError)r(  s    r   _get_unsupported_typesr    sY     	C*799   Js   : 
AAc                      e Zd ZdU fd
ZedVd            ZedWd            ZedXd            ZedYd            ZedZd"            Z	ed[d&            Z
ed\d*            Zed]d-            Zed^d0            Zed_d3            Zed`d5            Zedad9            Zedbd<            Zedcd>            Zeddd@            ZededD            ZedfdH            ZedgdQ            ZdhdTZ xZS )iGuardsStatePicklerr{  dict[int, Any]empty_valuesmissing_valuesr   r   r  r   r   c                     t                      j        |i | t          j                                        | _        t          j        j                                        | _        || _	        || _
        || _        d S r   )r   r   r5  rG  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converterr{  r  r  )r   r{  r  r  r   r  r   s         r   r   zGuardsStatePickler.__init__   so     	$)&)))*99;; % 1 = Q Q S S!2(,r   statetorch.nn.Modulec                l    t           j                                        }|                    |           |S r   )r5  r9  r:  __setstate__)r  r  mods      r   _unpickle_modulez#GuardsStatePickler._unpickle_module/  s,    hoo
r   meta_tensorr  r  torch.devicer
  rE  dispatch_keys_rawr   gradc           	        t           j                                        }t           j        j                                        }|                    ||||t           j        j                            |                    }||_	        |S r   )
r5  rG  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_tensor5  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   )
shaper  rE  __tensor_unflatten__r
  r5  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_subclassJ  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  r3  s     r   _unpickle_python_modulez*GuardsStatePickler._unpickle_python_modulea  s    &u---r   raw_reprtorch._C.DispatchKeySetc                J    t           j        j                            |          S r   )r5  r  r   r%  )r  r7  s     r   _unpickle_dispatch_key_setz-GuardsStatePickler._unpickle_dispatch_key_sete  s    x&44X>>>r   jsonbytes torch._C._functorch.CInterpreterc                T    t           j        j        j                            |          S r   )r5  r  r  CInterpreterdeserialize)r  r;  s     r   _unpickle_functorch_interpreterz2GuardsStatePickler._unpickle_functorch_interpreteri  s      x"/;;DAAAr   dr   types.MappingProxyType[Any, Any]c                *    t          j        |          S r   )r;  MappingProxyType)r  rB  s     r   _unpickle_mapping_proxyz*GuardsStatePickler._unpickle_mapping_proxyo  s     %a(((r   elemsr  c                Z    t                               |                                          S r   )r)  fromkeysr  )r  rG  s     r   _unpickle_dict_keysz&GuardsStatePickler._unpickle_dict_keysu  s     }}U##((***r   original_typetype[torch.nn.Module]c                h    t           j        j        j        j                                        |         S r   )r5  r  fsdp_fully_shardget_cls_to_fsdp_cls)r  rK  s     r   _unpickle_fsdp_module_typez-GuardsStatePickler._unpickle_fsdp_module_typey  s,      %2?SSUU
 	
r   dict[str, Any])torch.nn.parallel.DistributedDataParallelc                    t           j        j        j        }|                    |          }t           j        j                            ||           |S r   )r5  r9  parallelDistributedDataParallel__new__r:  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  r5  opsr  )r  r  s     r   _unpickle_c_opz!GuardsStatePickler._unpickle_c_op  s    uy|T***r   	namespaceopnameoverloadnamec                n    t          t          t          t          j        |          |          |          S r   )r  r5  r\  )r  r^  r_  r`  s       r   _unpickle_opzGuardsStatePickler._unpickle_op  s(    wwuy)<<fEE|TTTr   funcr  c                ,    t          j        ||          S r   )r;  r=  )r  rc  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  r5  r9  	attention
SDPBackendr  s    r   _unpickle_sdp_backendz(GuardsStatePickler._unpickle_sdp_backend  s     ux)4d;;;r   r>  c                <    dfd}|j         J |j         d         S )Nr   r   c                      S r   rV  )r>  s   r   rh  z,GuardsStatePickler._unpickle_cell.<locals>._  s    Jr   r   )r   r   )r   )r  r>  rh  s    ` r   _unpickle_cellz!GuardsStatePickler._unpickle_cell  s>    	 	 	 	 	 	 }(((}Qr   fieldsr<  type[NamedTuple]c                ,    t          j        ||          S r   )r  
namedtuple)r  r  ro  s      r   _unpickle_named_tuple_typez-GuardsStatePickler._unpickle_named_tuple_type  s    
 %dF333r   serialized_coder   r   c                .    ddl m}  |j        |          S )Nr   r   )torch._dynamo.packager   to_code_object)r  rt  r   s      r   _unpickle_codez!GuardsStatePickler._unpickle_code  s'    888888,~,_===r   r   r  qualnameargdefstuple[object, ...] | Noneclosure!tuple[types.CellType, ...] | Nonetypes.FunctionTypec                d    t          j        |          j        }t          j        |||||          S r   )r  r  rr  r;  r<  )r  r   r  ry  rz  r|  r  s          r   _unpickle_nested_functionz,GuardsStatePickler._unpickle_nested_function  s0     +F33<	!$	8WgNNNr   r   6Union[tuple[Callable[..., Any], tuple[Any, ...]], Any]c                   dd l }t          |          | j        v r$t          |          j        t          |          ffS t          j        |          r+ddlm} t          |           j	         |j
        |          ffS t          |          | j        v r	t          dfS t          |t          j                  r|j        j        dk    rddlm} t          |          | j        vr	t          dfS  ||          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          |          }t          |t          j        j                  r|j        |j        nt          j        }t          |           j         t          j        |d|j!                  |j        |t          j                            |                                          |j"        ffS t          |t          j#        j$                  rrt          |          | j        vr	t          d	fS |j%        &                                D ]l}t          |t          j        t          j#        j$        f          r.t          |          | j        v rEtO          |          rU|| j        t          |          <   mt          |t          j#        j(        j)                  r)t          |           j*        |+                                ffS t          |          j,        t          |          j-        k    rt\          S |j/        j+        t          j#        j$        j+        k    r)t          |           j0        |+                                ffS nt          j1        |          rt          |           j2        |j-        ffS t          |t          j        j3                  r)t          |           j4        |                                ffS t          |t          j        j5        j6                  r)t          |           j7        |8                                ffS t          j9        |          rFtu          ||j;                  r1ty          |d
          r!ty          |d          sJ |j=        |j>        ffS t          j9        |          rWtu          |t~                    rBty          |d          r2|j,        |j-        k    r"t          |           j@        |j-        |jA        ffS t          |t          jB                  rt          d| d|jD         d          t          |t          jF                  r)t          |           jG        |H                                ffS t          |t          jI        jJ        jK                  r$t          |           jL        t          |          ffS t          |t          jN        jO                  r6|jP        Q                    d          rt          |           jR        |j-        ffS t          |t          jN        jS                  r(t          |           jT        |jU        |jV        |jW        ffS |j/        jX        dk    r|j/        j-        dk    r	t          dfS t          |t                                r	t          dfS t          jZ        |          rd|j,        v r4t          |           j[        |j\        |jX        |j,        |j]        |j^        ffS |jX        t          j`        v rRt          j`        |jX                 }|j,        a                    d          D ]}t+          ||d           }||ur	t          dfS nt          jb        |          r[|jc        }
|jd        }t+          ||
j-                  }t          jb        |          r|jc        }|
|urt          |           je        |
|ffS nNt          |t           d d          j^        d                             rt          |           jf        |jg        ffS ty          t          jh        d          rCt          |t          jh        ji        jj                  rt          |          | j        vr	t          dfS t          |t          j#        jk        jl                  rt          |           jm        |jn        ffS t          |          j,        t          |          j-        k    rSt          |t~                    s>t          jI        jo        p                    dt          |           d| ddz   dz             t          j9        |          rty          t          jh        d           rtu          |t          jh        jq        jr        js                  r|t          jh        jq        jr        js        urv|jt        d!         }tu          |t          j#        j$                  sJ |t          jh        jq        jr        jr        u                                v sJ t          |           jv        |ffS t\          S )"Nr   r   )zmissing valuesmeta)is_traceable_wrapper_subclass)ztensor guard tree)r  )r  r  )zmodule guard tree_torch_handler_name_torch_unpicklerr  zCannot serialize SymInt z (node: ra  z_C::rq  	PyCapsule)capsule)unsupportedz<locals>rj  )zfqn mismatchc                      fdS )Nc                      S r   rV  r  s   r   r  zGGuardsStatePickler.reducer_override.<locals>.<lambda>.<locals>.<lambda>a  s    Q r   rV  r  s   `r   r  z5GuardsStatePickler.reducer_override.<locals>.<lambda>a  s    YYYY r   distributed_c10d)zdistributed_c10d.Workr"  r#  r$  r%  r&  rN  rO  )wsympyr  r  rE  rW  r  iscoderv  r   rx  from_code_objectr  r  r  r5  r6  r  torch.utils._python_dispatchr  r{  r  r  reducer_overrider  r2  
empty_liker  r  r7  rG  rH  r
  r&  r  r"  r9  r:  rr  r+  r  rU  rV  rZ  r  r   r   NotImplementedr   r  r  r6  r   r:  r  r?  rA  	serializer  r'  Functionrt  r  r  rC  rs  r  r  r  r   r;  rE  rF  rs  r  r  r   rJ  r  _opsOpOverloadPacket_qualified_op_name
startswithr]  
OpOverloadrb  r^  _opname_overloadnamer   r  
isfunctionr  r   r   r   r  modulesr  ismethodr   __self__re  rn  r2  r  r  Workrh  ri  rk  r  rT   PackageErrorrN  rO  
FSDPModuler   rP  rQ  )r   r   r  r   r  r(  attrsr'  r  innerrc  
args_tupler
  fr  method_self
inner_funcrK  s                     r   r  z#GuardsStatePickler.reducer_override  sq
    	c77d'''99$tCyyl22># 	V<<<<<<::,/N~/Ns/S/S.UUUc77d)))000c5<(( U	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   #YYF#u0;<< P'*z'=5<::. V3CTUUU
'',,55771   UX_-- i	C#wwd444!777++-- 5 5dU\58?$CDD d88t555D>> 04#BtHH--
 #ux0HII NDzz69I9I9K9K8MMMCyy%c);;;%%})UX_-IIIDzz2S5E5E5G5G4III J c"" Q	C::5FFUX455 N	C::83<<>>:KKKUX0=>> K	C::=?QQQ OC  H	C3//H	C 233H	C
 3 233333'#*A)CCC OC  @	C3&&@	C Y''@	C  CL00::83<:UUUU\** 8	CR#RRsxRRRSSSU344 5	C::5

}DDU]0:;; 2	C::1DII<??,
 
 /	C$//77/	C ::,s|o==UZ233 *	C::*!-   M$
22&+55 \))35566 	C---$$ 	CS---Dzz;LN$$O>   ~,,K/,22377 / /D4..AAC<<#%666c"" 
	C<D,K dm<<J
++ 1'0
:%%Dzz84:MMM & T#6#6#6":":"Fq"IJJKK 	C::,s/@.BBB5$&899 	<j"38?
 ?
 	< #wwd444!;;;c58-899 	A::3ch[@@99!T#YY%777
3PU@V@V7-#00ES		EEsEEETUTU   OC  	O)622	O 3 1 6 C NOO	O
 %+0=HHH #A!-AAAAA!(-:G[[]]^ ^ ^ ^ Dzz<}>NNNr   )r{  r  r  r  r  r  r   r   r  r   r   r   )r  r   r   r  )r  r  r  r   r
  rE  r!  r   r"  r  r   r  )r  r  r  r   r
  rE  r!  r   r'  r   r(  r)  r   r  )r3  r   r   r4  )r7  r   r   r8  )r;  r<  r   r=  )rB  r  r   rC  )rG  r  r   r   )rK  rL  r   rL  )r  rR  r   rS  )r  r   r   r   )r^  r   r_  r   r`  r   r   r   )rc  r   r  r   r   r   )r  r   r   rf  )r>  r   r   r   )r  r   ro  r<  r   rp  )rt  r   r   r   )r   r   r  r   ry  r   rz  r{  r|  r}  r   r~  )r   r   r   r  )r   r   r   r   r?  r  r&  r2  r6  r:  rA  rF  rJ  rQ  rZ  r]  rb  re  r>  rk  rn  rs  rx  r  r  r   r   s   @r   r  r    s       - - - - - -    [
    [(    [, . . . [. ? ? ? [? B B B [B
 ) ) ) [)
 + + + [+ 
 
 
 [
    [ + + + [+ U U U [U , , , [, < < < \<       [  4 4 4 [4 > > > [>
 	O 	O 	O [	OE E E E E E E Er   r  builderr   c           	     V   t                      }t          | j                  }|dk    rd}|}n$	 |                    |           }d}n#  |}d}Y nxY wt	          | j                  d u}t          ||||                                 | j        rt          | j                  nd||           S )Nrr  FTrV  )r  	has_valuer  
guard_typederived_guard_types	is_global
orig_guard)
objectstrip_local_scoper  r  r,   r  r   create_fn_nameguard_typesrC  )rQ  r  MISSINGr  r  r  r  s          r   make_guard_filter_entryr    s    hhGUZ((Drzz			
 KK&&EII	EIII&u'?@@LI''))9>9JRU5#4555PR   s   A Ar  r<  c                   t          j                    }i }i }j        }t          j        | j        j                  }|D ]}t          j        |          rst          |d          rc|j
        }t          |          |vrJ	 t          |                              t          |                     ||t          |          <   #  Y xY wt          |          |vr||t          |          <   t          ||||          }	t          t           j                            fd| j        j        D                                 r$t)                      | j        _        i | j        _        	 |	                    |            nD# t0          $ r7}
t           j        j                            t9          |
                    |
d }
~
ww xY w|                                S )Nr  c                0    g | ]}t          |          S rV  r  r  rQ  r  s     r   rY  z'pickle_guards_state.<locals>.<listcomp>  s3        (w77  r   )ioBytesIOr{  r  tree_leavesr}  r[  r  r  rt  r  r  rE  rW  r  r  r5  compilerkeep_portable_guards_unsafer   r   r~  r   dumpr  r  rT   r  r   ru  )r  r  bufr  r  r{  leavesleafr  picklerr  s    `         r   pickle_guards_stater    s    *,,CLN1 2 >??F , ,D!! 	,gdJ&?&? 	,=D$xx000JJ&&tDzz222-1LD**D 1 XX... (,N2d88$ !2L.RUVVG
22   "/6  	
 	
  
- 14-*,'<U < < <m,,SVV44!;<<<>>s%   ?ACC&E< <
F=2F88F=c                  j    e Zd ZU 	 	 	 	 	 	 	 d0d1dZdZded<   d2dZ	 d3d4d$Zd5d&Zd6d)Z	d7d-Z
d8d/ZdS )9r]  NFrT  r   r}  r   r   Optional[CacheEntry]r   %Optional[Callable[[GuardFail], None]]r`  ra  rY  r  r_  r$  r^  r   strict_errorr   r   c
                (    |r|j         nd }
i  _        t          |          }| _         j        J | _        |r|j        nd  _        t                       _        t                       _        t                       _	        | _
        d  _        d  _        t          d          st                              d           t           j        j        j        r|pd d fd}t)          |
pd	t*          j        
          }|r                     ||||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 )!Nrl  z9guard_nn_modules is turned off using justknobs killswitchc                    d | D             S )Nc                    g | ]}d S )TrV  )r  gs     r   rY  zCCheckFunctionManager.__init__.<locals>.<lambda>.<locals>.<listcomp>  s    >P>P>Pt>P>P>Pr   rV  )gss    r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>  s    >P>PR>P>P>P r   r   Sequence[GuardFilterEntry]r   Sequence[bool]c                \   g }t           |           |           D ]\  }}|s|                    d           |j        dv sd|j        v s	d|j        v rAt                              d|j        |j        j                   |                    d           y|                    d           |S )NF)rg  r  r  rQ  rg  rQ  z7%s guard on %s is dropped with caching_precompile=True.T)r   r  r  r  r-  r.  r  r  )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   rV  )r  Fc                0    g | ]}t          |          S rV  r  r  s     r   rY  z1CheckFunctionManager.__init__.<locals>.<listcomp>(  s$    TTTU(88TTTr   c              3  B   K   | ]}t          |          t          u V  d S r   )rE  r   r  rw  s     r   r  z0CheckFunctionManager.__init__.<locals>.<genexpr>+  s,      ??1tAww$??????r   c                *    g | ]\  }}|         |S rV  rV  )r  rR  rQ  filter_resultss      r   rY  z1CheckFunctionManager.__init__.<locals>.<listcomp>,  s8       "!U.QRBS  r   )r`  %sg        )backendziGuard failed on the same frame it was created. This is a bug - please create an issue.Guard fail reason: rQ   zGuard eval latency = %s us.2fguard_latency_usr   r+  zGuard evaluation failed: r  )	tracebackdynamo_cpp_guards_strc                      j          d ddS )Nz
Guard latency = r  z us)r\  )latencyr   s   r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>  s    $"4XXXXXX r   
payload_fn)r   r  r   r  )>r   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesr}  rY  r   rM   r  r   r  r_  r  r"  rF   r-  r.  r5  r  rR   caching_precompiler   r;   sort_keybuild_guardsr   r  r  r\  compile_check_fnr   r  r  skip_guards_checkrG  ry  r[  get_guard_fail_reason_helperr8   r  r  r   r%   r   r6   increment_toplevelr   guards_staterX  r   r  serialize_guardsrT   r  strict_precompilebypass_packager   r  
format_excr  _loggingtrace_structuredclear)r   rT  r}  r   r   r`  rY  r_  r^  r  r   existing_diff_guard_sourcessorted_guardsr\  reasonsr   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|@@@ 	 &*%6%6+& &"G] -_TTTTmTTT 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
)rQ  r  rg  r  r  r  r  r  ztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPESr  rS  r  list[Guard]r<  c                8    |D ]}|                                 }|j        rt          |j                  nd}|dv r,|j        r$|                    |          }t          |           c|t          j        v r't          j	        j
                            | d          t          d |D             d           x}r't          j	        j
                            | d          |j        pdt                      t                      dfd
}	|                                }
|D ]P}t!          |j        t$                    r$ j        sJ  j        j        D ]} |	|           @ |	|j                   Q|j        D ]} |	|           dd fd|
j                                        D             } fd|
j                                                 D             |<   t1          j        |
 fd|
j                                        D             |t          j                            t;          fd|D                                 t=          j        t@          |
j!                  d          }
tE          |
 j                  }tG          ||          S )NrV  )rL  r  z guard cannot be serialized.c              3  6   K   | ]}|t           j        v |V  d S r   )r]  r  )r  rR  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<genexpr>  s=        0VVV VVVV r   rr  rc  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-   )rc  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   rw  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 )Nrw  r   r   c                \    t          | t          t          j        f          r
 |             S | S r   )r  rP   rn  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   rV  )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 rV  rV  )r  kvr  s      r   
<dictcomp>zVCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>.<dictcomp>  s'    JJJtq!4477JJJr   )rw  r   r   r   )r  	functoolspartialrC  r   keywordsr   rc  )rw  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 rV  )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 rV  )r  )r  r  r  r   s      r   r  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>  s=     2
 2
 2
 1 D*** q
 +**r   c                6    i | ]\  }}|v s	|j         v ||S rV  )r   )r  r  r  r   r  s      r   r  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>  sA       Aq''10O+O+O 1+O+O+Or   c           	   3  d   K   | ]*}t          j        |d d  |j                            V  +d S )N)obj_weakrefguarded_class_weakrefr  )r  r  r  )r  rQ  r  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<genexpr>  sd           '$(.2"5"5eo"F"F	       r   T)r[  r   _guardsr  r  )r}  rY  )rc  r?   r   r   )rw  r   r   r   )$r  r  rC  rI  r  r(  r]  r  r5  r  rT   r  next%name_of_builtins_dict_key_in_fglobalsr   dump_guards_stater  r  rx   rY  rO  r~  r   r   r  r  r[  r  	GuardsSetrM   r  tree_mapr   r  r  r  )r   r  r  r}  rQ  r  r  r   failedr  output_graph_guards_staterc  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
 2>"egg2
 2
 2
-. %0$7%    5AGGII  
 ,M++     "/    
 
 +1/.)G+ + #/%
 %
 %
!2 #2!2
 
 

 #<999r   r  r   r   (tuple[GuardBuilder, GuardManagerWrapper]c                   t                      }||_        d dfd}t          || j        || j        |j        |j        || || j        |          }	dd
}
t          j	        |	|
          t          j        ot          d          }|D ]U}|s<|                                r(d|j        vrd|j        vrt          j        s	d|j        vr@|                    |	           V|	|fS )Nrc  r?   r   r   c                    | j         }|t          j        u r| j        S sJ              }|J |                    | j                  S r   )guard_sourcer>   CONSTANTr  r0  )rc  r!  	r_builder	w_builders      r   rW  z5CheckFunctionManager.build_guards.<locals>.source_ref.  sY    !.L{333{"9!	I((($$V[111r   )r_  r`  weak_bweakref.ref[GuardBuilder]r   c                0     |             }|r	d |_         d S d S r   )rm  )r%  r  s     r   cleanup_builderz:CheckFunctionManager.build_guards.<locals>.cleanup_builderG  s*    A  r   rl  r   r   r  )rc  r?   r   r   )r%  r&  r   r   )r   r   rS  rU  rY  r[  r   r_  rn  r=  rR   r  rF   rG  r  r  r3  )r   r  r  rT  r}  r^  r`  r\  rW  r  r(  guard_on_nn_modulesrQ  r$  s                @r   r  z!CheckFunctionManager.build_guards  sH    ,--+F(		2 	2 	2 	2 	2 	2 K $%!%!:+
 
 
	 	 	 	 K99	$5 
//;
 ;
 # 	" 	"E'	2244	
 #%*44$EJ665 79@
9R9RLL!!!!%%r   
guards_outc                4   j         }|dgz  }t                              d           g g g | j        j                            t          t          j                                         d | _	        	 d"d#fd}t                      }j        D ]7}|j        D ]-}||vr' |||j        d           |                    |           .8j        }	d }
d }t!          |	          dk    r1t#          j        |	dd                    |	          z   dz   gd            t(          j        rAj        r:t/          t0          t3          j                   \  }}                    ||           | j        r| j        j        ng }|D ]8}t;          |t<                    rf|j        }|j         }|j!         d|j!         }tE          #                    |          #                    |          |gd             ||d d           ~t;          |tH                    rfd|j%        D             }fd|j&        D             }dd                    d |j%        D                        dd                    d |j&        D                        d}tO          |||gd             ||d d           (tQ          d|           j)        D ]}|j        D ]} |||j        d           r$tT          j+        ,                    dfd           tZ          j.        t[          j/                    j0        }ntc          | j2        dd           }|
||| j3        dth          tk                      }| j        6                                 d j7        d          i}t!                    d!k    sJ || j        _8        || j        _9        | j        :                                 | j        _;        || j        _<        || j        _=        d | j        _>        d | j        _?        |	| j        _@        d S )$Nz**___kwargs_ignoredzGUARDS:Fr  r   rQ  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  rE   from_tracebackr  r  )r  rQ  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   rr  z
Stack:
z
User stack:
zGuard: %s%s%s)r  r  r  r  verbose_guards_logisEnabledForloggingDEBUGr  r  formatr  )	r  rQ  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   TrQ   zcheck_no_aliasing(r`  ra  r  c                :    g | ]}                     |          S rV  r  r  re  r  s     r   rY  z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>  s7     . . . 99!<<. . .r   c                :    g | ]}                     |          S rV  r:  r;  s     r   rY  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   rj  r  re  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   rj  r>  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s$      3b3bqAF3b3b3b3b3b3br   z])zUnknown GuardEnvExpr: dynamo_guardsc                     d  D             S )Nc                "    g | ]} |            S rV  rV  )r  r  s     r   rY  zKCheckFunctionManager.compile_check_fn.<locals>.<lambda>.<locals>.<listcomp>  s    4W4W4WQQQSS4W4W4Wr   rV  )r7  s   r   r  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    4W4WBV4W4W4W r   r  ry  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackre  r   r   )r  r   rQ  r  r,  r   r   r   )Arw  r  r  r\  r   attach_compile_idr   r8   r  r   r   r   rL  rQ  r   ry  r   r    rz  r  rR   r  r  r  r  r   r!  r}  aotautograd_guardsr  r:   input_source_ainput_source_br  r!   r  r@   overlapping_sourcesnon_overlapping_sourcesr"   r  rx  r5  r  r  rS   initial_global_stateGlobalStateGuardry  r  r  r"  rK   r  r  rm  r   r   r  r   r   r   r   r   r   )r   r  r*  r   largsr8  seengclr   ry  check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsrH  rQ  source_ar  r  overlapping_guard_managersnon_overlapping_guard_managerscheck_global_stater   r  r   r7  r   s    `                      @@@r   r  z%CheckFunctionManager.compile_check_fnb  sk     '((### 
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 )Nr\  zCache line invalidated because z got deallocated)	rt  r  r\  r  r   r   r   r   
invalidate)r   rZ  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)rZ  )	r  r  rn  r=  r  r	  r
  r\  r'  )r   r   rZ  s      r   rU  zCheckFunctionManager.id_ref?  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)r  r  )r   r   s     r   rY  z$CheckFunctionManager.lookup_weakrefsN  s-    c77dn$$>"S''**tr   )NNNNNFF)rT  r   r}  r   r   r  r   r  r`  ra  rY  r  r_  r$  r^  r   r  r   r   r   )r  rS  r  r  r}  r   r   r<  r   )r  r  r  r   rT  r   r}  r   r^  r   r`  ra  r   r  )r  rS  r*  r  r   r  r   r   )rZ  r   r   r   )r   r  rZ  r   r   r   )r   r  r   r_  )r   r   r   r   r  r   r  r  r  r\  rU  rY  rV  r   r   r]  r]    s         
 -1?C599=!"B! B! B! B! B!H	H) 	 	 	 	z: z: z: z:H A& A& A& A& A&FHQ HQ HQ HQT7 7 7 7&        r   r]  closure_argstuple[str, str]c                  	 ddl m} t                      		 	                    |            d	fd}n# t          $ r dd}Y nw xY w |            }| D ]} ||          \  }}|                    |           |                    d	| d
           |                                5  |                    d           d d d            n# 1 swxY w Y    |            }|                    d           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y    |            }|                    d| d
           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y   |	                                |	                                fS )Nr   rA   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   rV  )r  s    r   r  z%build_guard_function.<locals>.replaceb  s    t8Or   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardr  )
torch._inductor.utilsrB   r  r  RecursionErrorro  r   ri  spliceru  )
r   ra  rB   r  
guard_bodyr  r  rQ  make_guard_fnre  s
            @r   r  r  U  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   r5  r  	_internal	log_stateis_artifact_enabledrV  r   r   is_recompiles_enabledrq    s    >#-AA,OOOr   c                 T    t           j        j        j                            d          S )Nr   rm  rV  r   r   is_recompiles_verbose_enabledrs    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 rV  )rE  r  s     r   rY  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 rF  )r   r   r   rE  )	cur_stackrX  moder;  s      r   check_torch_function_mode_stackzMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stack  sk    133	y>>SZZ''5E9-- 	 	HBd##uu $ tr   r   r   rV  )rt  r|  r;  s     @r   r!  r!    s>     -,m,,,E
 
 
 
 
 
 +*r   Scoper\  rm  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 )rQ   r   )r  r  ids_to_sources     r   rY  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   r  evalr  r  )r\  rm  r   r  	tensor_idduplicate_tensorsr  r  s          @r   1recompilation_reason_for_no_tensor_aliasing_guardr    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   re  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)re  r  patterns      r   r  r    s(     III+G66'5!$$$r   r  traceback.StackSummary | Nonec           	     F   | t          |           dk    rdS g }| D ]q}|j        }|j        }|j        }|j        r|j                                        nd}|                    d| d| d|            |r|                    d|            rd                    |          S )	z
    Format the user stack trace for display in guard failure messages.

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

"&&&7););;
 ?>n>>>
Z(((s6   0E;2EE;E+E;)E++E;;E?	E?	Fr9   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 )NrU  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   rj  r-  r  )r\  r   r  r  r  r  r  s          r   get_guard_fail_reasonr  D  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  r  r   c                P  
 g 
| Ht          | j        | j        |j        | j        ||          }|r
                    |           | j        } | H|j        }|r
S t                      pt                      }|st          j        rt                      r-d                    d t          
          D                       }n(t          j        d                    
          d          }d| }d|j         d|j         d	|j         dt          j        |d
           }	|rCt                      rt&                              |	           nt*                              |	           t          j        rt-          j        |	          t0          j                            dd 
fd           
S )z
    Return the list of guard failure reasons using cache_entry.
    Logs the recompilation reason if `recompiles` logging is enabled.
    Raises a RecompileError if `config.error_on_recompile` is enabled.
    Nz

c              3  T   K   | ]#\  }}d | dt          j        |d          z   V  $dS )zguard z failures:
- N)ri  ri  )r  rR  r  s      r   r  z:get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>  sV       # #Av )(((8?64+H+HH# # # # # #r   r  r  z-triggered by the following guard failure(s):
zRecompiling function z in :r  artifactc                     dddS )Nrecompile_reasonsr;  )r  encodingrV  rV  r   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    '
 
 r   c                 >    t                     dk    r d         n S )NrQ   r   r  )r  s   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    W):):71:: r   )metadata_fnr  )r  r\  r   r  r  r  r  rT  rq  rs  rR   error_on_recompiler  r  ri  ri  r  co_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logrT   RecompileErrorr5  r  r  )r   r  r  r  r  r   do_recompiles_logfailuresguard_failure_detailsmessager  s             @r   'get_and_maybe_log_recompilation_reasonsr  c  s    G

!&%N"
 
  	#NN6"""!& 
! <D -//R3P3R3R .F5 .(** 	A{{ # #!*7!3!3# # #  HH
  tyy'9'94@@HGXGG 	@DL @ @d6F @ @I\ @ @4f==@ @ 	  	.,.. .&,,W5555$$W---$ 	.$W---	N##
 
 HGGG $    Nr   r   c                    | }t                      }| 5|                    | j                                                   | j        } | 5|} | .|| j        _        | j                                         | j        } | .|S r   )rM   r  r\  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  r  zlambda r`  z and
  rd  zMalformed guard:
)
printr  r  r  r  r   r   r   r  r   )r\  r   r  r   r  r[  rQ  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  rP  rw  s      r   uniquer    sJ      55D  D==GGGHHQKKK r   
obj_sourcer?   dupe_sourceSource | None 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  )	r0   r/   rT   UnsafeScriptObjectErrorr  r	  r
  rS  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   )TracingContextrQ   )collect_debug_stackr  N)torch._guardsr  r  r1  r2  r3  r0  r  guards_contextr@  r   r  r;   r2   r  )r  r   r  r  r   rQ  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   rQ  r  r   r   r   )r   r  rQ  r  r  r^  r   rR  )rc  r  r   r^  )r  r   r   r  )r  r  r   r  )r  r  r  r   r  r  r	  r  r
  rE  r  r   r   r   )r  r  r  r   r   r   )rc  r   r   r   r   r   )r   r   r   r	   )r  r   r   r   )rc  r2  r3  r   r4  r   r5  r   r6  r7  r   r   )rQ  r;   r   r   )r   r   r   rR  )r   r  )rQ  r;   r  rS  r   r   )r  r  r  rS  r   r<  )r   rR  ra  r   r   rb  r}  )rt  ru  r   rv  )r\  r   rm  r~  r   rR  )re  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  r9   r  r   r  r   r   r   )
r   r  r  r   r  r   r  r   r   rR  )r   r  r   r   )r\  r   r   r   r  r  r   r   r  r   r   r   )r  r  r   r  )r  r?   r  r  r   r  )r   r;   r  r   r   r   ("  r  
__future__r   r  rq  r  r  r  r	  r  r  r  r2  r  pickler  ri  r  r;  r  rn  
contextlibr   rs  r   r   typingr   r   r	   r
   r   r   typing_extensionsr   r   r   r   r5  torch.overridestorch.utils._devicetorch._C._dynamo.eval_framer   torch._C._dynamo.guardsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   torch._dynamo.sourcer,   r-   r.   r/   r0   r1   r2   r3   r4   r5   torch._dynamo.utilsr6   r7   r  r8   r9   r:   r;   r<   r=   r>   r?   r@   rg  rB   torch._library.opaque_objectrC   rD   torch._loggingrE   torch._utils_internalrF   %torch.fx.experimental.symbolic_shapesrG   rH   rI   rJ   rK   torch.utilsrL   r  torch.utils._ordered_setrM   torch.utils._tracebackrN   rO   torch.utils.weakrP   rr  rR   rS   rT   
eval_framerU   rc  rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   collections.abcr   r   r   numpyr  ModuleNotFoundErrorr   r   r   r  r   torch._Cr   rX  r   r   rv  r   r   	getLoggerr   r-  r  getArtifactLoggerr  r  r  r0  rA  r   r   r   r  cacher  r  r  r  r  r  r+  r  r  r  r   r  r  r  r  r(  r+  r  r.  rD  rI  rK  r  r7  r   rS  r  r  r  rc  r  r  r  Picklerr  r  r  r]  r  rq  rs  r!  r)  r   r  r~  r  r  r  r  r  r  r  r  r  r  r  rV  r   r   <module>r     s    " # " " " " " 



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



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