
    %Vji                   B	   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! n# e"$ r	 ddl#m!Z! Y nw xY wdd	l#m$Z$m%Z% dd
lm&Z& ddl'Z'ddl(Z'ddl)Z'ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZSmTZT ddlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ ddl_m`Z` ddlambZb ddlcmdZd ddlemfZfmgZgmhZhmiZimjZj ddlkmlZm ddlnmoZo ddlpmqZqmrZr ddlsmtZt ddlumvZvmwZwmxZx ddlymzZz ddl{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dZded<   	 ddlZn# e$ r dZY nw xY werdd lmZmZmZ dd!lmZ dd"lmZ dd#lmZmZ  e%d$          Z ej        eҦ          Ze'j                            ed%          Ze'j                            ed&          Ze'j                            ed'          Ze'j                            ed(          Zd)Z G d* d+e`          Z G d, d-          Zdd2Zej        dd4            Zdad5ed6<   dd8Zdd<Ze'j        j        j        Zdd@Z	 dddFZddIZddMZddVZdd[Zdd^ZddaZddcZ ej        dde           G df dg                      ZddpZddrZej         G ds dt                      Z G du dnej                  Zej        ddx            Z G dy dzeZ          Z G d{ d|          Zdd}Z G d~ deܦ          Zej         G d d                      Zej         G d d                      Z G d d          Z G d dej                  ZddZ  G d d          ZddZddZddZddZ e$deeef                   Z	ddZ
ddZddZ	 dddZ	 dddZddZddZ ez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CallableNoReturnOptionalTYPE_CHECKINGUnion)LiteralString)TypeAliasTypeTypeVar)ReferenceType)code_framelocals_names)check_obj_idcheck_type_idClosureGuardAccessorCodeGuardAccessordict_versionDictGetItemGuardAccessorDictGuardManagerFuncDefaultsGuardAccessorFuncKwDefaultsGuardAccessorGetAttrGuardAccessorGetGenericDictGuardAccessorGuardAccessorGuardDebugInfoGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardinstall_symbolic_shape_guard	LeafGuardprofile_guard_managerRelationalGuardRootGuardManagerTupleGetItemGuardAccessorTypeDictGuardAccessorTypeGuardAccessorTypeMROGuardAccessor)
get_global_source_nameget_local_source_nameIndexedSource$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceis_from_skip_guard_source.is_from_unspecialized_builtin_nn_module_sourceTensorPropertyTensorPropertySource)CompileEventLoggerget_metrics_context)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlapIndentedBuffer)
structured)justknobs_check)_CppShapeGuardsHelper_ShapeGuardsHelperEqualityConstraintis_symbolicSYMPY_INTERP)_pytree)
OrderedSet)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexc)set_guard_error_hook)*AttrProxySource
AttrSourceCallFunctionNoArgsSourceCallMethodItemSourceChainedSourceClosureSource
CodeSourceConstantSourceConstDictKeySourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceListGetItemSourceLocalSourceNamedTupleFieldsSourceNNModuleSourceNonSerializableSetGetItemSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTorchSourceTupleIteratorGetItemSourceTypeDictSourceTypeMROSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntryDynamoFrameType
ExtraStateGuardedCode	GuardFailGuardFilterEntryGuardFn)builtin_dict_keyscommon_constant_typesdataclass_fields	dict_keysget_custom_getattrget_torch_function_mode_stack get_torch_function_mode_stack_atguard_failuresistype	key_is_id	key_to_idnormalize_range_iterorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenunpatched_nn_module_getattrverify_guard_fn_signaturez(Optional[Callable[[Any, Any, Any], Any]]guard_manager_testing_hook_fn)	GeneratorKeysViewSequence)Symbol)DispatchKeySet)OutputGraphOutputGraphGuardsStateTguards
recompilesrecompiles_verboseverbose_guards)__defaults____kwdefaults____code____closure____annotations____func____mro__c                  *     e Zd Zd
dZdd fd	Z xZS )IndentedBufferWithPrefixreturnstrc                &    d| j         | j        z  z  S )Nz| )_indenttabwidthselfs    N/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/_dynamo/guards.pyprefixzIndentedBufferWithPrefix.prefix   s    t|dm344    Flineskip_prefixboolNonec                    |r#t                                          |           d S t                                          d|z              d S )Nz+- )super	writeline)r   r   r   	__class__s      r   r   z"IndentedBufferWithPrefix.writeline   sK     	,GGd#####GGedl+++++r   r   r   F)r   r   r   r   r   r   )__name__
__module____qualname__r   r   __classcell__r   s   @r   r   r      sV        5 5 5 5, , , , , , , , , , ,r   r   c                      e Zd ZdZd+d,dZed-d	            Zd.dZd/dZd/dZ	d/dZ
d/dZd0dZd1dZ	 d+d2dZd3d!Zd4d"Zd5d#Zd6d'Zd7d)Zd/d*ZdS )8GuardManagerWrappera  
    A helper class that contains the root guard manager. An instance of this
    class is stored in the Dynamo cache entry, so that the cache entry can
    access the RootGuardManager stored in the "root" attribute and directly call
    the check_nopybind from C++.
    NrootOptional[RootGuardManager]r   r   c                &   |t                      | _        n|| _        d | _        d | _        d | _        g | _        d | _        d | _        d | _        d | _	        d | _
        i | _        g | _        t                      | _        t                      | _        d S N)r'   r   diff_guard_rootclosure_varsargs
code_partsverbose_code_partsglobal_scopeguard_fail_fncache_entryextra_stateid_matched_objsno_tensor_aliasing_sourcessetprinted_relational_guardsrK   diff_guard_sources)r   r   s     r   __init__zGuardManagerWrapper.__init__   s    <(**DIIDI;?6:)-	%'7;6:DH1515AC57'?Buu&3=<<r   Generator[None, None, None]c              #     K   t                      | _        	 d V  t                      | _        d S # t                      | _        w xY wr   )r   r   r   s    r   #_preserve_printed_relational_guardsz7GuardManagerWrapper._preserve_printed_relational_guards  sJ      ),&	3EEE-0UUD***SUUD*2222s	   0 AOrderedSet[str]c                b     d	 fdd
 fdd
fd  j                     j        S )Nnoder   r   r   c                v   |                                  j        v p|                                 dk    }t          |                                                                           D ]"\  }\  }}| |           |          z  z  }#|r,j                            |                                             |S Nr   )
get_sourcer   
fail_countsortedget_key_value_managersitemsadd)r   is_diff_guard_nodeidxkey_mgrval_mgrr   visits        r   visit_dict_managerzJGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_dict_manager)  s    !!T%<<U@Q@QTU@U  ,2++--3355, , F F''gw #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_manager7  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>.visitE  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_sources  s    	& 	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	& 	&	' 	' 	' 	' 	' 	' 	' 	di&&r   c                    t           j        r#t          d          r|                                  |                                  d S )Nz3pytorch/compiler:use_recursive_dict_tags_for_guards)rP   "use_recursive_dict_tags_for_guardsrD   find_tag_safe_rootsprepare_diff_guard_managerr   s    r   finalizezGuardManagerWrapper.finalizeP  sM    4 	'A:
 :
 	' $$&&&'')))))r   c                V    |                                   |                                  d S r   )r   populate_diff_guard_managerr   s    r   r   z.GuardManagerWrapper.prepare_diff_guard_managerW  s,    '')))((*****r   c                    dddfd
dfddfd | j                   }|D ]G}t          |                                t          j        j                  r|                                 HdS )uD  
        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\  }\  }}| |           ||                     |                     6t          |                                                                           D ]:\  }\  }}|r||                                z  }|r||                                z  };|r|                                  |S NT)	
issubclassget_type_of_guarded_valuedictr   r   r   extendr  mark_tag_safe)r   tag_safe_rootsis_subtree_tag_safer   r   r   r   s         r   r   zCGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_dict_manager  sM    d<<>>EEEEEN"& ,2++--3355, , : :''gw &E'NNN&"))%%..999+1++--3355, , A A''gw  A'7+>+>+@+@@' A'7+>+>+@+@@'" %""$$$!!r   c                   t          | t                    rJ g }|                                 D ] }|                     |                     !|                                 rt          |                                 t          j                  r>| 	                                r(| 
                                s|                                  n8|                                  n"t          |                                 t                    rg|                                 }|                                 }t          d t          ||          D                       }|r|                                  nt          |                                 t          j        j                  r3 | t$          t&          f          }|r|                                  | gS n0|                                 t(          j        t(          j        t.          t0          fv rt2          j        r | t6          t8          t:          t<          t>          f          }|                                 D ]5}t          |t>                    r||                                 tB          v z  }6|r|                                  n`t          |                                 t(          j"                  rW | t>          f          }|t          d |                                 D                       z  }|r|                                  nt          |                                 tF                    ra| $                                %                    tB                    r5t2          j        r) | tL          f          }|r|                                  nUt          |                                 tN                    r. | tP          tR          f          }|r|                                  |S )Nc              3  n   K   | ]0\  }}t          |t                    o|                                V  1d S r   )r   r   r  )r  r  r  s      r   r  zQGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager.<locals>.<genexpr>  sT       * *%# x)ABBXsGXGX* * * * * *r   c              3  p   K   | ]1}t          |t                    o|                                d k    V  2dS )cell_contentsN)r   r   get_attr_name)r  r  s     r   r  zQGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager.<locals>.<genexpr>  s]       + + ! x)=>> D ..00OC+ + + + + +r   )*r   r   r   r  is_guarded_value_immutabler  r  torchTensorhas_no_accessorshas_object_aliasing_guardr  r  r	  r
  r  nnModuler   r*   typesFunctionType
MethodTypestaticmethodclassmethodrP   )assume_dunder_attributes_remain_unchangedr   r   r   r   r   r  dunder_attrs_assumed_constantsCellTypetupler   endswithr(   typer)   r+   )	r   r  r   r  r  r  r  r  r   s	          r   r   z>GuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager  s=   !$(899999  N!4466 8 8	%%eeI&6&67777..00 b) d<<>>MM ),,.. -t7U7U7W7W -**,,,&&((((D::<<dCC Y) ..00	!4466
&) * *),Y
)C)C* * * ' '# ' )&&(((D::<<ehoNN P)&6&668IJ' '# ' &&(((  	 ..00&$ 	  D '7&6),13,	' 	'# !% 2 2 4 4  H!(,@AA +$22448VV+ ' )&&(((D::<<enMM ")&6&6t>R=T&U&U##s + + %)$6$6$8$8+ + + ( ( #
 ' )&&(((499;;UCC)OO%%../MNN) D) '7&646' '# ' )&&(((D::<<dCC )&6&602FG' '# ' )&&(((!!r   c                b    | g S t          | t                    r |           S  |           S r   r   r   s    r   r   z6GuardManagerWrapper.find_tag_safe_roots.<locals>.visit+  sA    |	$ 011 0))$/// =&&&r   N)r   r   r   r  r   r   )r   r   r   r  )r   r   r   r  )r   r  r  r  r#  r$  mark_tag_safe_root)r   r  r   r  r   r   r   s      @@@@r   r   z'GuardManagerWrapper.find_tag_safe_roots[  s    t	 	 	 		" 	" 	" 	" 	" 	"<l	" 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_manager7  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   )r7  r5  s    r   	filter_fnz@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fnG  s    &&((N::r   )r7  r   r   r   )r   clone_manager)r   r5  r9  s    ` r   r3  z-GuardManagerWrapper.clone_with_chosen_sourcesD  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>O  s#    <<<dd"T)<<<r   )r   r   r   )r   r;  partsrB  s      @r   get_guard_linesz#GuardManagerWrapper.get_guard_linesL  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   rF  rG  sourcetss         r   get_manager_linez$GuardManagerWrapper.get_manager_lineR  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   indentrP  construct_manager_string)r   r  rQ  r   r   r   s         r   construct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_string^  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=)rS  get_leaf_guardsr   r&   r   r   
writelinesrE  r   r   r   rU  r  r	  r   r   rP  reprrT  )r   r  rQ  r;  r  r   s         r   rT  z,GuardManagerWrapper.construct_manager_stringl  s    [[]] 	? 	?,,.. A Ae_55 AD$BBB6::5AAA(<(<U(C(CDDDD % 8    OOD$8$8$?$?@@@@ #/00 >223=== (+!!##S%;%;%=%=( ( ? ?#) )))5UHMMOO5U5UVV   --i>>>>?)	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   E;FF"%F"c                   |                                  5  t                      }d|_        |                    dd           |                    dd           |                    d           |                     | j        |           t          | j        d          rD| j                                        D ]*}|                    | 	                    |                     +|
                                cd d d            S # 1 swxY w Y   d S )NrO    T)r   zTREE_GUARD_MANAGER:r'   get_epilogue_lambda_guards)r   r   r   r   rT  r   hasattrr\  rX  rE  getvalue)r   rQ  r;  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   r`  s     r   rb  zGuardManagerWrapper.check  s    yq!!!r   r   c                6    | j                             |          S r   )r   check_verboserc  s     r   re  z!GuardManagerWrapper.check_verbose  s    y&&q)))r   c                d     t                      d
dd fd	  j                   d S )N
leaf_guardr$   r   r<  c                    g }|                                  D ]D}|                    d          d                                         }|                    |           E|S )N#r   )r   splitrstripappend)rg  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   )rW  r   r&   r   r  r   r   )r  r;  r   ro  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   )rg  r$   r   r<  )r  r   r   r   )r   r   )r   ro  rq  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   )r5  r   r   r'   )r;  r$   r   r<  )rF  r   rG  rH  r   r   )r  r   rQ  r   r   r   )r  r   rQ  r   r   r   r   r`  r   r   r   )r`  r   r   r   )r   r   r   __doc__r   r   r   r   r   r   r   r   r3  rE  rP  rU  rT  r_  rb  re  rr  r@  r   r   r   r      s        @ @ @ @ @, 3 3 3 ^3/' /' /' /'b* * * *+ + + +Z* Z* Z* Z*x> > > >2 2 2 2    JN
 
 
 
 
A A A A? ? ? ?># # # #" " " "* * * *     r   r   ar   r   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   )r  	overrides_enable_torch_functionr   npgenericndarray	as_tensor)rv  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 r@  )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  )r  modsr  s      r   uninteresting_filesr    sg    ''''""""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          j        dt          d nt          j        dt!          d          dt"          j        dt&          j        j        t&          j        t.          t&          j        t&          t2          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__)rv  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r`  s    r   r  z#_get_closure_vars.<locals>.<lambda>  s    ai r   #___get_torch_function_mode_stack_at__math_isnan__numpy_isnaninf__load_moduleutils_device)device___from_numpy___as_tensorr  r  )r  r   r   collectionsOrderedDict__getitem__r   r   r   r   r   r   r   mathisnanr{  float	importlibimport_moduler  utils_devicer  r  _as_tensor_fullprecr  r@  r   r   _get_closure_varsr    s1   

|
  7 C
 I	

 |
  D D
 $%7
 &';
 ()?
 "#3
 #$7$7
 23S
 DJ
 RZTTRX
 5<<
  Y4!
" EK/#
$ l'!5-
 
 
0 r   r   ast.ASTr   c                R    t          j        |                               dd          S )N
r[  )astunparsereplace)r   s    r   _ast_unparser    s"    ;t$$T2...r   rn  r;  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 )
Nr[  z  # T)r   i   r   z  # <unknown>z<60)
user_stackreversedfilenamer  rL   lenstacksummary)rn  r;  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_hintrH  r<  c                v    t          | t                    s| g} fd| D             }rfd|D             }|S )Nc                0    g | ]}t          |          S r@  )r  )r  rn  r;  s     r   rC  z*get_verbose_code_parts.<locals>.<listcomp>  s1       4=i//  r   c                     g | ]
}| d  dS z (HINT: rK  r@  r  rA  r  s     r   rC  z*get_verbose_code_parts.<locals>.<listcomp>  s7     
 
 
37t..^...
 
 
r   )r   list)r   r;  r  r   s    `` r   get_verbose_code_partsr    s    
 j$'' " \
   AK    

 
 
 
;M
 
 
 r   dimOptional[int]c                    | d S t          |           s| S t          | t          j                  sJ | j                                        S r   )rH   r   r  SymIntr   maybe_as_int)r  s    r   convert_int_to_concrete_valuesr  %  sM    
{ts '
#u|,,,,,x$$&&&r   size_or_stride	list[Any]list[Optional[int]]c                    d | D             S )Nc                ,    g | ]}t          |          S r@  )r  )r  r  s     r   rC  z.convert_to_concrete_values.<locals>.<listcomp>0  s!    JJJC*3//JJJr   r@  )r  s    r   convert_to_concrete_valuesr  /  s    JJ>JJJJr   valuenamesizesstridespytyper/  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(rJ  z	, device=z, requires_grad=z, size=z	, stride=rK  )	r  _C_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper  indexrequires_gradr   )r  r  r  r  r  r  dispatch_keyr  device_indexr  	guard_strs              r   get_tensor_guard_code_partr  3  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]keyintc                `    t          t          |                                         |          S r   )r  r   r  )r  r  s     r   get_key_indexr  H  s)    
 !#&&''--c222r   rM  r  c                    d|  d| dS )Nlist(dict.keys())[]r@  )rM  r  s     r   get_key_index_sourcer  P  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).)	TypeErrorr/  )r   s    r   raise_local_type_errorr  T  sB    
=S		==s===
L	M
L	M  r   r   c                    t          | t          j        j                  o!t          j        pt          |           t          u S r   )r   r  r#  r$  rP   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_dictNrH  l1_keyl2_key)r   r   r   r  r   r  r  r@  r   r   r  r  f  sL          %*)))) !F     !F      r   r  3Union[DictGetItemSource, DictSubclassGetItemSource]base_guard_managerr   base_example_valueexample_valueguard_manager_enumGuardManagerTyper   c                   | j                                         }t          | j        t                    r| j        j        }n,t          |t
                    sJ t          || j                  }t          ||          }t          t          |                    |         }t          |t          t          f          r	| d|d}	n| d| d}	t          | j        t                    sG|                    ||| j        t          j                                      | j        | d|g           |                    ||	||          S )N[r  r  rM  r  r   == )baser  r   r  r\   r  r  r  r  r   r  r   get_key_managerr  GUARD_MANAGERadd_equals_match_guardget_value_manager)
rM  r  r  r  r  base_source_namer  
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerr%  u  ss    {''))&, 233 @",d333330&,??%&6>>J ./ABBCCEJ#c3Z00 ;*CC->CCC*::Z:::fl$677 

 	** ,/=	 	+ 	
 	

 !
 LjCC.?CCD
 
 
 //#-	 0   r   r;   c                    | j         }t          |t                    rdS |                                 rdS |                                ot          |t
                     S NFT)originating_sourcer   ro   is_specialized_nn_moduleis_dict_keyri   )r;  rM  s     r   match_on_id_for_tensorr+    sa    %F &+,, u%%'' tF
6:(F(F$FFr   c                  $    e Zd ZU ded<   ded<   dS )GuardCodeListr<  	code_listr;   r;  Nr   r   r   r   r@  r   r   r-  r-    s%         LLLLLr   r-  c                      e Zd ZdZdZdS )r  rO      N)r   r   r   r  DICT_GUARD_MANAGERr@  r   r   r  r    s        Mr   codetypes.CodeTypec                T    t          t          t          |                               S r   )r  r  r   )r3  s    r   &code_framelocals_names_reversed_cachedr6    s!    /5566777r   c                     e Zd Z	 	 dwdxdZdydZdzdZed{d"            Zd|d-Zd}d/Z	d~d1Z
dd3Zdd4Zdd5Zdd6Z	 	 ddd=Zddd@ZddBZddFZddGZ	 dddIZddJZddKZddNZddOZddPZddQZdddTZ	 dddUZdddVZddWZddXZddYZ ddZZ!dd[Z"dd\Z#ddd]Z$dd^Z%dd_Z&dd`Z'ddaZ(ddbZ)ddcZ*dddZ+ddeZ,ddgZ-ddhZ.ddiZ/ddjZ0ddkZ1ddlZ2ddmZ3ddnZ4ddoZ5ddpZ6ddqZ7dddrZ8	 	 dddvZ9dS )GuardBuilderFNf_coder4  id_refCallable[[object, str], int]
source_refCallable[[Source], str]lookup_weakrefs1Callable[[object], Optional[weakref.ref[object]]]local_scoper  r   rF  r   check_fn_managerCheckFunctionManagersave_guardsr   runtime_global_scoper  r   r   c           	        || _         || _        || _        || _        ||d| _        |
p|| _        t          j                                        | j        d<   t          j
        j        j                                        D ]]\  }}|                    dd                              dd                              dd          }|| j        d         |<   || j        |<   ^|| _        g | _        g | _        g | _        g | _        g | _        || _        t-                      | _        | j        j        J | j        j        j        D ]N}| j                            t7          |                     |                                                               Oi | _        i | _        t-                      | _         g | _!        |	| _"        tF          j$        otK          d          | _$        tM                      | _'        d S )	NLG__builtins__>_<._dot_!pytorch/compiler:guard_nn_modules)(r9  r:  r<  r>  scoperD  builtins__dict__copyr  packagepackage_importer_package_imported_modulesr   r  rF  argnamesr3  shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managersrA  r   key_order_guarded_dict_idsoutput_graphguard_on_key_orderr   idgetr  r   _cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codesrC  rP   guard_nn_modulesrD   rK   +already_guarded_not_present_in_generic_dict)r   r9  r:  r<  r>  r@  r   rF  rA  rC  rD  r  package_modulerM  s                 r   r   zGuardBuilder.__init__  s    $.9D<3X3X
$8$HL!%-%6%;%;%=%=
>" ]+EKKMM	. 	. 
<<S))11#s;;CCCQQD/=DJ~&t,-DJt*#%)+	
 46 46%EG.6F +.%%'$1===+8K 	M 	MF+//488FKKMM3J3J0K0KLLLL
 BD @B#DGEE+BD(& & 7 !
O/=
 =

 LL 	888r   r  r  r;  r;   c                   |                      |          }t          |t                    rt          d|j                   |j                                        }t          |          D ]U}||         }t          |j        |          }|                     ||          }|	                    || d|d||           Vd S )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )r  r  r  r  rM  r  r  )
get_guard_managerr   r   NotImplementedErrorr  r(  r   r_   get_guard_manager_typedict_getitem_manager)	r   r  r;  dict_mgrdict_sourcer  r  r$  r  s	            r   #guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_order  s    ))%00h 011 	%SFKjS S   .3355 %]33 	 	C!#&E,U-ESQQQL!%!<!<m" " ))%00000##5	 *    	 	r   r  c                ^   |                      |          }t          |t                    st          d|j                   t          |t                    sJ t          t          |                    D ]\  }}t          |j        |          }|                    |||t          j
                  }t          |          rB|                     ||          }|                    |t          d| d| d|                     |                    |t          | d||                     d S )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r  z__check_obj_id(rJ  rK  r  )rh  r   r   ri  r  	enumerater   r  r  r  r  r   r:  add_id_match_guardr  r  )	r   r  r;  rl  r   r  r"  key_managerid_vals	            r   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_order)  s{    ))%00($455 	%H;@:H H   ($455555 ""3E":":;; 	 	HC-ej#>>J"22!!#3#A	 3  K ~~ S*55..*A*AAAAA5     22/:0J0J30J0JERR   '	 	r   r   Optional[Any]c                    t           j        r<t          j        dk    r,t          j        dk     rt	          j        dt                     d S | S )N)      )rw  rx  rO   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)rP   issue_3_13_0_warningsysversion_infowarningswarnRuntimeWarning)r  s    r   '_get_generic_dict_manager_example_valuez4GuardBuilder._get_generic_dict_manager_example_valueO  sR     '		 G++ :--M_   4r   rM  rU   r  r   r  r!  r   source_namer  r  c                >   dd}|j         }	|j        }
t                      }t          j        |j                  D ].}|                    |j                                                   /t          ddd          }|	|
v rt          d|	d          }ncd|
v r|	|
d         v rt          dd|	          }nCd|
v r|	|
d         v rt          dd|	          }n#|	|vrd|
v r|	|
d         v rt          dd|	          }|j	        s|
                    |j         |||          S |j        sJ |j        }|j        }| d}dx}}dx}}dx}}|rbt          |j        |          }|                                }|
|         }|                     ||          }|}|}|                     ||          }n|}|}|                     ||          }|                    ||                     |
          t&          j                  } |||||
||          }|r||J  |||||||          S |S )a(  
        This tries to avoid calling the expensive nn module custom getattr method by
        checking if the attribute is accessible via __dict__. For attributes that
        are not accessible via __dict__ (like descriptors), we fallback to
        PyObject_GetAttr.

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

        The most common and expensive case for nn module guards is of type
        mod.submod1.submod2.submod3.training. We avoid the python getattr of nn
        modules by going through the __dict__.
        r  r   r  r   r  r   r  r  r  r  r   c                <   t          | t                    rot          ||          }d| d|d}|                     |||t          j                                      || d|g           |                     ||||          S |                     ||||          S )Nr  r  r  r  r  rg  )	r   r   r  r  r  r  r  r   rk  )r  r  r  r  r  r  r  r"  s           r   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr|  s     #/00  &&8#>> J{IIuIII
##%"%'7'E	 $  
 )(*/I/I#/I/I.JKKK ,,&"/'9	 -    //&"/'9	 0   r   FNT_parameters_buffers_modulesattrrM  r  r  	.__dict__rM  r  r  )r  r  r  r  r  r  )r  r   r  r   r  r   r  r   r  r   r  r  r   r   )memberrR  r   r  getmror   updatekeysr  r  getattr_managerr  r  rU   r  r  rj  get_generic_dict_managerr  r  r  )r   rM  r  r  r  r!  r  r  r  	attr_namemod_dictall_class_attribute_namesr`  accessor_infor  r  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_modulez!GuardBuilder.getattr_on_nn_modulea  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;;	!*!1!1#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                    |                                 }|dk    rdS t          |                     |                    }|| j        v S )Nr[  F)r  r^  r_  r[  )r   rM  r  obj_ids       r   requires_key_order_guardingz(GuardBuilder.requires_key_order_guarding  sF    kkmm"5DHH[))**888r   HOptional[Union[KeysView[Any], set[Any], frozenset[Any], dict[Any, Any]]]c                $   t           j        }|                     |          rnt          |t                    rt           j        }nLt          |t          t          f          rt           j        }n#t          |t                    sJ t           j        }|S r   )	r  r  r  r   r   r2  r   	frozensetr  )r   rM  r  r  s       r   rj  z#GuardBuilder.get_guard_manager_type  s     .;++F33 	I-33 	I%5%H""MC+;<< I &6%C""!-66666%5%H"!!r   mgr_enumc                "    |t           j        k    S r   )r  r2  )r   r  s     r   manager_guards_on_keysz#GuardBuilder.manager_guards_on_keys  s    +>>>r   c                |    | j         j                            | j        d| j        d         t
          j                  S )NrH  )	f_globalsrM  r  r  )rF  r   globals_dict_managerrD  rP  r  r  r   s    r   get_global_guard_managerz%GuardBuilder.get_global_guard_manager  s=    !&;;/*S//=	 < 
 
 	
r   c           	     >   | j         j        }d }                                }|dk    r|| j        v r| j        |         S |dk    r|                     |          }|                     |          }d }d }d }t          j        }	t          t                    rcj
                                        }|                     |          }|                     j
                  }|                     j
        |          }	t          t                    rct          | j                  }
t!          |
          |
                    j                  z
  dz
  }|                    j        |f|||          }
nt          t(                    r2|                                                     j        |||          }	nt          t0                    r2|                                                     j        |||          }	nt          t4                    r|S t          t6                    r|S t          t8                    r|sJ |                    |||          }	nt          t<                    r|sJ |                    |||          }nt          t@                    r|sJ |!                    |||          }nt          tD          tF          tH          tJ          tL          f          r|sJ |}nt          tN                    r|(                    d |||          }nRt          tR                    r|(                    fd|||          }nt          tT                    r|sJ |+                    |||          }nt          tX                    r$|sJ |-                    j.        |||	          }nt          t^          t`          f          rk|sJ t          t^                    sJ tc          |          r!|sJ | 2                    ||||||          }nL|3                    j.        |||	          }n,t          th          tj          f          r|sJ t          |tl          tn          j8        f          sJ t          th          tj          f          sJ t          |tr                    r,| :                    |	          sJ tw          ||||          }nt          j        tx                    rt{          d
          |                    j        |||          }nAt          t|                    rD t          |dj@        j        A                                 d          jB        |||          }nt          t                    r$|sJ |D                    jB        |||          }nt          t                    r$|sJ |F                    j        |||          }nvt          t                    r|sJ t          |tl          tn          j8        f          r
J d            t          |t                    r'jI        s |F                    j        |||          }nt          |t                    r'jI        s |K                    j        |||          }nj        }jI        rL                                }|M                    ||||          }n}t          t                    r|sJ |sJ t          |          sJ jP        sE|Q                    ||jR        t          j                  M                    jS        |||          }n|jT        }|J |dz   }|U                    ||t          j                  }t          |tr                    rJ |                    jS        |||          }nt          t                    r$|sJ |(                    t          |||          }nat          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 |||          }nXt          t                    r |sJ |(                    d |||          }n#t          t                    r$|sJ |_                    j        |||          }nt          tx                    rDt          |tr                    st          d          |a                    j        |||          }nt          t                    r$|sJ |c                    j        |||          }nXt          t                    r|sJ |e                    |||          }n%t          t                    r|sJ |g                    |||          }nt          t                    r|sJ |(                    d |||          }nt          t                    r|sJ |(                    d |||          }nt          t                    r|sJ |k                    |||          }nYt          t                    r|sJ |m                    |||          }n't          d d                                           || j                                        <   |S )Nr[  rO   rg  )global_namerM  r  r  r  c                    t           S r   )r  )rK  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s     r   )python_lambdarM  r  r  c                F    t                                                    S r   )r   
_get_index)rK  rM  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s!    (H%%'') ) r   r  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_ordertensor_property__manager)r   rM  r  r  zUse DictGetItemSourcez.__kwdefaults__c                6    |                                  d         S r   __tensor_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>@  s    (<(<(>(>q(A r   c                *    |                                  S r   )__obj_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>H  s    (9(9(;(; r   c                N    |                                                                  S r   )_typequalified_namer  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>P  s    		(@(@(B(B r   c                *    |                                  S r   )get_baser  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>X  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   )r  r  r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>h  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   zmissing guard manager builder z - )nrF  r   r  r`  r_  rj  r  r  r   rX   r  get_guard_manager_from_sourcer   rk   r6  r9  r  r  
local_nameframelocals_managerrf   r  rk  r  rh   global_weakref_managerrg   rr   ry   type_managerrw   type_dict_managerrx   type_mro_managerrp   rm   r{   rz   rc   ru   lambda_managerrt   ri   grad_managerrd   generic_getattr_managerr  rU   r|   r  r  r  r_   r`   r  r  r  r   r  r%  r\   RuntimeErrorr5   getattrproplowerr   r.   indexed_managerrj   list_getitem_managerre   r  index_is_slicer-  tuple_getitem_managerunpack_slicegetitem_managerr^   callableis_kwfunc_defaults_managerr   idx_keyr   func_kwdefaults_managerro   r  rs   ra   rq   rT   rW   rb   rv   tuple_iterator_getitem_managerAssertionErrorr  rn   set_getitem_managerr}   weakref_call_managerrV   call_function_no_args_managerr]   rl   rZ   code_managerrY   closure_manager)r   rM  root_guard_managerr  r  r  r!  r  r  base_guard_manager_enumframelocals_names_reversedframelocals_idxoutr  
kwdefaults	kw_sourcerl  s    `               r   r  z*GuardBuilder.get_guard_manager_from_source$  s   !/4kkmm"0K!K!K.{;;" HH[11M!88OO  !!"2"@fm,, 	%{//11!%*:!;!;!%!C!CFK!P!P&*&A&A/' '#
 &+&& w	 *P* *& .//,2263DEEF 
 %88&8"+#5	 9  CC FL)) b	 //11FF&"+#5	 G  CC F/00 X	//11HH"."+#5	 I  CC F-.. Q	 &%FN++ M	%%FJ'' K	%%%%$11"+#5 2  CC
 FN++ D	%%%%$66"+#5 7  CC
 FM** }	%%%%$55"+#5 6  CC
 +2"	
 	
 v	 &%%%$CCFK(( j	$33-o"+#5	 4  CC F899 c	$33    #+#5 4  CC FJ'' Z	%%%%$11"+#5 2  CC
 F-.. S	%%%%$<<]"+#5	 =  CC FZ)GHII K	%%%%fj1111134FGG ''''//&&!$&  )88&"/'9	 9   F.0IJKK v	%%%%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 ]	'"E6;#3#9#9#;#;EEE  J"+#5  CC FM** S	%%%%$44J"+#5	 5  CC F-.. J	%%%%$99L"+#5	 :  CC FM** B	%%%%!"T;+B$C  ' '&' '  ,d33 F<Q (==&"/'9	 >   .66 v?T (>>&"/'9	 ?   ( 2"//11E(88&"/'9	 9   FN++ e	%%%%####./////< (>>+"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-.. B	%%%%$33("+#5	 4  CC F233 z	%%%%$33AA"+#5	 4  CC F566 r	%%%%$33;;"+#5	 4  CC F;<< j	%%%%$33BB"+#5	 4  CC FO,, b	%%%%$3344"+#5	 4  CC F011 Z	%%%%$3300"+#5	 4  CC F-.. R	%%%%$33DD"+#5	 4  CC F677 J	%%%%$CCl"+#5	 D  CC  233 B	02BCC $J   %44l"+#5	 5  CC F;<< 7	%%%%$88l"+#5	 9  CC F-.. /	%%%%$99"+#5 :  CC
 F455 (	%%%%$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 !KKKFKKMMKK   69#FKKMM2
r   c                6    |                      |j                  S r   )r  r(  r   r;  s     r   rh  zGuardBuilder.get_guard_manager  s    11%2JKKKr   Tr   r<  r   r   is_epiloguec                   |t                      }d                    |                                          }t          ||          \  }}i }d| j        d         i}	t
                              d|           t          ||	|            |d         |                                 }
|r"| j	        j
                            |
|           d S | j	        j
                            |
|           d S )NrJ  rH  zPython shape guard function:
%s___make_guard_fn)r  joinr  build_guard_functionrP  
guards_logdebugexecvaluesrF  r   add_epilogue_lambda_guardadd_lambda_guard)r   r   r   r   r  make_guard_fn_args_guard_bodypycoder  globals_for_guard_fnguard_fns              r   $add_python_lambda_leaf_guard_to_rootz1GuardBuilder.add_python_lambda_leaf_guard_to_root  s    ,..L "YY|'8'8':':;;2:?QRRV  #TZ_5;VDDDV)3///*3)*L,?,?,A,AB 	S #==,     #44X?QRRRRRr   r  Optional[dict[str, Any]]c                N    |t                      }t          || j        |          S r   )r  evalrP  )r   r  r   s      r   r_  zGuardBuilder.get  s'    ,..LD$*l333r   Union[str, Guard]c                6   t          |t                    r|}n|j        }t          |          }|| j        vrat
          j        j                            |          }|r;|dk    rt          
                    d|           | j                            |           |S )Nr1  zinvalid var name: %s)r   r   r  strip_function_callrW  r  r  r  is_valid_var_namelogwarningrl  )r   r;  r  r  is_valids        r   arg_refzGuardBuilder.arg_ref  s    eS!! 	DD:D"4((t}$$x'99$??H +q==KK 6>>>$$T***r   r  r  (Callable[[GuardBuilderBase, Guard], Any]c                    |dk    rt          |j                  }nt          |j        |          }t          |||j        |j                  }|                    |            d S )Nr   )r  r  )rZ   r(  rU   r;   r  r  create)r   r;  r  r  attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attribute  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        }|                     |          }t          | 
                    |          |          }d }|r
d| d|d}n	d| d|d}|                     ||g| 
                    |                     |                     |          }	|r| 
                    |                                          }
| 
                    |          }|                     ||
          }t          |          r/|                     ||	||
||                                |           d S |	                    ||j        |
|           d S |	                    |t%          ||                     d S )Nzinvalid source hasattr(rJ  rK  znot hasattr()provided_guarded_objectr  )r(  r   rm   r  rZ   rU   r  r  r  r]  r_  _set_guard_export_infor  rj  r  r  r  add_no_hasattr_guardr  )r   r;  rM  base_sourcer  r  refvalr3  base_managerr  r  r  s                r   HASATTRzGuardBuilder.HASATTR  s-   )fn-- 	![Ffj)) 	F&*--MM/M/M/MMM-k!!}ll4  dhhtnnd++ 	3.c..T...DD2#22222D##D6488D>> 	$ 	
 	
 	
 99+FF 	Y !HHV[[]]33M!%$!%!<!<V]!S!S 44FGG )) &!KKMM&     ,, :"/'9	 -      --d4J4QV4W4WXXXXXr   r  c                   |J |                      |          }|                     |j                  }|                     |          }||f| j        v rd S |j         d}|                    ||                     |j                  t          j	                  }d|d| d}|
                    d|t          ||                     | j                            ||f           d S )Nr  r  znot ___dict_contains(rJ  z
.__dict__)F)r  r_  r  rh  rd  r  r  rR  r  r  add_dict_contains_guardr  r   )	r   r;  r  r  r  r  r  r  r3  s	            r   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICTB  s    ll5!!hhuz""--e44;$JJJF"Z222#/#H#H"FFs|TT/= $I $
 $
  At@@@@@ 884/e<<	
 	
 	
 	8<<c4[IIIIIr   c                   |                      |j                  }t          |t          j        j                  r|j        r|j        }nt          |          }|j        |j	        k    rd|_
        |                     |d|j         d          }d|                     |           d| d}|                     ||g           |                     |                              |t!          ||                     d S )NTtype(rK  z___check_type_id(rJ  )r_  r  r   r  _subclasses
FakeTensorr  r/  r   r   _unserializabler:  r  r  rh  add_type_match_guardr  )r   r;  r  rN  r  r3  s         r   
TYPE_MATCHzGuardBuilder.TYPE_MATCH[  s    $$eU.9:: 	u| 	AAUA>QZ'' %)E!Q 5
 5 5 566C4<<#6#6CC&CCC##ED6222u%%::*477	
 	
 	
 	
 	
r   c                ^   |                      |          }|                     |j                  }t          |                     |j                            }d| d| }|                     ||g           |                     |                              |t          ||                     d S )Nz___dict_version() == )r  r_  r  r   r  rh  add_dict_version_guardr  )r   r;  r  r  versionr3  s         r   DICT_VERSIONzGuardBuilder.DICT_VERSIONp  s    ll5!!hhuz""txx
33445#55G55##ED6222 	u%%<<'e44	
 	
 	
 	
 	
r   r  invertc                    |                      |          }|rdnd}| d|d| d}|                     ||g           |                     |                              | |t	          ||                     d S )Nnot r[  z___dict_contains(rJ  rK  )r  r  rh  r  r  )r   r;  r  r(  dict_ref	maybe_notr3  s          r   DICT_CONTAINSzGuardBuilder.DICT_CONTAINS~  s    <<&&$,FF"	BBcBBxBBB##ED6222u%%==J3D%@@	
 	
 	
 	
 	
r   c                    |                      |          }|}| }d| d|d}|                     ||g           |                     |                              ||t	          ||                     d S )Nzset.__contains__(rJ  rK  )r  r  rh  add_set_contains_guardr  )r   r;  r  r(  set_refr  containsr3  s           r   SET_CONTAINSzGuardBuilder.SET_CONTAINS  s    ,,u%%:7777d777##ED6222u%%<<d24??	
 	
 	
 	
 	
r   c                   |                      |          }|                     |j                  }t          |t                    sJ | d|g}|                     ||           |r8|                     |                              t          ||                     d S |                     |          	                    t          ||                     d S )Nr  )
r  r_  r  r   r   r  rh  add_true_match_guardr  add_false_match_guardr   r;  r  r  r3  s        r   
BOOL_MATCHzGuardBuilder.BOOL_MATCH  s    ll5!!hhuz""c4     ##C##$##E4000 	""5))>>&tU33     ""5))??&tU33    r   c                   |                      |          }|                     |j                  }|J | dg}|                     ||           |                     |                              t          ||                     d S )Nz is None)r  r_  r  r  rh  add_none_match_guardr  r6  s        r   
NONE_MATCHzGuardBuilder.NONE_MATCH  s    ll5!!hhuz""{{{   !##E4000u%%::"4//	
 	
 	
 	
 	
r   r  rH  c                .    |                      ||          S r   )id_match_unchecked)r   r;  r  s      r   ID_MATCHzGuardBuilder.ID_MATCH  s    &&un===r   c                   t          |j        t                    r7|                     t	          |j        j        t          j                            S |                     |          }|                     |j	                  }| 
                    ||j	                  }d| d| d}|                     ||gd           |                     |                              |t          |||                     t          |j        t                    rNt          |t           j        j                  r1|j        j        }|                     |          }||| j        |<   d S d S d S d S )Nz___check_obj_id(rJ  rK  r=  )provided_func_name)r   r(  ry   r"  r;   r  r8  r  r_  r  r:  r  rh  rq  r  rk   r  r#  r$  r  r>  r   )	r   r;  r  r  r  rs  r3  r  weak_ids	            r   r<  zGuardBuilder.id_match_unchecked  so    e.
;; 	??e.3\5LMM   ll5!!hhuz""S%*--2#22222##ED6j#QQQu%%88*4GG	
 	
 	
 e.<< 	? #ux// ?"5@
..s33&7>D(444	? 	?? ? '&r   c                @   |                      |          }|                     |j                  }t          |t          j                  sJ | d}|                     ||g           |                     |                              t          ||                     d S Nz is not None)
r  r_  r  r   r  r   r  rh  add_not_none_guardr  )r   r;  r  r  r  r3  s         r   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH  s    ll5!!hhuz""#u|,,,,,#####ED6222u%%88"4//	
 	
 	
 	
 	
r   c                $   |                      |          }|                     |j                  }t          |t          j        j                  sJ | d|d}|                     |                              |t          ||                     d S )Nz.raw_repr() == z.raw_repr())
r  r_  r  r   r  r  r   rh  add_dispatch_key_set_guardr  )r   r;  r  r  r   s        r   DISPATCH_KEY_SET_MATCHz#GuardBuilder.DISPATCH_KEY_SET_MATCH  s    ll5!!hhuz""#ux677777>>C>>>
u%%@@'
E::	
 	
 	
 	
 	
r   c                H    |                      |dt          j                   d S )Nr   )r  r8  EQUALS_MATCHr  s     r   
NAME_MATCHzGuardBuilder.NAME_MATCH  s#      
L4MNNNNNr   c                   | j         j        J | j         j        j        d g}|                     ||           t          j        j        dfd}| j        j        	                    |t          ||                     d S )Nz,torch.autograd.forward_ad._current_level == r`  r   r   r   c                    j         k    S r   )_current_level)r`  
dual_level
forward_ads    r   fnz#GuardBuilder.DUAL_LEVEL.<locals>.fn  s    ,
::r   rt  )rA  r\  rN  r  r  autogradrO  rF  r   r  r  )r   r;  r3  rP  rN  rO  s       @@r   
DUAL_LEVELzGuardBuilder.DUAL_LEVEL  s     $1===*7B
KzKKL##E4000^.
	; 	; 	; 	; 	; 	; 	; 	00&tU33	
 	
 	
 	
 	
r   c                0   | j         j        J | j         j        j        }d |D             d dg}|                     ||           t          j        j        j        d	fd}| j        j	        
                    |t          ||                     d S )
Nc                6    g | ]}|                                 S r@  )	get_state)r  cis     r   rC  z6GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.<listcomp>  s     ///R",,..///r   z5torch._functorch.pyfunctorch.compare_functorch_state(rK  r`  r   r   r   c                               S r   r@  )r`  
compare_fnstatess    r   rP  z.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn
  s    :f%%%r   rt  )rA  r\  functorch_layersr  r  
_functorchpyfunctorchcompare_functorch_staterF  r   r  r  )r   r;  cisr3  rP  rX  rY  s        @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCH  s     $1===#0A//3///QQQQR##E4000 %1I
	& 	& 	& 	& 	& 	& 	& 	00&tU33	
 	
 	
 	
 	
r   c                P   t           j        j        j        j        t           j        j        j        j        dfd                        d g}|                     ||           dfd
}| j        j        	                    |t          ||                     d S )NhooksCtuple[Callable[[torch.Tensor], Any], Callable[[Any], torch.Tensor]]r   Optional[tuple[int, ...]]c                l     |           sd S | \  }}t          t          t          |                     S r   )r-  mapr^  )ra  	pack_hookunpack_hookare_inline_hookss      r   hooks_ids_fnz?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fn  s=     $#E** t%*"I{R(((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == r`  r   r   c                2                            k    S r   r@  )r`  	get_hooksguard_hooks_idsri  s    r   rP  z5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fn'  s    "ll99;;&?&???r   )ra  rb  r   rc  rt  )r  r[  _aot_autogradr  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineabler  rF  r   r  r  )r   r;  r3  rP  rh  rk  rl  ri  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKSz)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS  s    $28P	*0S 		) 	) 	) 	) 	) 	) ',yy{{33 dRacc
 	##E4000	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	00&tU33	
 	
 	
 	
 	
r   c                   |                      |j                  t          |                      |j                                                  d                   t	          d          rt                     dfd}ndfd}d	t          |           d
t          j                     }| 	                    |          
                    |t          ||                     d S )NrO   __metadata_guard__r`  r   r   r   c                `                         |                                 d                   S NrO   )rr  r  )r`  original_metadatar  s    r   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker4  s1    //%q';';'='=a'@  r   c                @    |                                  d         k    S rt  r  )r`  ru  s    r   rv  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker;  s     ++--a04EEEr   ___check_metadata__crt  )r_  r  r   r  r]  r   r^  r8   current_compile_idrh  r  r  )r   r;  rv  r  ru  r  s       @@r   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.  s   $$$TXXej%9%9%L%L%N%Nq%QRR5.// 	F%e,,,       F F F F F F i2.>+?+?hh>CdCfCfhhu%%664[%HH	
 	
 	
 	
 	
r   c                @   |                      |          }|                     |j                  }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.          t0          j        h||z            }t0          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'} tQ          ||          s7 |j)        t'          |                    sJ dt'          |                       tQ          |tT                    rtW          j,        |          r| -                    |           g }|.                    d| d           | /                    ||           | 0                    |          1                    te                      d	         tg          ||                     d S tQ          |th                    rt          j,        |          r| -                    |           g }|.                    d
| d           | /                    ||           | 0                    |          1                    te                      d         tg          ||                     d S | d|g}tQ          ||          rtk          |          }tg          ||          }rfd|D             }| 0                    |          6                    ||           | /                    ||           d S )Nr@  r   )
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z__math_isnan(rK  r  z__numpy_isnan(r  r  c                     g | ]
}| d  dS r  r@  r  s     r   rC  z-GuardBuilder.EQUALS_MATCH.<locals>.<listcomp>  s7     " " "7;422222" " "r   )7r  r_  r  r{  int8int16int32int64uint8uint16uint32uint64float16float32float64r  r   r-  r   r/  r  sliceranger   r  Sizedistributedis_availabletorch.distributed.device_meshr}  (torch.distributed.tensor.placement_typesr~  r  r  r  torch.export.dynamic_shapesr  torch.utils._pytreer  rJ   r   is_constant_classr  r  r  r"  rl  r  rh  r  r  r  complexr   r  )r   r;  r  r  r  np_typesok_mutable_typesok_typesr}  r~  r  r  r  r  pytreer3  r   s     `              r   rI  zGuardBuilder.EQUALS_MATCHC  s    ll5!!hhuz"" 				


/HH H #;!

 
 "

 
 ))++ 	@@@@@@             # H 	<;;;;;{n,,,,,,,,,,c8$$ 	
(@(@c(K(K 	
 	
*tCyy**	
 	
K
 #u 
	$*S// 
	OOE"""DKK....///''t444""5))::!##N3&tU33   F #w 
	BHSMM 
	OOE"""DKK////000''t444""5))::!##O4&tU33   F ##C##$#'(( 	  3--C3D%@@ 	" " " "?Q" " " 	u%%<<SBTUUU##E4000r   c                P   |                      |j                  }t          |t                    r|                     |           d S ||                     |           d S t          |t          j                  r|                     |           d S | 	                    |           d S r   )
r_  r  r   r   r7  r:  r%  CodeTyper=  rI  r   r;  r  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCH  s    hhuz""#t 	%OOE"""""[OOE"""""C(( 	%MM%     e$$$$$r   c                j   |                      |d           |                     |j                  }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.Moduler[  zKAttempted to setup an NN_MODULE guard on uninitialized nn.Module subclass `z`.zIEnsure the `nn.Module` subclass instance has called `super().__init__()`.)gb_typecontextexplanationhints)r=  r_  r  r]  r   r  r   rc  r  r8  r  rR   unimplemented_v2r/  r  s      r   	NN_MODULEzGuardBuilder.NN_MODULE  s    eDEEEhhuz""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)r=  r  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH  s     }}U###r   c                F   |                      |j                  }t          |          t          j        k    rTt          |d          rD|                     |dt          j                   |                     |dt          j	                   dS | 	                    |           dS )z!matches a closure by __code__ id.r   N)
r_  r  r/  r%  r&  r]  r  r8  r  r  r  s      r   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH  s     hhuz""99***wsJ/G/G*$$UJ8LMMM$$UJ8STTTTT&&&&&r   c                    | j         rXt          |j        t                    r)| j        j                            |j        j                   |                     |          S | 	                    |          S r   )
rC  r   r(  r_   rA  used_builtin_varsr   r  r<  r=  r  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCH  sr     	2%24EFF %7;;,2   **5111}}U###r   c                   |                      |          }|                     |j                  }t          |t                    s|                     |           g }t          |          dk    r|                    d|            n(|                    d| dt          |                      |                     ||           t          |t                    rF| 	                    |          
                    t          |          t          ||                     d S | 	                    |                              t          |          t          ||                     d S )Nr   r*  zlen(r$  )r  r_  r  r   r  r"  r  rl  r  rh  add_dict_length_check_guardr  add_length_check_guardr   r;  r  r  r3  s        r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTH  sZ    ll5!!$$%&& 	#OOE"""u::??KKs%%%%KK5s55U55666##E4000eT"" 	""5))EEE

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

24??    r   c                   |                      |          }|                     |j                  }t          |          }g }|                    d| dt          |                      |                     ||           t          |          }|                     |d|j         d          }|                     |          	                    t          |          |t          ||                     d S )Nz___tuple_iterator_len(r$  r  rK  )r  r_  r  r/  rl  r   r  r:  rh  add_tuple_iterator_length_guardr  )r   r;  r  r  rN  r3  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%%v/EdE/R/R	
 	
 	
 	
 	
r   c           
        |                      |          }|                     |j                  }t          |          }g }t	          |          }|                    d| d|            |                     ||           t          |          }|                     |d|j         d          }|\  }}	}
|                     |          	                    ||	|
|t          ||                     d S )Nz___normalize_range_iter(r$  r  rK  )r  r_  r  r/  r   rl  r  r:  rh  add_range_iterator_match_guardr  )r   r;  r  r  rN  r3  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v'=dE'J'J	
 	
 	
 	
 	
r   source_bc                z   | j         r`t          |          x}r| j        j                            |           t          |          x}r| j        j                            |           |                     |          }|                     |                                          }t          |j
                  st          |          rd S ||f}|| j        v rd S | j                            ||f           | j                            ||f           | d| g}|                     ||           t          j        r<|d         }t          ||          d         }	| j                            ||	f           d S t%          |                     |          |                     |          t          ||                     d S )N is r   )rC  r-   rA  additional_used_local_varsr   r,   additional_used_global_varsr  r  r1   r(  ra  r  rP   #use_lamba_guard_for_object_aliasingr  rb  rl  r!   rh  r  )
r   r;  r  r  ref_aref_br  r3  rn  rm  s
             r   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT&	  s    	L,X666t K%@DDTJJJ-h777t L%AEEdKKKU##X]]__--#$
 
 	%h//	 F en$555F+//???+//???%%e%%&##E40005 	 QI 6y% H H K,33Y@Q4RSSSSS)&&u--228<<&tU33    r   c                    |                      |           dg}|                     ||           |                     |                              t	          ||                     d S rB  )r  r  rh  rC  r  r   r;  r3  s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVEN	  sr    <<&&4445##E4000u%%88"4//	
 	
 	
 	
 	
r   c           	     Z   |                      |          }|                     |j                  }g }|                    d| dt	          |                                                      |                     ||           |                     |                              ||           dS )z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	r  r_  r  rl  r  r  r  rh  add_mapping_keys_guardr  s        r   MAPPING_KEYS_CHECKzGuardBuilder.MAPPING_KEYS_CHECKV	  s    ll5!!$$ACAAT%**,,-?-?AABBB##E4000u%%<<UDIIIIIr   c           
        |                      |          }|                     |j                  }|t          j        j        j        u r|                     |           dS |                     |           g }|	                    d| dt          t          |                               |                     ||           |                     |j                  r|                     ||           dS |                     ||           dS )z6Insert guard to check that the keys of a dict are sameNr  z)) == )r  r_  r  r  r  rJ   SUPPORTED_NODESr'  r  rl  r  r   r  r  r(  rt  rn  r  s        r   DICT_KEYS_MATCHzGuardBuilder.DICT_KEYS_MATCH`	  s	   ll5!!$$EK'777e$$$FU###
 	ScSS6G6N6N1O1OSSTTT##E4000++E,DEE 	C--eU;;;;;44UEBBBBBr   c                L    t           j        rdS |                     |           dS )z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)rP   skip_nnmodule_hook_guardsr  r  s     r   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICTy	  s,    + 	FU#####r   c                    d S r   r@  r  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODE	      r   c                    d S r   r@  r  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS	  r  r   c                    d S r   r@  r  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE	  r  r   c                    d S r   r@  r  s     r   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE	  r  r   c                   |j         t          j        u sJ | j        j        J d| j        j        j        g}|                     ||           |                     |                              t          ||                     dS )z/Guard on CURRENT_DEVICE per torch.utils._deviceNzutils_device.CURRENT_DEVICE == )
rM  r>   GLOBALrA  r\  current_devicer  rh  add_default_device_guardr  r  s      r   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE	  s    |{11111$1===cd.C.P._cc
 	##E4000u%%>>"4//	
 	
 	
 	
 	
r   c                
   #$%& ddl m} |j        dk    sJ  j        j        &&J  j        j        1 j        j        }|j        }|j        }|j        |j        }|j	        }nct          &|          sJ &j        $d $D             %d&&fd
}&j        J &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           t          |tb                    r|0                    ||f           d}|sdd l2}ddl3m4} |sJ |j%        |j"        }}tk          ||z             }	  fdtm          |          D             }d7                    d tm          |          D                       }d7                    d tm          |          D                       }|rd| d}|rd| d}tq          j9        d | d!| d"d#7                    |           d$          } tt          ;                    d%| |j%                   |<                    |           }!|=                    |!j>        |j?                  j@        }"|"sJ 	 t          |t          |          t          |          |"|!|j%                   d S # t"          jC        jD        jE        $ r Y nw xY w|j%        r9 F                    |j%        |j%        i tZ          t]                                 d S d S )(Nr   r   r[  c                    g | ]	}|j         
S r@  )symbolic_contextr  rv  s     r   rC  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 r@  )r5   r4   SIZE)r  rM  r  s     r   rC  z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>	  s8        )1DcJJ  r   )tracked_fakes_id_to_source)r  r  r\  s    `r   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources	  s7       "."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 r@  )faker  s     r   rC  zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>	  s    (((QV(((r   c                    g | ]	}|j         
S r@  )rM  r  s     r   rC  zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>	  s    ***!QX***r   )input_contextsequalities_inputsr<  ignore_staticr  )	shape_envproduce_guards_verboser<  export)r  r  r  r  r\  r   s    r   _get_code_partsz/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts	  s]    #-DD((R(((**r***#1&7#'3':#: E 	 	 	r   )pythonverbose_pythoncppT)r  r  cpp_code_parts)python_code_partsr   r  python_fallbackshape_env_sources)r   )CppCodeCachec                \    g | ](\  }}                     t          ||                    )S r@  )r  r.   )r  irM  r   s      r   rC  z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>C
  sE     " " "!6 66}VQ7O7OPP" " "r   rJ  c              3  2   K   | ]\  }\  }}| d | dV  dS )z = int_values[r  Nr@  r  r  rK  symbols       r   r  z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>H
  sO       , ,&;Av 11Q111, , , , , ,r   c              3  2   K   | ]\  }\  }}| d | dV  dS )z = float_values[r  Nr@  r  s       r   r  z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>L
  sO       . .&;Av 33q333. . . . . .r   zint64_t ;zdouble a  
                #include <algorithm>
                #include <cstdint>
                #include <cmath>
                #include <c10/util/generic_math.h>

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

                EXTERN_DLL_EXPORT int8_t guard(int64_t *int_values, double *float_values) {
                  z
                  z
                  return (z) && (z%);
                }
                zC++ shape guard function: %s %s)r  r  r  r  r   r  )r  r  r   r  )Gtorch._dynamo.output_graphr   r  rA  r\  shape_code_partsr  r   r  r  r   tracked_fakesr  export_constraintsr   r  r  r  r   dynamic_shapes_process_equalitiesr  r  rG   r  r  rP    enable_cpp_symbolic_shape_guardsOverflowErrorfreezerC  localsr_  rE   source_to_symbolr  ShapeCodePartsexprsr  r8   try_getshape_env_guardsr  r   r[   rI   r  r  rl  r  ctypestorch._inductor.codecacher	  r  rp  r  textwrapdedentr  r  loadcastr;  c_void_pr  r#   r  	_inductorrR   InvalidCxxCompilerr  )'r   r;  r   r  r  r   r  r  r  namesr  r  r  r  
constraintr  maybe_cpp_code_partsmaybe_shape_env_sourcesr3  compile_contextint_source_to_symbolfloat_source_to_symbolr   r  rM  r  r  r   r	  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardr  r  r  r\  s'   `                                  @@@@r   	SHAPE_ENVzGuardBuilder.SHAPE_ENV	  s   ::::::zR,9''' 1=#4E 0 B!1!D.:!1!@.>OO lK88888+B=="===N       )555. )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 +/ H	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%   'E9 9FFDT
 
T&%T&c                	   t           j        r|                                rd S t          |          r|                     |           d S t          |t                    r
 |            }||n|                     |j                  }t          |          }t          j                            |          }t          |t          j        j                  r|j        |j        }|j        |j        }t          |t          j                  sJ t           j        rt          |t          j        j                  rgt+                      }|                    d|                                           |                    d|j                   |                    dd           |                     |          }g }| j        j        J | j        j        j        r|                     |           g d}|D ]}	|                     |dz   |	z             }
t=          |
t          j        t          j         f          r,|!                    d| d|	 dtE          |
                     o|!                    | d|	 d	|
            nj| #                    |          }t           j$        r3t=          |t          j        j                  sbtK          |j&                  sNt          |j&        tN                    s4| j(        !                    |           | j)        !                    |           | j        j        }|j*        |j&                 }tW          |d
                   }tW          |d                   }tY          t[          ||||||          |          }|.                    |||||||           t          |t          j        j                  s$| j/        j0        1                    |j                   |j2        J tg          |d|j&                  \  }}|sti          |d          r`|j5        }d| d| d| d}|!                    |           | #                    |          6                    |tY          ||                     nRd| d}|!                    |           | #                    |          7                    dtY          ||                     tq          |          dk    r| 9                    ||           d S d S )Nparam_numelparam_bytesparam_countrO   )r  r  r  zndimension()rM  zstr(r$  r  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)r  z%, '_dynamo_dynamic_indices') == Falser   ):rP   _unsafe_skip_fsdp_module_guardsis_fsdp_moduler+  r=  r   rN   r_  r  r/  r  r  _dispatch_keysr  r  r  r  r   log_compilation_metricsr#  	Parameterr7   	incrementnumelnbytesr  rA  r\  r   r"  r   r  r  rl  r   rh  ,skip_no_tensor_aliasing_guards_on_parametersr3   r(  ro   rY  rZ  input_source_to_sizes_stridesr  r  r  add_tensor_match_guardrF  r   r   rM  r   r]  r?  add_dynamic_indices_guardr  r  r  )r   r;  r  r  r  metrics_contexttensor_namer3  termsterm
real_valuerF  r\  metadatar;  r<  r   static_reasondynamic_indicesrn  s                        r   TENSOR_MATCHzGuardBuilder.TENSOR_MATCH
  sq   1 	e6J6J6L6L 	F "%(( p	9MM%     %//  ".EEDHHUZ4H4HE%[[F!H33E::M%!2!=>> 8<+"\F&2$)$7MeU\22222- <*UEHDV2W2W <"5"7"7))-GGG))-FFF))-;;;,,u--K, !D(5AAA$18 IJ&&&   " M MD!%+*;d*B!C!CJj5<*EFF M$W;$W$W$W$WC
OO$W$WXXXX{$K$KT$K$Kz$K$KLLLLM !% 6 6u = = GQ ueh&899Q J!4 	Q %U%=?PQQQ 188EEE:AA-PPP#4A'E, 2(62BCC3HX4FGG%;.#%  
& 
&" 44&!   "%);<< J&9==ejIII< <+++<U5M  OFG  5";<< &+&CO !h[  !h  !hTc  !h  !hs~  !h  !h  !hIKK	*****511KK')?	5)Q)Q    V;UUU  KK	*****511FF1.y%@@   4yy1}}++E488888 }r   r.  r  r?  c                   t                      }|J |j        }~|J |p|j        j        }~|| j        j        v sJ d|             |!|j        }|sd n|                     |          }	n|}	|	!t          j	        t          |	                    nd }
d }t          |	j        dd          dk    }|r@t          |	t          j        t          t          j        f          st          j	        |	          }|                    ||
||           d S )NzH_produce_guard_code must be called from inside GuardedCode. Called from __weakrefoffset__r   )r   f_backr9  co_namer   rR  r  r_  weakrefr  r/  r  r   enumEnumr-  
ProxyTypesset_export_info)r   r;  r.  r  r?  	cur_framecaller	func_namer  guarded_objectguarded_object_typeobj_refsupports_weakrefs                r   r  z#GuardBuilder._set_guard_export_infoC  sS    !NN	$$$!!!!&?&-*?	DN3333bW`bb 433
 #*:D)-ATT488D>>NN4N 2@1KGK^,,---QU 	  N,.A1EEJ 	  	2JTYw/AB%
 %
 	2 k.11G		
 	
 	
 	
 	
r   )FN)r9  r4  r:  r;  r<  r=  r>  r?  r@  r  r   r  rF  r   rA  rB  rC  r   rD  r  r   r   )r  r  r;  r;   r   r   )r  r  r;  r;   r   r   )r  r   r   ru  )rM  rU   r  r   r  r   r  r   r!  r   r  r   r  r  r   r   )rM  r?   r   r   )rM  r?   r  r  r   r  )r  r  r   r   )r   r   )rM  r?   r   r   )r;  r;   r   r   r  )
r   r<  r   r<  r   r  r  r   r   r   r   )r  r   r   r  r   r   )r;  r  r   r   )r;  r;   r  r   r  r	  r   r   )r;  r;   r   r   )r;  r;   r  ru  r   r   )r;  r;   r  r   r(  r   r   r   )r;  r;   r  r   r(  r   r   r   )r;  r;   r  rH  r   r   )r;  r;   r  ru  r   r   )r;  r;   r  r?   r   r   )NN)
r;  r;   r.  r<  r  ru  r?  rH  r   r   ):r   r   r   r   rn  rt  r(  r  r  r  rj  r  r  r  rh  r  r_  r  r  r  r  r"  r'  r-  r2  r7  r:  r=  r<  rD  rG  rJ  rR  r_  rp  r{  rI  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6  rU  r  r@  r   r   r8  r8    s        "<@G G G G GR   <$ $ $ $L    \"Y Y Y Yv9 9 9 9" " " ",? ? ? ?
 
 
 
V V V VpL L L L 59 S S S S SF4 4 4 4 4       "3Y 3Y 3Y 3Yl 37J J J J J2
 
 
 
*
 
 
 
	
 	
 	
 	

 
 
 
   "

 

 

 

> > > > > =A? ? ? ? ?>	
 	
 	
 	
 	

 
 
 
O O O O
 
 
 
"
 
 
 
&
 
 
 
:
 
 
 
*j j j j jX	% 	% 	% 	%   ($ $ $ $
	' 	' 	' 	'	$ 	$ 	$ 	$   4
 
 
 
 
 
 
 
&& & & &P
 
 
 
J J J JC C C C2$ $ $ $            
 
 
 
n n n n`v9 v9 v9 v9 v9z 26,01
 1
 1
 1
 1
 1
 1
r   r8  c                      e Zd ZdZej        ej        ej        fZe	j
         G d d                      Z G d dej                  Z G d dej                  Zdd
ZdddZddZddZdS )PyExprCSEPassrO   c                  $    e Zd ZU ded<   ded<   dS )PyExprCSEPass.Configzdict[str, int]
expr_countzdict[str, str]expr_to_nameNr/  r@  r   r   Configri    s*         """"$$$$$$r   rl  c                  (     e Zd Zd	dZd
 fdZ xZS )PyExprCSEPass.ExprCounterrP   ri  r   r   c                    || _         d S r   )_config)r   rP   s     r   r   z"PyExprCSEPass.ExprCounter.__init__  s    !DLLLr   r   r  c                    t          |t          j                  r'| j        j        t          |          xx         dz  cc<   t                                          |           d S rt  )r   rg  ALLOWED_NODE_TYPESrp  rj  r  r   r   )r   r   r   s     r   r   zPyExprCSEPass.ExprCounter.visit  s^    $ @AA A'T(:(:;;;q@;;;GGMM$r   )rP   ri  r   r   )r   r  r   r   r   r   r   r   r   r   r   s   @r   ExprCounterrn    sQ        	" 	" 	" 	"	  	  	  	  	  	  	  	  	  	 r   rt  c                  ,     e Zd Zd fdZd fdZ xZS )PyExprCSEPass.ReplacerrP   ri  gen_nameCallable[[], str]r   r   c                r    t                                                       || _        || _        g | _        d S r   )r   r   rp  	_gen_namepreface)r   rP   rw  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   rg  rr  r  rp  rj  USE_THRESHOLDrk  r   r   rz  r{  rl  r  NameLoad)r   r   exprnode_expr_var_namer   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   )rP   ri  rw  rx  r   r   )r   r  r   r   rs  r   s   @r   Replacerrv    s[        	) 	) 	) 	) 	) 	)	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r   r  r   r   c                r    d| _         |                     t          j        d           i           | _        d S )Nr   c                     dS r   r@  r@  r   r   r  z(PyExprCSEPass.__init__.<locals>.<lambda>  s    q r   )rj  rk  )_counterrl  r  defaultdictrp  r   s    r   r   zPyExprCSEPass.__init__  s9    {{".yy99 # 
 
r   _varr   r   c                <    | | j          }| xj         dz  c_         |S rt  )r  )r   r   r  s      r   _new_varzPyExprCSEPass._new_var  s)    )$-))r   r  r<  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)	rt  rp  r   r  parseSyntaxErrorr  	exceptionlineno)r   r  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  rp  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   Nrs  )r  )r   r   r   r   )r  r<  r   r   r  r   r   r  )r   r   r   r}  r  	AttributeCall	Subscriptrr  dataclasses	dataclassrl  NodeVisitorrt  NodeTransformerr  r   r  r  r  r@  r   r   rg  rg    s        M -3=A% % % % % % % %         co      #' #' #' #' #'3& #' #' #'J
 
 
 
    
   8 8 8 8 8 8r   rg  c                t    t          | j        t                    pt          j        o| j        t          j        u S r   )r   r(  r^   rP    guard_nn_modules_using_dict_tags	create_fnr8  r  )r;  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   rs  )r   r   r   r   r   r   r   s   @r   r  r    sQ        * * * * * *$ $ $ $ $ $ $ $r   r  c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
S )r  rF   r  r   zOptional[_CppShapeGuardsHelper]r  r   r  r  r  Nr/  r@  r   r   r  r    sN         ))))****3333######r   r  c                  $    e Zd ZU ded<   ded<   dS )GuardsStater   r\  Optional[ShapeCodeParts]r  Nr/  r@  r   r   r  r    s*         ((((......r   r  c                      e Zd ZdS )_MissingN)r   r   r   r@  r   r   r  r    s        Dr   r  c                       e Zd Zd, fdZed-d	            Zed.d            Zed/d            Zed0d            Zed1d            Z	ed2d"            Z
ed3d&            Zed4d(            Zd5d+Z xZS )6GuardsStatePicklerr   r   kwargsr   r   c                     t                      j        |i | t          j                                        | _        t          j        j                                        | _        d S r   )	r   r   r  r  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converter)r   r   r  r   s      r   r   zGuardsStatePickler.__init__  sU    $)&)))*99;; % 1 = Q Q S Sr   statetorch.nn.Modulec                l    t           j                                        }|                    |           |S r   )r  r#  r$  __setstate__)clsr  mods      r   _unpickle_modulez#GuardsStatePickler._unpickle_module  s,    hoo
r   meta_tensorrw  r  torch.devicer  r/  dispatch_keys_rawr  gradc           	        t           j                                        }t           j        j                                        }|                    ||||t           j        j                            |                    }||_	        |S r   )
r  r  r  r  r  from_meta_and_devicer  r   from_raw_reprr  )	r  r  r  r  r  r  r  r  rets	            r   _unpickle_tensorz#GuardsStatePickler._unpickle_tensor  sv     %4466	 ,8LLNN33H#112CDD
 
 
r   ctx
inner_data5list[tuple[str, Callable[..., Any], tuple[Any, ...]]]c                   i }|D ]\  }}	}
 |	|
 ||<   |j         |                                }}t          |                              ||||          }||_        t
          j        j                            |          |_	        |S r   )
shaper<  r/  __tensor_unflatten__r  r  r  r   r  r  )r  r  r  r  r  r  r  inner_tensorsr  unpickle_funcunpickle_func_args
outer_sizeouter_strider  s                 r   $_unpickle_traceable_wrapper_subclassz7GuardsStatePickler._unpickle_traceable_wrapper_subclass(  s     7A 	E 	E3D-!3"/-1C"DM$#.#4k6H6H6J6JL
;443
L
 
 
!H3AABSTT
r   aliasr   types.ModuleTypec                *    t          j        |          S r   )r  r  )r  r  s     r   _unpickle_python_modulez*GuardsStatePickler._unpickle_python_module?  s    &u---r   raw_reprtorch._C.DispatchKeySetc                J    t           j        j                            |          S r   )r  r  r   r  )r  r  s     r   _unpickle_dispatch_key_setz-GuardsStatePickler._unpickle_dispatch_key_setC  s    x&44X>>>r   jsonbytes torch._C._functorch.CInterpreterc                T    t           j        j        j                            |          S r   )r  r  r[  CInterpreterdeserialize)r  r  s     r   _unpickle_functorch_interpreterz2GuardsStatePickler._unpickle_functorch_interpreterG  s      x"/;;DAAAr   dr   types.MappingProxyType[Any, Any]c                *    t          j        |          S r   )r%  MappingProxyType)r  r  s     r   _unpickle_mapping_proxyz*GuardsStatePickler._unpickle_mapping_proxyM  s     %a(((r   r  c                @    t          t          j        j        |          S r   )r  r  opsr  )r  r  s     r   _unpickle_c_opz!GuardsStatePickler._unpickle_c_opS  s    uy|T***r   r   6Union[tuple[Callable[..., Any], tuple[Any, ...]], Any]c                4
   dd l }t          |t          j                  rl|j        j        dk    r[ddlm}  ||          rg }|                                \  }}|D ]B}t          ||          }| 
                    |          \  }	}
|                    ||	|
f           Ct          |           j        t          j        |d          |j        t          |          t          j                            |                                          ||ffS t          |           j        t          j        |d|j                  |j        t          |          t          j                            |                                          |j        ffS t          |t          j        j                  rt          |          j        t          |          j        k    rt0          S |j        j        t          j        j        j        k    r)t          |           j        |                                ffS nt9          j        |          rt          |           j        |j        ffS t          |t          j        j                  r)t          |           j         |                                ffS t          |t          j        j!        j"                  r)t          |           j#        |$                                ffS t9          j%        |          rFtM          ||j'                  r1tQ          |d          r!tQ          |d          sJ |j)        |j*        ffS t          |t          j+                  rtY          d| d	|j-         d
          t          |t\          j/                  r)t          |           j0        |1                                ffS t          |t          j2        j3                  r6|j4        5                    d          rt          |           j6        |j        ffS |j        j7        dk    r|j        j        dk    r	tp          dfS t          |t\          j9                  r	tp          dfS t9          j:        |          r4|j;        j<        t8          j=        z  r|j        |j        k    sJ tp          dfS t          |          j        t          |          j        k    r>t          j>        j?        @                    dt          |           d| ddz   dz             t0          S )Nr   meta)is_traceable_wrapper_subclass)r  )r  r  _torch_handler_name_torch_unpicklerzCannot serialize SymInt z (node: rK  z_C::rQ  	PyCapsuler@  r  r  r  r  r  )Asympyr   r  r   r  r/  torch.utils._python_dispatchr  r  r  reducer_overriderl  r  
empty_liker  rB  r  r  r  r  r#  r$  r   r   NotImplementedr   __getstate__r  r  ismoduler  r   r  r[  r  r  	serializeisclassr  Functionr]  r  r  r  r  r   r%  r  r  rS  _opsOpOverloadPacket_qualified_op_name
startswithr  r   r  r  
isfunctionr   co_flags	CO_NESTEDr  rR   PackageError)r   r   r  r  r  attrsr  r  innerfunc
args_tuples              r   r  z#GuardsStatePickler.reducer_overrideW  s    	c5<(( P	 SZ_-F-FRRRRRR,,S11   
 3355
s! @ @D#C..E'+'<'<U'C'C$D*%%tT:&>????DzzF$S888JIIH++C0099;;I   ::. V3CTUUU
S		'',,55771   UX_-- 0	 Cyy%c);;;%%})UX_-IIIDzz2S5E5E5G5G4III J c"" *	 ::5FFUX455 '	 ::83<<>>:KKKUX0=>> $	 ::=?QQQ OC  !	 3//!	  233!	 
 3 233333'#*A)CCCU\** 	 R#RRsxRRRSSSU344 	 ::5

}DD,
 
 	 $//77	  ::,s|o== M$
22&+55 R<U^,, 	 R<$$ 	 #,*?'BS*S 	 #s|3333R<99!T#YY%777-#00ES		EEsEEETUTU   r   )r   r   r  r   r   r   )r  r   r   r  )r  rw  r  r  r  r/  r  r  r  rw  r   rw  )r  rw  r  r  r  r/  r  r  r  r   r  r  r   rw  )r  r   r   r  )r  r  r   r  )r  r  r   r  )r  r  r   r  )r  r   r   r   )r   r   r   r  )r   r   r   r   r)  r  r  r  r  r  r  r  r  r  r   r   s   @r   r  r    sc       T T T T T T
    [
    [(    [, . . . [. ? ? ? [? B B B [B
 ) ) ) [)
 + + + [+^ ^ ^ ^ ^ ^ ^ ^r   r  r  r  c                $   t          j                    }t          |          }	 |                    |            nD# t          $ r7}t
          j        j                            t          |                    |d }~ww xY w|
                                S r   )ioBytesIOr  dumpAttributeErrorr  r  rR   r  r   r^  )r  bufpicklerr  s       r   pickle_guards_stater    s    
*,,C %%G<U < < <m,,SVV44!;<<<>>s   : 
A;2A66A;c                  f    e Zd ZU 	 	 	 	 	 	 	 d0d1dZdZded<   d2dZd3d#Zd4d&Zd5d)Z	d6d-Z
d7d/ZdS )8rB  NFr9  r4  r\  r   r   Optional[CacheEntry]r   %Optional[Callable[[GuardFail], None]]guard_filter_fn8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]r  r  rD  r  rC  r   strict_errorc
                    |r|j         nd }
i  _        t          |          }| _         j        J | _        |r|j        nd  _        t                       _        t                       _        t                       _	        | _
        t          d          st                              d           t          j        j        j        r|pd d"fd}t%          |
pd	t&          j        
          }|r                     ||||d          \  }d#fd |fd|D                       t-                    t-          |          k    sJ t/          d D                       sJ fdt1          |          D             }                     |||||          \  }| _                             ||           j         j        _        t8                              d j                   j         j        _        d|j        s|j        sމ j                             |j!                  s>tE           j        |j!        tG          j$                              }tK          d|           tL          tM           j        |j!                   tO           j        j(        |j!        d          t8                              dd           tS          j*        dtW                               d  _,        |rddl-m.} t_           j        |          sJ 	  0                    | j                   _,        n# tb          j2        $ rt}t          j        j        j3        s|	r| j        4                    dtk          |           tm          j7                    8                    d                     Y d }~nd }~ww xY wt          j9        :                    d fd !            j        ;                                 d  _        d S )$NrO  z9guard_nn_modules is turned off using justknobs killswitchc                    d | D             S )Nc                    g | ]}d S )Tr@  )r  gs     r   rC  zCCheckFunctionManager.__init__.<locals>.<lambda>.<locals>.<listcomp>  s    >P>P>Pt>P>P>Pr   r@  )gss    r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>  s    >P>PR>P>P>P r   r   list[GuardFilterEntry]r   
list[bool]c                J   g }t           |           |           D ]\  }}|s|                    d           |j        dv s	d|j        v rAt                              d|j        |j        j                   |                    d           p|                    d           |S )NF)r=  r  r  r=  z7%s guard on %s is dropped with caching_precompile=True.T)r  rl  
guard_typederived_guard_typesr  r  
orig_guardr  )r   r  keepr  _guard_filter_fns       r   r  z6CheckFunctionManager.__init__.<locals>.guard_filter_fn  s    "#3#3F#;#;VDD ) )GD! )

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

5))))

4((((
r   r@  )r  Fr;  r;   r   c           	     b   t                      }t          | j                  }|dk    rd}|}n)	                     | j                  }d}n#  |}d}Y nxY wt	          | j                  d u}t          ||||                                 | j        rt          | j                  nd||           S )Nr[  FTr@  )r  	has_valuer  r   r!  	is_globalr"  )
objectstrip_local_scoper  r_  r,   r(  r   create_fn_nameguard_typesr-  )r;  MISSINGr  r&  r  r'  builders         r   make_guard_filter_entryz>CheckFunctionManager.__init__.<locals>.make_guard_filter_entry  s     (((442:: %I#EE	*
 !(EJ 7 7$(		* '$)			253KLLTXX	''$3355494EMe/0002'$
 
 
 
s   A Ac                &    g | ]} |          S r@  r@  )r  r;  r.  s     r   rC  z1CheckFunctionManager.__init__.<locals>.<listcomp>.  s%    KKKE((//KKKr   c              3  F   K   | ]}t          |          t          k    V  d S r   )r/  r   r  r`  s     r   r  z0CheckFunctionManager.__init__.<locals>.<genexpr>1  s,      ??1tAww$??????r   c                *    g | ]\  }}|         |S r@  r@  )r  r  r;  filter_resultss      r   rC  z1CheckFunctionManager.__init__.<locals>.<listcomp>2  s8       "!U.QRBS  r   %sg        zGuard check failed: rO   zGuard eval latency = %s us.2fguard_latency_usr   r  zGuard evaluation failed: r  )	tracebackdynamo_cpp_guards_strc                      j          d ddS )Nz
Guard latency = r5  z us)rF  )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;  r;   r   r   )<r   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesr\  r  torch_function_mode_stackrK   r  r  r  rD  rD   r  r  r  r  rP   caching_precompiler   r;   sort_keybuild_guardsr  r
  rp  rF  compile_check_fnr   r  r  skip_guards_checkr   rb  r@  get_guard_fail_reason_helperr8   rz  r  r   r%   r   r6   increment_toplevelr  guards_stater  r   r   serialize_guardsrR   r  strict_precompilebypass_packager   r7  
format_excrj  _loggingtrace_structuredclear)r   r9  r\  r   r   r  r  rD  rC  r  r   existing_diff_guard_sourcessorted_guardsrF  reasonsr   r  r$  r-  r3  r:  r.  s   `                @@@@@r   r   zCheckFunctionManager.__init__  s    )5>$$$;= B+NN 	$ ?K ,,, !1
 7CLL22 	& 3=,,;E<<'<FLL($8!BCC 	UKKSTTT =2 	.Q3P3P     & v|@@@ ,	 &*%6%6:FLRW& &"G]     < -_KKKK]KKK N ~&&#m*<*<<<<<??????????   &/&>&>  M
 "&!2!2'"
 "
 +g}mDDD .5-D*t1222-4-D* - !	Tl6I !	T%++L,DEE G6& ,"577 
 %%EG%E%EFFF,8-&(@'   ,"')A1 G 9g;K;KLLL 12Dc'llSSS-1 	>>>>>>d/=====
$($9$9]D,=% %!! #   ='9 \ G!008A88'244::4@@ 1         	''#XXXXX 	( 	
 	
 	
 	 s   !L< <N?A*N::N?)r'  r  r=  r  r  r  ztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPESr-  r8  rP  list[Guard]r   r   r  c           
     "    |D ]}|                                 }|j        rt          |j                  nd}|dv r1|j        r)|                    |j                  }t          |           h|t          j        v r't          j
        j                            | d          t          d |D             d           x}r't          j
        j                            | d          |j        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             |<   t3          j        |
 fd|
j                                        D             |t          j                            fd|D                       t=          j        t@          |
j!                  d          }
tE          |
 j                  }tG          |          S )Nr@  )r"  r  z guard cannot be serialized.c              3  6   K   | ]}|t           j        v |V  d S r   )rB  rR  )r  r  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<genexpr>  s=        0VVV VVVV r   rM  r?   r   r   c                   t          |           x}r5t          |t                    sJ |fvr                    |           d S d S t	          |           x}r.t          |t                    sJ                     |           d S d S r   )r,   r   r   r   r-   )rM  r  builtins_dict_nameused_global_varsused_local_varss     r   prune_variablez=CheckFunctionManager.serialize_guards.<locals>.prune_variable  s    -f555t 	*!$,,,,,  2444$((..... 54.v666 *!$,,,,,##D)))))* *r   r`  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 )Nr`  r   r   c                \    t          | t          t          j        f          r
 |             S | S r   )r   rN   rZ  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   r@  )r  rv  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 r@  r@  )r  kvr^  s      r   
<dictcomp>zVCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>.<dictcomp>  s'    JJJtq!4477JJJr   )r`  r   r   r   )r   	functoolspartialr-  r   keywordsr   r  )r`  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 r@  )r  )r  ra  rb  r   rX  s      r   rc  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>  sB     
 
 
1$$$T-M(M(M q(M(M(Mr   c                .    i | ]\  }}|j         v ||S r@  )r  )r  ra  rb  r   s      r   rc  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>  s;     2
 2
 2
1 D***	 q +**r   c                6    i | ]\  }}|v s	|j         v ||S r@  )r  )r  ra  rb  r   rY  s      r   rc  z9CheckFunctionManager.serialize_guards.<locals>.<dictcomp>  sA       Aq''10O+O+O 1+O+O+Or   c           
     \    h | ](}t          j        |d d  |j                            )S )N)obj_weakrefguarded_class_weakrefr  )r  r  r  )r  r;  ri  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<setcomp>  sV          '$(.2"5"5eo"F"F	    r   T)r@  r   _guardsrI  rD  )r\  r  )rM  r?   r   r   )r`  r[  r   r[  )$r*  r+  r-  r   r_  r  r  rB  rR  r  r  rR   r  next%name_of_builtins_dict_key_in_fglobalsr   dump_guards_stater   r(  rr   r  r  r]  r   r   r  r  r@  rp  	GuardsSetr  tree_mapr  rI  r  r  )r   r-  rP  r\  r;  r   r!  r   failedrZ  output_graph_guards_staterM  global_scope_staterG  rW  ri  rX  rY  s   `             @@@@r   rH  z%CheckFunctionManager.serialize_guards  s    # 	 	E--//J>C>O"W%(9":":":UW <<<( 0!++ej11C*3///2XXXm'44!???     0  
     m'44;;;   *O55%%
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* %1$B$B$D$D!" 	9 	9E%2NCC 9,,,,"3E + +F"N6****+ u78888"5 	# 	#FN6""""	 	 	 	
 
 
 
 
1>DDFF
 
 

2
 2
 2
 2
1>"egg	2
 2
 2
-. %0$7%    5AGGII  
 ,M++    "/  
 
 +1/.)G+ + #/%
 %
 %
!2 #2!2
 
 

 #<000r   rO  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 )NrM  r?   r   r   c                    |                                  }|t          j        u r|                                 S sJ              }|J |                    |                                           S r   )guard_sourcer>   CONSTANTr  r  )rM  r|  	r_builder	w_builders      r   r<  z5CheckFunctionManager.build_guards.<locals>.source_ref*  sn    !..00L{333{{}}$9!	I((($$V[[]]333r   )rD  weak_bweakref.ref[GuardBuilder]r   c                0     |             }|r	d |_         d S d S r   )rP  )r  r  s     r   cleanup_builderz:CheckFunctionManager.build_guards.<locals>.cleanup_builderB  s*    A  r   rO  r   r   ra  )rM  r?   r   r   )r  r  r   r   )r   r   r8  r:  r>  r@  r   rD  rZ  r  rP   rc  rD   r)  r  r  r  )r   rP  rO  r9  r\  rC  rF  r<  r-  r  guard_on_nn_modulesr;  r  s               @r   rB  z!CheckFunctionManager.build_guards  sE    ,--+F(		4 	4 	4 	4 	4 	4 K $%!%!:
 
 
	 	 	 	 K99	$5 
//;
 ;
 # 	" 	"E'	2244	
 #%*44$EJ665 79@
9R9RLL!!!!%%r   
guards_outr   c                	   j         }|dgz  }t                              d           g g g | j        J t	          | j                  }| j        j                            t          t          j
                                         | j        J | j        j        }| j        j                            |dg           | j        j                            | j        dg           d | _        	 d#d$fd}t                      }j        D ]7}	|	j        D ]-}
|
|vr' ||
|	j        d           |                    |
           .8j        }d }d }t+          |          dk    r0t-          j        |dd                    |          z   dz   g           t2          j        rAj        r:t9          t:          t=          j                   \  }}                    ||           | j        r| j        j         ng }|D ]P}tC          |tD                    r|j#        }|j$        }|%                                 d|%                                 }tM          '                    |          '                    |          |g            ||d d           tC          |tP                    rfd|j)        D             }fd|j*        D             }dd                    d |j)        D                        dd                    d |j*        D                        d}tW          |||g            ||d d           @tY          d|           j-        D ]}	|	j        D ]}
 ||
|	j        d           r$t\          j/        0                    dfd           tb          j2        tc          j3                    }|||j4        |d tj          tm                      }| j        7                                 d!j8        d!         i}t+                    d"k    sJ || j        _9        || j        _:        | j        ;                                 | j        _<        || j        _=        || j        _>        d | j        _?        d | j        _@        || j        _A        d S )%Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()Frn  r   r;  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 )Nr4  c                      r2j         r+t          j        j                                                   nd r j        rt          j        j                  nd dS )N)r3  r  r  )r  rC   from_tracebackr  r  )rn  r;  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   r[  z
Stack:
z
User stack:
zGuard: %s%s%s)r  r  r  rl  verbose_guards_logisEnabledForloggingDEBUGr  r  formatr  )	rn  r;  r  rm  maybe_stackmaybe_user_stackr   structured_guard_fnsr   s	   ``    r   add_code_partz<CheckFunctionManager.compile_check_fn.<locals>.add_code_part  s[    !6i G GT#4555 ''        "..w}==  #% ${ S&R2775;;M;M;O;O3P3P&R&R' Rbgge6F6M6M6O6O.P.PRR ) #((#$	    =!!),,,"))*;<<<<<= =r   TrO   zcheck_no_aliasing(rJ  rK  r  c                :    g | ]}                     |          S r@  r  r  rO  r-  s     r   rC  z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>  s7     . . . 99!<<. . .r   c                :    g | ]}                     |          S r@  r  r  s     r   rC  z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>  s7     2 2 2 99!<<2 2 2r   zcheck_overlapping(overlapping=[c              3  >   K   | ]}|                                 V  d S r   r  r  rO  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s*      /\/\Q/\/\/\/\/\/\r   z], non_overlapping=[c              3  >   K   | ]}|                                 V  d S r   r  r  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s*      3d3dAFFHH3d3d3d3d3d3dr   z])zUnknown GuardEnvExpr: dynamo_guardsc                     d  D             S )Nc                "    g | ]} |            S r@  r@  )r  fs     r   rC  zKCheckFunctionManager.compile_check_fn.<locals>.<lambda>.<locals>.<listcomp>  s    4W4W4WQQQSS4W4W4Wr   r@  )r  s   r   r  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    4W4WBV4W4W4W r   r;  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackrH  r   r   )rn  r   r;  r  r  r   r   r   )BrW  r  r  r?  $make_torch_function_mode_stack_guardrF  r   attach_compile_idr   r8   rz  r\  global_state_guardadd_global_state_guard#add_torch_function_mode_stack_guardr   r3  r.  r;  r   rY  r  r    rZ  r  rP   r  rb  re  r  r  r  aotautograd_guardsr   r:   input_source_ainput_source_br  r!   r  r@   overlapping_sourcesnon_overlapping_sourcesr"   r  rX  r  rL  rM  rQ   initial_global_stateGlobalStateGuardrb  rI   r  r   rP  r   r   rr  r   r   r   r   r   r   )r   r-  r  r   largs"torch_function_mode_stack_check_fnglobal_stater  seengclr3  rY  check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsr  r;  source_ar  rn  overlapping_guard_managersnon_overlapping_guard_managersr   r  r   r  r   s    `                       @@@r   rC  z%CheckFunctionManager.compile_check_fn]  s     '((###
CE-999-Q*.
 .
*
 	1113344	
 	
 	

  ,,,(;6645	
 	
 	
 	CC*3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 / /'}}EEHMMOOEE	-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.
k&*ii/\/\%B[/\/\/\&\&\k k*.))3d3deFc3d3d3d*d*dk k k 
 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(9;;L 0(@%1%72T	
 

 
  !!
 	##%%% #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 )NrF  zCache line invalidated because z got deallocated)	r]  r   rF  r  r   r   r~   r   
invalidate)r   r  r   r   r  deleted_guard_managers         r   r  zCheckFunctionManager.invalidate1  s    
 D/**	7t13MNN	7 !% 2 >>K $ 2 >>Kk:66666k:66666PwPPPF$>v$F$F!"";0EFFF!6D	7 	7 	7 	7 LKKKr   r   r(  r  c                   	 t          |          | j        vrWt          j        |          | j        t          |          <   t          j        |t          j        | j        |                     n# t          $ r Y nw xY wt          |          S )zadd a weakref, return the id)r  )	r^  r=  rZ  r  r   rd  re  r  r  )r   r   r  s      r   r:  zCheckFunctionManager.id_refB  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   r>  z$CheckFunctionManager.lookup_weakrefsQ  s-    c77dn$$>"S''**tr   )NNNNNFF)r9  r4  r\  r   r   r  r   r  r  r  r  r  rD  r  rC  r   r  r   )r-  r8  rP  rS  r\  r   r   r  )rP  rS  rO  r   r9  r4  r\  r   rC  r   r   ry  )r-  r8  r  rS  r   r  r   r   )r  r   r   r   )r   r(  r  r   r   r  )r   r(  r   r  )r   r   r   r   rR  r   rH  rB  rC  r  r:  r>  r@  r   r   rB  rB    s         
 -1?C 599=!"O! O! O! O! O!bH)    y1 y1 y1 y1v>& >& >& >&@RQ RQ RQ RQh7 7 7 7"        r   rB  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   r@  )r  s    r   r  z%build_guard_function.<locals>.replacee  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   rg  r  RecursionErrorrX  r   rS  splicer^  )
r   r  rB   r  
guard_bodyr  r{  r;  make_guard_fnr  s
            @r   r  r  X  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   r  rL  	_internal	log_stateis_artifact_enabledr@  r   r   is_recompiles_enabledr    s    >#-AA,OOOr   c                 T    t           j        j        j                            d          S )Nr   r  r@  r   r   is_recompiles_verbose_enabledr    s    >#-AABVWWWr   initial_stack'list[torch.overrides.TorchFunctionMode]Callable[[], bool]c                ,    d | D             dfd}|S )Nc                ,    g | ]}t          |          S r@  )r/  r1  s     r   rC  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          |          k    r dS dS r'  )r   r  r  r/  )	cur_stackty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T$ZZuu   tr   r   r   r@  )r  r  r%  s     @r   r  r    s>     -,m,,,E
 
 
 
 
 
 +*r   ScoperF  rP  c                R   | j         J t          | j                   }t          j        t                    | j        D ]@}||d<   t          t          |||                    }|                             |           AfdD             }d	                    |          }d| gS )N__compile_source__c                T    g | ]$}t          |                   d k    |          %S )rO   )r  )r  r  ids_to_sources     r   rC  zErecompilation_reason_for_no_tensor_aliasing_guard.<locals>.<listcomp>  s@       $'Cc@R<S<SVW<W<W=<W<W<Wr   rJ  zDuplicate tensors found: )
r   r  r  r  r  r   r^  r   rl  r  )rF  rP  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   rO  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)rO  r  patterns      r   r)  r)    s(     III+G66'5!$$$r   f_locals
compile_idOptional[CompileId]c                8   | j         J | j        J || j         d         d}|                    | j                   g }d}g }|                     |          }|j        s+|j        }t          |          dk    rd|d         v rd}n|}g }|rt          | |          }n|D ]}t          | j                   }	||	d	<   t                      5  	 t          ||	|          }
n*# t          $ r t                      rY ddd           b w xY w	 ddd           n# 1 swxY w Y   t          |
t                    r|
s|}
t          |
t                    r%|                    |
           t                      s n| d
d                    |          z   }t%          |          S )z
    Return the reason why `guard_manager` failed.
    Updates `guard_failures` with the generated reason.
    Only the first failed check of guard_manager is reported.
    NrH  rF  FrO   zDuplicate tensor foundr   Tr  r?  z; )r   r   r  re  resultr   r  r  r  rM   r   	Exceptionr  r   r   r   rl  r  r)  )rF  r  r  rP  rQ  no_tensor_aliasing_check_failedr   guard_debug_inforA  r   fail_reason
reason_strs               r   rE  rE    sc    %111%111!;C!@AAE	LL+,,,G&+#$&$228<< " (-@ !""a'''+=a+@@@26//,%'"& C5
 
 ' 	 	D :;;L15L-./11  "&t\5"A"AKK    466         	                 +t,, #[ #"+s++ {+++466 E"""TYYw%7%77JZ(((s6   D
CDD4DDDD	D	Fr9   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 )Nr?  zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r   r  r  rE  r   r   rl  r   r   r  r  r  )rF  r3  r  r  r  r  s         r   get_guard_fail_reasonr  	  s     -!;<< DCC ACCC-mXzRRJ =&'..z:::
&2''*8(8-:MNN    
 
 
d	
 	
 	
 	
 	


 s   #7B $CCr   r  framer   c                N  	 g 	| Gt          | j        | j        |j        | j        |          }|r	                    |           | j        } | G|j        }|r	S t                      pt                      }|st          j        rt                      r-d                    d t          	          D                       }n(t          j        d                    	          d          }d| }d|j         d|j         d	|j         dt          j        |d
           }|rCt                      rt&                              |           nt*                              |           t          j        rt-          j        |          t0          j                            dd 	fd           	S )z
    Return the list of guard failure reasons using cache_entry.
    Logs the recompilation reason if `recompiles` logging is enabled.
    Raises a RecompileError if `config.error_on_recompile` is enabled.
    Nz

c              3  T   K   | ]#\  }}d | dt          j        |d          z   V  $dS )zguard z failures:
- N)r"  rS  )r  r  r  s      r   r  z:get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>D  sV       # #Av )(((8?64+H+HH# # # # # #r   r  r  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     dddS )Nrecompile_reasonsr  )r  encodingr@  r@  r   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>[  s    '
 
 r   c                      S r   r@  )rQ  s   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>_  s    7 r   )metadata_fnr<  )r  rF  r3  r  r  rl  rq  r9  r  r  rP   error_on_recompiler  rp  r"  rS  rY  co_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logrR   RecompileErrorr  rL  rM  )
r   r  r  r  r3  do_recompiles_logfailuresguard_failure_detailsmessagerQ  s
            @r   'get_and_maybe_log_recompilation_reasonsr  $  s    G

!&%N"
 
  	#NN6"""!& 
! <D -//R3P3R3R .F5 .(** 	A{{ # #!*7!3!3# # #  HH
  tyy'9'94@@HGXGG 	@DL @ @d6F @ @I\ @ @4f==@ @ 	  	.,.. .&,,W5555$$W---$ 	.$W---	N##
 
 #??? $    Nr   r   c                    | }t                      }| 5|                    | j                                                   | j        } | 5|} | .|| j        _        | j                                         | j        } | .|S r   )rK   r  rF  r   rq  r   r   )r   first_cache_entryacc_diff_guard_sourcess      r   r>  r>  e  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 rJ  z and
  rG  zMalformed guard:
)
printrY  r  r  r  r   r   r   r   r   )rF  r3  r  r  r  r@  r;  s          r   guard_error_hookr    s     
WWWt/?WW$BUWW   
)dii 233
3c
9:::	#z}788999	-?M$>?K) 0 0	02K@@@@	0.u../////	0 0s   !B88CseqSequence[T]Generator[T, None, None]c              #  j   K   t                      }| D ]}||vr|V  |                    |            d S r   )r   r   )r  r  r`  s      r   uniquer    sJ      55D  D==GGGHHQKKK r   
obj_sourcer?   dupe_source Optional[functools.partial[Any]]c                V   |r|| k    rt          |          }t          |           }t          |          st          |           r>t          j        |                                  d|                                 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/   rR   UnsafeScriptObjectErrorr  rd  re  r8  r  )r  r  ser_source_is_localsource_is_locals       r   make_dupe_guardr$    s      Y{j002;??.z::/
 
 	1*==	 -??$$ ? ?;3C3C3E3E ? ? ?   /11 $\%AKXXXX4r   )skipr%  c                l   ddl m} t                              t          j                  p#t                              t          j                  }|                                j        j	        j
        }|D ]?}t          |t                    sJ t          |j                  r. |||| dz              @dS )z
    Add dynamo guards to the current tracing context.

    Args:
        guards: guard(s) to add
        skip: number of stack frames to ignore for debug stack trace
    r   )TracingContextrO   )collect_debug_stackr%  N)torch._guardsr'  r  r  r  r  r  r_  guards_contextr  r   r   r;   r2   r(  )r%  r   r'  r(  r   r;  s         r   install_guardr+    s     -,,,,,$11  8		(	(	7	7  




-
;
?C K K%'''''$U%=>> 	E':JJJJJK Kr   )rv  r   r   rw  )r   r  )r   r  )r   r  r   r   )rn  r   r;  r  r   r   r   )r   r  r;  r  r  rH  r   r<  )r  r   r   r  )r  r  r   r  )r  rw  r  r   r  r  r  r  r  r/  r  r   r   r   )r  r  r  r   r   r  )rM  r   r  r   r   r   )r   r   r   r	   )r  r   r   r   )rM  r  r  r   r  r   r  r   r  r  r   r   )r;  r;   r   r   )r3  r4  r   r<  )r  r  r   r  )r   r<  r  r   r   r  r  )r  r  r   r  )rF  r   rP  r  r   r<  )rO  r   r   r   )rF  r   r  r  r  r  r   r   r   )rF  r   r3  r4  r  r  r  r9   r  r   r   r   )r   r  r  r   r  r   r   r<  )r   r  r   r   )rF  r   r3  r4  r  r  r  r  r  r   r   r   )r  r  r   r  )r  r?   r  r?   r   r  )r   r;   r%  r  r   r   (  ru  
__future__r   r  rQ  r  r  r[  rd  r  r  r  r  r  picklerz  r"  r7  r%  r|  rZ  
contextlibr   rS  r   r   typingr   r   r	   r
   r   r   r   ImportErrortyping_extensionsr   r   r   r  torch.overridestorch.utils._devicetorch._C._dynamo.eval_framer   torch._C._dynamo.guardsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   torch._dynamo.sourcer,   r-   r.   r/   r0   r1   r2   r3   r4   r5   torch._dynamo.utilsr6   r7   r)  r8   r9   r:   r;   r<   r=   r>   r?   r@   r  rB   torch._loggingrC   torch._utils_internalrD   %torch.fx.experimental.symbolic_shapesrE   rF   rG   rH   rI   torch.utilsrJ   r  torch.utils._ordered_setrK   torch.utils._tracebackrL   rM   torch.utils.weakrN   r[  rP   rQ   rR   
eval_framerS   rM  rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   numpyr{  ModuleNotFoundErrorcollections.abcr   r   r   r  r   torch._Cr   r  r   r   r   	getLoggerr   r  rL  getArtifactLoggerr  r	  r  r  r+  r   r   r  cacher  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r+  r-  r\  r  r6  r8  rg  r  r  r  r  r  Picklerr  r  rB  r  r  r  r  r  r   r(  r  r  r)  rE  r  r  r>  r  r  r$  r+  r@  r   r   <module>rH     s    " # " " " " " 



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



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