
    i                   
   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! 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lZerdd lmZmZmZ dd!lmZ dd"lmZ dd#lmZmZ  e%d$      Z ej                  eҫ      Ze'j                  j                  ed%      Ze'j                  j                  ed&      Ze'j                  j                  ed'      Ze'j                  j                  ed(      Zd)Z G d* d+e`      Z G d, d-      Zdjd.Zej                  dkd/       Zdad0ed1<   dld2Zdmd3Ze'j                  j                  j                  Zdnd4Z	 do	 	 	 	 	 	 	 dpd5Zdqd6Zdrd7Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dsd8Zdtd9Zdud:Zdvd;Zdwd<Z ej                  d=>       G d? d@             Z	 	 	 	 	 	 	 	 	 	 	 	 dxdBZdydCZej                   G dD dE             Z G dF dAej                        Zej                  dzdG       Z G dH dIeZ      Z G dJ dK      ZdydLZ G dM dNeܫ      Zej                   G dO dP             Zej                   G dQ dR             Z G dS dT      Z G dU dVej                        Zd{dWZ  G dX dY      Zd|dZZd}d[Zd}d\Z	 	 	 	 d~d]Z e$d^eeef         Z		 	 	 	 	 	 dd_Z
dd`Z	 	 	 	 	 	 	 	 ddaZ	 d	 	 	 	 	 	 	 	 	 	 	 ddbZ	 d	 	 	 	 	 	 	 ddcZ	 	 	 	 dddZ	 	 	 	 	 	 	 	 	 	 	 	 ddeZ eze       ddfZ	 	 	 	 	 	 ddgZddhddiZy# e"$ r
 ddl#m!Z! Y ww xY w# e$ r dZY w xY w)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 )IndentedBufferWithPrefixc                :    d| j                   | j                  z  z  S )Nz| )_indenttabwidthselfs    N/var/www/html/engine/venv/lib/python3.12/site-packages/torch/_dynamo/guards.pyprefixzIndentedBufferWithPrefix.prefix   s    t||dmm344    c                N    |rt         |   |       y t         |   d|z          y )Nz+- )super	writeline)r   lineskip_prefix	__class__s      r   r   z"IndentedBufferWithPrefix.writeline   s$    Gd#Gedl+r   returnstrF)r   r   r   boolr   None)__name__
__module____qualname__r   r   __classcell__r   s   @r   r   r      s    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	 	 	 	 dd
ZddZ	 d	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZddZddZddZddZy) 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++.
    Nc                   |t               | _        n|| _        d | _        d | _        d | _        g | _        d | _        d | _        d | _        d | _	        d | _
        i | _        g | _        t               | _        t               | _        y N)r'   rootdiff_guard_rootclosure_varsargs
code_partsverbose_code_partsglobal_scopeguard_fail_fncache_entryextra_stateid_matched_objsno_tensor_aliasing_sourcessetprinted_relational_guardsrK   diff_guard_sources)r   r   s     r   __init__zGuardManagerWrapper.__init__   s    <(*DIDI;?6:)-	%'7;6:DH1515AC57'?Bu&3=<r   c              #  z   K   t               | _        	 d  t               | _        y # t               | _        w xY wwr   )r   r   r   s    r   #_preserve_printed_relational_guardsz7GuardManagerWrapper._preserve_printed_relational_guards  s,     ),&	3-0UD*SUD*s   ;' ;8;c                p     d fdd fddfd  j                           j                  S )Nc                L   | j                         j                  v xs | j                         dkD  }t        | j	                         j                               D ]  \  }\  }}| |       |      z  z  } |r)j                  j                  | j                                |S Nr   )
get_sourcer   
fail_countsortedget_key_value_managersitemsadd)nodeis_diff_guard_nodeidxkey_mgrval_mgrr   visits        r   visit_dict_managerzJGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_dict_manager)  s    !T%<%<<U@QTU@U  ,2++-335, F''gw #eGnuW~&EE"F
 "''++DOO,=>%%r   c                $   t        | t              rJ | j                         j                  v xs | j	                         dkD  }| j                         D ]  }| |      z  } |r)j                  j                  | 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 !T%<%<<U@QTU@U  "446 7	"eI&66"7 "''++DOO,=>%%r   c                J    | yt        | t              r |       S  |       S )NFr   r   r   r   r   s    r   r   z=GuardManagerWrapper.collect_diff_guard_sources.<locals>.visitE  s,    |$ 01)$// &&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,    	&	&	' 	dii&&&r   c                z    t         j                  rt        d      r| j                          | j	                          y )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  s/    44A:
 $$&'')r   c                D    | j                          | j                          y 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 ]E  }t        |j                         t        j                  j
                        s6|j                          G y)	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.
        c                    | j                         }| j                         }t        fdt        ||      D              S )Nc              3  `   K   | ]%  \  }}t        |      xr |j                          ' y wr   )r   is_tag_safe).0accessormgraccepted_accessorss      r   	<genexpr>zTGuardManagerWrapper.find_tag_safe_roots.<locals>.check_tag_safety.<locals>.<genexpr>  s4      !Hc 8%78NS__=NNs   +.)get_accessorsr   allzip)r   r  	accessors
child_mgrss    `  r   check_tag_safetyzAGuardManagerWrapper.find_tag_safe_roots.<locals>.check_tag_safety  sB     **,I002J %(J%?  r   c                   t        | j                         t              sJ g }d}t        | j	                         j                               D ],  \  }\  }}| |       ||j                   |             . t        | j	                         j                               D ]3  \  }\  }}|r||j                         z  }|s!||j                         z  }5 |r| j                          |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  s    d<<>EEEN"& ,2++-335, :''gw &'N&"))%.9: ,2++-335, A''gw '7+>+>+@@''7+>+>+@@'A #""$!!r   c                   t        | t              rJ g }| j                         D ]  }|j                   |              | j	                         rlt        | j                         t        j                        r2| j                         r2| j                         s"| j                          |S | j                          |S t        | j                         t              rP| j                         }| j                         }t        d t        ||      D              }|r| j                          |S t        | j                         t        j                   j"                        r* | t$        t&        f      }|r| j                          | gS |S | j                         t(        j*                  t(        j,                  t.        t0        fv rt2        j4                  ru | t6        t8        t:        t<        t>        f      }| j                         D ],  }t        |t>              s||jA                         tB        v z  }. |r| j                          |S t        | j                         t(        jD                        rE | t>        f      }|t        d | j                         D              z  }|r| j                          |S t        | j                         tF              rU| jI                         jK                  tB              r2t2        j4                  r" | tL        f      }|r| j                          |S t        | j                         tN              r% | tP        tR        f      }|r| j                          |S )Nc              3  f   K   | ])  \  }}t        |t              xr |j                          + y wr   )r   r   r   )r   r  r  s      r   r  zQGuardManagerWrapper.find_tag_safe_roots.<locals>.visit_manager.<locals>.<genexpr>  s3      *%# x)ABXsGXX*   /1c              3  f   K   | ])  }t        |t              xr |j                         d k(   + yw)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 ..0OCD+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  sJ   !$(8999  N!446 8	%%eI&678 ..0 d<<>M,,.t7U7U7W**,| "!y &&(x "!w D::<dC ..0	!446
&) *),Y
)C* '# '&&(f "!e D::<ehhooN&668IJ'# '&&(  T "!M ..0&&$$ 	 DD '7),13,	'# !% 2 2 4 H!(,@A+$2248VV+ '&&(J "!I D::<ennM&6t>R=T&U##s + %)$6$6$8+ ( #
 '&&(6 "!3 499;UCOO%../MNDD '746'# '&&( "! D::<dC&602FG'# '&&(!!r   c                L    | g S t        | t              r |       S  |       S r   r   r   s    r   r   z6GuardManagerWrapper.find_tag_safe_roots.<locals>.visit+  s.    |	$ 01)$// &&r   N)r   r   r  ztuple[type[GuardAccessor], ...]r   r   )r   r   r   list[GuardManager])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[  sx    t		4S			"<l	"\	' tyy)" 	*D$88:EHHOOL'')	*r   c                    | j                  | j                        | _        | j                  r| j                  j	                          y y r   )clone_with_chosen_sourcesr   r   r   update_diff_guard_root_managerr   s    r   r   z/GuardManagerWrapper.populate_diff_guard_manager7  s=    #==d>U>UV ;;= r   c                F    dfd}| j                   j                  |      S )Nc                (    | j                         v S r   )r   )node_mgrchosen_sourcess    r   	filter_fnz@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fnG  s    &&(N::r   )r4  r   r   r   )r   clone_manager)r   r5  r6  s    ` r   r0  z-GuardManagerWrapper.clone_with_chosen_sourcesD  s    	; yy&&y11r   c                    |j                   j                  }|j                         }|D cg c]
  }|dz   |z    }}|S c c}w )N: )r   r   r   )r   guard
guard_namepartsparts        r   get_guard_linesz#GuardManagerWrapper.get_guard_linesL  sF    __--
((*6;<dd"T)<< =s   >c                    |j                         }|j                  j                  }|dz   |z   }|r|d|z   z  }|d|j                          z  }|d|j	                          d|j                          dz  }|S )Nz	: source=, z, type=z, tag_safe=())r   r   r   r  r   is_tag_safe_root)r   guard_manageraccessor_strsourcetss         r   get_manager_linez$GuardManagerWrapper.get_manager_lineR  s     ))+##,,Of$$$A	w}>>@ABB	|M5578=;Y;Y;[:\\]^^r   c                   t        |j                         j                               D ]  \  }\  }}|j                  d|        |j	                         5  |r5|j                  d| j                  |              | j                  ||       |r5|j                  d| j                  |              | j                  ||       d d d         y # 1 sw Y   xY w)NzKeyValueManager pair at index=zKeyManager: zValueManager: )r   r   r   r   indentrH  construct_manager_string)r   r  bodyr   r   r   s         r   construct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_string^  s     (.c.H.H.J.P.P.R'S 		A#C#'7NN;C5AB ANN\$2G2G2P1Q#RS11'4@NN^D4I4I'4R3S#TU11'4@A A		AA As   A/CC	c           
        |j                         5  |j                         D ]  }t        |t              rq|| j                  vr<| j                  j                  |       |j                  | j                  |             ]|j                  |j                  j                  g       |j                  | j                  |              t        |t              r| j                  ||       t        |j                         |j                               D ]I  \  }}|j                  | j!                  |d|j#                                       | j%                  ||       K 	 d d d        y # 1 sw Y   y xY w)Nzaccessed_by=)rJ  get_leaf_guardsr   r&   r   r   
writelinesr>  r   r   r   rM  r  r  r   r   rH  reprrK  )r   r  rL  r:  r  r   s         r   rK  z,GuardManagerWrapper.construct_manager_stringl  sC    [[] 	?,,. Ae_5D$B$BB66::5A(<(<U(CD % 8 8 OOD$8$8$?@A #/0223= (+!!#S%;%;%=( ?#) )))|HMMOCT5UV --i>?)	? 	? 	?s   EE((E1c                   | j                         5  t               }d|_        |j                  dd       |j                  dd       |j                  d       | j	                  | j
                  |       t        | j
                  d      r?| j
                  j                         D ]"  }|j                  | j                  |             $ |j                         cd d d        S # 1 sw Y   y xY w)NrO    T)r   zTREE_GUARD_MANAGER:r'   get_epilogue_lambda_guards)r   r   r   r   rK  r   hasattrrT  rP  r>  getvalue)r   rL  r:  s      r   __str__zGuardManagerWrapper.__str__  s    557 
	#+-DDMNN24N0NN0dNCNN-.))$))T:tyy">?!YYAAC AEOOD$8$8$?@A==?
	# 
	# 
	#s   C	C$$C-c                8    | j                   j                  |      S r   )r   checkr   xs     r   rY  zGuardManagerWrapper.check  s    yyq!!r   c                8    | j                   j                  |      S r   )r   check_verboserZ  s     r   r]  z!GuardManagerWrapper.check_verbose  s    yy&&q))r   c                ^     t               ddd fd  j                         y )Nc                    g }| j                         D ]5  }|j                  d      d   j                         }|j                  |       7 |S )N#r   )r   splitrstripappend)
leaf_guardr   verbose_code_part	code_parts       r   get_code_partszMGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.get_code_parts  sT    J%/%B%B%D -!-33C8;BBD	!!),- r   c                <   | j                         D ]k  }t        |t              r8|vsj                  j	                   |             j                  |       Kj                  j	                   |             m | j                         D ]
  } |        y r   )rO  r   r&   r   r  r   r   )r  r:  r   rg  relational_guards_seenr   r   s      r   r   zDGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.visit  s    ,,. Be_5$::..~e/DE.2259OO**>%+@AB !335 !	i !r   )rd  r$   r   	list[str])r  r   r   r   )r   r   )r   rg  ri  r   s   `@@@r   !populate_code_parts_for_debuggingz5GuardManagerWrapper.populate_code_parts_for_debugging  s(    !$		! 	! 	diir   r   )r   zOptional[RootGuardManager]r   r   )r   zGenerator[None, None, None])r   OrderedSet[str]r   r   )r5  rl  r   r'   )r:  r$   r   rj  )rC  r   rD  Optional[str]r   r   )r  r   rL  r   r   r   )r  r   rL  r   r   r   r   r[  r   r   r   )r[  r   r   r   )r   r   r   __doc__r   r   r   r   r   r   r   r   r0  r>  rH  rM  rK  rW  rY  r]  rk   r   r   r   r      s    @, 3 3/'b*+Z*x>2-2	2 JN
)
9F
	
A#A+CA	A??'??	?>#"*r   r   c                    t         j                  j                         5  t        | t        j
                  t        j                  f      rt        j                  |       n| cd d d        S # 1 sw Y   y xY wr   )r  	overrides_enable_torch_functionr   npgenericndarray	as_tensor)as    r   
from_numpyrz    sR     
	/	/	1 T%/BJJ

3K%Luq!RST T Ts   AA**A3c                     dd l } dd l} | j                  j                  | j                  j                  g}ddlm} |j                  |       |D ch c]  }t        j                  |       c}S c c}w )Nr   )POLYFILLED_MODULES)
torch._dynamo.external_utilstorch._dynamo.polyfills_dynamoexternal_utils	polyfillstorch._dynamo.polyfills.loaderr|  r  inspectgetfile)r  modsr|  ms       r   uninteresting_filesr    sS    '"MM((%--*A*ABDAKK"#(,-1GOOA---s   A/Optional[dict[str, object]]_CLOSURE_VARSc                    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&        j0                  t&        t2        da t         S )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                .    t         j                  ||       S r   )r  __contains__)ry  bs     r   <lambda>z#_get_closure_vars.<locals>.<lambda>  s    T->->q!-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
    aii 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isnanru  float	importlibimport_moduler  utils_devicer  rz  _as_tensor_fullprecr  rq  r   r   _get_closure_varsr    s4   

|
  7 7 C C
 I	

 |
  D
 $%7
 &';
 ()?
 "#3
 #$7
 23S
 DJJ
 RZTRXX
 5<
  Y44!
" EKK//#
$ ll'!55-
0 r   c                L    t        j                  |       j                  dd      S )N
rS  )astunparsereplace)r   s    r   _ast_unparser    s    ;;t$$T2..r   c                ~   d}||j                   r_t        |j                         D ]F  }|j                  t               vsdt	        |d       }t        |      dkD  rdt	        |       } nJ nH|j                  r<|j                  j                         }t        |      dkD  rdt	        |d          }nd}| d	| S )
NrS  z  # T)r   i   r   z  # <unknown>z<60)
user_stackreversedfilenamer  rL   lenstacksummary)rf  r:  extrafsr  s        r   get_verbose_code_partr    s    Eu//0 
;;&9&;;"<#>"?@E5zD( #'|B'7&8 9
 [[kk))+G7|a|GBK89:'_UG$$r   c                    t        | t              s| g} | D cg c]  }t        ||       }}|r|D cg c]
  }| d| d }}|S c c}w c c}w )N (HINT: rA  )r   listr  )r   r:  recompile_hintrf  r   r=  s         r   get_verbose_code_partsr    s|    
 j$' \
 BL4=i/  ;M
37tfH^,A.
 
 
s
   AAc                    | y t        |       s| S t        | t        j                        sJ | j                  j                         S r   )rH   r   r  SymIntr   maybe_as_int)dims    r   convert_int_to_concrete_valuesr  %  s>    
{s
#u||,,,xx$$&&r   c                >    | D cg c]  }t        |       c}S c c}w r   )r  )size_or_strider  s     r   convert_to_concrete_valuesr  /  s    ;IJC*3/JJJs   c                ,   |t         j                  j                         z  t         j                  j                         z
  }| j                  }| j
                  j                  }| j                  }	d| d|j                   d| d| d| d|	 d| d| d}
|
S )Nzcheck_tensor(r@  z	, device=z, requires_grad=z, size=z	, stride=rA  )	r  _C_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper  indexrequires_gradr   )valuenamesizesstridespytypedispatch_keysdispatch_keyr  device_indexr  	guard_strs              r   get_tensor_guard_code_partr  3  s     	@@BB0023L KKE<<%%L''M
vR 3 34B|nBug N/geWIV]U^^_	a  r   c                H    t        t        |             j                  |      S r   )r  r   r  )dctkeys     r   get_key_indexr  H  s     
 !#&'--c22r   c                    d|  d| dS )Nlist(dict.keys())[]rq  )rE  r  s     r   get_key_index_sourcer  P  s    VHCwa00r   c                D    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+  )objs    r   raise_local_type_errorr  T  s8    

S	{,se+<=
L	M
L	M r   c                    t        | t        j                  j                        xr# t        j
                  xs 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=     eUXX__- (( 	De$(CCr   T)frozenc                  8    e Zd ZU dZded<   dZded<   dZded<   y)NNModuleAttrAccessorInfoFr   present_in_generic_dictNrn  l1_keyl2_key)r   r   r   r  r   r  r  rq  r   r   r  r  f  s'     %*T) !FM  !FM r   r  GuardManagerTypec                t   | j                   j                         }t        | j                  t              r| j                  j                  }n(t        |t
              sJ t        || j                        }t        ||      }t        t        |            |   }t        |t        t        f      r	| d|d}	n| d| d}	t        | j                  t              sM|j                  ||| j                  t        j                        j                  | j                  | d|g       |j!                  ||	||      S )N[r  r  rE  example_valueguard_manager_enum == )baser  r   r  r\   r  r  r  r  r   intr   get_key_managerr  GUARD_MANAGERadd_equals_match_guardget_value_manager)
rE  base_guard_managerbase_example_valuer  r  base_source_namer  
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerr  u  s:    {{'')&,, 23"",d3330&,,?%&6>J ./ABCEJ#c3Z0*+1->,AC*+1ZL:fll$67 	** ,,/==	 	+ 	

 !
 LLj\.?-BCD
 //#-	 0  r   c                    | j                   }t        |t              ry| j                         ry|j	                         xr t        |t
               S NFT)originating_sourcer   ro   is_specialized_nn_moduleis_dict_keyri   )r:  rE  s     r   match_on_id_for_tensorr    sJ    %%F &+,%%'F
6:(F$FFr   c                  "    e Zd ZU ded<   ded<   y)GuardCodeListrj  	code_listr;   r:  Nr   r   r   r   rq  r   r   r  r    s    Lr   r  c                      e Zd ZdZdZy)r  rO      N)r   r   r   r  DICT_GUARD_MANAGERrq  r   r   r  r    s    Mr   c                <    t        t        t        |                   S r   )r  r  r   )codes    r   &code_framelocals_names_reversed_cachedr     s    /5677r   c                     e Zd Z	 	 d8	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9dZ	 	 	 	 	 	 d:dZd;dZed<d       Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d=dZd>dZ		 	 	 	 	 	 d?dZ
d@d	ZdAd
ZdBdZdCdZ	 	 dD	 	 	 	 	 	 	 	 	 dEdZdFdGdZdHdZ	 	 	 	 	 	 	 	 dIdZdJdZ	 dF	 	 	 	 	 dKdZdJdZdJdZdLdZdMdZdJdZdJdZdFdNdZ	 dF	 	 	 	 	 dNdZdFdOdZdJdZdJdZdJdZ dJdZ!dJd Z"dJd!Z#dFdNd"Z$dJd#Z%dJd$Z&dJd%Z'dJd&Z(dJd'Z)dJd(Z*dJd)Z+dJd*Z,dPd+Z-dJd,Z.dJd-Z/dJd.Z0dJd/Z1dJd0Z2dJd1Z3dJd2Z4dJd3Z5dJd4Z6dJd5Z7dFdOd6Z8	 	 dQ	 	 	 	 	 	 	 	 	 dRd7Z9y)SGuardBuilderNc           	     
   || _         || _        || _        || _        ||d| _        |
xs || _        t        j                  j                         | j                  d<   t        j                  j                  j                  j                         D ]X  \  }}|j                  dd      j                  dd      j                  dd      }|| j                  d   |<   || j                  |<   Z || _        g | _        g | _        g | _        g | _        g | _        || _        t-               | _        | j*                  j0                  J | j*                  j0                  j2                  D ]C  }| j.                  j5                  t7        | j9                  |j;                                            E i | _        i | _        t-               | _         g | _!        |	| _"        tF        jH                  xr tK        d      | _$        tM               | _'        y )	NLG__builtins__>_<._dot_!pytorch/compiler:guard_nn_modules)(f_codeid_ref
source_reflookup_weakrefsscoperuntime_global_scopebuiltins__dict__copyr  packagepackage_importer_package_imported_modulesr   r  rC  argnamesr  shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managerr   key_order_guarded_dict_idsoutput_graphguard_on_key_orderr   idgetr  r   _cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codessave_guardsrP   guard_nn_modulesrD   rK   +already_guarded_not_present_in_generic_dict)r   r.  r/  r0  r1  local_scoper   rC  r>  rG  r3  r  package_modulerE  s                 r   r   zGuardBuilder.__init__  s    $.9D<3X
$8$HL!%-%6%6%;%;%=

>" ]]++EEKKM	. 
<<S)11#s;CCCQD/=DJJ~&t,-DJJt	. +#%)+	
 46 46%EG.6F +.%'$$11===++88KK 	MF++//488FKKM3J0KL	M BD @B#DGE+BD(& & 7 7 !
O/=

 L 	8r   c                \   | j                  |      }t        |t              rt        d|j                         |j
                  j	                         }t        |      D ]K  }||   }t        |j
                  |      }| j                  ||      }|j                  || d|d||       M y )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )r  r  r  r  rE  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h 01%FFKjj\S  ..335 %]3 	C!#&E,U-E-ESQL!%!<!<m" ))%awa0##5	 * 	r   c                   | j                  |      }t        |t              st        d|j                         t        |t              sJ t        t        |            D ]  \  }}t        |j                  |      }|j                  |||t        j                        }t        |      r6| j                  ||      }|j                  |t        d| d| d|             |j                  |t        | d||              y )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r   z__check_obj_id(r@  rA  r  )rN  r   r   rO  r  	enumerater   r  r  r  r  r   r/  add_id_match_guardr  r  )	r   r  r:  rR  r   r  r  key_managerid_vals	            r   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_order)  s    ))%0($45%;;@::,H  ($4555 ""3E":; 	HC-ejj#>J"22!!#3#A#A	 3 K ~S*5..*)*RxqA5 22/:,d3'0JER'	r   c                    t         j                  rAt        j                  dk\  r.t        j                  dk  rt	        j
                  dt               y | S )N)      )r\  r]  rO   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)rP   issue_3_13_0_warningsysversion_infowarningswarnRuntimeWarning)r  s    r   '_get_generic_dict_manager_example_valuez4GuardBuilder._get_generic_dict_manager_example_valueO  sF     ''  G+  :-MM_ r   c                (   	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd}|j                   }	|j                  }
t               }t        j                  |j
                        D ]+  }|j                  |j                  j                                - t        ddd      }|	|
v rt        d|	d      }nNd|
v r|	|
d   v rt        dd|	      }n5d|
v r|	|
d   v rt        dd|	      }n|	|vrd|
v r|	|
d   v rt        dd|	      }|j                  s|j                  |j                   |||      S |j                  sJ |j                  }|j                  }| d	}dx}}dx}}dx}}|rTt        |j                  |      }|j                         }|
|   }| j!                  ||      }|}|}| j!                  ||      }n|}|}| j!                  ||      }|j#                  || j%                  |
      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__.
        c                   t        | t              rct        ||      }d| d|d}| j                  |||t        j
                        j                  || d|g       | j                  ||||      S | j                  ||||      S )Nr  r  r  r   r  rM  )	r   r   r  r  r  r  r  r	  rQ  )r  r  source_namer  r  r  r  r  s           r   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr|  s     #/0 &&8#>  /{m3uiqI
##%"%'7'E'E	 $ 
 )(*T#/I.JK ,,&"/'9	 -   //&"/'9	 0  r   FNT_parameters_buffers_modulesattrrE  r  r  	.__dict__rE  r  r  )r  r  rg  r  r  r  )r  r   r  r   rg  r   r  r   r  r   r  r  r   r   )memberr5  r   r  getmror   updatekeysr  r  getattr_managerr  r  rU   r  r  rP  get_generic_dict_managerrd  r  r  )r   rE  r
  r  r  r  rg  r  rh  	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#	#	#	 #	 !$	#	
 #	 !1#	 #	J MM	%...1e! 2 < <= 	@A%,,QZZ__->?	@ 1dC 4T9dKMh&98O+O4T=)TM8#	Xj5I(I4T:yQM66h&Xj11 5T:yQM44 &55]]"+#5	 6   !''''"))F"))F "2 2)<O.22N^"&&Hx<@@!$9&v{{F;	!*!1#F+ )-(C(CIx(X%!,((,(C(CM)% "-((,(C(CM)% (:'R'R&"JJ8T#3#A#A (S ($ ),*#+&#8F %16K6WWW* .'/"*'<  Mr   c                ~    |j                         }|dk(  ryt        | j                  |            }|| j                  v S )NrS  F)r  rB  rC  r?  )r   rE  rg  obj_ids       r   requires_key_order_guardingz(GuardBuilder.requires_key_order_guarding  s<    kkm"DHH[)*8888r   c                    t         j                  }| j                  |      rlt        |t              rt         j
                  }|S t        |t        t        f      rt         j                  }|S t        |t              sJ t         j
                  }|S r   )	r  r  r  r   r   r  r   	frozensetr  )r   rE  r  r  s       r   rP  z#GuardBuilder.get_guard_manager_type  s     .;;++F3-3%5%H%H" "! MC+;< &6%C%C" "! "-666%5%H%H"!!r   c                (    |t         j                  k(  S r   )r  r  )r   mgr_enums     r   manager_guards_on_keysz#GuardBuilder.manager_guards_on_keys  s    +>>>>r   c                    | j                   j                  j                  | j                  d| j                  d   t
        j                        S )Nr&  )	f_globalsrE  r  r  )rC  r   globals_dict_managerr3  r2  r  r  r   s    r   get_global_guard_managerz%GuardBuilder.get_global_guard_manager  sF    !!&&;;//**S//==	 < 
 	
r   c           	        | j                   j                  }d }j                         }|dk7  r|| j                  v r| j                  |   S |dk7  r| j	                  |      }| j                  |      }d }d }d }t        j                  }	t        t              rbj                  j                         }| j	                  |      }| j                  j                        }| j                  j                  |      }	t        t              rbt        | j                        }
t!        |
      |
j#                  j$                        z
  dz
  }|j'                  j$                  |f|||      }nt        t(              r/| j+                         j-                  j.                  |||      }nt        t0              r/| j+                         j3                  j.                  |||      }net        t4              r|S t        t6              r|S t        t8              r|sJ |j;                  |||      }nt        t<              r|sJ |j?                  |||      }nt        t@              r|sJ |jC                  |||      }nt        tD        tF        tH        tJ        tL        f      r|sJ |}nt        tN              r|jQ                  d |||      }nnt        tR              r|jQ                  fd|||      }nDt        tT              r|sJ |jW                  |||      }nt        tX              r%|sJ |j[                  j\                  |||	      }nt        t^        t`        f      r_|sJ t        t^              sJ tc        |      r|sJ | je                  ||||||      }n|jg                  j\                  |||	      }npt        th        tj        f      r|sJ t        |tl        tn        jp                  f      sJ t        th        tj        f      sJ t        |tr              r$| ju                  |	      sJ tw        ||||      }nt        j"                  tx              rt{        d
      |j-                  j"                  |||      }nt        t|              rH t        |dj                  j                  j                          d      j                  |||      }nJt        t              r%|sJ |j                  j                  |||      }nt        t              r%|sJ |j                  j"                  |||      }nt        t              r|sJ t        |tl        tn        jp                  f      rJ d       t        |t              r-j                  s!|j                  j"                  |||      }nht        |t              r-j                  s!|j                  j"                  |||      }n+j"                  }j                  rj                         }|j                  ||||      }nt        t              r|sJ |sJ t        |      sJ j                  sK|j                  ||j                  t        j                        j                  j                  |||      }np|j                  }|J |dz   }|j                  ||t        j                        }t        |tr              rJ |j-                  j                  |||      }nt        t              r|sJ |jQ                  t        |||      }nt        t              r|sJ |jQ                  d |||      }nt        t              r|sJ |jQ                  d |||      }nt        t              r|sJ |jQ                  d |||      }nSt        t              r|sJ |jQ                  d |||      }n't        t              r|sJ |jQ                  d |||      }nt        t              r|sJ |jQ                  d |||      }nt        t              r%|sJ |j                  j"                  |||      }nt        tx              r<t        |tr              st        d      |j                  j"                  |||      }nNt        t              r%|sJ |j                  j"                  |||      }nt        t              r|sJ |j                  |||      }nt        t              r|sJ |j                  |||      }nt        t              r|sJ |jQ                  d |||      }nt        t              r|sJ |jQ                  d |||      }nqt        t              r|sJ |j                  |||      }nHt        t              r|sJ |j                  |||      }nt        d dj                                || j                  j                         <   |S )NrS  rO   rM  )global_namerE  r  r  ro  c                    t         S r   )r  )r)  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s     r   )python_lambdarE  r  r  c                6    t        j                               S r   )r   
_get_index)r)  rE  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (H%%') r   rl  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_ordertensor_property__manager)r   rE  r  r  zUse DictGetItemSourcez.__kwdefaults__c                (    | j                         d   S r   __tensor_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>@  s    (<(<(>q(A r   c                "    | j                         S r   )__obj_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>H  s    (9(9(; r   c                >    | j                         j                         S r   )_typequalified_namer  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>P  s    	(@(@(B r   c                "    | j                         S r   )get_baser  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>X  s    

 r   c                "    | j                         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(A!(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 - )nrC  r   r  rD  rC  rP  r  r  r   rX   r  get_guard_manager_from_sourcer   rk   r   r.  r  r  
local_nameframelocals_managerrf   r  rQ  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_managerrp  rU   r|   r  r  rt  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   rz  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   rE  root_guard_managerr  rg  r  r  r  r
  base_guard_manager_enumframelocals_names_reversedframelocals_idxoutr  
kwdefaults	kw_sourcerR  s    `               r   r  z*GuardBuilder.get_guard_manager_from_source$  s   !//44kkm"0K0K!K..{;;" HH[1M!88O  !!"2"@"@fm,%{{//1!%*:!;!%!C!CFKK!P&*&A&A/'#
 &+& *P*& ./,2263D3DEF 
 %88&&8"+#5	 9 C FL) //1FF&&"+#5	 G C F/0//1HH".."+#5	 I C F-. &%FN+%%FJ'%%%$11"+#5 2 C
 FN+%%%$66"+#5 7 C
 FM*%%%$55"+#5 6 C
 +2"	
 &%%$CFK($33-"+#5	 4 C F89$33 #+#5 4 C FJ'%%%$11"+#5 2 C
 F-.%%%$<<]]"+#5	 = C FZ)GHI%%%fj11134FG'''//&&!$& )88&"/'9	 9  F.0IJK%%%049P9P2QRRRf'8:S&TUUU,.>?223JKKK-&&!& fll,>?&8  )==&"/'9	 >  F01'""6;;#3#3#9#9#;"<HE JJ"+#5C FM*%%%$44JJ"+#5	 5 C F-.%%%$99LL"+#5	 : C FM*%%%!"T;+B+B$C '&'  ,d3F<Q<Q(==&"/'9	 >  .6v?T?T(>>&"/'9	 ?  (("//1E(88&"/'9	 9  FN+%%%###.///<<(>>+"4"A"A'7'E'E ?  "/&"/'9	 " 	  0>>
'333,/@@	 .EE$",'7'E'E F 
 &h0@AAA33&"/'9	 4  F-.%%%$33("+#5	 4 C F23%%%$33A"+#5	 4 C F56%%%$33;"+#5	 4 C F;<%%%$33B"+#5	 4 C FO,%%%$334"+#5	 4 C F01%%%$330"+#5	 4 C F-.%%%$33D"+#5	 4 C F67%%%$CCll"+#5	 D C  2302BC$J  %44ll"+#5	 5 C F;<%%%$88ll"+#5	 9 C F-.%%%$99"+#5 : C
 F45%%%$BB"+#5 C C
 F12%%%$33;"+#5	 4 C F23%%%$331"+#5	 4 C FJ'%%%$11"+#5 2 C
 FM*%%%$44"+#5 5 C !0FKKM?K  69##FKKM2
r   c                8    | j                  |j                        S r   )r  r  r   r:  s     r   rN  zGuardBuilder.get_guard_manager  s    11%2J2JKKr   c                   |
t               }dj                  |j                               }t        ||      \  }}i }d| j                  d   i}	t
        j                  d|       t        ||	|        |d   |j                          }
|r'| j                  j                  j                  |
|       y | j                  j                  j                  |
|       y )Nr@  r&  zPython shape guard function:
%s___make_guard_fn)r  joinrs  build_guard_functionr2  
guards_logdebugexecvaluesrC  r   add_epilogue_lambda_guardadd_lambda_guard)r   r   r   r   is_epiloguemake_guard_fn_args_guard_bodypycoder  globals_for_guard_fnguard_fns              r   $add_python_lambda_leaf_guard_to_rootz1GuardBuilder.add_python_lambda_leaf_guard_to_root  s     ,.L "YY|'8'8':;2:?QRV  #TZZ_5;VDV)3/*3)*L,?,?,AB ##==, ##44X?QRr   c                H    |
t               }t        || j                  |      S r   )r  evalr2  )r   r  r   s      r   rC  zGuardBuilder.get  s#    ,.LD$**l33r   c                8   t        |t              r|}n|j                  }t        |      }|| j                  vrat
        j                  j                  j                  |      }|r6|dk(  rt        j                  d|       | j                  j                  |       |S )Nr  zinvalid var name: %s)r   r   r  strip_function_callr:  r  r  r  is_valid_var_namelogwarningrc  )r   r:  r  r  is_valids        r   arg_refzGuardBuilder.arg_ref  sz    eS!D::D"4(t}}$xx''99$?Hq=KK 6>$$T*r   c                    |dk(  rt        |j                        }nt        |j                  |      }t        |||j                  |j
                        }|j                  |        y )Nr   )r  r  )rZ   r  rU   r;   r  r  create)r   r:  rv  r  attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attribute  s[     
"$U%=%=>K$U%=%=yIKAQAQ
	 	r   c           	     `   |j                   }t        |t              r|j                  }t        |t              ry t        |t
              sJ d|j                          |j                  }|j                         }|j                  }| j                  |      }t        | j                  |      |      }d }|r
d| d|d}n	d| d|d}| j                  ||g| j                  |             | j                  |      }	|r| j                  |j                               }
| j                  |      }| j                  ||
      }t        |      r&| j                  ||	||
||j                         |       y |	j!                  ||j                  |
|       y |	j#                  |t%        ||             y )Nzinvalid source hasattr(r@  rA  znot hasattr()provided_guarded_objectrl  )r  r   rm   r  rZ   rU   r  rp  r  rU  rC  _set_guard_export_infor  rP  r  r  rt  add_no_hasattr_guardr  )r   r:  rE  base_sourcer  rm  refvalr  base_managerr  r  r  s                r   HASATTRzGuardBuilder.HASATTR  s   ))fn-[[Ffj)&*-M/MM-kk!}}ll4 dhhtnd+cU"THA.D!#b2D##D6488D> 	$ 	
 99+F !HHV[[]3M!%$!%!<!<V]!S 44FG)) &!KKM& ,, ::"/'9	 -  --d4J4QV4WXr   c                   |J | j                  |      }| j                  |j                        }| j                  |      }||f| j                  v ry |j                   d}|j                  || j                  |j                        t        j                        }d|d| d}|j                  d|t        ||             | j                  j                  ||f       y )Nrn  ro  znot ___dict_contains(r@  z
.__dict__)F)r  rC  r  rN  rI  ru  rd  r5  r  r  add_dict_contains_guardr  r   )	r   r:  rm  r  r  r  rz  r  r  s	            r   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICTB  s     ll5!hhuzz"--e4;$JJJ"ZZL	2#/#H#H"FFs||T/== $I $
  'thbZ@ 884/e<	
 	88<<c4[Ir   c                   | j                  |j                        }t        |t        j                  j
                        r|j                  r|j                  }nt        |      }|j                  |j                  k7  rd|_
        | j                  |d|j                   d      }d| j                  |       d| d}| j                  ||g       | j                  |      j                  |t!        ||             y )NTtype(rA  z___check_type_id(r@  )rC  r  r   r  _subclasses
FakeTensorr  r+  r   r   _unserializabler/  r  r  rN  add_type_match_guardr  )r   r:  r  rF  r  r  s         r   
TYPE_MATCHzGuardBuilder.TYPE_MATCH[  s    $eU..99:u||AUA>>QZZ' %)E!Q%

|1 56"4<<#6"7r&C##ED62u%::*47	
r   c                0   | j                  |      }| j                  |j                        }t        | j                  |j                              }d| d| }| j	                  ||g       | j                  |      j                  |t        ||             y )Nz___dict_version() == )r  rC  r  r   r  rN  add_dict_version_guardr  )r   r:  r  r  versionr  s         r   DICT_VERSIONzGuardBuilder.DICT_VERSIONp  s    ll5!hhuzz"txx

34!#eG95##ED62 	u%<<'e4	
r   c                    | j                  |      }|rdnd}| d|d| d}| j                  ||g       | j                  |      j                  | |t	        ||             y )Nnot rS  z___dict_contains(r@  rA  )r  r  rN  r  r  )r   r:  r  invertdict_ref	maybe_notr  s          r   DICT_CONTAINSzGuardBuilder.DICT_CONTAINS~  sn    <<&$F"	-cWBxjB##ED62u%==J3D%@	
r   c                    | j                  |      }|}| }d| d|d}| j                  ||g       | j                  |      j                  ||t	        ||             y )Nzset.__contains__(r@  rA  )r  r  rN  add_set_contains_guardr  )r   r:  r  r  set_refr  containsr  s           r   SET_CONTAINSzGuardBuilder.SET_CONTAINS  sj    ,,u%:"7)2dXQ7##ED62u%<<d24?	
r   c                b   | j                  |      }| j                  |j                        }t        |t              sJ | d|g}| j                  ||       |r+| j                  |      j                  t        ||             y | j                  |      j                  t        ||             y )Nr  )
r  rC  r  r   r   r  rN  add_true_match_guardr  add_false_match_guardr   r:  r  r  r  s        r   
BOOL_MATCHzGuardBuilder.BOOL_MATCH  s    ll5!hhuzz"c4   %tC7#$##E40""5)>>&tU3 ""5)??&tU3r   c                    | j                  |      }| j                  |j                        }|J | dg}| j                  ||       | j	                  |      j                  t        ||             y )Nz is None)r  rC  r  r  rN  add_none_match_guardr  r  s        r   
NONE_MATCHzGuardBuilder.NONE_MATCH  sn    ll5!hhuzz"{{%x !##E40u%::"4/	
r   c                &    | j                  ||      S r   )id_match_unchecked)r   r:  r  s      r   ID_MATCHzGuardBuilder.ID_MATCH  s    &&un==r   c                   t        |j                  t              r=| j                  t	        |j                  j
                  t        j                              S | j                  |      }| j                  |j                        }| j                  ||j                        }d| d| d}| j                  ||gd       | j                  |      j                  |t        |||             t        |j                  t              r_t        |t         j"                  j$                        r:|j                  j&                  }| j)                  |      }||| j*                  |<   y y y y )Nz___check_obj_id(r@  rA  r  )provided_func_name)r   r  ry   r  r;   r  r"  r  rC  r  r/  r  rN  rW  r  rk   r  r  r   r  r1  r   )	r   r:  r  r  r  rY  r  r  weak_ids	            r   r  zGuardBuilder.id_match_unchecked  s6    e..
;??e..33\5L5LM  ll5!hhuzz"S%**-!#b2##ED6j#Qu%88*4G	
 e..< #uxx/"55@@
..s3&7>D((4 ' 0	 =r   c                   | j                  |      }| j                  |j                        }t        |t        j
                        sJ | d}| j                  ||g       | j                  |      j                  t        ||             y Nz is not None)
r  rC  r  r   r  r  r  rN  add_not_none_guardr  )r   r:  r  r  r  r  s         r   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH  sw    ll5!hhuzz"#u||,,,l###ED62u%88"4/	
r   c                   | j                  |      }| j                  |j                        }t        |t        j
                  j                        sJ | d|d}| j                  |      j                  |t        ||             y )Nz.raw_repr() == z.raw_repr())
r  rC  r  r   r  r  r   rN  add_dispatch_key_set_guardr  )r   r:  r  r  r   s        r   DISPATCH_KEY_SET_MATCHz#GuardBuilder.DISPATCH_KEY_SET_MATCH  st    ll5!hhuzz"#uxx66777uOC7+>
u%@@'
E:	
r   c                F    | j                  |dt        j                         y )Nr   )r  r"  EQUALS_MATCHr  s     r   
NAME_MATCHzGuardBuilder.NAME_MATCH  s      
L4M4MNr   c                J   | j                   j                  J | j                   j                  j                  d g}| j                  ||       t        j
                  j                  dfd}| j                  j                  j                  |t        ||             y )Nz,torch.autograd.forward_ad._current_level == c                "    j                   k(  S r   )_current_level)r[  
dual_level
forward_ads    r   fnz#GuardBuilder.DUAL_LEVEL.<locals>.fn  s    ,,
::r   ro  )r>  r@  r/  r  r  autogradr0  rC  r   r  r  )r   r:  r  r1  r/  r0  s       @@r   
DUAL_LEVELzGuardBuilder.DUAL_LEVEL  s     $$11===**77BB
>zlKL##E40^^..
	; 	00&tU3	
r   c                   | j                   j                  J | j                   j                  j                  }|D cg c]  }|j                          c}d dg}| j	                  ||       t
        j                  j                  j                  dfd}| j                  j                  j                  |t        ||             y c c}w )Nz5torch._functorch.pyfunctorch.compare_functorch_state(rA  c                           S r   rq  )r[  
compare_fnstatess    r   r1  z.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn
  s    f%%r   ro  )r>  r@  functorch_layers	get_stater  r  
_functorchpyfunctorchcompare_functorch_staterC  r   r  r  )r   r:  ciscir  r1  r6  r7  s         @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCH  s     $$11===##00AA+./R",,./GxqQR##E40 %%11II
	& 	00&tU3	
 0s   Cc                   t         j                  j                  j                  j                  t         j                  j                  j                  j
                  	 	 	 	 dfd               d g}| j                  ||       dfd}| j                  j                  j                  |t        ||             y )Nc                R     |       sy | \  }}t        t        t        |             S r   )r)  maprB  )hooks	pack_hookunpack_hookare_inline_hookss      r   hooks_ids_fnz?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fn  s+     $E*%*"I{R((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == c                $                   k(  S r   rq  )r[  	get_hooksguard_hooks_idsrG  s    r   r1  z5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fn'  s    "l9;&???r   )rC  zCtuple[Callable[[torch.Tensor], Any], Callable[[Any], torch.Tensor]]r   zOptional[tuple[int, ...]]ro  )r  r:  _aot_autogradr  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineabler  rC  r   r  r  )r   r:  r  r1  rF  rI  rJ  rG  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKSz)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS  s    $$2288PP	**00SS 		)V	)&	) 'y{3 RRaQbc
 	##E40	@ 	00&tU3	
r   c                   | j                  |j                        t        | j                  |j                        j                         d         t	        d      rt               dfd}ndfd}dt        |       dt        j                          }| j                  |      j                  |t        ||             y )NrO   __metadata_guard__c                J    j                  | j                         d         S NrO   )rP  r  )r[  original_metadatar  s    r   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker4  s)    //%q';';'=a'@ r   c                0    | j                         d   k(  S rR  r  )r[  rS  s    r   rT  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker;  s    ++-a04EEEr   ___check_metadata__cro  )rC  r  r   r  rU  r   rB  r8   current_compile_idrN  r  r  )r   r:  rT  r  rS  r  s       @@r   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.  s    $$TXXejj%9%L%L%Nq%QR5./%e,F +2.>+?*@>CdCdCfBghu%664[%H	
r   c                   | j                  |      }| j                  |j                        }t        rt        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        j2                  h||z        }t0        j4                  j7                         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        ||      s. |jR                  t'        |            sJ dt'        |              tQ        |tT              rtW        jX                  |      rq| j[                  |       g }|j]                  d| d       | j_                  ||       | ja                  |      jc                  te               d	   tg        ||             y tQ        |th              rt        jX                  |      rq| j[                  |       g }|j]                  d
| d       | j_                  ||       | ja                  |      jc                  te               d   tg        ||             y | d|g}tQ        ||      rtk        |      }tg        ||      }|r|D cg c]
  }| d| d }}| ja                  |      jm                  ||       | j_                  ||       y c c}w )Nrq  r   )
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z__math_isnan(rA  r  z__numpy_isnan(r  r  r  )7r  rC  r  ru  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  rc  r  rN  r  r  r  complexr   r  )r   r:  r  r  r  np_typesok_mutable_typesok_typesr[  r\  r]  r^  r_  r`  pytreer  r   r=  s                     r   r*  zGuardBuilder.EQUALS_MATCHC  s   ll5!hhuzz"						





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


 
 "

 ))+@   # H 	<{n,,,c8$(@(@(@c(K 	
tCyk*	
K
 #u$**S/OOE"DKK-uA./''t4""5)::!#N3&tU3  #wBHHSMOOE"DKK.Q/0''t4""5)::!#O4&tU3  %tC7#$#'( 3-C3D%@?Q"7;4& 02" " 	u%<<SBTU##E40"s   Mc                    | j                  |j                        }t        |t              r| j	                  |       y || j                  |       y t        |t        j                        r| j                  |       y | j                  |       y r   )
rC  r  r   r   r  r  r!  CodeTyper  r*  r   r:  r  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCH  sc    hhuzz"#tOOE"[OOE"C(MM% e$r   c                Z   | j                  |d       | j                  |j                        }t        |d      rKt	        |j
                  t              sJ | j                  s"| j                  |dt        j                         y y t        j                  dddt        |       ddg       y )	Nz%[inline-inbuilt-nn-modules-candidate]trainingz-Attempted to guard on uninitialized nn.ModulerS  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  rC  r  rU  r   r  r   rH  r  r"  r~  rR   unimplemented_v2r+  r}  s      r   	NN_MODULEzGuardBuilder.NN_MODULE  s    eDEhhuzz"3
##,,---((((
L<W<WX )   G''+Cyk5 `r   c                $    | j                  |      S )z0things like torch.add and user defined functions)r  r  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH  s     }}U##r   c                2   | j                  |j                        }t        |      t        j                  k(  rOt        |d      rC| j                  |dt        j                         | j                  |dt        j                         y| j                  |       y)z!matches a closure by __code__ id.r   N)
rC  r  r+  r!  r"  rU  r  r"  r  r  r}  s      r   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH  so     hhuzz"9***wsJ/G$$UJ8L8LM$$UJ8S8ST&r   c                   | j                   rdt        |j                  t              r9| j                  j
                  j                  |j                  j                         | j                  |      S | j                  |      S r   )
rG  r   r  r_   r>  used_builtin_varsr   r  r  r  r  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCH  sg    %224EF%%77;;,,22 **511}}U##r   c                >   | j                  |      }| j                  |j                        }t        |t              s| j                  |       g }t        |      dk(  r|j                  d|        n |j                  d| dt        |              | j                  ||       t        |t              r5| j                  |      j                  t        |      t        ||             y | j                  |      j                  t        |      t        ||             y )Nr   r
  zlen(r  )r  rC  r  r   r  r  r  rc  r  rN  add_dict_length_check_guardr  add_length_check_guardr   r:  r  r  r  s        r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTH  s     ll5!$%&OOE"u:?KK$se%KK$se5U56##E40eT"""5)EEE
24? ""5)@@E
24?r   c                   | j                  |      }| j                  |j                        }t        |      }g }|j	                  d| dt        |              | j                  ||       t        |      }| j                  |d|j                   d      }| j                  |      j                  t        |      |t        ||             y )Nz___tuple_iterator_len(r  r  rA  )r  rC  r  r+  rc  r   r  r/  rN  add_tuple_iterator_length_guardr  )r   r:  r  r  rF  r  r  s          r   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LEN	  s    ll5!$K,SE7I%7P6QRS##E40KQ%

|1 56u%EEu%v/EdE/R	
r   c           
        | j                  |      }| j                  |j                        }t        |      }g }t	        |      }|j                  d| d|        | j                  ||       t        |      }| j                  |d|j                   d      }|\  }}	}
| j                  |      j                  ||	|
|t        ||             y )Nz___normalize_range_iter(r  r  rA  )r  rC  r  r+  r   rc  r  r/  rN  add_range_iterator_match_guardr  )r   r:  r  r  rF  r  normalized_range_iterr  startstopsteps              r   RANGE_ITERATOR_MATCHz!GuardBuilder.RANGE_ITERATOR_MATCH	  s    ll5!$K 4U ;.se59N8OPQ##E40KQ%

|1 561tTu%DD4v'=dE'J	
r   c                B   | j                   rdt        |      x}r%| j                  j                  j	                  |       t        |      x}r%| j                  j                  j	                  |       | j                  |      }| j                  |j                               }t        |j                        st        |      ry ||f}|| j                  v ry | j                  j	                  ||f       | j                  j	                  ||f       | d| g}| j                  ||       t        j                  r2|d   }t        ||      d   }	| j                   j#                  ||	f       y t%        | j'                  |      | j)                  |      t        ||             y )N is r   )rG  r-   r>  additional_used_local_varsr   r,   additional_used_global_varsr  r  r1   r  rE  r  rP   #use_lamba_guard_for_object_aliasingr  rF  rc  r!   rN  r  )
r   r:  source_br  ref_aref_br  r  rf  re  s
             r   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT&	  sz   ,X66t6%%@@DDTJ-h77t7%%AAEEdKU#X]]_-#$$
%h/ en$555++//?++//?'eW%&##E4055 QI 6y% H K,,33Y@Q4RS)&&u-228<&tU3r   c                    | j                  |       dg}| j                  ||       | j                  |      j                  t	        ||             y r#  )r  r  rN  r$  r  r   r:  r  s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVEN	  sN    <<&'|45##E40u%88"4/	
r   c           	     "   | j                  |      }| j                  |j                        }g }|j                  d| dt	        |j                                       | j                  ||       | j                  |      j                  ||       y)z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	r  rC  r  rc  r  rs  r  rN  add_mapping_keys_guardr  s        r   MAPPING_KEYS_CHECKzGuardBuilder.MAPPING_KEYS_CHECKV	  sw    ll5!$eC5T%**,-?,@AB##E40u%<<UDIr   c           
        | j                  |      }| j                  |j                        }|t        j                  j
                  j                  u r| j                  |       y| j                  |       g }|j                  d| dt        t        |                   | j                  ||       | j                  |j                        r| j                  ||       y| j!                  ||       y)z6Insert guard to check that the keys of a dict are sameNr  z)) == )r  rC  r  r  r  rJ   SUPPORTED_NODESr  r  rc  r  r   r  r  r  rZ  rT  r  s        r   DICT_KEYS_MATCHzGuardBuilder.DICT_KEYS_MATCH`	  s    ll5!$EKK''777e$U#
 	ocU&6G6N1O0RST##E40++E,D,DE--eU;44UEBr   c                H    t         j                  ry| j                  |       y)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    ++U#r   c                     y r   rq  r  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODE	      r   c                     y r   rq  r  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS	  r  r   c                     y r   rq  r  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE	  r  r   c                     y r   rq  r  s     r   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE	  r  r   c                0   |j                   t        j                  u sJ | j                  j                  J d| j                  j                  j
                  g}| j                  ||       | j                  |      j                  t        ||             y)z/Guard on CURRENT_DEVICE per torch.utils._deviceNzutils_device.CURRENT_DEVICE == )
rE  r>   GLOBALr>  r@  current_devicer  rN  add_default_device_guardr  r  s      r   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE	  s    ||{11111$$11===-d.C.C.P.P._._-bc
 	##E40u%>>"4/	
r   c                   %&'( ddl m} |j                  dk(  sJ  j                  j                  ((J  j                  j
                  T j                  j
                  }|j                  }|j                  }|j                  |j                  }|j                  }nft        (|      sJ (j                  &&D cg c]  }|j                   c}'d(fd}	(j                  J (j                  ri }
g }g }i }t               }(j                  D ]j  }|j                   (j"                  v r;t$        j&                  j(                  j+                  ||	(j                  |
||||       Vt,        j/                  d       l t1        ||t3        |j5                               |d      %nd %d%&'( fd}t6        j8                  r	  |d	      \  }}}d}nd
} |d      \  }}(j&                  s(j                  j=                           j>                  rstA               jC                  d      }|t        |tD              sJ |g n"t3        |jF                  jI                               }tK        |||||       j                  _        |jL                  D ]  } jO                  ||g        tQ        jR                         x}r%|jT                  jW                  |jL                         g }g }|ssJ |jL                  |jF                  }}|sy |jY                         D ]  \  }}t        |tZ              rd
} jC                  |j                         i t\        t_                     }t        |t`              r|jc                  ||f       nt        |td              r|jc                  ||f       d
} |sdd l3}ddl4m5} sJ |jL                  |jF                  }}tm        ||z         }	 to        |      D cg c]   \  }} jq                  ts        ||            " }}}dju                  d to        |      D              } dju                  d to        |      D              }!| rd|  d} |!rd|! d}!tw        jx                  d|  d|! ddju                  |       d      }"tz        j}                  d|"|jL                         |j                  |"      }#|j                  |#j                  |j                        j                  }$|$sJ 	 t        |t        |      t        |      |$|#|jL                         y |jL                  r9 j                  |jL                  |jL                  i t\        t_                      y y c c}w # t:        $ r d
} |d      \  }}Y w xY wc c}}w # t$        j                  j                  j                  $ r Y w xY w)Nr   r   rS  c                z    j                   |    D cg c]  }t        |t        j                  |       c}S c c}w r   )tracked_fakes_id_to_sourcer5   r4   SIZE)t_idr  rE  r@  s      r   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources	  s?    
 #/"I"I$"O )1D1DcJ  s   "8z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlyc           	         j                   j                  D cg c]  }|j                   c}D cg c]  }|j                   c}j                  j
                   |       S c c}w c c}w )N)input_contextsequalities_inputsr0  ignore_staticlangs)	shape_envproduce_guards_verbosefakerE  r0  export)r  ry  r  r  r  r@  r   s     r   _get_code_partsz/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts	  sh    #--DD%'(QVV(')*!QXX*#1&7#'3':':#: E 	 	(*s
   A)A.
)pythonverbose_pythoncppT)r  r  cpp_code_parts)python_code_partsr   r  python_fallbackshape_env_sources)r   )CppCodeCacher@  c              3  8   K   | ]  \  }\  }}| d | d  yw)z = int_values[r  Nrq  r   ir)  symbols       r   r  z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>H
  s-      ,&;Av hnQCq1,   c              3  8   K   | ]  \  }\  }}| d | d  yw)z = float_values[r  Nrq  r  s       r   r  z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>L
  s.      .&;Av h.qc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   list[Source])r  ztuple[str, ...]r   zlist[_ShapeGuardsHelper])Jtorch._dynamo.output_graphr   r  r>  r@  shape_code_partsr  r   r  r  r   tracked_fakessymbolic_contextr  export_constraintsr   r  r  r  r  dynamic_shapes_process_equalitiesr  r  rG   r  r  rP    enable_cpp_symbolic_shape_guardsOverflowErrorfreezerG  localsrC  rE   source_to_symbolrs  ShapeCodePartsexprsr  r8   try_getshape_env_guardsr  r   r[   rI   r  r  rc  r  ctypestorch._inductor.codecacher  r  rV  r  r.   r  textwrapdedentr  r  loadcastr:  c_void_pr  r#   r  	_inductorrR   InvalidCxxCompilerr  ))r   r:  r   r  r  r   r  r  ry  r  namesr  r  r  r  
constraintr  maybe_cpp_code_partsmaybe_shape_env_sourcesr  compile_contextint_source_to_symbolfloat_source_to_symbolr   r  rE  r  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/   :zzR,,99'''  11=#44EE 0 B B!1!D!D..:!1!@!@.>>O lK888++B:<=Qa00=N  ))555..46<>  # 68/2u"."A"A SJ!,*Q*QQ33GG&'(22!(.++	 $QRS %7!-'9$()?)?)A$B$3#%! %)!
 
 66 ((KL J%'9> ',O #'8G095!#5  &&&&--/ $*8<<0@#A '/:$&;4  
 (/ .??DDFG $
 6D"3#53 /"96D!!2 &++ 	7D''v6	7 -4466?6,,334F4L4LM!!#!!>$$// )J
 "2"8"8": /fn5&*O$(HH%L%L8I8K%L %- %M "-5,33VV4DE#M59.55vv6FG +//" >!!>$$// )J
  $$8;Q$QR< &//?%@"!6 66}VQ7OP" "
 #')) ,*34H*I, # %)II .*34J*K. %!
 #(00A&CO$*12C1DA(F%#?? ## $$% &#==45 6(   5&,,
 $((2TZZAGGv
 -",-./&,, 
 ""55!''"((DD0A0CD 6  #k >| % &*O<K4=9%'9n"^ ??&&99 s=   ?U8U= (V  6%VC)V  =VVV   'W
	W
c                	   t         j                  r|j                         ry t        |      r| j	                  |       y t        |t              r |       }||n| j                  |j                        }t        |      }t        j                  j                  |      }t        |t        j                  j                        r0|j                  |j                  }|j                   |j                   }t        |t        j"                        sJ t         j$                  r|t        |t        j&                  j(                        rXt+               }|j-                  d|j/                                |j-                  d|j0                         |j-                  dd       | j3                  |      }g }| j4                  j6                  J | j4                  j6                  j8                  r| j;                  |       g d}|D ]  }	| j                  |dz   |	z         }
t=        |
t        j>                  t        j@                  f      r$|jC                  d| d|	 dtE        |
             h|jC                  | d|	 d	|
         ny| jG                  |      }t         jH                  r9t=        |t        j&                  j(                        setK        |jL                        sPt        |jL                  tN              s6| jP                  jC                  |       | jR                  jC                  |       | j4                  j6                  }|jT                  |jL                     }tW        |d
         }tW        |d         }tY        t[        ||||||      |      }|j]                  |||||||       t        |t        j&                  j(                        s/| j^                  j`                  jc                  |j                         |jd                  J tg        |d|jL                        \  }}|sti        |d      rU|jj                  }d| d| d| d}|jC                  |       | jG                  |      jm                  |tY        ||             nBd| d}|jC                  |       | jG                  |      jo                  dtY        ||             tq        |      dkD  r| js                  ||       y y )Nparam_numelparam_bytesparam_countrO   )r  r  r  zndimension()r+  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   rC  r  r+  r  r  _dispatch_keysr  r   r  r  r  log_compilation_metricsr  	Parameterr7   	incrementnumelnbytesr  r>  r@  r  r  r   r  r  rc  r   rN  ,skip_no_tensor_aliasing_guards_on_parametersr3   r  ro   r<  r=  input_source_to_sizes_stridesr  r  r  add_tensor_match_guardrC  r   r   rE  r   rU  r  add_dynamic_indices_guardr  r  r  )r   r:  r  r  r  metrics_contexttensor_namer  termsterm
real_valuerC  r@  metadatar  r  r   static_reasondynamic_indicesrf  s                        r   TENSOR_MATCHzGuardBuilder.TENSOR_MATCH
  sX   11e6J6J6L "%(MM% %/".EDHHUZZ4HE%[F!HH33E:M%!2!2!=!=><<+"\\F&&2$)$7$7MeU\\222--*UEHHDVDV2W"5"7))-G))-F))-;,,u-K, !D((55AAA$$1188& " MD!%+*;d*B!CJj5<<*EFd;-qeC
OCV$WX{m1TF$zl$KLM !% 6 6u = GGuehh&8&89I!44 %U%=%=?PQ 1188E::AA-P#44AA'EE,, 2(62BC3HX4FG%;.#% 
&" 44&! "%););<&&99==ejjI< <<+++<U5M5MOFG 5";<&+&C&CO"$[M1STcSddrs~r  @g  !hIKK	***51KK')?	5)Q #;-/TU  KK	***51FF1.y%@ 4y1}++E48 r   c                8   t               }|J |j                  }~|J |xs |j                  j                  }~|| j                  j
                  v s
J d|        |"|j                  }|sd n| j                  |      }	n|}	|	t        j                  t        |	            nd }
d }t        |	j                  dd      dk7  }|rDt        |	t        j                  t        t        j                   f      st        j                  |	      }|j#                  ||
||       y )NzH_produce_guard_code must be called from inside GuardedCode. Called from __weakrefoffset__r   )r   f_backr.  co_namer   r5  r  rC  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  s-    !N	$$$!!!!!&?&--*?*?	DNN333 	
VW`Vab	
3
 #*::D)-T488D>N4N 2@1KGKK^,-QU 	  N,,.A1EJ 	 JTYYw/A/AB%
 kk.1G		
r   )FN)r.  types.CodeTyper/  zCallable[[object, str], int]r0  zCallable[[Source], str]r1  z1Callable[[object], Optional[weakref.ref[object]]]rJ  dict[str, object]r   r=  rC  r   r>  CheckFunctionManagerrG  r   r3  r  r   r   )r  dict[Any, Any]r:  r;   r   r   )r  r?  r:  r;   r   r   )r  r   r   Optional[Any])rE  rU   r
  r   r  r   r  r   r  r   rg  r   r  r  r   r   )rE  r?   r   r   )rE  r?   r  zHOptional[Union[KeysView[Any], set[Any], frozenset[Any], dict[Any, Any]]]r   r  )r  r  r   r   )r   r   )rE  r?   r   r   )r:  r;   r   r   r  )
r   rj  r   rj  r   r  r  r   r   r   r   )r  r   r   Optional[dict[str, Any]]r   r   )r:  zUnion[str, Guard]r   r   )r:  r;   rv  r   r  z(Callable[[GuardBuilderBase, Guard], Any]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  rn  r   r   )r:  r;   r  r@  r   r   )r:  r;   r  r?   r   r   )NN)
r:  r;   r  rj  r  r@  r   rn  r   r   ):r   r   r   r   rT  rZ  r$  rd  r  r  rP  r  r  r  rN  r  rC  r  r  r  r  r  r  r  r  r  r  r  r  r%  r(  r+  r3  r?  rN  rY  r*  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r  rq  r   r   r"  r"    s    "<@GG -G ,	G
 KG 'G (G +G /G G :G 
GR+49	<$L  "YY )Y  	Y
 Y Y Y -Y 
Yv9""
" 
",?
VpL 59 SS &S 2	S
 S 
SF4   ;	
 
"3Yl 37JJ"/J	J2
*
	

"

> =A??,9?	?>	

O
"
&
:
*jX	%($
	'	$4
 
&&P
JC2$
n`v9z 26,01
1
 1
 "/	1

 *1
 
1
r   r"  c                      e Zd ZdZej
                  ej                  ej                  fZe	j                   G d d             Z G d dej                        Z G d dej                        ZddZddd	Zdd
ZddZy)PyExprCSEPassrO   c                  "    e Zd ZU ded<   ded<   y)PyExprCSEPass.Configzdict[str, int]
expr_countzdict[str, str]expr_to_nameNr  rq  r   r   ConfigrE    s    ""$$r   rH  c                  (     e Zd ZddZd fdZ xZS )PyExprCSEPass.ExprCounterc                    || _         y r   )_config)r   rP   s     r   r   z"PyExprCSEPass.ExprCounter.__init__  s	    !DLr   c                    t        |t        j                        r*| j                  j                  t        |      xx   dz  cc<   t        |   |       y rR  )r   rC  ALLOWED_NODE_TYPESrL  rF  r  r   r   )r   r   r   s     r   r   zPyExprCSEPass.ExprCounter.visit  s>    $ @ @A''T(:;q@;GM$r   )rP   rE  r   r   )r   ast.ASTr   r   r   r   r   r   r   r   r   s   @r   ExprCounterrJ    s    	"	  	 r   rQ  c                  8     e Zd Z	 	 	 	 	 	 d fdZd fdZ xZS )PyExprCSEPass.Replacerc                L    t         |           || _        || _        g | _        y r   )r   r   rL  	_gen_namepreface)r   rP   gen_namer   s      r   r   zPyExprCSEPass.Replacer.__init__  s%    
 G!DL%DN&(DLr   c                :   t        |t        j                        rt        |      }| j                  j
                  |   t        j                  kD  r|| j                  j                  vrdt        | %  |      }t        |      }| j                         }| j                  j                  | d|        || j                  j                  |<   n| j                  j                  |   }t        j                  |t        j                               S t        | %  |      S )Nz = )r   rC  rN  r  rL  rF  USE_THRESHOLDrG  r   r   rU  rV  rc  r  NameLoad)r   r   exprnode_expr_var_namer   s         r   r   zPyExprCSEPass.Replacer.visit  s    $ @ @A#D) <<**40=3N3NN4<<#<#<< !&d 3 ,U 3#'>>#3++xjE7,CD:B11$7#'<<#<#<T#B88Hchhj997=&&r   )rP   rE  rW  zCallable[[], str]r   r   )r   rO  r   r   rP  r   s   @r   ReplacerrS    s.    	)(	) (	) 		)	' 	'r   r`  c                j    d| _         | j                  t        j                  d       i       | _        y )Nr   c                      yr   rq  rq  r   r   r  z(PyExprCSEPass.__init__.<locals>.<lambda>  s    r   )rF  rG  )_counterrH  r  defaultdictrL  r   s    r   r   zPyExprCSEPass.__init__  s.    {{"..y9 # 
r   c                P    | | j                    }| xj                   dz  c_         |S rR  )rc  )r   r   r  s      r   _new_varzPyExprCSEPass._new_var  s'    $--)r   c                    | j                  | j                        }|D ]'  }	 |j                  t        j                  |             ) y # t
        $ r'}t        j                  d|j                  |        d }~ww xY w)Nz#Failed to visit expr at line %s.
%s)	rQ  rL  r   r  parseSyntaxErrorr  	exceptionlineno)r   r  countereexs        r   countzPyExprCSEPass.count  si    ""4<<0 	Aciil+	  DbiiQRSs   $A			A9"A44A9c                    | j                  | j                  | j                        }|j                  t	        j
                  |            }|j                  t        |      fS r   )r`  rL  rf  r   r  rh  rV  r  )r   r\  replacernew_nodes       r   r  zPyExprCSEPass.replace  sF    ==t}}=>>#))D/2h!777r   Nrm  )_var)r   r   r   r   )r  rj  r   r   r\  r   r   ztuple[list[str], str])r   r   r   rY  r  	AttributeCall	SubscriptrN  dataclasses	dataclassrH  NodeVisitorrQ  NodeTransformerr`  r   rf  ro  r  rq  r   r   rC  rC    sx     M --3==A% % % coo  #'3&& #'J

8r   rC  c                    t        | j                  t              xs. t        j                  xr | j
                  t        j                  u S r   )r   r  r^   rP    guard_nn_modules_using_dict_tags	create_fnr"  r  )r:  s    r   must_add_nn_module_guardsr    s@    
 	5++^< 	
 33 :<#9#99r   c                  (     e Zd Zd fdZddZ xZS )DeletedGuardManagerWrapperc                0    t         |           || _        y r   )r   r   invalidation_reason)r   reasonr   s     r   r   z#DeletedGuardManagerWrapper.__init__  s    #) r   c                    d | _         y r   )r   r   s    r   r   z6DeletedGuardManagerWrapper.populate_diff_guard_manager  s
    #r   )r  r   r   r   rm  )r   r   r   r   r   r   r   s   @r   r  r    s    *$r   r  c                  @    e Zd ZU ded<   ded<   ded<   ded<   ded	<   y
)r  rF   r  r   zOptional[_CppShapeGuardsHelper]r  r   r  r  r  Nr  rq  r   r   r  r    s     ))**33##r   r  c                  "    e Zd ZU ded<   ded<   y)GuardsStater   r@  Optional[ShapeCodeParts]r  Nr  rq  r   r   r  r    s    ((..r   r  c                      e Zd Zy)_MissingN)r   r   r   rq  r   r   r  r    s    r   r  c                      e Zd Zd fdZedd       Ze	 	 	 	 	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Zedd       Zedd       Z	e	 	 	 	 dd       Z
e	 	 	 	 dd       Zedd	       Z	 	 	 	 dd
Z xZS )GuardsStatePicklerc                    t        |   |i | t        j                  j	                         | _        t        j                  j                  j                         | _        y r   )	r   r   r  r  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converter)r   r   kwargsr   s      r   r   zGuardsStatePickler.__init__  sH    $)&)**99; % 1 1 = = Q Q Sr   c                d    t         j                  j                         }|j                  |       |S r   )r  r  r   __setstate__)clsstatemods      r   _unpickle_modulez#GuardsStatePickler._unpickle_module  s%    hhoo
r   c           	        t         j                  j                         }t         j                  j                  j	                         }|j                  ||||t         j                  j                  j                  |            }||_	        |S r   )
r  r  r  r  r  from_meta_and_devicer  r   from_raw_reprgrad)	r  meta_tensorr  r  dispatch_keys_rawr  r  r  rets	            r   _unpickle_tensorz#GuardsStatePickler._unpickle_tensor  sv     %%446	 ,,88LLN33HH##112CD
 
r   c                   i }|D ]  \  }}	}
 |	|
 ||<    |j                   |j                         }}t        |      j                  ||||      }||_        t
        j                  j                  j                  |      |_	        |S r   )
shaper  r+  __tensor_unflatten__r  r  r  r   r  r  )r  r  r  r  r  ctx
inner_datainner_tensorsrm  unpickle_funcunpickle_func_args
outer_sizeouter_strider  s                 r   $_unpickle_traceable_wrapper_subclassz7GuardsStatePickler._unpickle_traceable_wrapper_subclass(  s     7A 	E3D-!3"/1C"DM$	E $/#4#4k6H6H6JL
;443
L
 
!HH33AABST
r   c                ,    t        j                  |      S r   )r  r  )r  aliass     r   _unpickle_python_modulez*GuardsStatePickler._unpickle_python_module?  s    &&u--r   c                T    t         j                  j                  j                  |      S r   )r  r  r   r  )r  raw_reprs     r   _unpickle_dispatch_key_setz-GuardsStatePickler._unpickle_dispatch_key_setC  s    xx&&44X>>r   c                h    t         j                  j                  j                  j	                  |      S r   )r  r  r:  CInterpreterdeserialize)r  jsons     r   _unpickle_functorch_interpreterz2GuardsStatePickler._unpickle_functorch_interpreterG  s%     xx""//;;DAAr   c                ,    t        j                  |      S r   )r!  MappingProxyType)r  ds     r   _unpickle_mapping_proxyz*GuardsStatePickler._unpickle_mapping_proxyM  s     %%a((r   c                J    t        t        j                  j                  |      S r   )r  r  opsr  )r  r  s     r   _unpickle_c_opz!GuardsStatePickler._unpickle_c_opS  s    uyy||T**r   c                
   dd l }t        |t        j                        rl|j                  j
                  dk7  rRddlm}  ||      rg }|j                         \  }}|D ]6  }t        ||      }| j                  |      \  }	}
|j                  ||	|
f       8 t        |       j                  t        j                  |d      |j                  t        |      t        j                  j                  |      j!                         ||ffS t        |       j"                  t        j                  |d|j$                        |j                  t        |      t        j                  j                  |      j!                         |j&                  ffS t        |t        j(                  j*                        rt        |      j,                  t        |      j.                  k(  rt0        S |j2                  j4                  t        j(                  j*                  j4                  k(  rt        |       j6                  |j5                         ffS t9        j:                  |      r"t        |       j<                  |j.                  ffS t        |t        j                  j>                        r&t        |       j@                  |j!                         ffS t        |t        j                  jB                  jD                        r&t        |       jF                  |jI                         ffS t9        jJ                  |      rItM        ||jN                        r3tQ        |d      r'tQ        |d      sJ |jR                  |jT                  ffS t        |t        jV                        rtY        d| d	|jZ                   d
      t        |t\        j^                        r&t        |       j`                  |jc                         ffS t        |t        jd                  jf                        r=|jh                  jk                  d      r"t        |       jl                  |j.                  ffS |j2                  jn                  dk(  r!|j2                  j.                  dk(  rtp        dfS t        |t\        jr                        rtp        dfS t9        jt                  |      rJ|jv                  jx                  t8        jz                  z  r#|j,                  |j.                  k7  sJ tp        dfS t        |      j,                  t        |      j.                  k7  r?t        j|                  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: rA  z_C::r4  	PyCapsulerq  r  r  r  r  r  )Asympyr   r  r  r  r+  torch.utils._python_dispatchr  r  r  reducer_overriderc  r  
empty_liker  r  r  r  r  r  r  r   r   r   NotImplementedr   __getstate__r  r  ismoduler  r   r  r:  r  r  	serializeisclassr  FunctionrU  r  r  r  r  r   r!  r  r  r6  _opsOpOverloadPacket_qualified_op_name
startswithr  r   r  r|  
isfunctionr   co_flags	CO_NESTEDr  rR   PackageError)r   r  r  r  r  attrsr  rm  innerfunc
args_tuples              r   r  z#GuardsStatePickler.reducer_overrideW  sK    	c5<<(SZZ__-FR,S1  
 335
s! @D#C.E'+'<'<U'C$D*%%tT:&>?@
 DzFF$$S8JJIHH++C099;I   :..  V3CTCTU

S	'',5571   UXX__-Cy%%c););;%%}}))UXX__-I-IIDz22S5E5E5G4IIIc":55FFUXX445:883<<>:KKKUXX00==>:==?QQQ OOC 3/233 2333''#*A*A)CCCU\\*!9#hsxxjPQRSSU334:55
}DD,,
$$//7:,,s||o== MM$$
2&&+5 R<U^^,R<$#,,*?*?'BSBS*S##s||333R<9!!T#Y%7%77--##00S	{,se3DETUTU  r   )r   r   r  r   r   r   )r  r   r   ztorch.nn.Module)r  torch.Tensorr  torch.devicer  r+  r  r  r  r  r   r  )r  r  r  r  r  r+  r  r  r  r   r  z5list[tuple[str, Callable[..., Any], tuple[Any, ...]]]r   r  )r  r   r   ztypes.ModuleType)r  r  r   ztorch._C.DispatchKeySet)r  bytesr   z torch._C._functorch.CInterpreter)r  r?  r   z types.MappingProxyType[Any, Any])r  r   r   r   )r  r   r   z6Union[tuple[Callable[..., Any], tuple[Any, ...]], Any])r   r   r   r   r%  r  r  r  r  r  r  r  r  r  r   r   s   @r   r  r    sd   T
  
 !  	
   
 ( !  	
   J 
 , . . ? ? BB	)B B
 ))	)) )
 + +^^	?^r   r  c                   t        j                         }t        |      }	 |j                  |        |j                         S # t        $ r8}t
        j                  j                  j                  t        |            |d }~ww xY wr   )ioBytesIOr  dumpAttributeErrorr  r  rR   r  r   rV  )r  bufpicklerrm  s       r   pickle_guards_stater    si    
**,C %G<U <<>  <mm,,SV4!;<s   A 	B3A>>Bc                      e Zd ZU 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZdZded<   	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZdd	Z	dd
Z
ddZy)r>  Nc
                    |r|j                   nd }
i  _        t        |      }| _         j                  J | _        |r|j
                  nd  _        t                _        t                _        t                _	        | _
        t        d      st        j                  d       t        j                  j                   j"                  r|xs d dfd}t%        |
xs dt&        j(                        }|r j+                  ||||d      \  }dfd} ||D cg c]
  } ||       c}      }t-        |      t-        |      k(  sJ t/        d	 |D              sJ t1        |      D cg c]  \  }}||   s| }}} j+                  |||||      \  }| _         j5                  ||       j6                   j2                  _        t8        j;                  d
 j2                         j6                   j2                  _        d|j<                  s|j>                  s j2                  jA                  |jB                        sAtE         j2                  |jB                  tG        jH                               }tK        d|       tL        !tM         j2                  |jB                         tO         j2                  jP                  |jB                  d      t8        j;                  dd       tS        jT                  dtW                     d  _,        |rAddl-m.} t_         j                  |      sJ 	  ja                  | j                         _,        t        jr                  ju                  d fd        j                  jw                          d  _        y c c}w c c}}w # tb        jd                  $ r|}t        j                  j                   jf                  s|	r| j                  ji                  dtk        |       tm        jn                         jq                  d             Y d }~d }~ww xY w)Nr-  z9guard_nn_modules is turned off using justknobs killswitchc                ,    | D cg c]  }d c}S c c}w r  rq  )gsgs     r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>  s    R>Pt>P >Ps   	c                P   g }t         |       |       D ]  \  }}|s|j                  d       |j                  dv sd|j                  v rGt        j                  d|j                  |j                  j                         |j                  d       }|j                  d        |S )NF)r  r  r  r  z7%s guard on %s is dropped with caching_precompile=True.T)r  rc  
guard_typederived_guard_typesr  r  
orig_guardr  )r   r  keepr  _guard_filter_fns       r   guard_filter_fnz6CheckFunctionManager.__init__.<locals>.guard_filter_fn  s    "#3F#;VD )GD!

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

5)

4() 
r   rq  )r  Fc           	     X   t               }t        | j                        }|dk(  rd}|}n	 j                  | j                        }d}t	        | j
                        d u}t        |||| j                         | j                  rt        | j                        nd||       S #  |}d}Y `xY w)NrS  FTrq  )r  	has_valuer  r  r  	is_globalr  )
objectstrip_local_scoper  rC  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2: %I#E	*
 !(EJJ 7$(	 353K3KLTXX	''$335494E4Ee//02'$
 
	* '$)	s   B! !B)c              3  @   K   | ]  }t        |      t        k(    y wr   )r+  r   )r   r[  s     r   r  z0CheckFunctionManager.__init__.<locals>.<genexpr>1  s     ?1tAw$?s   %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 = r  z us)rC  )latencyr   s   r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>  s     $"4"4!55GPS}TWX r   
payload_fn)r   zlist[GuardFilterEntry]r   z
list[bool])r:  r;   r   r   )<r   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesr@  r  torch_function_mode_stackrK   r  r  r  r3  rD   r  r  r  r  rP   caching_precompiler   r;   sort_keybuild_guardsr  r  rV  rC  compile_check_fnr   r  r  skip_guards_checkr  rY  rJ  get_guard_fail_reason_helperr8   rX  r  r   r%   r   r6   increment_toplevelr  guards_stater  r   r   serialize_guardsrR   r  strict_precompilebypass_packager   r  
format_excra  _loggingtrace_structuredclear)r   r.  r@  r   r   r  r  r3  rG  strict_errorr   existing_diff_guard_sourcessorted_guardsrC  r  r:  filter_resultsr  reasonsr   rm  r  r  r  s   `                    @@@r   r   zCheckFunctionManager.__init__  s    )5$$$;= B+N 	$ ?K  ,,, !1
 7CL22 	& 3=,;E<'<FL($8!BCKKST ==22.Q3P& v|@ &*%6%6:FLRW&"G]< -=JKE(/KN ~&#m*<<<<?????&/&>"!U.QRBSM 
 "&!2!2'"
 +g}mD .5-D-D*t112-4-D-D* --l6I6I%%++L,D,DE6&& ,,"557
 %';G9%EFF,8-&&(@(@' ,""'')A)A1G 9gc]L 112Dc'lS-1>d//===
$($9$9]D,=,=%! 	''#X 	( 	
 	 S L^ ## ==''99\G!!00/Ax8'224::4@ 1  s+   "N*3N/N/"N5 5QA2P??Q)r  r  r  r  r  r  ztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPESc                l   |D ]  }|j                         }|j                  rt        |j                        nd}|dv r4|j                  sG|j	                  |j
                        }t        |       n|t        j                  v r,t        j                  j                  j                  | d      t        d |D        d       x}st        j                  j                  j                  | d       |j                  t               t               dfd}	|j!                         }
|D ]`  }t#        |j$                  t&              r2| j(                  sJ | j(                  j*                  D ]
  } |	|        O |	|j$                         b |j,                  D ]
  } |	|        dd}|
j.                  j1                         D ci c]  \  }}|v s|| j2                  v r|| }}}|
j.                     j1                         D ci c]  \  }}|| j4                  v r|| c}}|<   t7        j8                  |
|
j:                  j1                         D ci c]  \  }}|v s|| j<                  v r|| c}}|t        j>                  jA                  |D ch c]+  }t7        j8                  |d d  ||jB                              - c}      tE        jF                  tH        |
jJ                        d	      }
tM        |
| j(                  
      }tO        |      S c c}}w c c}}w c c}}w c c}w )Nrq  )r  r  z guard cannot be serialized.c              3  D   K   | ]  }|t         j                  v r|  y wr   )r>  r  )r   r  s     r   r  z8CheckFunctionManager.serialize_guards.<locals>.<genexpr>  s'      0VVV s    c                    t        |       x}r*t        |t              sJ |fvrj                  |       y y t	        |       x}r$t        |t              sJ j                  |       y y r   )r,   r   r   r   r-   )rE  r  builtins_dict_nameused_global_varsused_local_varss     r   prune_variablez=CheckFunctionManager.serialize_guards.<locals>.prune_variable  sw    -f55t5!$,,,  244$((. 5.v666!$,,,##D) 7r   c                8   t        | t        j                        rxddt        fd| j                  D              }| j
                  j                         D ci c]  \  }}| |       }}}t        j                  | j                  g|i |S | S c c}}w )Nc                T    t        | t        t        j                  f      r |        S | S r   )r   rN   r0  r  r  s    r   _refzPCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>._ref  s!    !!mW[[%AB s
Hr   c              3  .   K   | ]  } |        y wr   rq  )r   ry  r(  s     r   r  zUCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn.<locals>.<genexpr>  s      9Qa 9s   )r[  r   r   r   )r   	functoolspartialr)  r   keywordsr   r  )r[  new_argskvnew_keywordsr(  s        @r   normalize_create_fnzBCheckFunctionManager.serialize_guards.<locals>.normalize_create_fn  s    !Y../
 ! 9!&& 9978zz7G7G7IJtq!47
JJ ((K(KlKKH  Ks   B)obj_weakrefguarded_class_weakrefr~  T)rJ  r   _guardsr  r  )r@  r  )rE  r?   r   r   )r[  Callable[..., None]r   r5  )(r  r  r)  r  rC  r  r  r>  r  r  r  rR   r  next%name_of_builtins_dict_key_in_fglobalsr   dump_guards_stater   r  rr   r  r  rA  r   r   r  r  rx  r  rJ  r  r4  	GuardsSetr~  rz  tree_mapr  r  r  r  )r   r  r  r@  r:  r  r  r  failedr%  output_graph_guards_staterE  r1  r.  r/  global_scope_stater  r"  r#  r$  s                    @@@r   r  z%CheckFunctionManager.serialize_guards  sL    # 	E--/J>C>O>O%(9(9":UW <<((!++ejj1C*3/2XXXmm''44!l">?   0
    mm''44h:; 3	: *OO5%
	* %1$B$B$D!" 	9E%22NC,,,,"33EE +F"6*+ u778	9 #55 	#F6"	#	  2>>DDF
1$$T-M-M(M qD
 
 2>>"eg	2
1 D***	 qD2
-. %0$7$7% 6AAGGIAq'10O0O+O 1
 ,MM++ "/   ''$(.2"5eoo"F	
 +1//.)GG+ #/%
!2 #2!22

 #<00U

2
s   LL%L+0L1c                   t               }||_        d dfd}t        || j                  || j                  |j
                  |j                  || || j                  
      }d	d}	t        j                  ||	      t        j                  xr t        d      }
|D ]`  }|
sK|j                         r;d|j                  vr-d|j                  vrt        j                  sd|j                  vrP|j!                  |       b ||fS )
Nc                    | j                         }|t        j                  u r| j                         S sJ         }|J |j	                  | j                               S r   )guard_sourcer>   CONSTANTr  r  )rE  r@  	r_builder	w_builders      r   r0  z5CheckFunctionManager.build_guards.<locals>.source_ref*  s]    !..0L{333{{}$9!I((($$V[[]33r   )r3  c                &     |        }|rd |_         y y r   )r2  )weak_br  s     r   cleanup_builderz:CheckFunctionManager.build_guards.<locals>.cleanup_builderB  s    A r   r-  r   r   rC  )rE  r?   r   r   )rE  zweakref.ref[GuardBuilder]r   r   )r   r   r"  r/  r1  rJ  r   r3  r0  r  rP   rH  rD   r  r  r  r  )r   r  r  r.  r@  rG  rC  r0  r  rF  guard_on_nn_modulesr:  rC  s               @r   r  z!CheckFunctionManager.build_guards  s    ,-+F(		4 KK  $$%%!%!:!:
	 KK9	$55 
//;
 # 	"E'224 #%**4$EJJ655

9RLL!	" %%r   c                B
   |j                   }|dgz  }t        j                  d       g g g | j                  J t	        | j                        }| j
                  j                  j                  t        t        j                                      | j                  J | j                  j                  }| j
                  j                  j                  |dg       | j
                  j                  j                  | j                  dg       d | _        	 d	 	 	 	 	 	 	 dfd}t               }|j                   D ]=  }	|	j"                  D ],  }
|
|vs ||
|	j$                  d       |j'                  |
       . ? |j(                  }d }d }t+        |      dkD  r-t-        |j.                  |dd	j1                  |      z   d
z   g       t2        j4                  rA|j6                  r5t9        t:        t=        |j6                         \  }}|j?                  ||       | j                  r| j                  j@                  ng }|D ]T  }tC        |tD              rr|jF                  }|jH                  }|jK                          d|jK                          }tM        |jO                  |      |jO                  |      |g        ||d d       tC        |tP              r|jR                  D cg c]  }|jO                  |       }}|jT                  D cg c]  }|jO                  |       }}dd	j1                  d |jR                  D               dd	j1                  d |jT                  D               d}tW        |||g        ||d d       ItY        d|        |jZ                  D ]'  }	|	j"                  D ]  }
 ||
|	j$                  d        ) r$t\        j^                  ja                  dfd       tb        jd                  tc        jf                         }|||jh                  |dtj        tm               }| j
                  jo                          d|jp                  d   i}t+              dk(  sJ || j
                  _9        || j
                  _:        | j
                  jw                          | j
                  _<        || j
                  _=        || j
                  _>        d | j
                  _?        d | j
                  _@        || j
                  _A        y c c}w c c}w )Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()c                $    t               }t        j                  d|       j                   fd       t        j                  t        j                        rd}d}pj                  r,ddj                  j                  j                                }j                  r,ddj                  j                  j                                }t        j                  d ||       |s#j                          j                  |       y y )Nr  c                      r9j                   r-t        j                  j                   j                               nd r-j                  r!t        j                  j                        dS d dS )N)r  r  r  )r  rC   from_tracebackr  r  )rf  r:  s   r   r  zNCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>  sg    % !U[[ #11%++2E2E2GH! !U%5%5 #11%2B2BC  " r   rS  z
Stack:
z
User stack:
zGuard: %s%s%s)r  r  r  rc  verbose_guards_logisEnabledForloggingDEBUGr  r  formatr  )	rf  r:  log_onlyre  maybe_stackmaybe_user_stackr   structured_guard_fnsr   s	   ``    r   add_code_partz<CheckFunctionManager.compile_check_fn.<locals>.add_code_part  s     !6i GT#45 ''  "..w}}= #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!),"))*;< r   TrO   zcheck_no_aliasing(r@  rA  r  zcheck_overlapping(overlapping=[c              3  <   K   | ]  }|j                           y wr   r  r   rG  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s     /\Q/\   z], non_overlapping=[c              3  <   K   | ]  }|j                           y wr   rW  rX  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>  s     3dAFFH3drY  z])zUnknown GuardEnvExpr: dynamo_guardsc                 8    D  cg c]	  }  |         c} S c c} w r   rq  )frT  s    r   r  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    BV4WQQS4W 4Ws   r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr&  r   r   )rf  r   r:  Optional[Guard]rQ  r   r   r   )Br:  r  r  r	  $make_torch_function_mode_stack_guardrC  r   attach_compile_idr   r8   rX  r@  global_state_guardadd_global_state_guard#add_torch_function_mode_stack_guardr   r  r  r:  r   r<  r  r    r=  r  rP   r  rF  rB  r  r  r  aotautograd_guardsr   r:   input_source_ainput_source_br  r!   r  r@   overlapping_sourcesnon_overlapping_sourcesr"   r  r;  r  r  r  rQ   initial_global_stateGlobalStateGuardrY  rI   r  r   r2  r   r   rk  r   r   r   r   r   r   )r   r  
guards_outr   largs"torch_function_mode_stack_check_fnglobal_staterU  seengclr  r<  check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsrh  r:  source_ar  rf  rG  overlapping_guard_managersnon_overlapping_guard_managersr   r  r   rT  r   s                             @@@r   r  z%CheckFunctionManager.compile_check_fn]  sB      '((#
CE--999-Q**.
*
 	111134	

   ,,,((;;6645	
 	CC**34	

 *.& FK)	=)	=#2)	=>B)	=)	=V u<< 	#C #t# "$		48HHTN#	# $+#C#C #' '(1, -99(%		2J(KKcQR  6633?Bc7>>?@<!< 88#%@
 594E4ED002 	 (  	EE%1 // //'}}/tHMMO3DE	-99(C99(CK
 it4E>2 #66. 99!<.* . #::2 99!<2. 2
&&*ii/\%B[B[/\&\%] ^**.))3deFcFc3d*d)eegk 
 2.2K
 it4"%;E7#CDDA 	EH )) 	5C 5 dCIIt45	5  NN++,W ,  --5(99;L 0(@%1%7%72T	

 
  !
 	##% #W]]3%78 :!###*6'"'<<>0B-*>'+8( *.&)-&8P5E.2s   $TTc                T   t        | d      rt        | j                  t              s| j                  j                  x}h| j                  j
                  x}Ot        |t              sJ t        |t              sJ d| d}t        |      }|j                  ||       || _        y y y y y )NrC  zCache line invalidated because z got deallocated)	rU  r   rC  r  r   r   r~   r   
invalidate)r   obj_strr   r   r  deleted_guard_managers         r   r}  zCheckFunctionManager.invalidate1  s    
 D/*t113MN $ 2 2 > >>K $ 2 2 > >>Kk:666k:6666wi?OPF$>v$F!"";0EF!6D L L O +r   c                :   	 t        |      | j                  vr`t        j                  |      | j                  t        |      <   t        j                  |t        j                  | j                  |             t        |      S # t        $ r Y t        |      S w xY w)zadd a weakref, return the id)r~  )	rB  r  r0  r  r   r*  r+  r}  r  )r   r  r~  s      r   r/  zCheckFunctionManager.id_refB  s    
	#wdnn, +2++c*:r#w'  **4??GL
 #w  	#w	s   A7B 	BBc                b    t        |      | j                  v r| j                  t        |         S y)zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)rB  r  )r   r  s     r   r1  z$CheckFunctionManager.lookup_weakrefsQ  s(    c7dnn$>>"S'**r   )NNNNNFF)r.  r<  r@  r   r   Optional[CacheEntry]r   %Optional[Callable[[GuardFail], None]]r  z8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]r  r  r3  rA  rG  r   r  r   )r  r"  r  list[Guard]r@  r   r   r  )r  r  r  rl  r.  r<  r@  r   rG  r   r   z(tuple[GuardBuilder, GuardManagerWrapper])r  r"  ro  r  r   r  r   r   )r~  r   r   r   )r  r  r~  r   r   r  )r  r  r   zOptional[weakref.ref[object]])r   r   r   r   r  r   r  r  r  r}  r/  r1  rq  r   r   r>  r>    sJ   
 -1?C 599=!"O!O! -O! *	O!
 =O!
O! 3O! 7O! O! O!bH)+D y1y1 #y1 "	y1
 
y1v>&">& &5>& 	>&
 ->& >& 
2>&@RQRQ  RQ =	RQ
 
RQh7"r   r>  c                ,  	 ddl m} t               		 	j                  |        d	fd} |       }| D ]]  } ||      \  }}|j                  |       |j                  d| d       |j                         5  |j                  d       d d d        _  |       }|j                  d       |j                         5  |j                  |       |j                  d	       d d d         |       }|j                  d
| d       |j                         5  |j                  |       |j                  d       d d d        |j                         |j                         fS # t        $ r dd}Y Cw xY w# 1 sw Y   HxY w# 1 sw Y   xY w# 1 sw Y   VxY w)Nr   rA   c                &    j                  |       S r   )r  )r\  csepasss    r   r  z%build_guard_function.<locals>.replace_  s    ??4((r   c                
    g | fS r   rq  )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 guardrt  )
torch._inductor.utilsrB   rC  ro  RecursionErrorrP  r   rJ  splicerV  )
r   closure_argsrB   r  
guard_bodyr\  rV  r:  make_guard_fnr  s
            @r   r  r  X  s   4oG
j!	)  !J 1g&xvR01  	1  0	1 	1	1 E	OOO$	 'Z &' #$M3L>DE				 0U#/0  -"8"8":::?  		1 	1' '0 0s5   E 7E1;#E>#F
E.-E.1E;	>F
Fc                 h    t         j                  j                  j                  j	                  d      S )Nr   r  r  	_internal	log_stateis_artifact_enabledrq  r   r   is_recompiles_enabledr    s#    >>##--AA,OOr   c                 h    t         j                  j                  j                  j	                  d      S )Nr   r  rq  r   r   is_recompiles_verbose_enabledr    s$    >>##--AABVWWr   c                P    | D cg c]  }t        |       c}dfd}|S c c}w )Nc                     t               } t        |       t              k7  ryt        |       D ]  \  }}|t        |      k7  s y y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  sL    13	y>SZ'E9- 	HBT$Z	 r   r   r   )r+  )initial_stackr[  r  r!  s      @r   rc  rc    s+     ,,T!W,E
 +* -s   #Scopec                |   | j                   J t        | j                         }t        j                  t              }| j
                  D ]1  }||d<   t        t        |||            }||   j                  |       3 |D cg c]  }t        ||         dkD  s||     }}dj                  |      }d| gS c c}w )N__compile_source__rO   r@  zDuplicate tensors found: )r   r  r  rd  r  r   rB  r  rc  r  r  )	rC  r2  r   ids_to_sourcer  	tensor_idr  duplicate_tensorsr  s	            r   1recompilation_reason_for_no_tensor_aliasing_guardr    s     %%111223L++D1M&AA 7-:)*tM<?@	i ''67 ,9$'Cc@R<SVW<W=
  YY()F'x011s   B9B9c                4    ddl }d}|j                  |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)rG  r  patterns      r   r  r    s     +G66'5!$$r   c                   | j                   J | j                  J || j                   d   d}|j                  | j                         g }d}g }| j                  |      }|j                  s(|j
                  }t        |      dk(  rd|d   v rd}n|}g }|rt        | |      }n|D ]  }t        | j                         }	||	d	<   t               5  	 t        ||	|      }
	 ddd       t        
t              r|
s|}
t        |
t              sd|j!                  |
       t               r n | d
dj#                  |      z   }t%        |      S # t        $ r t               r
Y ddd        w xY w# 1 sw Y   xY w)z
    Return the reason why `guard_manager` failed.
    Updates `guard_failures` with the generated reason.
    Only the first failed check of guard_manager is reported.
    Nr&  r$  FrO   zDuplicate tensor foundr   Tr  r9  z; )r   r   rr  r]  resultr   r  r  r  rM   r  	Exceptionr  r   r   r   rc  r  r  )rC  f_locals
compile_idr2  r  no_tensor_aliasing_check_failedr   guard_debug_infor=  r   fail_reason
reason_strs               r   r  r    s    %%111%%111!;!;C!@AE	LL++,G&+#$&$228< ""-@@ !"a''+=a+@@26/,%'"&C5
 ' 	D : :;L15L-./1 "&t\5"AK +t,["+s+{+46'	* <r"TYYw%77JZ((! ! 46   	 s*   E-EE*E-(E**E--E6	c                X   t        | t              r| d| j                   S t        | ||      }|r|S t        t
        |      j                  |       	 | j                  &| j                  t        |xs dt
        |                |S # t        $ r t        j                  d       Y |S w xY w)Nr9  zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r   r  r  r  r   r   rc  r   r   r  r  rj  )rC  r  r  r  skip_loggingr  s         r   get_guard_fail_reasonr  	  s     -!;<R A ABCC-mXzRJ=&'..z:
&&2''*8(8-:MN   
d	
 
s   2B B)(B)c                b  	 g 	| Yt        | j                  | j                  |j                  | j                  |      }|r	j                  |       | j                  } | Y|j                  }|r	S t               xs
 t               }|st        j                  rt               r"dj                  d t        	      D              }n%t        j                  dj                  	      d      }d| }d|j                    d|j"                   d|j$                   dt        j                  |d	       }|r5t               rt&        j)                  |       nt*        j)                  |       t        j                  rt-        j.                  |      t0        j2                  j5                  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.
    z

c              3  \   K   | ]$  \  }}d | dt        j                  |d      z    & yw)zguard z failures:
- N)r  rJ  )r   r  r  s      r   r  z:get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>D  s5      #Av <(8??64+HH#s   *,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  encodingrq  rq  r   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>[  s    '
 r   c                      S r   rq  )r  s   r   r  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>_  s    7 r   )metadata_fnr  )r  rC  r  r  r  rc  r6  r.  r  r  rP   error_on_recompiler  rV  r  rJ  r/  co_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logrR   RecompileErrorr  r  r  )
r   framer  r  r  do_recompiles_logfailuresguard_failure_detailsmessager  s
            @r   'get_and_maybe_log_recompilation_reasonsr  $  s    G

!&%%NN""
 NN6"!&& 
! <<D-/R3P3RF55(*{{ #!*7!3# H
  tyy'94@H<XJG 	 $DLL>d6F6F5GqI\I\H]]_4f=>@ 	 ,.&,,W5$$W-$$$$W--	NN##
 # $  Nr   c                   | }t               }| 8|j                  | j                  j                                | j                  } | 8|} | :|| j                  _        | j                  j                          | j                  } | :|S r   )rK   rr  rC  r   r6  r   r   )r   first_cache_entryacc_diff_guard_sourcess      r   r  r  e  s     $
 /9l

!%%%%@@B	
 "&&	 
! $K

!7M!!4!!==?!&& 
! "!r   c                   t        d|j                   d|j                   d|j                          t        ddj	                  | j
                        z   dz          t        ddj	                  | j                               t        |        d|i| j                  }| j                  D ]  }	 t        || j                  |        y #  t        d|        Y 0xY w)	NzERROR RUNNING GUARDS  r  zlambda r@  z and
  r%  zMalformed guard:
)
printr/  r  r  r  r   r   r   r  r   )rC  r  r  r  lastrJ  r:  s          r   guard_error_hookr    s     

~Qt/?/?.@$BUBUAVW 
)dii 2 23
3c
9:	#z}7789	-?M$>$>?K)) 0	022K@0	0&ug./s   -CCc              #  b   K   t               }| D ]  }||vs| |j                  |        y wr   )r   r   )seqrs  r[  s      r   uniquer    s3     5D D=GHHQKs   //c                ,   |r|| k7  rt        |      }t        |       }t        |      st        |       r7t        j                  | j	                          d|j	                          d      ||k(  r%t        j                  t        j                  |      S y )Nz is aliasing zC. This is not supported. Please do a clone for corresponding input.)r  )	r0   r/   rR   UnsafeScriptObjectErrorr  r*  r+  r"  r  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardr    s     {j02;?.z:/
1*=--??$%];3C3C3E2F G> ?  /1 $$\%A%AKXXr   )skipc                v   ddl m} t        j                  t        j
                        xs# t        j                  t        j
                        }|j                         j                  j                  j                  }|D ]8  }t        |t              sJ t        |j                        r+ |||| dz          : y)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  rM  rN  rO  rL  rC  guards_contextr[  r   r   r;   r2   r  )r  r   r  r  r   r:  s         r   install_guardr    s     -$11 8		(	(	7  



-
-
;
;
?
?C K%'''$U%=%=>E':JKr   )ry  r   r   r  )r   zset[str])r   r=  )r   rO  r   r   )rf  r   r:  rb  r   r   r   )r   zUnion[str, list[str]]r:  rb  r  rn  r   rj  )r  r   r   zOptional[int])r  z	list[Any]r   list[Optional[int]])r  r  r  r   r  r  r  r  r  r+  r  r   r   r   )r  r?  r  r   r   r  )rE  r   r  r   r   r   )r  r   r   r	   )r  r   r   r   )rE  z3Union[DictGetItemSource, DictSubclassGetItemSource]r
  r   r  r   r  r   r  r  r   r   )r:  r;   r   r   )r  r<  r   rj  )r  r  r   r  )r   rj  r  r   r   ztuple[str, str]r  )r  z'list[torch.overrides.TorchFunctionMode]r   zCallable[[], bool])rC  r   r2  r  r   rj  )rG  r   r   r   )rC  r   r  r=  r  zOptional[CompileId]r   r   r   )rC  r   r  r<  r  r=  r  r9   r  r   r   r   )r   r  r  r   r  r   r   rj  )r   r  r   rl  )rC  r   r  r<  r  r=  r  r  r  r   r   r   )r  zSequence[T]r   zGenerator[T, None, None])r  r?   r  r?   r   z Optional[functools.partial[Any]])r   r;   r  r  r   r   (  rp  
__future__r   r  r4  r  rx  r1  r*  r  r  r  rN  r  pickler_  r  r  r!  ra  r0  
contextlibr   r6  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   rz  torch.utils._ordered_setrK   torch.utils._tracebackrL   rM   torch.utils.weakrN   rS  rP   rQ   rR   
eval_framerS   rE  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   numpyru  ModuleNotFoundErrorcollections.abcr   r   r   r  r   torch._Cr   r  r   r   r   	getLoggerr   r  r  getArtifactLoggerr  r  r  rL  r'  r   r   rz  cacher  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ry  r  r  r  r  r2  r  r   r"  rC  r  r  r  r  r  Picklerr  r  r>  r  r  r  rc  r  r   r  r  r  r  r  r  r  r  r  r  r  r  rq  r   r   <module>r     s  " # 
        	    
      %    J J0$ 5 !    >      8   H
 
 
 1 % 1  * / O * ( ( ,+ + + + + + + + + + +X      , KO G N
 =='NCLg!^^--hA
11(LI99"  ^^55h@PQ " ,~ ,@ @FT 
. 
. .2* 1</ hh&&:: %6 %)% " 	&'K
  !	
  " 	*31 d#! ! $!*?*(* * 	*
 )* *Z
G   
tyy 
 8 8s
# s
N>R8 R8j$!4 $ $ $ $ / / /
	 	n nbN
 N
b);XPX
+:++( 	gtCK012&2/422&
%B)&B)B) $B) 		B)T &
   	
  	< >%>> > 	>B"%""600
0  0 	0
 0 
0. % &!!%+!%!H /0 KqD  0//0|  	Bs$   5S$ -S6 $S32S36T T