
    {Yh9                      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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!Z!ddl"Z!ddl#Z!dd	l$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddlGmHZH ddlImJZJ ddlKmLZLmMZMmNZNmOZOmPZP ddlQmRZS ddlTmUZU ddlVmWZWmXZX ddlYmZZZ ddl[m\Z\m]Z]m^Z^ ddl_m`Z` ddlambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dZded<   	 ddlZn# e$ r dZY nw xY werddlmZ ddlmZ  ej        e          Ze!j                            ed          Ze!j                            ed           Ze!j                            ed!          Ze!j                            ed"          Z G d# d$          Zd% Zej        d&             Zdad'ed(<   d) Zd}d.Ze!j        j        j        Zd~d2Zdd6Zdd8Zd9 Zd: Zd; Zd< Zdd@Z ej        dAB           G dC dD                      ZdE ZdF Zej         G dG dH                      Z G dI dJej                  Zej        ddM            Z G dN dOeB          Z G dP dQ          ZdR Z G dS dTe          Zej         G dU dV                      Zej         G dW dX                      Z G dY dZej                  Zdd]Z G d^ d_          ZddaZdb Zdc Zdd Zde ZddgZddnZddoZddrZds ZddxZ e`eߦ           dy Zdz Zdd{d|ZdS )a  
Core guard system for Dynamo that detects when compiled code needs to be recompiled due to
changes in program state. Guards are conditions that must remain true for previously-compiled
code to be valid for reuse.

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

The guard system is critical for Dynamo's ability to efficiently reuse compiled code while
maintaining correctness by detecting when recompilation is necessary due to changes in
program state, tensor properties, or control flow.
    )annotationsN)contextmanager)deepcopy)currentframe)AnyCallableNoReturnOptionalTYPE_CHECKINGUnion)ReferenceType)code_framelocals_names)
check_obj_idcheck_type_iddict_versionDictGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardinstall_symbolic_shape_guardprofile_guard_managerRootGuardManager)get_global_source_nameget_local_source_nameIndexedSource$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceTensorPropertyTensorPropertySource)CompileEventLoggerget_metrics_context)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlap)
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ConstantSourceConstDictKeySourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceListGetItemSourceLocalSourceNNModuleSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTupleIteratorGetItemSource
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]]guard_manager_testing_hook_fn)Symbol)OutputGraphGuardsStateguards
recompilesrecompiles_verboseverbose_guardsc                  z    e Zd ZdZddZed             Zd Zd Zd Z	d Z
d	 Zdd
Zd Zd Zd Zd Zd Zd ZdS )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                      | _        d S 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_guardsr4   diff_guard_sources)selfr   s     f/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/_dynamo/guards.py__init__zGuardManagerWrapper.__init__   s    <(**DIIDI# 	"& !!*,'),&3=<<    c              #     K   t                      | _        	 d V  t                      | _        d S # t                      | _        w xY wr   )r   r   r   s    r   #_preserve_printed_relational_guardsz7GuardManagerWrapper._preserve_printed_relational_guards   sJ      ),&	3EEE-0UUD***SUUD*2222s	   0 Ac                \      fd fdfd  j                     j        S )Nc                v   |                                  j        v p|                                 dk    }t          |                                                                           D ]"\  }\  }}| |           |          z  z  }#|r,j                            |                                             |S Nr   )
get_sourcer   
fail_countsortedget_key_value_managersitemsadd)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@Q@QTU@U  ,2++--3355, , F F''gw #eeGnnuuW~~&EE""! ?'++DOO,=,=>>>%%r   c                B   t          | t                    rJ |                                 j        v p|                                 dk    }|                                 D ]}| |          z  }|r,j                            |                                            |S r   )
isinstancer   r   r   r   get_child_managersr   )r   r   	child_mgrr   r   s      r   visit_managerzEGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_manager   s    !$(899999 !!T%<<U@Q@QTU@U  "4466 7 7	"eeI&6&66""! ?'++DOO,=,=>>>%%r   c                b    | dS t          | t                    r |           S  |           S )NF)r   r   )r   r   r   s    r   r   z=GuardManagerWrapper.collect_diff_guard_sources.<locals>.visit
  sA    |u$ 011 0))$/// =&&&r   )r   r   )r   r   r   r   s   `@@@r   collect_diff_guard_sourcesz.GuardManagerWrapper.collect_diff_guard_sources   s}    	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	&	' 	' 	' 	' 	' 	' 	di&&r   c                V    |                                   |                                  d S r   )r   populate_diff_guard_managerr   s    r   finalizezGuardManagerWrapper.finalize  s,    '')))((*****r   c                    |                      | j                  | _        | j        r| j                                         d S d S r   )clone_with_chosen_sourcesr   r   r   update_diff_guard_root_managerr   s    r   r   z/GuardManagerWrapper.populate_diff_guard_manager  sM    #==d>UVV  	>;;=====	> 	>r   c                B    fd}| j                             |          S )Nc                0    |                                  v S r   )r   )node_mgrchosen_sourcess    r   	filter_fnz@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fn'  s    &&((N::r   )r   clone_manager)r   r   r   s    ` r   r   z-GuardManagerWrapper.clone_with_chosen_sources&  s4    	; 	; 	; 	; 	; y&&y111r   c                d    |j         j        |                                }fd|D             }|S )Nc                     g | ]
}d z   |z   S ):  ).0part
guard_names     r   
<listcomp>z7GuardManagerWrapper.get_guard_lines.<locals>.<listcomp>/  s#    <<<dd"T)<<<r   )	__class____name__r   )r   guardpartsr   s      @r   get_guard_linesz#GuardManagerWrapper.get_guard_lines,  s<    _-
((**<<<<e<<<r   c                j    |                                 }|j        j        }|dz   |z   }|r|d|z   z  }|S )Nz	: source=, )r   r   r   )r   guard_manageraccessor_strsourcetss         r   get_manager_linez$GuardManagerWrapper.get_manager_line2  sH    ))++#,Of$ 	%$$Ar   c                   t          |                                                                          D ]\  }\  }}|                    d|            |                                5  |rA|                    d|                     |                      |                     ||           |rA|                    d|                     |                      |                     ||           d d d            n# 1 swxY w Y   d S )NzKeyValueManager pair at index=zKeyManager: zValueManager: )r   r   r   	writelineindentr   construct_manager_string)r   mgrbodyr   r   r   s         r   construct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_string:  si   '-c.H.H.J.J.P.P.R.R'S'S 		A 		A#C#'7NNACAABBB A A ANN#R$2G2G2P2P#R#RSSS11'4@@@ ANN#TD4I4I'4R4R#T#TUUU11'4@@@A A A A A A A A A A A A A A A		A 		As   (BC;;C?	C?	c           
     ~   |                                 5  |                                D ]}t          |t          j        j        j        j                  rm|| j        vrC| j        	                    |           |
                    |                     |                     w|
                    |j        j        g           |
                    |                     |                     t          |t                    r|                     ||           t!          |                                |                                          D ]Y\  }}|                    |                     |d|                                                      |                     ||           Z	 d d d            d S # 1 swxY w Y   d S )Nzaccessed_by=)r   get_leaf_guardsr   torch_C_dynamor|   RelationalGuardr   r   
writelinesr   r   r   r   r   zipget_accessorsr   r   r   reprr   )r   r   r   r   accessorr   s         r   r   z,GuardManagerWrapper.construct_manager_stringF  s   [[]] 	? 	?,,.. A AeUX%5%<%LMM AD$BBB6::5AAA(<(<U(C(CDDDD % 8    OOD$8$8$?$?@@@@ #/00 >223=== (+!!##S%;%;%=%=( ( ? ?#) )))5UHMMOO5U5UVV   --i>>>>?)	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   FF22F69F6c                >   ddl m}  G d d|          }|                                 5   |            }d|_        |                    dd           |                    d	d           |                    d
           |                     | j        |           t          | j        d          rD| j                                        D ]*}|	                    | 
                    |                     +|                                cd d d            S # 1 swxY w Y   d S )Nr   IndentedBufferc                  &     e Zd Zd Zd fd	Z xZS )=GuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefixc                &    d| j         | j        z  z  S )Nz| )_indenttabwidthr   s    r   prefixzDGuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefix.prefixg  s    t|dm;<<r   Fc                    |r#t                                          |           d S t                                          d|z              d S )Nz+- )superr   )r   lineskip_prefixr   s      r   r   zGGuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefix.writelinej  sK     4GG%%d+++++GG%%edl33333r   F)r   
__module____qualname__r   r   __classcell__r   s   @r   IndentedBufferWithPrefixr   f  sL        = = =4 4 4 4 4 4 4 4 4 4r   r   r8    T)r   zTREE_GUARD_MANAGER:r   get_epilogue_lambda_guards)torch._inductor.utilsr   r   r   r   r   r   hasattrr   r   r   getvalue)r   r   r   r   r   s        r   __str__zGuardManagerWrapper.__str__c  s   888888	4 	4 	4 	4 	4~ 	4 	4 	4 5577 
	# 
	#++--DDMNN24N000NN0dNCCCNN-...))$)T:::ty">?? A!YAACC A AEOOD$8$8$?$?@@@@==??
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	#s   CDDDc                6    | j                             |          S r   )r   checkr   xs     r   r   zGuardManagerWrapper.check|  s    yq!!!r   c                6    | j                             |          S r   )r   check_verboser   s     r   r  z!GuardManagerWrapper.check_verbose  s    y&&q)))r   c                `     t                      d  fd  j                   d S )Nc                    g }|                                  D ]D}|                    d          d                                         }|                    |           E|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  sd    J%/%B%B%D%D - -!-33C88;BBDD	!!),,,,r   c                   |                                  D ]}t          |t          j        j        j        j                  r=|vr8j                             |                     	                    |           hj                             |                     | 
                                D ]} |           d S r   )r   r   r   r   r   r|   r   r   extendr   r   )r   r   r   r  relational_guards_seenr   r   s      r   r   zDGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.visit  s    ,,.. B BeUX%5%<%LMM B$:::..~~e/D/DEEE.225999O**>>%+@+@AAAA 3355 ! !	i    ! !r   )r   r   )r   r  r  r   s   `@@@r   !populate_code_parts_for_debuggingz5GuardManagerWrapper.populate_code_parts_for_debugging  sa    !$	 	 		! 	! 	! 	! 	! 	! 	! 	! 	dir   r   )r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r   r      s        @ @ @ @, 3 3 ^3/' /' /'b+ + +> > >2 2 2     
A 
A 
A? ? ?:# # #2" " "* * *    r   r   c                    t           j                                        5  t          | t          j        t          j        f          rt          j        |           n| cd d d            S # 1 swxY w Y   d S r   )r   	overrides_enable_torch_functionr   npgenericndarray	as_tensor)as    r   
from_numpyr    s     
	/	/	1	1 T T%/BJ
3K%L%LSuq!!!RST T T T T T T T T T T T T T T T T Ts   <A((A,/A,c                     dd l } dd l} | j        j        | j        j        g}ddlm} |                    |           d |D             S )Nr   )POLYFILLED_MODULESc                6    h | ]}t          j        |          S r   )inspectgetfile)r   ms     r   	<setcomp>z&uninteresting_files.<locals>.<setcomp>  s"    ---1GOA---r   )torch._dynamo.external_utilstorch._dynamo.polyfillsr   external_utils	polyfillstorch._dynamo.polyfills.loaderr  r  )r   modsr  s      r   uninteresting_filesr(    sg    ''''""""M(%-*ABDAAAAAAKK"###------r   z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t          dt          j        dt          d nt          j        dt!          d          dt"          j        dt&          j        j        dt&          j        t.          t&          j        t&          t2          da t           S )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                8    t                               ||           S r   )dict__contains__)r  bs     r   <lambda>z#_get_closure_vars.<locals>.<lambda>  s    T->->q!-D-D r   ___tuple_iterator_len___normalize_range_iter___tuple_iterator_getitem___dataclass_fields#___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__rq   r   rv   rr   ru   ri   rm   mathisnanr  float	importlibimport_moduler   utils_devicer@  r  _as_tensor_fullprecr  r   r   r   _get_closure_varsrN    s*   

|
  7 C
 I	

 |
  D D
 $%7
 &';
 ()?
 "#3
 23S
 DJ
 RZTTRX
 5<<
 Y4
  EK/!
" el#
$ (!5+
 
 
. r   r   ast.ASTreturnstrc                R    t          j        |                               dd          S )N
r   )astunparsereplace)r   s    r   _ast_unparserW    s"    ;t$$T2...r   r  r   r&   c                H   d}||j         rCt          |j                   D ]-}|j        t                      vrdt	          |d           } n.nN|j        rG|j                                        }t          |          dk    rdt	          |d                    }nd}| d| S )	Nr   z  # T)r   r   z  # <unknown>z<60)
user_stackreversedfilenamer(  r5   stacksummarylen)r  r   extrafsr^  s        r   get_verbose_code_partrb    s    E 
	(u/00  ;&9&;&;;;@<#>#>#>@@EE < [ 	(k))++G7||a:|GBK88::'$$U$$$r   r   Union[str | list[str]]	list[str]c                P    t          | t                    s| g} fd| D             S )Nc                0    g | ]}t          |          S r   )rb  )r   r  r   s     r   r   z*get_verbose_code_parts.<locals>.<listcomp>  s$    PPP	!)U33PPPr   )r   list)r   r   s    `r   get_verbose_code_partsrh    s8     j$'' " \
PPPPZPPPPr   Optional[int]c                    | d S t          |           s| S t          | t          j                  sJ | j                                        S r   )r1   r   r   SymIntr   maybe_as_int)dims    r   convert_int_to_concrete_valuesrn    sM    
{ts '
#u|,,,,,x$$&&&r   c                    d | D             S )Nc                ,    g | ]}t          |          S r   )rn  )r   rm  s     r   r   z.convert_to_concrete_values.<locals>.<listcomp>  s!    JJJC*3//JJJr   r   )size_or_strides    r   convert_to_concrete_valuesrr     s    JJ>JJJJr   c                    |t           j                                        z  t           j                                        z
  }| j        }| j        j        }| j        }	d| d|j         d| d| d| d|	 d| d| d}
|
S )Nzcheck_tensor(r   z	, device=z, requires_grad=z, size=z	, stride=))	r   r   _dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper@  indexrequires_gradr   )valuenamesizesstridespytypedispatch_keysdispatch_keyrw  device_indexry  	guard_strs              r   get_tensor_guard_code_partr    s    @@BBB00223L KE<%L'M	a 	a 	a 3 	a 	a| 	a 	au 	a 	a	a 	a0=	a 	aFK	a 	aV]	a 	a 	a  r   c                `    t          t          |                                         |          S r   )rg  rg   rx  )dctkeys     r   get_key_indexr    s)    
 !#&&''--c222r   c                    d|  d| dS )Nlist(dict.keys())[]r   )r   rx  s     r   get_key_index_sourcer    s    0V000000r   objr   r	   c                T    t          dt          |            d|  ddz   dz             )NType  for object  cannot be saved @into torch.compile() package since it's defined in local scope. @Please define the class at global scope (top level of a module).)	TypeErrortype)r  s    r   raise_local_type_errorr    sB    
=S		==s===
L	M
L	M  r   T)frozenc                  :    e Zd ZU dZded<   dZded<   dZded<   dS )NNModuleAttrAccessorInfoFboolpresent_in_generic_dictNOptional[str]l1_keyl2_key)r   r   r   r  __annotations__r  r  r   r   r   r  r  &  sL          %*)))) !F     !F      r   r  c                   | j                                         }t          | j        t                    r| j        j        }n,t          |t
                    sJ t          || j                  }t          ||          }t          t          |                    |         }t          |t          t          f          r	| d|d}	n| d| d}	t          | j        t                    sG|                    ||| j        t          j                                      | j        | d|g           |                    ||	||          S )N[r  rx  r   example_valueguard_manager_enum == )baser{  r   rx  rC   r2  r  r  rg  rg   intrQ  get_key_managerGuardManagerTypeGUARD_MANAGERadd_equals_match_guardget_value_manager)
r   base_guard_managerbase_example_valuer  r  base_source_namerx  
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerr  5  ss    {''))&, 233 @",d333330&,??%&6>>J ./ABBCCEJ#c3Z00 ;*CC->CCC*::Z:::fl$677 

 	** ,/=	 	+ 	
 	

 !
 LjCC.?CCD
 
 
 //#-	 0   r   c                    | j         }t          |t                    rdS |                                 rdS |                                ot          |t
                     S NFT)originating_sourcer   rT   is_specialized_nn_moduleis_dict_keyrP   )r   r   s     r   match_on_id_for_tensorr  ^  sa    %F &+,, u%%'' tF
6:(F(F$FFr   c                  $    e Zd ZU ded<   ded<   dS )GuardCodeListrd  	code_listr&   r   Nr   r   r   r  r   r   r   r  r  m  s%         LLLLLr   r  c                      e Zd ZdZdZdS )r  r8      N)r   r   r   r  DICT_GUARD_MANAGERr   r   r   r  r  s  s        Mr   r  codetypes.CodeTypec                T    t          t          t          |                               S r   )rg  r[  r   )r  s    r   &code_framelocals_names_reversed_cachedr  x  s!    /5566777r   c                     e Zd Z	 dWdXdZd Zd Zed             Zd Zd Z	d Z
d Zd Zd ZdYdZ	 	 dZd!ZdWd[d(Zd\d*Zd]d,ZdYd-ZdWd^d/Zd^d0ZdYd1Zd_d5ZdYd6ZdYd7ZdYd8ZdWdYd9ZdYd:ZdYd;ZdYd<ZdYd=ZdYd>Z dYd?Z!dWd`dAZ"dYdBZ#dYdCZ$dYdDZ%dYdEZ&dYdFZ'dG Z(dH Z)dI Z*dJ Z+dK Z,dL Z-dM Z.dN Z/dYdOZ0dYdPZ1dYdQZ2dYdRZ3dYdSZ4dYdTZ5dWdYdUZ6dWdVZ7dS )aGuardBuilderNf_coder  id_refCallable[[Any, str], str]
source_refCallable[[Source], str]lookup_weakrefs)Callable[[object], ReferenceType[object]]local_scopedict[str, object]r   r   r   check_fn_managerCheckFunctionManagerserialization_moder  c
           	     B   || _         || _        || _        || _        ||d| _        t
          j                                        | j        d<   t          j	        j
        j                                        D ]]\  }
}|
                    dd                              dd                              dd          }
|| j        d         |
<   || j        |
<   ^|| _        g | _        g | _        g | _        g | _        g | _        || _        t+                      | _        | j        j        j        D ]N}| j                            t5          |                     |                                                               Oi | _        i | _        t+                      | _        |	| _         d S )NLG__builtins__>_<._dot_)!r  r  r  r  scopebuiltins__dict__copyr   packagepackage_importer_package_imported_modulesr   rV  r   argnamesr  shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managersr  r   key_order_guarded_dict_idsoutput_graphguard_on_key_orderr   idgetr{  r   _cached_guard_managers_cached_duplicate_input_guardsr  )r   r  r  r  r  r  r   r   r  r  r{  package_moduler   s                r   r   zGuardBuilder.__init__~  s    $.9D<3X3X
%-%6%;%;%=%=
>" ]+EKKMM	. 	. 
<<S))11#s;;CCCQQD/=DJ~&t,-DJt*#%)+	
 46 46%LN.6F +.%%'+8K 	M 	MF+//488FKKMM3J3J0K0KLLLL
 BD
  	# EHEE+"4r   c                   |                      |          }t          |t                    rt          d|j                   |j                                        }t          |          D ]U}||         }t          |j        |          }|                     ||          }|	                    || d|d||           Vd S )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )rx  r  r  r  r   r  r  )
get_guard_managerr   r   NotImplementedErrorr{  r  rg   rF   get_guard_manager_typedict_getitem_manager)	r   r  r   dict_mgrdict_sourcer  rz  r  r  s	            r   #guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_order  s   ))%00h 011 	%SFKjS S   .3355 %]33 	 	C!#&E,U-ESQQQL!%!<!<m" " ))%00000##5	 *    	 	r   c                ^   |                      |          }t          |t                    st          d|j                   t          |t                    sJ t          t          |                    D ]\  }}t          |j        |          }|                    |||t          j
                  }t          |          rB|                     ||          }|                    |t          d| d| d|                     |                    |t          | d||                     d S )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r  z__check_obj_id(r   rt  r  )r  r   r   r  r{  	enumeraterg   r  r  r  r  rp   r  add_id_match_guardrh  r  )	r   rz  r   r  r   r  r  key_managerid_vals	            r   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_order  s{    ))%00($455 	%H;@:H H   ($455555 ""3E":":;; 	 	HC-ej#>>J"22!!#3#A	 3  K ~~ S*55..*A*AAAAA5     22/:0J0J30J0JERR   '	 	r   c                    t           j        r<t          j        dk    r,t          j        dk     rt	          j        dt                     d S | S )N)      )r   r  r8   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)r9   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_value  sR     '		 G++ :--M_   4r   c                0   d }|j         }	|j        }
t                      }t          j        |j                  D ].}|                    |j                                                   /t          ddd          }|	|
v rt          d|	d          }ncd|
v r|	|
d         v rt          dd|	          }nCd|
v r|	|
d         v rt          dd|	          }n#|	|vrd|
v r|	|
d         v rt          dd|	          }|j	        s|
                    |j         |||          S |j        sJ |j        }|j        }| d	}dx}}dx}}dx}}|rbt          |j        |          }|                                }|
|         }|                     ||          }|}|}|                     ||          }n|}|}|                     ||          }|                    ||                     |
          t&          j        
          } |||||
||          }|r |||||||          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                    rot          ||          }d| d|d}|                     |||t          j                                      || d|g           |                     ||||          S |                     ||||          S )Nr  r  r  r  r  r  )	r   r   r  r  r  r  r  r  r  )r   r  source_namer  r  r  rx  r  s           r   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr.  s     #/00  &&8#>> J{IIuIII
##%"%'7'E	 $  
 )(*/I/I#/I/I.JKKK ,,&"/'9	 -    //&"/'9	 0   r   FNT_parameters_buffers_modulesattrr   r  r  	.__dict__r   r  r  )r   r  r  r  r  r  )memberr  r   r  getmror   updatekeysr  r  getattr_managerr  r  r>   r  r{  r  get_generic_dict_managerr  r  r  )r   r   r  r  r  r  r  r  r  	attr_namemod_dictall_class_attribute_namesr   accessor_infor  r  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_modulez!GuardBuilder.getattr_on_nn_module  s   6	 	 	@ M	%..1ee! 2 <== 	@ 	@A%,,QZ__->->????0dCC  4T9dKKMMh&&98O+O+O4T=)TTMM8##	Xj5I(I(I4T:yQQMM666h&&Xj111 5T:yQQM4 A	 &55]"+#5	 6    !''''")F")F "2<<<O.22N^"&&Hx<@@!$9 &v{F;;	!*!1!1#F+ )-(C(CIx(X(X%!,((,(C(CM) )%% "-((,(C(CM) )% (:'R'R&"JJ8TT#3#A (S ( ($ )(,*#+&#8  F  ** .'/"*'<    Mr   c                    |                                 }|dk    rdS t          |                     |                    }|| j        v S )Nr   F)r{  r  r  r  )r   r   r  obj_ids       r   requires_key_order_guardingz(GuardBuilder.requires_key_order_guarding  sF    kkmm"5DHH[))**888r   c                    t           j        }|                     |          rEt          |t                    rt           j        }n#t          |t                    sJ t           j        }|S r   )r  r  r+  r   rj   r  r2  )r   r   r  r  s       r   r  z#GuardBuilder.get_guard_manager_type  sf    -;++F33 	I-33 I%5%H""!-66666%5%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        d         d| j        d         t          j                  S )Nr  )	f_globalsr   r  r  )r   r   globals_dict_managerr  r  r  r   s    r   get_global_guard_managerz%GuardBuilder.get_global_guard_manager  s@    !&;;jo*S//=	 < 
 
 	
r   c           	     <   | j         j        }d }                                }|dk    r|| j        v r| j        |         S |dk    r|                     |          }|                     |          }d }d }d }t          j        }	t          t                    rcj
                                        }|                     |          }|                     j
                  }|                     j
        |          }	t          t                    rct          | j                  }
t!          |
          |
                    j                  z
  dz
  }|                    j        |f|||          }nt          t(                    r2|                                                     j        |||          }nFt          t0                    r2|                                                     j        |||          }nt          t4                    r|S t          t6                    r|S t          t8                    r|sJ |                    |||          }nt          t<          t>          t@          tB          tD          f          r|sJ |}nht          tF                    r|$                    fd|||          }n5t          tJ                    r|sJ |&                    |||          }nt          tN                    r$|sJ |(                    j)        |||          }nt          tT          tV          f          rv|sJ t          |tX          j-        j.                  r3t_          |          t`          u r| 1                    ||||||          }nW|2                    j)        |||          }n7t          tf          th          f          r|sJ t          |tj          tl          j7        f          sJ t          |tp                    r,| 9                    |	          sJ tu          ||||          }nt          j        tv                    rty          d	          |                    j        |||          }njt          tz                    rD t}          |d
j?        j        @                                 d          jA        |||          }nt          t                    r$|sJ |C                    jA        |||          }nt          t                    r$|sJ |E                    j        |||          }nt          t                    r|sJ t          |tj          tl          j7        f          r
J d            t          |t                    r'jH        s |E                    j        |||          }nt          |t                    r'jH        s |J                    j        |||          }nj        }jH        rK                                }|L                    ||||          }nt          t                    r|sJ t          |          sJ jO        sE|P                    ||jQ        t          j                  L                    jR        |||          }n0|jS        }|J |dz   }|T                    ||t          j                  }t          |tp                    rJ |                    jR        |||          }nt          t                    r$|sJ |$                    t          |||          }nt          t                    r |sJ |$                    d |||          }nYt          t                    r |sJ |$                    d |||          }n$t          t                    r |sJ |$                    d |||          }nt          t                    r |sJ |$                    d |||          }nt          t                    r |sJ |$                    d |||          }nt          t                    r |sJ |$                    d |||          }nPt          t                    r$|sJ |^                    j        |||          }nt          tv                    rCt          |tp                    st          d          |`                    j        |||          }nt          t                    r|sJ |b                    |||          }nt          t                    r|sJ |d                    |||          }n[t          t                    r|sJ |$                    d |||          }n't          d d                                           || j                                        <   |S )Nr   r8   r  )global_namer   r  r  r  c                F    t                                                    S r   )rm   
_get_index)r  r   s    r   r5  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>"  s!    (H%%'') ) r   )python_lambdar   r  r  r  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_ordertensor_property__manager)r   r   r  r  zUse DictGetItemSourcez.__kwdefaults__c                6    |                                  d         S r   __tensor_flatten__r   s    r   r5  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (<(<(>(>q(A r   c                *    |                                  S r   )__obj_flatten__r>  s    r   r5  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (9(9(;(; r   c                N    |                                                                  S r   )_typequalified_namer>  s    r   r5  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    		(@(@(B(B r   c                *    |                                  S r   )get_baser>  s    r   r5  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    

 r   c                *    |                                  S r   )itemr>  s    r   r5  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s     r   c                *    t          j        |           S r   )r   rM  r>  s    r   r5  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (A!(D(D r   r  z4ConstDictKeySource can only work on DictGuardManagerc                     t          |           S r   )ri   r>  s    r   r5  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (8(;(; r   zmissing guard manager builder z - )fr   r   r{  r  r  r  r  r  r   rA   r  get_guard_manager_from_sourcero   rR   r  r  r_  rx  
local_nameframelocals_managerrM   r3  r  r5  rO   global_weakref_managerrN   rW   r[   type_managerrU   rS   r]   r\   rJ   rY   lambda_managerrP   grad_managerrK   generic_getattr_managerr  r>   r^   r   nnModulerk   rw   r(  r  rF   rG   r2  rC  rD  r   r/  r  rC   RuntimeErrorr    getattrproplowerr   r   indexed_managerrQ   list_getitem_managerrL   rg  index_is_slicetupletuple_getitem_managerunpack_slicegetitem_managerrE   callableis_kwfunc_defaults_manager__defaults__idx_key__kwdefaults__func_kwdefaults_managerrT   r  rX   rH   rV   r=   r@   rI   rZ   tuple_iterator_getitem_managerAssertionErrorr  r_   weakref_call_managerr?   call_function_no_args_managerrD   )r   r   root_guard_managerr  r  r  r  r  r  base_guard_manager_enumframelocals_names_reversedframelocals_idxoutrx  
kwdefaults	kw_sourcer  s    `               r   rJ  z*GuardBuilder.get_guard_manager_from_source  s   !/4kkmm"0K!K!K.{;;" HH[11M!88OO  !!"2"@fm,, 	%{//11!%*:!;!;!%!C!CFK!P!P&*&A&A/' '#
 &+&& E	 *P* *& .//,2263DEEF 
 %88&8"+#5	 9  CC FL)) p	 //11FF&"+#5	 G  CC F/00 f	//11HH"."+#5	 I  CC F-.. _	 &%FN++ [	%%FJ'' Y	%%%%$11"+#5 2  CC
 +2"	
 	
 R	 &%%%$CCF899 F	$33    #+#5 4  CC FJ'' }	%%%%$11"+#5 2  CC
 F-.. v	%%%%$<<]"+#5	 =  CC FZ)GHII n	%%%% -ux??&'9::./ / //&&!$&  )88&"/'9	 9   F.0IJKK V	%%%%049P2QRRRRR,.>?? 223JKKKKK-&&!&  fl,>?? &8   )==&"/'9	 >   F011 ~	'"E6;#3#9#9#;#;EEE  J"+#5  CC FM** t	%%%%$44J"+#5	 5  CC F-.. k	%%%%$99L"+#5	 :  CC FM** c	%%%%!"T;+B$C  ' '&' ' ' ,d33 F<Q (==&"/'9	 >   .66 v?T (>>&"/'9	 ?   ( 2"//11E(88&"/'9	 9   FN++ F	%%%%./////< (>>+"4"A'7'E ?   "/&"/'9	 "  	  0>
'333,/@@	 .EE$",'7'E F  
 &h0@AAAAA33&"/'9	 4   F-.. d	%%%%$33("+#5	 4  CC F233 \	%%%%$33AA"+#5	 4  CC F566 T	%%%%$33;;"+#5	 4  CC F;<< L	%%%%$33BB"+#5	 4  CC FO,, D	%%%%$3344"+#5	 4  CC F011 <	%%%%$3300"+#5	 4  CC F-.. 4	%%%%$33DD"+#5	 4  CC F677 ,	%%%%$CCl"+#5	 D  CC  233 $	02BCC $J   %44l"+#5	 5  CC F-.. 	%%%%$99"+#5 :  CC
 F455 	%%%%$BB"+#5 C  CC
 F122 	%%%%$33;;"+#5	 4  CC !KKKFKKMMKK   69#FKKMM2
r   r   r&   c                6    |                      |j                  S r   )rJ  r  r   r   s     r   r  zGuardBuilder.get_guard_manager+  s    11%2JKKKr   Tc                   |t                      }d                    |                                          }t          ||          \  }}i }d| j        d         i}	t
                              d|           t          ||	|            |d         |                                 }
|r"| j	        j
                            |
|           d S | j	        j
                            |
|           d S )Nr   r  zPython shape guard function:
%s___make_guard_fn)rN  joinr  build_guard_functionr  
guards_logdebugexecvaluesr   r   add_epilogue_lambda_guardadd_lambda_guard)r   r   r   r   is_epiloguemake_guard_fn_args_guard_bodypycodern  globals_for_guard_fnguard_fns              r   $add_python_lambda_leaf_guard_to_rootz1GuardBuilder.add_python_lambda_leaf_guard_to_root.  s    ,..L "YY|'8'8':':;;2:?QRRV  #TZ_5;VDDDV)3///*3)*L,?,?,A,AB 	S #==,     #44X?QRRRRRr   r{  rQ  r   Optional[dict[str, Any]]rP  r   c                N    |t                      }t          || j        |          S r   )rN  evalr  )r   r{  r   s      r   r  zGuardBuilder.getQ  s'    ,..LD$*l333r   Union[str, Guard]c                6   t          |t                    r|}n|j        }t          |          }|| j        vrat
          j        j                            |          }|r;|dk    rt          
                    d|           | j                            |           |S )Nr  zinvalid var name: %s)r   rQ  r{  strip_function_callr  r   r   r   is_valid_var_namelogwarningr  )r   r   r{  r  is_valids        r   arg_refzGuardBuilder.arg_ref[  s    eS!! 	DD:D"4((t}$$x'99$??H +q==KK 6>>>$$T***r   r  c                    t          |j        |          }t          |||j        |j                  }|                    |            d S )N)r]  rZ  )r>   r  r&   r]  rZ  create)r   r   r  r  attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attributek  sR     !99EEAQ
 
 
	 	r   c           	        |j         }t          |t                    r|j        }t          |t                    sJ d|j                     |j        }|                                }|j        }|                     |          }t          | 	                    |          |          }d }|r
d| d|d}n	d| d|d}| 
                    ||g| 	                    |                     |                     |          }	|r| 	                    |                                          }
| 	                    |          }|                     ||
          }t          |t          j        j                  rCt!          |          t"          u r-|                     ||	||
||                                |          S |	                    ||j        |
|           d S |	                    |t+          ||                     d S )Nzinvalid source hasattr(r   rt  znot hasattr()provided_guarded_objectr  )r  r   rS   r  r>   r{  r  r  r   r  _set_guard_export_inforJ  r  r   rR  rS  rk   rw   r(  r  add_no_hasattr_guardrh  )r   r   r   base_sourcer  r  refvalr  base_managerr  r  r  s                r   HASATTRzGuardBuilder.HASATTRt  s-   )fn-- 	![F&*--MM/M/M/MMMMk!!}ll4  dhhtnnd++ 	3.c..T...DD2#22222D##D6488D>> 	$ 	
 	
 	
 99+FF 	Y !HHV[[]]33M!%$!%!<!<V]!S!S
 -ux??&'9::./ / 00 &!KKMM&   ,, :"/'9	 -      --d4J4QV4W4WXXXXXr   Nonec                   |J |                      |          }|                     |j                  }t          |t          j        j                  sJ |                     |          }|j         d}|                    || 	                    |j
                  t          j                  }d|d| d}|                    d|t          ||                     d S )Nr  r  znot ___dict_contains(r   z
.__dict__)F)r  r  r{  r   r   rR  rS  r  r  r  r  r  r  add_dict_contains_guardrh  )	r   r   r  r  r  r  r  r&  r  s	            r   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT  s    ll5!!hhuz""#ux/////--e44"Z222#/#H#H"FFs|TT/= $I $
 $
  At@@@@@ 884/e<<	
 	
 	
 	
 	
r   c                   |                      |j                  }t          |t          j        j                  r|j        r|j        }nt          |          }| j        dk    r|j	        |j
        k    rt          |           |                     |d|j         d          }d|                     |           d| d}|                     ||g           |                     |                              |t#          ||                     d S )Nsavetype(rt  z___check_type_id(r   )r  r{  r   r   _subclasses
FakeTensorr~  r  r  r   r   r  r  r  r  r  add_type_match_guardrh  )r   r   rz  r   r*  r  s         r   
TYPE_MATCHzGuardBuilder.TYPE_MATCH  s   $$eU.9:: 	u| 	AAUA"f,,~++&u---Q 5
 5 5 566C4<<#6#6CC&CCC##ED6222u%%::*477	
 	
 	
 	
 	
r   c                   | j         dk    r$t          j        j                            d          |                     |          }|                     |j                  }t          |                     |j                            }d| d| }| 	                    ||g           | 
                    |                              |t          ||                     d S )Nr  z(DICT_VERSION guard cannot be serialized.z___dict_version() == )r  r   r   r;   PackageErrorr  r  r{  r   r  r  add_dict_version_guardrh  )r   r   r  r  versionr  s         r   DICT_VERSIONzGuardBuilder.DICT_VERSION  s    "f,,-#00:   ll5!!hhuz""txx
33445#55G55##ED6222 	u%%<<'e44	
 	
 	
 	
 	
r   r  invertr  c                    |                      |          }|rdnd}| d|d| d}|                     ||g           |                     |                              | |t	          ||                     d S )Nnot r   z___dict_contains(r   rt  )r  r  r  r  rh  )r   r   r  r  dict_ref	maybe_notr  s          r   DICT_CONTAINSzGuardBuilder.DICT_CONTAINS  s    <<&&$,FF"	BBcBBxBBB##ED6222u%%==J3D%@@	
 	
 	
 	
 	
r   c                   |                      |          }|                     |j                  }t          |t                    sJ | d|g}|                     ||           |r8|                     |                              t          ||                     d S |                     |          	                    t          ||                     d S )Nr  )
r  r  r{  ro   r  r  r  add_true_match_guardrh  add_false_match_guardr   r   r  r  r  s        r   
BOOL_MATCHzGuardBuilder.BOOL_MATCH  s    ll5!!hhuz""c4     ##C##$##E4000 	""5))>>&tU33     ""5))??&tU33    r   c                   |                      |          }|                     |j                  }|J | dg}|                     ||           |                     |                              t          ||                     d S )Nz is None)r  r  r{  r  r  add_none_match_guardrh  r  s        r   
NONE_MATCHzGuardBuilder.NONE_MATCH   s    ll5!!hhuz""{{{   !##E4000u%%::"4//	
 	
 	
 	
 	
r   c                    | j         dk    r$t          j        j                            d          t          |j        t                    r7|                     t          |j        j
        t          j                            S |                     |          }|                     |j                  }|                     ||j                  }d| d| d}|                     ||g           |                     |                              |t'          ||                     t          |j        t(                    rNt          |t          j        j                  r1|j        j        }|                     |          }||| j        |<   d S d S d S d S )Nr  z$ID_MATCH guard cannot be serialized.z___check_obj_id(r   rt  )r  r   r   r;   r  r   r  r[   r  r&   r  r  r  r  r{  r  r  r  r  rh  rR   rR  rS  rK  r  r   )r   r   r  r  r  r  rK  weak_ids           r   ID_MATCHzGuardBuilder.ID_MATCH  s   "f,,-#001WXXXe.
;; 	??e.3\5LMM   ll5!!hhuz""S%*--2#22222##ED6222u%%88*477	
 	
 	
 e.<< 	? #ux// ?"5@
..s33&7>D(444	? 	?? ? '&r   c                @   |                      |          }|                     |j                  }t          |t          j                  sJ | d}|                     ||g           |                     |                              t          ||                     d S )N is not None)
r  r  r{  r   r   Tensorr  r  add_not_none_guardrh  )r   r   rz  r  r  r  s         r   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH,  s    ll5!!hhuz""#u|,,,,,#####ED6222u%%88"4//	
 	
 	
 	
 	
r   c                $   |                      |          }|                     |j                  }t          |t          j        j                  sJ | d|d}|                     |                              |t          ||                     d S )Nz.raw_repr() == z.raw_repr())
r  r  r{  r   r   r   DispatchKeySetr  add_dispatch_key_set_guardrh  )r   r   r  r  r   s        r   DISPATCH_KEY_SET_MATCHz#GuardBuilder.DISPATCH_KEY_SET_MATCH7  s    ll5!!hhuz""#ux677777>>C>>>
u%%@@'
E::	
 	
 	
 	
 	
r   c                H    |                      |dt          j                   d S )Nr   )r  r  EQUALS_MATCHrr  s     r   
NAME_MATCHzGuardBuilder.NAME_MATCHA  s#      
L4MNNNNNr   c                    | j         j        j        d g}|                     ||g           t          j        j        fd}| j        j        	                    |t          ||                     d S )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>.fnM  s    ,
::r   )r  r  r  r  r   autogradr  r   r   r|  rh  )r   r   r  r  r  r  s       @@r   
DUAL_LEVELzGuardBuilder.DUAL_LEVELD  s     *7B
KzKKL##ED6222^.
	; 	; 	; 	; 	; 	; 	00&tU33	
 	
 	
 	
 	
r   c                   | j         j        j        }d |D             d dg}|                     ||           t          j        j        j        fd}| j        j	        
                    |t          ||                     d S )Nc                6    g | ]}|                                 S r   )	get_state)r   cis     r   r   z6GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.<listcomp>X  s     ///R",,..///r   z5torch._functorch.pyfunctorch.compare_functorch_state(rt  c                               S r   r   )r   
compare_fnstatess    r   r  z.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn_  s    :f%%%r   )r  r  functorch_layersr  r   
_functorchpyfunctorchcompare_functorch_stater   r   r|  rh  )r   r   cisr  r  r  r  s        @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCHT  s     #0A//3///QQQQR##E4000 %1I
	& 	& 	& 	& 	& 	& 	00&tU33	
 	
 	
 	
 	
r   c                L   t           j        j        j        j        t           j        j        j        j        fd                        d g}|                     ||           fd}| j        j        	                    |t          ||                     d S )Nc                l     |           sd S | \  }}t          t          t          |                     S r   )r[  mapr  )hooks	pack_hookunpack_hookare_inline_hookss      r   hooks_ids_fnz?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fnl  s;    ##E** t%*"I{R(((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == c                2                            k    S r   r   )r   	get_hooksguard_hooks_idsr  s    r   r  z5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fnz  s    "ll99;;&?&???r   )r   r  _aot_autogradrK  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineabler  r   r   r|  rh  )r   r   r  r  r  r  r  r  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKSz)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKSf  s    $28P	*0S 		) 	) 	) 	) 	) ',yy{{33 dRacc
 	##E4000	@ 	@ 	@ 	@ 	@ 	@ 	@ 	00&tU33	
 	
 	
 	
 	
r   c                   |                      |j                  t          |                      |j                                                  d                   t	          d          rt                     fd}nfd}dt          |           dt          j                     }| 	                    |          
                    |t          ||                     d S )Nr8   __metadata_guard__c                `                         |                                 d                   S Nr8   )r  r=  )r   original_metadatarz  s    r   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s1    //%q';';'='=a'@  r   c                @    |                                  d         k    S r  r<  )r   r  s    r   r  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s     ++--a04EEEr   ___check_metadata__c)r  r{  r   r=  r   rx   r  r#   current_compile_idr  r|  rh  )r   r   r  r5  r  rz  s       @@r   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH  s   $$$TXXej%9%9%L%L%N%Nq%QRR5.// 	F%e,,,      F F F F F i2.>+?+?hh>CdCfCfhhu%%664[%HH	
 	
 	
 	
 	
r   recompile_hintc                @   |                      |          }|                     |j                  }t          r|t          j        t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        f}nd}t          t           f}t#          t$          t&          t"          t(          t*          t,          t.          t0          j        h||z            }t0          j                                        rddlm} ddlm}	m }
m!}m"} ||||
||	fz   }ddl#m$} ||fz   }dd l%m&c m'} tQ          ||          s7 |j)        t'          |                    sJ dt'          |                       tQ          |tT                    rtW          j,        |          r| -                    |           g }|.                    d| d           | /                    ||           | 0                    |          1                    te                      d	         tg          ||                     d S tQ          |th                    rt          j,        |          r| -                    |           g }|.                    d
| d           | /                    ||           | 0                    |          1                    te                      d         tg          ||                     d S | d|g}tQ          ||          rtk          |          }tg          ||          }rfd|D             }| 0                    |          6                    ||           | /                    ||           d S )Nr   r   )
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z__math_isnan(rt  r;  z__numpy_isnan(r<  r  c                     g | ]
}| d  dS )z (HINT: rt  r   )r   r   r  s     r   r   z-GuardBuilder.EQUALS_MATCH.<locals>.<listcomp>  s7     " " "7;422222" " "r   )7r  r  r{  r  int8int16int32int64uint8uint16uint32uint64float16float32float64rg  r   r[  rh   r  	frozensetslicerangerj   r   Sizedistributedis_availabletorch.distributed.device_meshr  (torch.distributed.tensor.placement_typesr  r  r   r  torch.export.dynamic_shapesr  torch.utils._pytreerK  r3   ro   is_constant_classrH  rF  rG  r  r  r  r  r|  rN  rh  complexr   r  )r   r   r  r  r  np_typesok_mutable_typesok_typesr  r  r  r   r  r  pytreer  r   s     `              r   r  zGuardBuilder.EQUALS_MATCH  s   ll5!!hhuz"" 				


/HH H #;!

 
 "

 
 ))++ 	@@@@@@             # H 	<;;;;;{n,,,,,,,,,,c8$$ 	
(@(@c(K(K 	
 	
*tCyy**	
 	
 	

 #u 
	$*S// 
	OOE"""DKK....///''t444""5))::!##N3&tU33   F #w 
	BHSMM 
	OOE"""DKK////000''t444""5))::!##O4&tU33   F ##C##$#'(( 	  3--C3D%@@ 	" " " "?Q" " " 	u%%<<SBTUUU##E4000r   c                P   |                      |j                  }t          |t                    r|                     |           d S ||                     |           d S t          |t          j                  r|                     |           d S | 	                    |           d S r   )
r  r{  ro   r  r  r  typesCodeTyper  r  r   r   r  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCH  s    hhuz""#t 	%OOE"""""[OOE"""""C(( 	%MM%     e$$$$$r   c                   | j         dk    r$t          j        j                            d          |                     |           |                     |j                  }t          |d          r?t          |j
        t                    sJ |                     |dt          j                   d S t          j        dddt!          |           ddg	           d S )
Nr  z%NN_MODULE guard cannot be serialized.trainingz-Attempted to guard on uninitialized nn.Moduler   zKAttempted to setup an NN_MODULE guard on uninitialized nn.Module subclass `z`.zIEnsure the `nn.Module` subclass instance has called `super().__init__()`.)gb_typecontextexplanationhints)r  r   r   r;   r  r  r  r{  r   ro   r%  r  r  r  r#  unimplemented_v2r  r"  s      r   	NN_MODULEzGuardBuilder.NN_MODULE  s    "f,,-#007   	ehhuz""3
## 	#,-----$$UJ8STTTTT G5'+Cyy5 5 5 `     r   c                    | j         dk    r$t          j        j                            d          |                     |          S )z0things like torch.add and user defined functionsr  z*FUNCTION_MATCH guard cannot be serialized.)r  r   r   r;   r  r  rr  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH#  sF     "f,,-#00<   }}U###r   c                   | j         dk    r$t          j        j                            d          |                     |j                  }t          |          t          j	        k    rTt          |d          rD|                     |dt          j                   |                     |dt          j                   dS |                     |           dS )z!matches a closure by __code__ id.r  z)CLOSURE_MATCH guard cannot be serialized.__code__N)r  r   r   r;   r  r  r{  r  r   FunctionTyper   r  r  r  r-  r"  s      r   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH,  s     "f,,-#00;   hhuz""99***wsJ/G/G*$$UJ8LMMM$$UJ8STTTTT&&&&&r   c                ,    |                      |          S r   )r-  rr  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCH;  s    ""5)))r   c                   |                      |          }|                     |j                  }t          |t                    s|                     |           g }t          |          dk    r|                    d|            n(|                    d| dt          |                      |                     ||           t          |t                    rF| 	                    |          
                    t          |          t          ||                     d S | 	                    |                              t          |          t          ||                     d S )Nr   r  zlen(r  )r  r  r{  r   r2  r  r_  r  r  r  add_dict_length_check_guardrh  add_length_check_guardr   r   r  rz  r  s        r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTH>  sZ    ll5!!$$%&& 	#OOE"""u::??KKs%%%%KK5s55U55666##E4000eT"" 	""5))EEE

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

24??    r   c                   |                      |          }|                     |j                  }t          |          }g }|                    d| dt          |                      |                     ||           t          |          }|                     |d|j         d          }|                     |          	                    t          |          |t          ||                     d S )Nz___tuple_iterator_len(r  r  rt  )r  r  r{  r  r  rv   r  r  r  add_tuple_iterator_length_guardrh  )r   r   r  rz  r   r  r*  s          r   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LENX  s    ll5!!$$KKRSRR7I%7P7PRRSSS##E4000KKQ 5
 5 5 566u%%EEu%%v/EdE/R/R	
 	
 	
 	
 	
r   c           
        |                      |          }|                     |j                  }t          |          }g }t	          |          }|                    d| d|            |                     ||           t          |          }|                     |d|j         d          }|\  }}	}
|                     |          	                    ||	|
|t          ||                     d S )Nz___normalize_range_iter(r  r  rt  )r  r  r{  r  rr   r  r  r  r  add_range_iterator_match_guardrh  )r   r   r  rz  r   r  normalized_range_iterr*  startstopsteps              r   RANGE_ITERATOR_MATCHz!GuardBuilder.RANGE_ITERATOR_MATCHh  s    ll5!!$$KK 4U ; ;PsPP9NPPQQQ##E4000KKQ 5
 5 5 5661tTu%%DD4v'=dE'J'J	
 	
 	
 	
 	
r   c                z   | j         dk    r$t          j        j                            d          |                     |          }|                     |                                          }t          |j                  st          |          rd S ||f}|| j	        v rd S | j	        
                    ||f           | j	        
                    ||f           | d| g}|                     ||           t          |                     |          |                     |          t          ||                     d S )Nr  z/DUPLICATE_INPUT guard cannot be serialized yet. is )r  r   r   r;   r  r  r{  r   r  r  r   r  r   r  rJ  rh  )r   r   source_bref_aref_br  r  s          r   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT{  sV   "f,,-#00A   U##X]]__--#$
 
 	%h//	 F en$555F+//???+//???%%e%%&##E4000%""5))..x88"4//	
 	
 	
 	
 	
r   c                .   | j         dk    r$t          j        j                            d          |                     |           dg}|                     ||           |                     |                              t          ||                     d S )Nr  z)WEAKREF_ALIVE guard cannot be serialized.r  )
r  r   r   r;   r  r  r  r  r  rh  r   r   r  s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE  s    "f,,-#00;   <<&&4445##E4000u%%88"4//	
 	
 	
 	
 	
r   c           	     Z   |                      |          }|                     |j                  }g }|                    d| dt	          |                                                      |                     ||           |                     |                              ||           dS )z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	r  r  r{  r  rg  r  r  r  add_mapping_keys_guardr7  s        r   MAPPING_KEYS_CHECKzGuardBuilder.MAPPING_KEYS_CHECK  s    ll5!!$$ACAAT%**,,-?-?AABBB##E4000u%%<<UDIIIIIr   c           
        |                      |          }|                     |j                  }|t          j        j        j        u r|                     |           dS |                     |           g }|	                    d| dt          t          |                               |                     ||           |                     |j                  r|                     ||           dS |                     ||           dS )z6Insert guard to check that the keys of a dict are sameNr  z)) == )r  r  r{  r   rK  r3   SUPPORTED_NODESr  r8  r  rg  rg   r  r+  r  r  r  r7  s        r   DICT_KEYS_MATCHzGuardBuilder.DICT_KEYS_MATCH  s	   ll5!!$$EK'777e$$$FU###
 	ScSS6G6N6N1O1OSSTTT##E4000++E,DEE 	C--eU;;;;;44UEBBBBBr   c                L    t           j        rdS |                     |           dS )z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)r9   skip_nnmodule_hook_guardsr8  rr  s     r   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s,    + 	FU#####r   c                    d S r   r   rr  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODE      r   c                    d S r   r   rr  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS  rW  r   c                    d S r   r   rr  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE  rW  r   c                    d S r   r   rr  s     r   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE  rW  r   c                    |j         t          j        u sJ d| j        j        j        g}|                     ||           |                     |                              t          ||                     dS )z/Guard on CURRENT_DEVICE per torch.utils._devicezutils_device.CURRENT_DEVICE == N)
r   r)   GLOBALr  r  current_devicer  r  add_default_device_guardrh  rJ  s      r   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE  s    |{11111 dd.C.P._cc
 	##E4000u%%>>"4//	
 	
 	
 	
 	
r   c                
   "#$% |j         dk    sJ  j        j        % j        dk    r? j        j        J  j        j        }|j        }|j        }|j        |j        }|j        }nP%j	        #d #D             $%fd}%j
        ri }g }	g }
i }t                      }%j
        D ][}|j        %j        v r1t          j        j                            ||%j        ||	|
||           At&                              d           \t+          |	|
t-          |                                          |d          "nd ""#$% fd}t0          j        r3	  |d	          \  }}}d}n0# t4          $ r d
} |d          \  }}Y nw xY wd
} |d          \  }} j        j        j        s%j                                          j        dk    rt9                                          d          }|t=          |t>                    sJ |g n%t-          |j         !                                          }tE          |||||           j        _        |j#        D ]} $                    ||g           tK          j&                    x}r|j'        (                    |j#                   g }g }|s|sJ |j#        |j         }}|sd S |)                                D ]\  }}t=          |tT                    rd
}                     |                                 i tV          tY                                }t=          |tZ                    r|.                    ||f           t=          |t^                    r|.                    ||f           d
}|sdd l0}ddl1m2} |sJ |j#        |j         }}tg          ||z             }	  fdti          |          D             }d5                    d ti          |          D                       }d5                    d ti          |          D                       }|rd| d}|rd| d}tm          j7        d| d| dd5                    |           d          }tp          9                    d||j#                   |:                    |          } |;                    | j<        |j=                  j>        }!|!sJ 	 t          |t          |          t          |          |!| |j#                   d S # t          jA        jB        jC        $ r Y nw xY w|j#        r9 D                    |j#        |j#        i tV          tY                                 d S d S )Nr   loadc                    g | ]	}|j         
S r   )symbolic_contextr   r  s     r   r   z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>  s    ===Qa0===r   c                8    fdj         |          D             S )Nc                F    g | ]}t          |t          j                  S r   )r    r   SIZE)r   r   rm  s     r   r   z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>  s8        )1DcJJ  r   )tracked_fakes_id_to_source)t_idrm  r  s    `r   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources  s7       "."I$"O   r   z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlyc           	         j                             d D             d D             j        j        j        j         |           S )Nc                    g | ]	}|j         
S r   )fakerg  s     r   r   zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>%  s    (((QV(((r   c                    g | ]	}|j         
S r   )r   rg  s     r   r   zCGuardBuilder.SHAPE_ENV.<locals>._get_code_parts.<locals>.<listcomp>&  s    ***!QX***r   )input_contextsequalities_inputsr  ignore_staticlangs)	shape_envproduce_guards_verboser  r  r  export)rz  rx  ra  rw  r  r   s    r   _get_code_partsz/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts#  sc    #-DD((R(((**r***#1&7#'+'<'I'P#P E 	 	 	r   )pythonverbose_pythoncppT)r  r  r  cpp_code_parts)python_code_partsr   r  python_fallbackshape_env_sources)r   r   )CppCodeCachec                \    g | ](\  }}                     t          ||                    )S r   )rJ  r   )r   ir   r   s      r   r   z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>  sE     " " "!6 66}VQ7O7OPP" " "r   r   c              3  2   K   | ]\  }\  }}| d | dV  dS )z = int_values[r  Nr   r   r  r  symbols       r   	<genexpr>z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  sO       , ,&;Av 11Q111, , , , , ,r   c              3  2   K   | ]\  }\  }}| d | dV  dS )z = float_values[r  Nr   r  s       r   r  z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  sO       . .&;Av 33q333. . . . . .r   zint64_t ;zdouble a  
                #include <algorithm>
                #include <cstdint>
                #include <cmath>
                #include <c10/util/generic_math.h>

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

                EXTERN_DLL_EXPORT int8_t guard(int64_t *int_values, double *float_values) {
                  z
                  z
                  return (z) && (z%);
                }
                zC++ shape guard function: %s %s)Er{  r  r  r  shape_code_partsr  r   r  r  tracked_fakesexport_constraintsr   rl  rk  r   r}  dynamic_shapes_process_equalitiesr{  r  r  r0   rg  rz  r9    enable_cpp_symbolic_shape_guardsOverflowErrorfreezelocalsr  r   r.   source_to_symbolr  ShapeCodePartsexprsr  r#   try_getshape_env_guardsr  r   rB   r2   rN  r  r  rH  ctypestorch._inductor.codecacher  r2  r  ru  textwrapdedentrw  rx  rd  castr   c_void_prz  r   r_  	_inductorr;   InvalidCxxCompilerr  )&r   r   r  r  r   r  r  rm  namesrn  ro  rp  rq  
constraintr~  maybe_cpp_code_partsmaybe_shape_env_sourcesr  compile_contextint_source_to_symbolfloat_source_to_symbolr   r  r   r  r  r  r  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardrx  ra  rw  r  s&   `                                 @@@@r   	SHAPE_ENVzGuardBuilder.SHAPE_ENV  si   zR,9"f,,(9EEE#4E 0 B!1!D.:!1!@.>OO +B=="===N     . )46<>  # 68/2uu"."A S SJ!,*QQQ3GG&'(2!(.++	 	 	 	 $QRRRR$6!-'9$()?)?)A)A$B$B$3#% % %!! %)!
 
 
 
 
 
 
 
 
 6  ((KLL J%'9> ',OO$   &*O<KO4= =9%'9'9'9 #'8G09 95!#5 (5< 0&--///"f,, $*88<<0@#A#A '/:$&;4 4///
 (/ .?DDFFGG $
 6D"3#53 /"96 6 6D!2 &+ 	7 	7D''v6666 -4666? 	N,334F4LMMM!!# 	/!!!!$/ )J
  "2"8"8":": / /fn55 /&*OO$(HH%L%L8I8K8K%L %- % %M "-55 /,33VV4DEEEE#M599 /.55vv6FGGGG +/ H	MMM>>>>>>!!!!$/ )J
  $$8;Q$QRR<" " " "%./?%@%@" " "
 #')) , ,*34H*I*I, , , # # %)II . .*34J*K*K. . . % %!
 # D&C&C&C&CO$ G(F2C(F(F(F%#? #  %  $==44   (   5&,  
 $((22TZAAG
 -",--.//&,    ?&9   " " 	55!'"(DD0A0C0CD 6     	 	s%   E E<;E<5DS> >TTc                	   t           j        r|                                rd S t          |          r|                     |           d S t          |t                    r
 |            }||n|                     |j                  }t          |          }t          j                            |          }t          |t          j        j                  r|j        |j        }|j        |j        }t          |t          j                  sJ t           j        rt          |t          j        j                  rgt+                      }|                    d|                                           |                    d|j                   |                    dd           |                     |          }g }| j        j        j        r|                     |           g d}|D ]}	|                     |dz   |	z             }
t=          |
t          j        t          j         f          r,|!                    d| d|	 dtE          |
                     o|!                    | d|	 d	|
            nV| #                    |          }t           j$        rt=          |t          j        j                  sNt          |j%        tL                    s4| j'        !                    |           | j(        !                    |           | j        j        }|j)        |j%                 }tU          |d
                   }tU          |d                   }tW          tY          ||||||          |          }|-                    |||||||           t          |t          j        j                  s$| j.        j/        0                    |j                   |j1        J te          |d|j%                  \  }}|stg          |d          r`|j4        }d| d| d| d}|!                    |           | #                    |          5                    |tW          ||                     nRd| d}|!                    |           | #                    |          6                    dtW          ||                     to          |          dk    r| 8                    ||           d S d S )Nparam_numelparam_bytesparam_countr8   )rw  r@  ry  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   )9r9   _unsafe_skip_fsdp_module_guardsis_fsdp_moduler  r  r   r7   r  r{  r  r   r   _dispatch_keysr  r  r~  r  r  log_compilation_metricsrR  	Parameterr"   	incrementnumelnbytesr  r  r  r}  r  ro   r@  rw  r  rQ  r  ,skip_no_tensor_aliasing_guards_on_parametersr  rT   r  r  input_source_to_sizes_stridesrr  rh  r  add_tensor_match_guardr   r   r   r   rt   r   r  add_dynamic_indices_guardr  r_  r  )r   r   rz  r~  r  metrics_contexttensor_namer  termsterm
real_valuer   r  metadatar  r  r   static_reasondynamic_indicesr  s                        r   TENSOR_MATCHzGuardBuilder.TENSOR_MATCH  s;   1 	e6J6J6L6L 	F "%(( e	9MM%     %//  ".EEDHHUZ4H4HE%[[F!H33E::M%!2!=>> 8<+"\F&2$)$7MeU\22222- <*UEHDV2W2W <"5"7"7))-GGG))-FFF))-;;;,,u--K, !D$18 ?J&&&   " M MD!%+*;d*B!C!CJj5<*EFF M$W;$W$W$W$WC
OO$W$WXXXX{$K$KT$K$Kz$K$KLLLLM !% 6 6u = = GQueh&899Q %U%=?PQQQ 188EEE:AA-PPP#4A'E, 2(62BCC3HX4FGG%;.{D&&-  	& &" 44&!   "%);<< J&9==ejIII< <+++<U5M  OFG  5";<< &+&CO !h[  !h  !hTc  !h  !hs~  !h  !h  !hIKK	*****511KK')?	5)Q)Q    V;UUU  KK	*****511FF1.y%@@   4yy1}}++E488888 }r   c                   t                      }|J |j        }~|J |j        j        }~|| j        j        v sJ d|             |!|j        }|sd n|                     |          }n|}|!t          j	        t          |                    nd }	d }
t          |j        dd          dk    }|r5t          |t          j        t          f          st          j	        |          }
|                    ||	||
           d S )NzH_produce_guard_code must be called from inside GuardedCode. Called from __weakrefoffset__r   )r   f_backr  co_namer   r  r{  r  weakrefr  r  rU  r   enumEnumr[  set_export_info)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_info	  sB    !NN	$$$!!!!M)	DN3333bW`bb 433
 #*:D)-ATT488D>>NN4N 2@1KGK^,,---QU 	  N,.A1EEJ 	  	2J~	5?Q$R$R 	2k.11G		
 	
 	
 	
 	
r   r   )r  r  r  r  r  r  r  r  r  r  r   r  r   r   r  r  r  r  )r   r&   )NT)r{  rQ  r   r  rP  r   )r   r  rP  rQ  )r   r&   r  rQ  )r   r&   rP  r  )r   r&   r  rQ  r  r  )r   r&   r  r  )8r   r   r   r   r  r  staticmethodr  r(  r+  r  r/  r3  rJ  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r+  r-  r1  r3  r8  r;  rB  rH  rK  rN  rQ  rT  rV  rY  r[  r]  rb  r  r  r  r   r   r   r  r  }  s:        -1?5 ?5 ?5 ?5 ?5B  8$ $ $L   \"S S Sj9 9 9	" 	" 	"? ? ?
 
 
d d dLL L L L S S S SF4 4 4 4 4       4Y 4Y 4Y 4Yl
 
 
 
 
(
 
 
 
(
 
 
 
$	
 	
 	
 	
   "

 

 

 

? ? ? ?@	
 	
 	
 	
 	

 
 
 
O O O O
 
 
 
 
 
 
 
$
 
 
 
6
 
 
 
*j j j j jX	% 	% 	% 	%   ,$ $ $ $' ' ' '* * * *  4
 
 
 
 
 
&
 
 
<

 

 

J J JC C C2$ $ $            
 
 
 
j j j jXk9 k9 k9 k9 k9\)
 )
 )
 )
 )
 )
r   r  c                      e Zd ZdZej        ej        ej        fZe	j
         G d d                      Z G d dej                  Z G d dej                  Zdd
ZdddZddZddZdS )PyExprCSEPassr8   c                  $    e Zd ZU ded<   ded<   dS )PyExprCSEPass.Configzdict[str, int]
expr_countzdict[str, str]expr_to_nameNr  r   r   r   Configr  	  s*         """"$$$$$$r   r  c                  (     e Zd Zd
dZd fd	Z xZS )PyExprCSEPass.ExprCounterr9   r  rP  r  c                    || _         d S r   )_config)r   r9   s     r   r   z"PyExprCSEPass.ExprCounter.__init__	  s    !DLLLr   r   rO  r   c                    t          |t          j                  r'| j        j        t          |          xx         dz  cc<   t                                          |           d S r  )r   r  ALLOWED_NODE_TYPESr  r  rW  r   r   )r   r   r   s     r   r   zPyExprCSEPass.ExprCounter.visit	  s^    $ @AA A'T(:(:;;;q@;;;GGMM$r   )r9   r  rP  r  r   rO  rP  r   r   r   r   r   r   r   r   s   @r   ExprCounterr  	  sQ        	" 	" 	" 	"	  	  	  	  	  	  	  	  	  	 r   r  c                  ,     e Zd Zd fdZd fdZ xZS )PyExprCSEPass.Replacerr9   r  gen_nameCallable[[], str]rP  r  c                r    t                                                       || _        || _        g | _        d S r   )r   r   r  	_gen_namepreface)r   r9   r  r   s      r   r   zPyExprCSEPass.Replacer.__init__	  s4    
 GG!DL%DN&(DLLLr   r   rO  r   c                J   t          |t          j                  rt          |          }| j        j        |         t          j        k    r|| j        j        vrst                      	                    |          }t          |          }| 
                                }| j                            | d|            || j        j        |<   n| j        j        |         }t          j        |t          j                              S t                      	                    |          S )Nz = )r   r  r  rW  r  r  USE_THRESHOLDr  r   r   r  r  r  rT  NameLoad)r   r   exprnode_expr_var_namer   s         r   r   zPyExprCSEPass.Replacer.visit	  s    $ @AA :#D)) <*40=3NNN4<#<<< !&d 3 3 ,U 3 3#'>>#3#3++x,C,CE,C,CDDD:B1$77#'<#<T#B8Hchjj99977==&&&r   )r9   r  r  r  rP  r  r  r  r   s   @r   Replacerr  	  s[        	) 	) 	) 	) 	) 	)	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r   r  rP  r  c                r    d| _         |                     t          j        d           i           | _        d S )Nr   c                     dS r   r   r   r   r   r5  z(PyExprCSEPass.__init__.<locals>.<lambda>	  s    q r   )r  r  )_counterr  rC  defaultdictr  r   s    r   r   zPyExprCSEPass.__init__	  s9    {{".yy99 # 
 
r   _varr   rQ  c                <    | | j          }| xj         dz  c_         |S r  )r  )r   r   r{  s      r   _new_varzPyExprCSEPass._new_var 
  s)    )$-))r   r  rd  c                    |                      | j                  }|D ]^}	 |                    t          j        |                     +# t
          $ r'}t                              d|j        |            d }~ww xY wd S )Nz#Failed to visit expr at line %s.
%s)	r  r  r   rT  parseSyntaxErrorr  	exceptionlineno)r   r  countereexs        r   countzPyExprCSEPass.count
  s    ""4<00 	 	Acill++++   DbiQRSSS	 	s   'A
A9"A44A9r  tuple[list[str], str]c                    |                      | j        | j                  }|                    t	          j        |                    }|j        t          |          fS r   )r  r  r  r   rT  r
  r  rW  )r   r  replacernew_nodes       r   rV  zPyExprCSEPass.replace
  sH    ==t}==>>#)D//22h!7!777r   N)rP  r  )r  )r   rQ  rP  rQ  )r  rd  rP  r  r  rQ  rP  r  )r   r   r   r  rT  	AttributeCall	Subscriptr  dataclasses	dataclassr  NodeVisitorr  NodeTransformerr  r   r  r  rV  r   r   r   r  r  	  s        M -3=A% % % % % % % %         co      #' #' #' #' #'3& #' #' #'J
 
 
 
    
   8 8 8 8 8 8r   r  c                t    t          | j        t                    pt          j        o| j        t          j        u S r   )r   r  rE   r9    guard_nn_modules_using_dict_tags	create_fnr  r+  )r   s    r   must_add_nn_module_guardsr!  
  s8    
 	5+^<< 	
 3 :<#99r   c                  $     e Zd Z fdZd Z xZS )DeletedGuardManagerWrapperc                V    t                                                       || _        d S r   )r   r   invalidation_reason)r   reasonr   s     r   r   z#DeletedGuardManagerWrapper.__init__#
  s'    #)   r   c                    d | _         d S r   )r   r   s    r   r   z6DeletedGuardManagerWrapper.populate_diff_guard_manager'
  s    #r   )r   r   r   r   r   r   r   s   @r   r#  r#  "
  sG        * * * * *$ $ $ $ $ $ $r   r#  c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
S )r  r/   r  r   zOptional[_CppShapeGuardsHelper]r  r  r  zlist[Source]r  Nr  r   r   r   r  r  +
  sN         ))))****3333######r   r  c                  $    e Zd ZU ded<   ded<   dS )GuardsStater{   r  Optional[ShapeCodeParts]r  Nr  r   r   r   r*  r*  4
  s*         ((((......r   r*  c                       e Zd Z fdZed             Zed             Zed             Zedd            Zedd
            Z	edd            Z
ed             Zd Z xZS )GuardsStatePicklerc                     t                      j        |i | t          j                                        | _        t          j        j                                        | _        d S r   )	r   r   r   r  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converter)r   r   kwargsr   s      r   r   zGuardsStatePickler.__init__;
  sU    $)&)))*99;; % 1 = Q Q S Sr   c                l    t           j                                        }|                    |           |S r   )r   rR  rS  __setstate__)clsstatemods      r   _unpickle_modulez#GuardsStatePickler._unpickle_module@
  s,    hoo
r   c           	         t           j                                        }t           j        j                                        }|                    ||||t           j        j                            |                    S r   )	r   r  r/  r1  r2  from_meta_and_devicer   r  from_raw_repr)r7  meta_tensorr@  r~  dispatch_keys_rawr0  r3  s          r   _unpickle_tensorz#GuardsStatePickler._unpickle_tensorF
  si    %4466	 ,8LLNN44H#112CDD
 
 	
r   c                   i }|D ]\  }}	}
 |	|
 ||<   |j         |                                }}t          |                              ||||          }||_        t
          j        j                            |          |_	        |S r   )
shaper  r  __tensor_unflatten__r~  r   r   r  r=  r  )r7  r>  r@  r~  r?  ctx
inner_datainner_tensorsr  unpickle_funcunpickle_func_args
outer_sizeouter_stridern  s                 r   $_unpickle_traceable_wrapper_subclassz7GuardsStatePickler._unpickle_traceable_wrapper_subclassR
  s    
 7A 	E 	E3D-!3"/-1C"DM$#.#4k6H6H6J6JL
;443
L
 
 
!H3AABSTT
r   aliasrQ  c                *    t          j        |          S r   )rI  rJ  )r7  rL  s     r   _unpickle_python_modulez*GuardsStatePickler._unpickle_python_modulec
  s    &u---r   raw_reprr  c                J    t           j        j                            |          S r   )r   r   r  r=  )r7  rO  s     r   _unpickle_dispatch_key_setz-GuardsStatePickler._unpickle_dispatch_key_setg
  s    x&44X>>>r   jsonbytesc                T    t           j        j        j                            |          S r   )r   r   r  CInterpreterdeserialize)r7  rR  s     r   _unpickle_functorch_interpreterz2GuardsStatePickler._unpickle_functorch_interpreterk
  s    x"/;;DAAAr   c                *    t          j        |          S r   )r   MappingProxyType)r7  ds     r   _unpickle_mapping_proxyz*GuardsStatePickler._unpickle_mapping_proxyo
  s    %a(((r   c                J   dd l }t          |t          j                  r`|j        j        dk    rOddlm}  ||          rg }|                                \  }}|D ]B}t          ||          }| 
                    |          \  }	}
|                    ||	|
f           Ct          |           j        t          j        |d          |j        t          |          t          j                            |                                          ||ffS t          |           j        t          j        |d          |j        t          |          t          j                            |                                          ffS t          |t          j        j                  rt          |          j        t          |          j        k    rt,          S |j        j        t          j        j        j        k    r)t          |           j        |                                ffS nt5          j        |          rt          |           j        |j        ffS t          |t          j        j                  r)t          |           j        |                                ffS t          |t          j        j        j                   r)t          |           j!        |"                                ffS t5          j#        |          rFtI          ||j%                  r1tM          |d          r!tM          |d          sJ |j'        |j(        ffS t          |t          j)                  rtU          d| d|j+         d	          t          |tX          j-                  r)t          |           j.        |/                                ffS t          |          j        t          |          j        k    r>t          j0        j1        2                    d
t          |           d| ddz   dz             t,          S )Nr   meta)is_traceable_wrapper_subclass)r@  _torch_handler_name_torch_unpicklerzCannot serialize SymInt z (node: rt  r  r  r  r  r  )3sympyr   r   r  r@  r  torch.utils._python_dispatchr^  r=  rU  reducer_overrider  rK  
empty_liker   r  rO  r@  rR  rS  r   r   NotImplementedr   __getstate__r:  r  ismodulerN  r  rQ  r  rU  rW  	serializeisclass
issubclassFunctionr   r`  r_  rk  rT  r   r   rY  r[  r  r   r;   r  )r   r  ra  r^  rE  attrsrD  r  innerfunc
args_tuples              r   rc  z#GuardsStatePickler.reducer_overrides
  s   c5<(( :	ESZ_-F-FRRRRRR,,S11   
 3355
s! @ @D#C..E'+'<'<U'C'C$D*%%tT:&>????DzzF$S888JIIH++C0099;;I   ::. V444
S		'',,5577	1   UX_-- 	ECyy%c);;;%%})UX_-IIIDzz2S5E5E5G5G4III J c"" 	E::5FFUX455 	E::83<<>>:KKKUX0=>> 	E::=?QQQ OC  	E3//	E 233	E
 3 233333'#*A)CCCU\** 	ER#RRsxRRRSSSU344 	E::5

}DD99!T#YY%777-#00ES		EEsEEETUTU   r   )rL  rQ  )rO  r  )rR  rS  )r   r   r   r   classmethodr:  r@  rK  rN  rQ  rW  r[  rc  r   r   s   @r   r-  r-  :
  s#       T T T T T
   [
 	
 	
 [	
   [  . . . [. ? ? ? [? B B B [B ) ) [)F F F F F F Fr   r-  r8  rS  c                $   t          j                    }t          |          }	 |                    |            nD# t          $ r7}t
          j        j                            t          |                    |d }~ww xY w|
                                S r   )ioBytesIOr-  dumpAttributeErrorr   r   r;   r  rQ  r   )r8  bufpicklerr  s       r   pickle_guards_staterx  
  s    
*,,C %%G<U < < <m,,SVV44!;<<<>>s   : 
A;2A66A;c                  F    e Zd Z	 	 	 	 	 	 ddd
Z	 ddZd Zd Zd Zd ZdS )r  Nr   %Optional[Callable[[GuardFail], None]]guard_filter_fn8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]guards_serialization_moder  r  r+  c           
         |r|j         nd }i  _        t          |          }	| _        | _        |r|j        nd  _        | _        t          d          st          	                    d           t          |pdt          j                  }
                     |
|	|||rd n j                  \  }|rfd |fd|
D                       t                    t          |
          k    sJ t          d D                       sJ fdt!          |
          D             }
                     |
|	|| j                  \  }| _                             |
|           j         j        _        t(                              d	 j                   j         j        _        d
|j        s j        dk    r݉ j                            |j                  s>t3           j        |j        t5          j                              }t9          d|           t:          t;           j        |j                   t=           j        j        |j        d          t(                              dd           tA          j!        dtE                               d  _#         j        dk    rztI                      tI                      fd} j        %                                }|
D ]P}tM          |j'        tP                    r$ j        sJ  j        j)        D ]} ||           @ ||j'                   Q j        j*        D ]} ||           d tW          j,        |fd|j        -                                D             fd|j.        -                                D             t^          j0        1                    fd|
D                       te          j3        th          |j5                            }tm          | j                  }to          |           _#        t^          j8        9                    d fd            j        :                                 d  _        d S )N!pytorch/compiler:guard_nn_modulesz9guard_nn_modules is turned off using justknobs killswitchr   )r  c           	        t                      }t          | j                  }|dk    rd}|}nd}                    | j                  }t	          | j                  d u}| j        }t          |t          j	                  r| j        j
        }t          ||||j        | j        rt          | j                  nd||           S )Nr   FTr   )r{  	has_valuerz  
guard_typederived_guard_types	is_global
orig_guard)objectstrip_local_scoper{  r  r   r  r   r   	functoolspartialrn  re   r   guard_typesr[  )r   MISSINGr{  r  rz  r  r  builders          r   make_guard_filter_entryz>CheckFunctionManager.__init__.<locals>.make_guard_filter_entry
  s     (((442:: %I#EE $I#KK
33E253KLLTXX	 ?h	(9:: 4$3H'''0()e.?(@(@(@'$
 
 
 
r   c                &    g | ]} |          S r   r   )r   r   r  s     r   r   z1CheckFunctionManager.__init__.<locals>.<listcomp>  s%    KKKE((//KKKr   c              3  F   K   | ]}t          |          t          k    V  d S r   )r  r  r   r   s     r   r  z0CheckFunctionManager.__init__.<locals>.<genexpr>  s,      ??1tAww$??????r   c                *    g | ]\  }}|         |S r   r   )r   r  r   filter_resultss      r   r   z1CheckFunctionManager.__init__.<locals>.<listcomp>  s8       "!U.QRBS  r   %sg        rd  zGuard check failed: r8   zGuard eval latency = %s us.2fguard_latency_usr  c                   t          |           x}r.t          |t                    sJ                     |           d S t	          |           x}r.t          |t                    sJ                     |           d S d S r   )r   r   rQ  r   r   )r   r{  used_global_varsused_local_varss     r   prune_variablez5CheckFunctionManager.__init__.<locals>.prune_variable_  s    1&9994 .%dC00000$((.....26:::T .%dC00000#''-----. .r   c                    t          | t          j                  rbd t          fd| j        D                       }fd| j                                        D             }t          j        | j        g|R i |S | S )Nc                \    t          | t          t          j        f          r
 |             S | S r   )r   r7   r  r  r>  s    r   _refzHCheckFunctionManager.__init__.<locals>.normalize_create_fn.<locals>._refw  s+    %a-)EFF '#$133J r   c              3  .   K   | ]} |          V  d S r   r   )r   r  r  s     r   r  zMCheckFunctionManager.__init__.<locals>.normalize_create_fn.<locals>.<genexpr>|  s+      $=$=TT!WW$=$=$=$=$=$=r   c                .    i | ]\  }}| |          S r   r   )r   kvr  s      r   
<dictcomp>zNCheckFunctionManager.__init__.<locals>.normalize_create_fn.<locals>.<dictcomp>}  s'    #N#N#N41aAttAww#N#N#Nr   )r   r  r  r[  r   keywordsr   rn  )r   new_argsnew_keywordsr  s      @r   normalize_create_fnz:CheckFunctionManager.__init__.<locals>.normalize_create_fnt  s    a!233 	P! ! !
  %$=$=$=$=af$=$=$===H#N#N#N#N1:;K;K;M;M#N#N#NL$,QVOhOOO,OOOr   c                $    i | ]\  }}|v 	||S r   r   )r   r  r  r  s      r   r  z1CheckFunctionManager.__init__.<locals>.<dictcomp>  s4       1O++ q+++r   c                $    i | ]\  }}|v 	||S r   r   )r   r  r  r  s      r   r  z1CheckFunctionManager.__init__.<locals>.<dictcomp>  s5       1,,, q,,,r   c           
     \    h | ](}t          j        |d d  |j                            )S )N)obj_weakrefguarded_class_weakrefr   )r  rV  r   )r   r   r  s     r   r!  z0CheckFunctionManager.__init__.<locals>.<setcomp>  sV        " $+!(,26&9&9%/&J&J	    r   )r  r   _guardsr  )r  r  dynamo_cpp_guards_strc                      j          d ddS )Nz
Guard latency = r  z us)r   )latencyr   s   r   r5  z/CheckFunctionManager.__init__.<locals>.<lambda>  s    $"4XXXXXX r   
payload_fn);r|   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesr  r  torch_function_mode_stackr}  r-   r  r  r   r&   sort_keybuild_guardsr_  allr  r   compile_check_fnr   rw  rx  r}  r   r  get_guard_fail_reason_helperr#   r  rg  ry   r   r   r!   increment_toplevelr  guards_stater   dump_guards_stater   r  rW   r  r  r  rV  r   r   r   r  	GuardsSetr  tree_maprn  r  r*  rx  _loggingtrace_structuredclear)r   r  r  r   r   r{  r}  r  r|   existing_diff_guard_sourcessorted_guardsr   reasonsr  output_graph_guards_stater   r   r  r  r  r  r  r  r  r  s   `                 @@@@@@@r   r   zCheckFunctionManager.__init__
  s    )5>$$$;= B+NN 	$ ) !1
 7CLL22 	& *C&BCC 	UKKSTTTv|@@@!%!2!2'#GDD)G"
 "
  *	    2 -_KKKK]KKK N ~&&#m*<*<<<<<??????????   &/&>&>  M &*%6%6+.& &"G] +g}mDDD .5-D*t1222-4-D* " !	Tt'E'O'O%++L,DEE G6& ,"577 
 %%EG%E%EFFF,8-&(@   ,"')A1 G 9g;K;KLLL 12Dc'llSSS-1)V33"uu!eeO. . . . . . )-(9(K(K(M(M%& = =e6GG =0000"&"7"I / /&v..../ #N5#;<<<<+> ' 'v&&&&   )4(;)    9 E K K M M  
    9 F L L N N  
 //    &3  
 
 /5o2-K/ //) ) )%8 '6!%!6  L !4L A AD 	''#XXXXX 	( 	
 	
 	
 	 r   c                   t                      }||_        d fd}t          || j        || j        |j        |j        || |	  	        }d }	t          j        ||	          t          j
        ot          d          }
|D ]U}|
s<|                                r(d|j        vrd|j        vrt          j        s	d|j        vr@|                    |           V||fS )Nc                    |                                  }|t          j        u r|                                 S sJ              }|J |                    |                                           S r   )guard_sourcer)   CONSTANTr{  r  )r   r  	r_builder	w_builders      r   r  z5CheckFunctionManager.build_guards.<locals>.source_ref  so    !..00L{333{{}}$!	I((($$V[[]]333r   c                0     |             }|r	d |_         d S d S r   )r  )weak_br4  s     r   cleanup_builderz:CheckFunctionManager.build_guards.<locals>.cleanup_builder  s*    A  r   r  rb  rd  r  )r   r   r  r  r  r  r   r  r  r9   guard_nn_modulesr-   r  r{  rS  r  )r   r  r  r  r  r  r   r  r  r  guard_on_nn_modulesr   r  s               @r   r  z!CheckFunctionManager.build_guards  s0    ,--+F(		4 	4 	4 	4 	4 K $%

 

	 	 	 K99	$5 
//;
 ;
 # 	" 	"E'	2244	
 #%*44$EJ665 79@
9R9RLL!!!!%%r   c                   j         }|dgz  }t                              d           g g g t          | j                  }| j        j                            dg           | j        j                            | j        dg           d | _        dfd	}t                      }j
        D ]7}|j        D ]-}	|	|vr' ||	|j        d           |                    |	           .8j        }
d }d }t          |
          dk    r0t!          j        |
d	d
                    |
          z   dz   g           | j        r| j        j        ng }|D ]P}t+          |t,                    r|j        }|j        }|                                 d|                                 }t5                              |                              |          |g            ||d d           t+          |t8                    rfd|j        D             }fd|j        D             }dd
                    d |j        D                        dd
                    d |j        D                        d}t?          |||g            ||d d           @tA          d|           j!        D ]}|j        D ]}	 ||	|j        d           r$tD          j#        $                    dfd           tJ          j&        }|tK          j'                    }|||j(        |dtR          tU                      }| j        +                                 dj,        d         i}t                    dk    sJ || j        _-        || j        _.        | j        /                                 | j        _0        || j        _1        || j        _2        d | j        _3        d | j        _4        |
| j        _5        d S )Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()Fc                V    t                     }t                              d|                                fd           t                              t          j                  rd}d}lj        r/dd	                    j        
                                           }j        r/dd	                    j        
                                           }t                              d ||           |s,                                                    |           d S d S )Nr  c                      r2j         r+t          j        j                                                   nd r j        rt          j        j                  nd dS )N)r  r]  rZ  )r]  r,   from_tracebackr^  rZ  )r  r   s   r   r5  zNCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>  sr    % !"%*["
1%+2E2E2G2GHHH! !"%*%5"
1%2BCCC!  r   r   z
Stack:
z
User stack:
zGuard: %s%s%s)rb  rw  rx  r  verbose_guards_logisEnabledForloggingDEBUGr]  ru  formatrZ  )	r  r   log_onlyr
  maybe_stackmaybe_user_stackr   structured_guard_fnsr   s	   ``    r   add_code_partz<CheckFunctionManager.compile_check_fn.<locals>.add_code_part  sY    5i G GT#4555 ''        "..w}==  #% ${ S&R2775;;M;M;O;O3P3P&R&R' Rbgge6F6M6M6O6O.P.PRR ) #((#$	    =!!),,,"))*;<<<<<= =r   Tr8   zcheck_no_aliasing(r   rt  rD  c                :    g | ]}                     |          S r   rJ  r   r   r  s     r   r   z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>^  s7     . . . 99!<<. . .r   c                :    g | ]}                     |          S r   r  r  s     r   r   z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>b  s7     2 2 2 99!<<2 2 2r   zcheck_overlapping(overlapping=[c              3  >   K   | ]}|                                 V  d S r   r{  r   r   s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>h  s*      /\/\Q/\/\/\/\/\/\r   z], non_overlapping=[c              3  >   K   | ]}|                                 V  d S r   r  r  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>i  s*      3d3dAFFHH3d3d3d3d3d3dr   z])zUnknown GuardEnvExpr: dynamo_guardsc                     d  D             S )Nc                "    g | ]} |            S r   r   )r   fs     r   r   zKCheckFunctionManager.compile_check_fn.<locals>.<lambda>.<locals>.<listcomp>  s    4W4W4WQQQSS4W4W4Wr   r   )r  s   r   r5  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    4W4WBV4W4W4W r   r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr  r   r   )6r  rw  rx  $make_torch_function_mode_stack_guardr  r   r   add_global_state_guard#add_torch_function_mode_stack_guardr   r  r  r   r   r  r_  r   r  ru  r  aotautograd_guardsr   r%   input_source_ainput_source_br{  r   rJ  r+   overlapping_sourcesnon_overlapping_sourcesr   rT  r  r   r  r  r:   initial_global_stateGlobalStateGuardr   r2   rN  r   r  r   r   r  r   r   r   r   r   r   )r   r  
guards_outr   largs"torch_function_mode_stack_check_fnr  seengclr  r  check_tensors_fncheck_tensors_verbose_fnr  r   source_arE  r  overlapping_guard_managersnon_overlapping_guard_managersglobal_stater   r  r   r  r   s    `                     @@@r   r  z%CheckFunctionManager.compile_check_fn  s    '((###
CE-Q*.
 .
*
 	668Q7RSSSCC*34	
 	
 	

 *.&'	= '	= '	= '	= '	= '	= '	= '	=R uu< 	# 	#C # #t## "M$	4888HHTNNN# $+#C #' '((1,, -9(%		2J(K(KKcQR   594EMD002 	 (  	E  	EE%11 E / /'}}EEHMMOOEE	-99(CC99(CCK  
 it4444E>22 E. . . ."6. . .*2 2 2 2":2 2 2.
k&*ii/\/\%B[/\/\/\&\&\k k*.))3d3deFc3d3d3d*d*dk k k 
 2.2K  
 it4444"#CE#C#CDDD ) 	5 	5C 5 5 dCIt44445   	N++,W,W,W,W ,    %9(9;;L 0(@%1%72T	
 

 
  !!
 	##%%% #W]3%78 :!####*6'"'<<>>>0B-*>'+8( *.&)-&8P555r   c                b   t          | d          rt          | j        t                    s| j        j        x}t| j        j        x}ht          |t                    sJ t          |t                    sJ d| d}t          |          }|                    ||           || _        d S d S d S d S d S )Nr   zCache line invalidated because z got deallocated)	r   r   r   r#  r   r   r`   rb   
invalidate)r   obj_strr   r   r&  deleted_guard_managers         r   r  zCheckFunctionManager.invalidate  s    
 D/**	7t13MNN	7 !% 2 >>K $ 2 >>Kk:66666k:66666PwPPPF$>v$F$F!"";0EFFF!6D	7 	7 	7 	7 LKKKr   c                   	 t          |          | j        vrWt          j        |          | j        t          |          <   t          j        |t          j        | j        |                     n# t          $ r Y nw xY wt          |          S )zadd a weakref, return the id)r  )	r  r  r  r  r   r  r  r  r  )r   r  r  s      r   r  zCheckFunctionManager.id_ref  s    
	#wwdn,, +2+c*:*:r#ww' *4?GLLL    	 	 	D	#wws   A-A0 0
A=<A=c                f    t          |          | j        v r| j        t          |                   S dS )zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)r  r  )r   r  s     r   r  z$CheckFunctionManager.lookup_weakrefs  s-    c77dn$$>"S''**tr   )NNNNNN)r   rz  r{  r|  r}  r  r  r+  r   )	r   r   r   r   r  r  r  r  r  r   r   r   r  r  
  s         ?C 3759f! f! f! f! f!\  =& =& =& =&~nQ nQ nQ`7 7 7"      r   r  tuple[str, str]c                  	 ddl m} t                      		 	                    |            d	fd}n# t          $ r dd}Y nw xY w |            }| D ]} ||          \  }}|                    |           |                    d	| d
           |                                5  |                    d           d d d            n# 1 swxY w Y    |            }|                    d           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y    |            }|                    d| d
           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y   |	                                |	                                fS )Nr   r   r  rQ  rP  r  c                .                         |           S r   )rV  )r  csepasss    r   rV  z%build_guard_function.<locals>.replace  s    ??4(((r   c                
    g | fS r   r   )r  s    r   rV  z%build_guard_function.<locals>.replace  s    t8Or   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardr  )
r   r   r  r  RecursionErrorr   r   r   splicer   )
r   closure_argsr   rV  
guard_bodyr  r  r   make_guard_fnr  s
            @r   rv  rv    s   444444ooG	j!!!	) 	) 	) 	) 	) 	) 	)   	 	 	 	 	 	  !!J 1 1g&&&0000111   	1 	1  000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 NE	OOO$$$	 ' 'Z   &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' #N$$MDLDDDEEE					 0 0U###///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   -"8"8":":::sE   3 AA%CC	C	+D==EE?+F66F:=F:c                 T    t           j        j        j                            d          S )Nr}   r   r  	_internal	log_stateis_artifact_enabledr   r   r   is_recompiles_enabledr    s    >#-AA,OOOr   c                 T    t           j        j        j                            d          S )Nr~   r  r   r   r   is_recompiles_verbose_enabledr    s    >#-AABVWWWr   c                *    d | D             fd}|S )Nc                ,    g | ]}t          |          S r   )r  r  s     r   r   z8make_torch_function_mode_stack_guard.<locals>.<listcomp>  s    ,,,T!WW,,,r   c                     t                      } t          |           t                    k    rdS t          |           D ]\  }}|t          |          k    r dS dS r  )rl   r_  r   r  )	cur_stacktymoder   s      r   check_torch_function_mode_stackzMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stack  sk    133	y>>SZZ''5E9-- 	 	HBT$ZZuu   tr   r   )initial_stackr!  r   s     @r   r  r    s7    ,,m,,,E
 
 
 
 
 +*r   c                @   t          | j                  }t          j        t                    | j        D ]@}||d<   t          t          |||                    }|                             |           AfdD             }d	                    |          }d| gS )N__compile_source__c                T    g | ]$}t          |                   d k    |          %S )r8   )r_  )r   r  ids_to_sources     r   r   zErecompilation_reason_for_no_tensor_aliasing_guard.<locals>.<listcomp>  s@       $'Cc@R<S<SVW<W<W=<W<W<Wr   r   zDuplicate tensors found: )
r2  r   rC  r  rg  r   r  r  r  ru  )r   r  r   r  	tensor_idduplicate_tensorsr&  r&  s          @r   1recompilation_reason_for_no_tensor_aliasing_guardr)    s    233L+D11M&A 7 7-:)*tM<??@@	i ''6666   +8   YY())F00011r   r   c                <    ddl }d}|                    |d|           S )z
    Replace occurrences of L[...] with just the inner content.
    Handles both single and double quotes.

    This is to generate user friendly recompilation messages.
    r   NzL\[\s*['\"](.*?)['\"]\s*\]z\1)resub)r   r+  patterns      r   r  r     s(     III+G66'5!$$$r   r   rf   f_localsr  
compile_idr$   c                   || j         d         d}|                    | j                   g }d}g }|                     |          }|j        s+|j        }t          |          dk    rd|d         v rd}n|}g }|rt          | |          }n|D ]}t          | j                   }	||	d<   t                      5  	 t          ||	|          }
n*# t          $ r t                      rY d	d	d	           b w xY w	 d	d	d	           n# 1 swxY w Y   t          |
t                    r|
s|}
t          |
t                    r%|                    |
           t                      s n| d
d                    |          z   }t%          |          S )z
    Return the reason why `guard_manager` failed.
    Updates `guard_failures` with the generated reason.
    Only the first failed check of guard_manager is reported.
    r  r  Fr8   zDuplicate tensor foundr   Tr$  Nr   z; )r   r  r   r  resultr   r_  r)  r2  r6   r  	Exceptionr  r   r  rQ  r  ru  r  )r   r.  r/  r  r  no_tensor_aliasing_check_failedr   guard_debug_infor   r   fail_reason
reason_strs               r   r  r  -  sE    !;C!@AAE	LL+,,,G&+#$&$228<< " (-@ !""a'''+=a+@@@26//,%'"& C5
 
 ' 	 	D :;;L15L-./11  "&t\5"A"AKK    466         	                 +t,, #[ #"+s++ {+++466 E"""TYYw%7%77JZ(((s6   6D8C
	D
C1"D/C11DD	D	c                   t          | t                    r| d| j         S t          | ||          }t          t
          |                                      |           	 | j        0|                     t          |pdt
          |                              n*# t          $ r t                              d           Y nw xY w|S )Nr   zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r   r#  r%  r  rn   rs   r  r   rd   r2  r  r  )r   r  r.  r/  r6  s        r   get_guard_fail_reasonr8  p  s     -!;<< DCC ACCC-mXzRRJ=&'..z:::
&2''*8(8-:MNN    
 
 
d	
 	
 	
 	
 	


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

c              3  T   K   | ]#\  }}d | dt          j        |d          z   V  $dS )zguard z failures:
- N)r  r   )r   r  r&  s      r   r  z:get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>  sV       # #Av )(((8?64+H+HH# # # # # #r   rS  r<  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     dddS )Nrecompile_reasonsrR  )r{  encodingr   r   r   r   r5  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    '
 
 r   c                      S r   r   )r  s   r   r5  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    7 r   )metadata_fnr  )r8  r   r  r.  r/  r  nextr  r  r  r9   error_on_recompileru  r  r  r   r  co_filenameco_firstlinenorecompiles_verbose_logrx  recompiles_logr;   RecompileErrorr   r  r  )	r   r9  r&  r  do_recompiles_logfailuresguard_failure_detailsmessager  s	           @r   'get_and_maybe_log_recompilation_reasonsrO    s    G

!&%N"	
 
  	#NN6"""!& 
! <D .//R3P3R3R .F5 .(** 	A{{ # #!*7!3!3# # #  HH
  tyy'9'94@@HGXGG 	@DL @ @d6F @ @I\ @ @4f==@ @ 	  	.,.. .&,,W5555$$W---$ 	.$W---	N##
 
 #??? $    Nr   c                    | }t                      }| 5|                    | j                                                   | j        } | 5|} | .|| j        _        | j                                         | j        } | .|S r   )r   r  r   r   rD  r   r   )r   first_cache_entryacc_diff_guard_sourcess      r   r  r    s    #
 !UU

!%%%@@BB	
 	
 	
 "&	 
! $K

!7M!4!==???!& 
! "!r   rx  r  lastr  c                   t          d|j         d|j         d|j                    t          dd                    | j                  z   dz              t          dd                    | j                             t          |            d|i| j        }| j        D ]2}	 t          || j	        |           #  t          d|            Y 0xY wd S )	NzERROR RUNNING GUARDS  r=  zlambda r   z and
  r  zMalformed guard:
)
printr  rF  rG  ru  r   r   r   r  r   )r   r  r.  rx  rS  r  r   s          r   guard_error_hookrW    s     
WWWt/?WW$BUWW   
)dii 233
3c
9:::	#z}788999	-?M$>?K) 0 0	02K@@@@	0.u../////	0 0s   !B88Cc              #  j   K   t                      }| D ]}||vr|V  |                    |            d S r   )r   r   )seqr  r   s      r   uniquerZ    sJ      55D  D==GGGHHQKKK r   c                V   |r|| k    rt          |          }t          |           }t          |          st          |           r>t          j        |                                  d|                                 d          ||k    r t          j        t          j        |          S d S )Nz is aliasing zC. This is not supported. Please do a clone for corresponding input.)rE  )	r   r   r;   UnsafeScriptObjectErrorr{  r  r  r  rH  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardra    s      Y{j002;??.z::/
 
 	1*==	 -??$$ ? ?;3C3C3E3E ? ? ?   /11 $\%AKXXXX4r   )skipc                B   ddl m} t                              t          j                  p#t                              t          j                  }|                                j        j	        j
        }|D ]*}t          |t                    sJ  |||| dz              +dS )z
    Add dynamo guards to the current tracing context.

    Args:
        guards: guard(s) to add
        skip: number of stack frames to ignore for debug stack trace
    r   )TracingContextr8   )collect_debug_stackrb  N)torch._guardsrd  rw  r  r  r  r  r  guards_contextr  r   r   r&   )rb  r|   rd  re  r   r   s         r   install_guardrh  !  s     -,,,,,$11  8		(	(	7	7  




-
;
?C K K%'''''E':JJJJJK Kr   )r   rO  rP  rQ  )r  rQ  r   r&   rP  rQ  )r   rc  r   r&   rP  rd  )rP  ri  )r  r   rP  r	   )r  r  )r8  r*  rP  rS  )rP  r	  )r   rQ  rP  rQ  )r   rf   r.  r  r/  r$   rP  rQ  )
r   rf   r  r  r.  r  r/  r$   rP  rQ  )r9  ra   rP  rd  )
r   rf   r  r  r.  r  rx  r  rS  r  )r  
__future__r   rT  r  rC  r  r  r  rI  r  rr  r  rF  pickler  r  r   r  r  
contextlibr   r  r   r   typingr   r   r	   r
   r   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   torch._dynamo.sourcer   r   r   r   r   r   r   r    torch._dynamo.utilsr!   r"   rf  r#   r$   r%   r&   r'   r(   r)   r*   r+   torch._loggingr,   torch._utils_internalr-   %torch.fx.experimental.symbolic_shapesr.   r/   r0   r1   r2   torch.utilsr3   r  torch.utils._ordered_setr4   torch.utils._tracebackr5   r6   torch.utils.weakr7   r   r9   r:   r;   
eval_framer<   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`   ra   rb   rc   rd   re   rf   rK  rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   r  numpyr  ModuleNotFoundErrorra  rz   torch._dynamo.output_graphr{   	getLoggerr   r  r  getArtifactLoggerrw  rI  rH  r  r   r  cacher(  r)  rN  rW  r   r   r  rb  rh  rn  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r  r*  Picklerr-  rx  r  rv  r  r  r  r)  r  r  r8  rO  r  rW  rZ  ra  rh  r   r   r   <module>r     s7    " # " " " " " 



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



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