
    rh9                      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lZerddlmZ ddlmZ  ejP                  e      Ze!jV                  jY                  ed      Ze!jV                  jY                  ed       Ze!jV                  jY                  ed!      Ze!jV                  jY                  ed"      Z G d# d$      Zd% Zejf                  d&        Zdad'ed(<   d) Zd]d*Ze!jp                  jr                  jt                  Zd^d+Z	 	 	 	 	 	 d_d,Zd`d-Zd. Zd/ Zd0 Zd1 Zdad2Z ej                  d34       G d5 d6             Zd7 Zd8 Zej                   G d9 d:             Z G d; d<ej                        Zejf                  dbd=       Z G d> d?eB      Z G d@ dA      ZdB Z G dC dDe      Zej                   G dE dF             Zej                   G dG dH             Z G dI dJej                        ZdcdKZ G dL dM      ZdddNZdO ZdP ZdQ ZdR ZdedSZ	 	 	 	 	 	 	 	 dfdTZ	 	 	 	 	 	 	 	 	 	 dgdUZ	 	 	 	 dhdVZdW Z	 	 	 	 	 	 	 	 	 	 didXZ e`e߫       dY ZdZ Zdd[d\Zy# e$ r dZY Xw xY w)ja  
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                  r    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y)GuardManagerWrappera  
    A helper class that contains the root guard manager. An instance of this
    class is stored in the Dynamo cache entry, so that the cache entry can
    access the RootGuardManager stored in the "root" attribute and directly call
    the check_nopybind from C++.
    Nc                   |t               | _        n|| _        d | _        d | _        d | _        g | _        d | _        d | _        d | _        d | _	        d | _
        i | _        g | _        t               | _        t               | _        y N)r   rootdiff_guard_rootclosure_varsargs
code_partsverbose_code_partsglobal_scopeguard_fail_fncache_entryextra_stateid_matched_objsno_tensor_aliasing_sourcessetprinted_relational_guardsr4   diff_guard_sources)selfr   s     g/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_dynamo/guards.py__init__zGuardManagerWrapper.__init__   s    <(*DIDI# 	"& !!*,'),&3=<    c              #  z   K   t               | _        	 d  t               | _        y # t               | _        w xY wwr   )r   r   r   s    r   #_preserve_printed_relational_guardsz7GuardManagerWrapper._preserve_printed_relational_guards   s,     ),&	3-0UD*SUD*s   ;' ;8;c                j      fd fdfd  j                           j                  S )Nc                L   | j                         j                  v xs | j                         dkD  }t        | j	                         j                               D ]  \  }\  }}| |       |      z  z  } |r)j                  j                  | j                                |S Nr   )
get_sourcer   
fail_countsortedget_key_value_managersitemsadd)nodeis_diff_guard_nodeidxkey_mgrval_mgrr   visits        r   visit_dict_managerzJGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_dict_manager   s    !T%<%<<U@QTU@U  ,2++-335, F''gw #eGnuW~&EE"F
 "''++DOO,=>%%r   c                $   t        | t              rJ | j                         j                  v xs | j	                         dkD  }| j                         D ]  }| |      z  } |r)j                  j                  | j                                |S r   )
isinstancer   r   r   r   get_child_managersr   )r   r   	child_mgrr   r   s      r   visit_managerzEGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_manager   s    !$(8999 !T%<%<<U@QTU@U  "446 7	"eI&66"7 "''++DOO,=>%%r   c                J    | yt        | t              r |       S  |       S )NF)r   r   )r   r   r   s    r   r   z=GuardManagerWrapper.collect_diff_guard_sources.<locals>.visit
  s,    |$ 01)$// &&r   )r   r   )r   r   r   r   s   `@@@r   collect_diff_guard_sourcesz.GuardManagerWrapper.collect_diff_guard_sources   s,    	&	&	' 	dii&&&r   c                D    | j                          | j                          y r   )r   populate_diff_guard_managerr   s    r   finalizezGuardManagerWrapper.finalize  s    '')((*r   c                    | j                  | j                        | _        | j                  r| j                  j	                          y y r   )clone_with_chosen_sourcesr   r   r   update_diff_guard_root_managerr   s    r   r   z/GuardManagerWrapper.populate_diff_guard_manager  s=    #==d>U>UV ;;= r   c                D    fd}| j                   j                  |      S )Nc                (    | j                         v S r   )r   )node_mgrchosen_sourcess    r   	filter_fnz@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fn'  s    &&(N::r   )r   clone_manager)r   r   r   s    ` r   r   z-GuardManagerWrapper.clone_with_chosen_sources&  s    	; yy&&y11r   c                    |j                   j                  }|j                         }|D cg c]
  }|dz   |z    }}|S c c}w )N: )	__class____name__r   )r   guard
guard_namepartsparts        r   get_guard_linesz#GuardManagerWrapper.get_guard_lines,  sF    __--
((*6;<dd"T)<< =s   >c                v    |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  sF    ))+##,,Of$$$Ar   c                   t        |j                         j                               D ]  \  }\  }}|j                  d|        |j	                         5  |r5|j                  d| j                  |              | j                  ||       |r5|j                  d| j                  |              | j                  ||       d d d         y # 1 sw Y   xY w)NzKeyValueManager pair at index=zKeyManager: zValueManager: )r   r   r   	writelineindentr   construct_manager_string)r   mgrbodyr   r   r   s         r   construct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_string:  s    '-c.H.H.J.P.P.R'S 		A#C#'7NN;C5AB ANN\$2G2G2P1Q#RS11'4@NN^D4I4I'4R3S#TU11'4@A A		AA As   A/CC	c           
     8   |j                         5  |j                         D ]  }t        |t        j                  j
                  j                  j                        rq|| j                  vr<| j                  j                  |       |j                  | j                  |             |j                  |j                  j                  g       |j                  | j                  |              t        |t              r| j                  ||       t!        |j#                         |j%                               D ]I  \  }}|j'                  | j)                  |d|j+                                       | j-                  ||       K 	 d d d        y # 1 sw Y   y xY w)Nzaccessed_by=)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  sW   [[] 	?,,. AeUXX%5%5%<%<%L%LMD$B$BB66::5A(<(<U(CD % 8 8 OOD$8$8$?@A #/0223= (+!!#S%;%;%=( ?#) )))|HMMOCT5UV --i>?)	? 	? 	?s   E5FFc                   ddl m}  G d d|      }| j                         5   |       }d|_        |j	                  dd       |j	                  d	d       |j	                  d
       | j                  | j                  |       t        | j                  d      r?| j                  j                         D ]"  }|j                  | j                  |             $ |j                         cd d d        S # 1 sw Y   y xY w)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||dmm;<<r   c                N    |rt         |   |       y t         |   d|z          y )Nz+- )superr   )r   lineskip_prefixr   s      r   r   zGGuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefix.writelinej  s$    G%d+G%edl3r   F)r   
__module____qualname__r   r   __classcell__r   s   @r   IndentedBufferWithPrefixr   f  s    =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	4~ 	4 557 
	#+-DDMNN24N0NN0dNCNN-.))$))T:tyy">?!YYAAC AEOOD$8$8$?@A==?
	# 
	# 
	#s   CC22C;c                8    | j                   j                  |      S r   )r   checkr   xs     r   r   zGuardManagerWrapper.check|  s    yyq!!r   c                8    | j                   j                  |      S r   )r   check_verboser   s     r   r   z!GuardManagerWrapper.check_verbose  s    yy&&q))r   c                Z     t               d  fd  j                         y )Nc                    g }| j                         D ]5  }|j                  d      d   j                         }|j                  |       7 |S )N#r   )r   splitrstripappend)
leaf_guardr   verbose_code_part	code_parts       r   get_code_partszMGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.get_code_parts  sT    J%/%B%B%D -!-33C8;BBD	!!),- r   c                   | j                         D ]  }t        |t        j                  j                  j
                  j                        r8|vs@j                  j                   |             j                  |       sj                  j                   |              | j                         D ]
  } |        y 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eUXX%5%5%<%<%L%LM$::..~e/DE.2259OO**>%+@AB !335 !	i !r   )r   r   )r   r  r  r   s   `@@@r   !populate_code_parts_for_debuggingz5GuardManagerWrapper.populate_code_parts_for_debugging  s#    !$		! 	dii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      s_    @, 3 3/'b+>2
A?:#2"*r   r   c                    t         j                  j                         5  t        | t        j
                  t        j                  f      rt        j                  |       n| cd d d        S # 1 sw Y   y xY wr   )r   	overrides_enable_torch_functionr   npgenericndarray	as_tensor)as    r   
from_numpyr    sR     
	/	/	1 T%/BJJ

3K%Luq!RST T Ts   AA**A3c                     dd l } dd l} | j                  j                  | j                  j                  g}ddlm} |j                  |       |D ch c]  }t        j                  |       c}S c c}w )Nr   )POLYFILLED_MODULES)
torch._dynamo.external_utilstorch._dynamo.polyfillsr   external_utils	polyfillstorch._dynamo.polyfills.loaderr  r
  inspectgetfile)r   modsr  ms       r   uninteresting_filesr#    sS    '"MM((%--*A*ABDAKK"#(,-1GOOA---s   A/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&        j0                  t&        t2        da t         S )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                .    t         j                  ||       S r   )dict__contains__)r  bs     r   <lambda>z#_get_closure_vars.<locals>.<lambda>  s    T->->q!-D r   ___tuple_iterator_len___normalize_range_iter___tuple_iterator_getitem___dataclass_fields#___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_varsrI    s0   

|
  7 7 C C
 I	

 |
  D
 $%7
 &';
 ()?
 "#3
 23S
 DJJ
 RZTRXX
 5<
 Y44
  EKK//!
" ell#
$ (!55+
. r   c                L    t        j                  |       j                  dd      S )N
r   )astunparsereplace)r   s    r   _ast_unparserO    s    ;;t$$T2..r   c                F   d}||j                   rCt        |j                         D ]*  }|j                  t               vsdt	        |d       } nJ nH|j
                  r<|j
                  j                         }t        |      dkD  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fsrV  s        r   get_verbose_code_partrZ    s    Eu//0 ;;&9&;;"<#>"?@E [[kk))+G7|a|GBK89:'_UG$$r   c                f    t        | t              s| g} | D cg c]  }t        ||       c}S c c}w r   )r   listrZ  )r   r   r  s      r   get_verbose_code_partsr]    s1     j$' \
EOP	!)U3PPPs   .c                    | y t        |       s| S t        | t        j                        sJ | j                  j                         S r   )r1   r   r   SymIntr   maybe_as_int)dims    r   convert_int_to_concrete_valuesrb    s>    
{s
#u||,,,xx$$&&r   c                >    | D cg c]  }t        |       c}S c c}w r   )rb  )size_or_stridera  s     r   convert_to_concrete_valuesre     s    ;IJC*3/JJJs   c                ,   |t         j                  j                         z  t         j                  j                         z
  }| j                  }| j
                  j                  }| j                  }	d| d|j                   d| d| d| d|	 d| d| d}
|
S )Nzcheck_tensor(r   z	, device=z, requires_grad=z, size=z	, stride=))	r   r   _dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper;  indexrequires_gradr   )valuenamesizesstridespytypedispatch_keysdispatch_keyrj  device_indexrl  	guard_strs              r   get_tensor_guard_code_partrv    s    @@BB0023L KKE<<%%L''M
vR 3 34B|nBug N/geWIV]U^^_	a  r   c                H    t        t        |             j                  |      S r   )r\  rg   rk  )dctkeys     r   get_key_indexrz    s     
 !#&'--c22r   c                    d|  d| dS )Nlist(dict.keys())[]r  )r   rk  s     r   get_key_index_sourcer    s    VHCwa00r   c                D    t        dt        |        d|  ddz   dz         )NType  for object  cannot be saved @into torch.compile() package since it's defined in local scope. @Please define the class at global scope (top level of a module).)	TypeErrortype)objs    r   raise_local_type_errorr    s8    

S	{,se+<=
L	M
L	M r   T)frozenc                  8    e Zd ZU dZded<   dZded<   dZded<   y)NNModuleAttrAccessorInfoFboolpresent_in_generic_dictNOptional[str]l1_keyl2_key)r   r   r   r  __annotations__r  r  r  r   r   r  r  &  s'     %*T) !FM  !FM r   r  c                t   | j                   j                         }t        | j                  t              r| j                  j                  }n(t        |t
              sJ t        || j                        }t        ||      }t        t        |            |   }t        |t        t        f      r	| d|d}	n| d| d}	t        | j                  t              sM|j                  ||| j                  t        j                        j                  | j                  | d|g       |j!                  ||	||      S )N[r~  rk  r   example_valueguard_manager_enum == )basern  r   rk  rC   r-  rz  r  r\  rg   intstrget_key_managerGuardManagerTypeGUARD_MANAGERadd_equals_match_guardget_value_manager)
r   base_guard_managerbase_example_valuer  r  base_source_namerk  
key_sourcekey_example_valuevalue_sources
             r   getitem_on_dict_managerr  5  s:    {{'')&,, 23"",d3330&,,?%&6>J ./ABCEJ#c3Z0*+1->,AC*+1ZL:fll$67 	** ,,/==	 	+ 	

 !
 LLj\.?-BCD
 //#-	 0  r   c                    | j                   }t        |t              ry| j                         ry|j	                         xr t        |t
               S NFT)originating_sourcer   rT   is_specialized_nn_moduleis_dict_keyrP   )r   r   s     r   match_on_id_for_tensorr  ^  sJ    %%F &+,%%'F
6:(F$FFr   c                  "    e Zd ZU ded<   ded<   y)GuardCodeList	list[str]	code_listr&   r   Nr   r   r   r  r  r   r   r  r  m  s    Lr   r  c                      e Zd ZdZdZy)r  r8      N)r   r   r   r  DICT_GUARD_MANAGERr  r   r   r  r  s  s    Mr   r  c                <    t        t        t        |                   S r   )r\  rS  r   )codes    r   &code_framelocals_names_reversed_cachedr  x  s    /5677r   c                     e Zd Z	 d6	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d7dZd Zd Zed        Zd Zd Z	d Z
d	 Zd
 Zd Zd8dZ	 	 d9dZd6d:dZd;dZd<dZd8dZd6d=dZd=dZd8dZd>dZd8dZd8dZd8dZd6d8dZd8dZd8dZd8dZd8dZd8dZ d8dZ!d6d?d Z"d8d!Z#d8d"Z$d8d#Z%d8d$Z&d8d%Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d8d.Z0d8d/Z1d8d0Z2d8d1Z3d8d2Z4d8d3Z5d6d8d4Z6d6d5Z7y)@GuardBuilderNc
           	     T   || _         || _        || _        || _        ||d| _        t
        j                  j                         | j                  d<   t        j                  j                  j                  j                         D ]X  \  }
}|
j                  dd      j                  dd      j                  dd      }
|| j                  d   |
<   || j                  |
<   Z || _        g | _        g | _        g | _        g | _        g | _        || _        t+               | _        | j(                  j.                  j0                  D ]C  }| j,                  j3                  t5        | j7                  |j9                                            E i | _        i | _        t+               | _        |	| _         y )NLG__builtins__>_<._dot_)!f_codeid_ref
source_reflookup_weakrefsscopebuiltins__dict__copyr   packagepackage_importer_package_imported_modulesr   rN  r   argnamesr  shape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managerr   key_order_guarded_dict_idsoutput_graphguard_on_key_orderr   idgetrn  r   _cached_guard_managers_cached_duplicate_input_guardsserialization_mode)r   r  r  r  r  local_scoper   r   r  r  rn  package_moduler   s                r   r   zGuardBuilder.__init__~  s    $.9D<3X
%-%6%6%;%;%=

>" ]]++EEKKM	. 
<<S)11#s;CCCQD/=DJJ~&t,-DJJt	. +#%)+	
 46 46%LN.6F +.%'++88KK 	MF++//488FKKM3J0KL	M BD
  	# EHE+"4r   c                \   | j                  |      }t        |t              rt        d|j                         |j
                  j	                         }t        |      D ]K  }||   }t        |j
                  |      }| j                  ||      }|j                  || d|d||       M y )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )rk  r  r~  ry  r   r  r  )
get_guard_managerr   r   NotImplementedErrorrn  r  rg   rF   get_guard_manager_typedict_getitem_manager)	r   r  r   dict_mgrdict_sourcery  rm  r  r  s	            r   #guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_order  s    ))%0h 01%FFKjj\S  ..335 %]3 	C!#&E,U-E-ESQL!%!<!<m" ))%awa0##5	 * 	r   c                   | j                  |      }t        |t              st        d|j                         t        |t              sJ t        t        |            D ]  \  }}t        |j                  |      }|j                  |||t        j                        }t        |      r6| j                  ||      }|j                  |t        d| d| d|             |j                  |t        | d||              y )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r  z__check_obj_id(r   rg  r  )r  r   r   r  rn  	enumeraterg   r  r  r  r  rp   r  add_id_match_guardr]  r  )	r   rm  r   r  r   ry  r  key_managerid_vals	            r   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_order  s    ))%0($45%;;@::,H  ($4555 ""3E":; 	HC-ejj#>J"22!!#3#A#A	 3 K ~S*5..*)*RxqA5 22/:,d3'0JER'	r   c                    t         j                  rAt        j                  dk\  r.t        j                  dk  rt	        j
                  dt               y | S )N)      )r  r  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  sF     ''  G+  :-MM_ r   c                   d }|j                   }	|j                  }
t               }t        j                  |j
                        D ]+  }|j                  |j                  j                                - t        ddd      }|	|
v rt        d|	d      }nNd|
v r|	|
d   v rt        dd|	      }n5d|
v r|	|
d   v rt        dd|	      }n|	|vrd|
v r|	|
d   v rt        dd|	      }|j                  s|j                  |j                   |||      S |j                  sJ |j                  }|j                  }| d	}dx}}dx}}dx}}|rTt        |j                  |      }|j                         }|
|   }| j!                  ||      }|}|}| j!                  ||      }n|}|}| j!                  ||      }|j#                  || j%                  |
      t&        j(                  
      } |||||
||      }|r |||||||      S |S )a(  
        This tries to avoid calling the expensive nn module custom getattr method by
        checking if the attribute is accessible via __dict__. For attributes that
        are not accessible via __dict__ (like descriptors), we fallback to
        PyObject_GetAttr.

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

        The most common and expensive case for nn module guards is of type
        mod.submod1.submod2.submod3.training. We avoid the python getattr of nn
        modules by going through the __dict__.
        c                   t        | t              rct        ||      }d| d|d}| j                  |||t        j
                        j                  || d|g       | j                  ||||      S | j                  ||||      S )Nr|  r}  r~  r  r  r  )	r   r   rz  r  r  r  r  r  r  )r   ry  source_namer  r  r  rk  r  s           r   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr.  s     #/0 &&8#>  /{m3uiqI
##%"%'7'E'E	 $ 
 )(*T#/I.JK ,,&"/'9	 -   //&"/'9	 0  r   FNT_parameters_buffers_modulesattrr   r  r  	.__dict__r   r  r  )r   ry  r  r  r  r  )memberr  r   r  getmror   updatekeysr  r  getattr_managerr  r  r>   r  rn  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	@ MM	%...1e! 2 < <= 	@A%,,QZZ__->?	@ 1dC 4T9dKMh&98O+O4T=)TM8#	Xj5I(I4T:yQM66h&Xj11 5T:yQM44 &55]]"+#5	 6   !''''"))F"))F "2 2)<O.22N^"&&Hx<@@!$9&v{{F;	!*!1#F+ )-(C(CIx(X%!,((,(C(CM)% "-((,(C(CM)% (:'R'R&"JJ8T#3#A#A (S ($ ),*#+&#8F * .'/"*'<  Mr   c                ~    |j                         }|dk(  ryt        | j                  |            }|| j                  v S )Nr   F)rn  r  r  r  )r   r   r  obj_ids       r   requires_key_order_guardingz(GuardBuilder.requires_key_order_guarding  s<    kkm"DHH[)*8888r   c                    t         j                  }| j                  |      rDt        |t              rt         j
                  }|S t        |t              sJ t         j
                  }|S r   )r  r  r  r   rj   r  r-  )r   r   r  r  s       r   r  z#GuardBuilder.get_guard_manager_type  s^    -;;++F3-3%5%H%H" "! "-666%5%H%H"!!r   c                (    |t         j                  k(  S r   )r  r  )r   mgr_enums     r   manager_guards_on_keysz#GuardBuilder.manager_guards_on_keys  s    +>>>>r   c                    | j                   j                  j                  | j                  d   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  sH    !!&&;;jjo**S//==	 < 
 	
r   c           	     p   | j                   j                  }d }j                         }|dk7  r|| j                  v r| j                  |   S |dk7  r| j	                  |      }| j                  |      }d }d }d }t        j                  }	t        t              rbj                  j                         }| j	                  |      }| j                  j                        }| j                  j                  |      }	t        t              rbt        | j                        }
t!        |
      |
j#                  j$                        z
  dz
  }|j'                  j$                  |f|||      }nt        t(              r/| j+                         j-                  j.                  |||      }nlt        t0              r/| j+                         j3                  j.                  |||      }n-t        t4              r|S t        t6              r|S t        t8              r|sJ |j;                  |||      }nt        t<        t>        t@        tB        tD        f      r|sJ |}nt        tF              r|jI                  fd|||      }nt        tJ              r|sJ |jM                  |||      }n^t        tN              r%|sJ |jQ                  jR                  |||      }n)t        tT        tV        f      rs|sJ t        |tX        jZ                  j\                        r*t_        |      t`        u r| jc                  ||||||      }n|je                  jR                  |||      }nt        tf        th        f      r|sJ t        |tj        tl        jn                  f      sJ t        |tp              r$| js                  |	      sJ tu        ||||      }n0t        j"                  tv              rty        d	      |j-                  j"                  |||      }nt        tz              rH t}        |d
j~                  j                  j                          d      j                  |||      }nt        t              r%|sJ |j                  j                  |||      }n]t        t              r%|sJ |j                  j"                  |||      }n(t        t              r|sJ t        |tj        tl        jn                  f      rJ d       t        |t              r-j                  s!|j                  j"                  |||      }nt        |t              r-j                  s!|j                  j"                  |||      }nsj"                  }j                  rj                         }|j                  ||||      }n4t        t              r|sJ t        |      sJ j                  sK|j                  ||j                  t        j                        j                  j                  |||      }n|j                  }|J |dz   }|j                  ||t        j                        }t        |tp              rJ |j-                  j                  |||      }nRt        t              r|sJ |jI                  t        |||      }n#t        t              r|sJ |jI                  d |||      }nt        t              r|sJ |jI                  d |||      }nt        t              r|sJ |jI                  d |||      }nt        t              r|sJ |jI                  d |||      }nst        t              r|sJ |jI                  d |||      }nGt        t              r|sJ |jI                  d |||      }nt        t              r$|sJ |j                  j"                  |||      }nt        tv              r;t        |tp              st        d      |j                  j"                  |||      }nt        t              r|sJ |j                  |||      }nst        t              r|sJ |j                  |||      }nJt        t              r|sJ |jI                  d |||      }nt        d dj                                || j                  j                         <   |S )Nr   r8   r  )global_namer   r  r  r  c                6    t        j                               S r   )rm   
_get_index)r  r   s    r   r0  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                (    | j                         d   S r   __tensor_flatten__r   s    r   r0  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (<(<(>q(A r   c                "    | j                         S r   )__obj_flatten__r-  s    r   r0  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (9(9(; r   c                >    | j                         j                         S r   )_typequalified_namer-  s    r   r0  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    	(@(@(B r   c                "    | j                         S r   )get_baser-  s    r   r0  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    

 r   c                "    | j                         S r   )itemr-  s    r   r0  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s     r   c                ,    t        j                  |       S r   )r   rH  r-  s    r   r0  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (A(A!(D r   r  z4ConstDictKeySource can only work on DictGuardManagerc                    t        |       S r   )ri   r-  s    r   r0  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (8(; r   zmissing guard manager builder z - )fr   r   rn  r  r  r  r  r  r   rA   r  get_guard_manager_from_sourcero   rR   r  r  rW  rk  
local_nameframelocals_managerrM   r"  r  r$  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   r-  r>  r?  r   r  r  rC   RuntimeErrorr    getattrproplowerr   r   indexed_managerrQ   list_getitem_managerrL   r\  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outrk  
kwdefaults	kw_sourcer  s    `               r   r9  z*GuardBuilder.get_guard_manager_from_source  s	
   !//44kkm"0K0K!K..{;;" HH[1M!88O  !!"2"@"@fm,%{{//1!%*:!;!%!C!CFKK!P&*&A&A/'#
 &+& *P*& ./,2263D3DEF 
 %88&&8"+#5	 9 C FL) //1FF&&"+#5	 G C F/0//1HH".."+#5	 I C F-. &%FN+%%FJ'%%%$11"+#5 2 C
 +2"	
 &%%$CF89$33 #+#5 4 C FJ'%%%$11"+#5 2 C
 F-.%%%$<<]]"+#5	 = C FZ)GHI%%% -uxx?&'9:./ //&&!$& )88&"/'9	 9  F.0IJK%%%049P9P2QRRR,.>?223JKKK-&&!& fll,>?&8  )==&"/'9	 >  F01'""6;;#3#3#9#9#;"<HE JJ"+#5C FM*%%%$44JJ"+#5	 5 C F-.%%%$99LL"+#5	 : C FM*%%%!"T;+B+B$C '&'  ,d3F<Q<Q(==&"/'9	 >  .6v?T?T(>>&"/'9	 ?  (("//1E(88&"/'9	 9  FN+%%%.///<<(>>+"4"A"A'7'E'E ?  "/&"/'9	 " 	  0>>
'333,/@@	 .EE$",'7'E'E F 
 &h0@AAA33&"/'9	 4  F-.%%%$33("+#5	 4 C F23%%%$33A"+#5	 4 C F56%%%$33;"+#5	 4 C F;<%%%$33B"+#5	 4 C FO,%%%$334"+#5	 4 C F01%%%$330"+#5	 4 C F-.%%%$33D"+#5	 4 C F67%%%$CCll"+#5	 D C  2302BC$J  %44ll"+#5	 5 C F-.%%%$99"+#5 : C
 F45%%%$BB"+#5 C C
 F12%%%$33;"+#5	 4 C !0FKKM?K  69##FKKM2
r   c                8    | j                  |j                        S r   )r9  r  r   r   s     r   r  zGuardBuilder.get_guard_manager+  s    11%2J2JKKr   c                   |
t               }dj                  |j                               }t        ||      \  }}i }d| j                  d   i}	t
        j                  d|       t        ||	|        |d   |j                          }
|r'| j                  j                  j                  |
|       y | j                  j                  j                  |
|       y )Nr   r  zPython shape guard function:
%s___make_guard_fn)rI  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pycoder]  globals_for_guard_fnguard_fns              r   $add_python_lambda_leaf_guard_to_rootz1GuardBuilder.add_python_lambda_leaf_guard_to_root.  s     ,.L "YY|'8'8':;2:?QRV  #TZZ_5;VDV)3/*3)*L,?,?,AB ##==, ##44X?QRr   c                H    |
t               }t        || j                  |      S r   )rI  evalr  )r   rn  r   s      r   r  zGuardBuilder.getQ  s#    ,.LD$**l33r   c                8   t        |t              r|}n|j                  }t        |      }|| j                  vrat
        j                  j                  j                  |      }|r6|dk(  rt        j                  d|       | j                  j                  |       |S )Nr  zinvalid var name: %s)r   r  rn  strip_function_callr  r   r   r   is_valid_var_namelogwarningr  )r   r   rn  r  is_valids        r   arg_refzGuardBuilder.arg_ref[  sz    eS!D::D"4(t}}$xx''99$?Hq=KK 6>$$T*r   c                    t        |j                  |      }t        |||j                  |j                        }|j                  |        y )N)rU  rR  )r>   r  r&   rU  rR  create)r   r   r	  rq  attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attributek  sA     !9!99EAQAQ
	 	r   c           	        |j                   }t        |t              r|j                  }t        |t              sJ d|j
                          |j                  }|j                         }|j                  }| j                  |      }t        | j                  |      |      }d }|r
d| d|d}n	d| d|d}| j                  ||g| j                  |             | j                  |      }	|r| j                  |j                               }
| j                  |      }| j                  ||
      }t        |t        j                  j                        r6t!        |      t"        u r%| j%                  ||	||
||j                         |      S |	j'                  ||j
                  |
|       y |	j)                  |t+        ||             y )Nzinvalid source hasattr(r   rg  znot hasattr()provided_guarded_objectr  )r  r   rS   r  r>   rn  r  r{  r   r  _set_guard_export_infor9  r  r   rA  rB  rk   rw   r  r  add_no_hasattr_guardr]  )r   r   r   base_sourcer  r   refvalr  base_managerr  r  r  s                r   HASATTRzGuardBuilder.HASATTRt  s   ))fn-[[F&*-M/MM-kk!}}ll4 dhhtnd+cU"THA.D!#b2D##D6488D> 	$ 	
 99+F !HHV[[]3M!%$!%!<!<V]!S
 -uxx?&'9:./ 00 &!KKM&  ,, ::"/'9	 -  --d4J4QV4WXr   c                   |J | j                  |      }| j                  |j                        }t        |t        j
                  j                        sJ | j                  |      }|j                   d}|j                  || j                  |j                        t        j                        }d|d| d}|j                  d|t        ||             y )Nr  r  znot ___dict_contains(r   z
.__dict__)F)r{  r  rn  r   r   rA  rB  r  r  r  r  r  r  add_dict_contains_guardr]  )	r   r   r   r  r  r  r  r  r  s	            r   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT  s    ll5!hhuzz"#uxx///--e4"ZZL	2#/#H#H"FFs||T/== $I $
  'thbZ@ 884/e<	
r   c                   | j                  |j                        }t        |t        j                  j
                        r|j                  r|j                  }nt        |      }| j                  dk(  r$|j                  |j                  k7  rt        |       | j                  |d|j                   d      }d| j                  |       d| d}| j                  ||g       | j                  |      j!                  |t#        ||             y )Nsavetype(rg  z___check_type_id(r   )r  rn  r   r   _subclasses
FakeTensorrq  r  r  r   r   r  r  r{  r  r  add_type_match_guardr]  )r   r   rm  r   r  r  s         r   
TYPE_MATCHzGuardBuilder.TYPE_MATCH  s    $eU..99:u||AUA""f,~~+&u-Q%

|1 56"4<<#6"7r&C##ED62u%::*47	
r   c                   | j                   dk(  r)t        j                  j                  j	                  d      | j                  |      }| j                  |j                        }t        | j                  |j                              }d| d| }| j                  ||g       | j                  |      j                  |t        ||             y )Nr  z(DICT_VERSION guard cannot be serialized.z___dict_version() == )r  r   r   r;   PackageErrorr{  r  rn  r   r  r  add_dict_version_guardr]  )r   r   r  r  versionr  s         r   DICT_VERSIONzGuardBuilder.DICT_VERSION  s    ""f,--##00:  ll5!hhuzz"txx

34!#eG95##ED62 	u%<<'e4	
r   c                    | j                  |      }|rdnd}| d|d| d}| j                  ||g       | j                  |      j                  | |t	        ||             y )Nnot r   z___dict_contains(r   rg  )r{  r  r  r  r]  )r   r   ry  invertdict_ref	maybe_notr  s          r   DICT_CONTAINSzGuardBuilder.DICT_CONTAINS  sn    <<&$F"	-cWBxjB##ED62u%==J3D%@	
r   c                b   | j                  |      }| j                  |j                        }t        |t              sJ | d|g}| j                  ||       |r+| j                  |      j                  t        ||             y | j                  |      j                  t        ||             y )Nr  )
r{  r  rn  ro   r  r  r  add_true_match_guardr]  add_false_match_guardr   r   r  r  r  s        r   
BOOL_MATCHzGuardBuilder.BOOL_MATCH  s    ll5!hhuzz"c4   %tC7#$##E40""5)>>&tU3 ""5)??&tU3r   c                    | j                  |      }| j                  |j                        }|J | dg}| j                  ||       | j	                  |      j                  t        ||             y )Nz is None)r{  r  rn  r  r  add_none_match_guardr]  r  s        r   
NONE_MATCHzGuardBuilder.NONE_MATCH   sn    ll5!hhuzz"{{%x !##E40u%::"4/	
r   c                2   | j                   dk(  r)t        j                  j                  j	                  d      t        |j                  t              r=| j                  t        |j                  j                  t        j                              S | j                  |      }| j                  |j                        }| j                  ||j                        }d| d| d}| j!                  ||g       | j#                  |      j%                  |t'        ||             t        |j                  t(              r_t        |t        j*                  j,                        r:|j                  j.                  }| j1                  |      }||| j2                  |<   y y y y )Nr  z$ID_MATCH guard cannot be serialized.z___check_obj_id(r   rg  )r  r   r   r;   r  r   r  r[   r  r&   r  r  r{  r  rn  r  r  r  r  r]  rR   rA  rB  r:  r  r   )r   r   r  r  r  r  r:  weak_ids           r   ID_MATCHzGuardBuilder.ID_MATCH  sW   ""f,--##001WXXe..
;??e..33\5L5LM  ll5!hhuzz"S%**-!#b2##ED62u%88*47	
 e..< #uxx/"55@@
..s3&7>D((4 ' 0	 =r   c                   | j                  |      }| j                  |j                        }t        |t        j
                        sJ | d}| j                  ||g       | j                  |      j                  t        ||             y )N is not None)
r{  r  rn  r   r   Tensorr  r  add_not_none_guardr]  )r   r   rm  r  r  r  s         r   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH,  sw    ll5!hhuzz"#u||,,,l###ED62u%88"4/	
r   c                   | j                  |      }| j                  |j                        }t        |t        j
                  j                        sJ | d|d}| j                  |      j                  |t        ||             y )Nz.raw_repr() == z.raw_repr())
r{  r  rn  r   r   r   DispatchKeySetr  add_dispatch_key_set_guardr]  )r   r   r  r  r   s        r   DISPATCH_KEY_SET_MATCHz#GuardBuilder.DISPATCH_KEY_SET_MATCH7  st    ll5!hhuzz"#uxx66777uOC7+>
u%@@'
E:	
r   c                F    | j                  |dt        j                         y )Nr   )r  r  EQUALS_MATCHra  s     r   
NAME_MATCHzGuardBuilder.NAME_MATCHA  s      
L4M4MNr   c                   | j                   j                  j                  d g}| j                  ||g       t        j
                  j                  fd}| j                  j                  j                  |t        ||             y )Nz,torch.autograd.forward_ad._current_level == c                "    j                   k(  S r   )_current_level)r   
dual_level
forward_ads    r   fnz#GuardBuilder.DUAL_LEVEL.<locals>.fnM  s    ,,
::r   )r  r  r  r  r   autogradr  r   r   rk  r]  )r   r   r  r  r  r  s       @@r   
DUAL_LEVELzGuardBuilder.DUAL_LEVELD  sz     **77BB
>zlKL##ED62^^..
	; 	00&tU3	
r   c                t   | j                   j                  j                  }|D cg c]  }|j                          c}d dg}| j	                  ||       t
        j                  j                  j                  fd}| j                  j                  j                  |t        ||             y c c}w )Nz5torch._functorch.pyfunctorch.compare_functorch_state(rg  c                           S r   r  )r   
compare_fnstatess    r   r  z.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn_  s    f%%r   )r  r  functorch_layers	get_stater  r   
_functorchpyfunctorchcompare_functorch_stater   r   rk  r]  )r   r   ciscir  r  r  r  s         @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCHT  s     ##00AA+./R",,./GxqQR##E40 %%11II
	& 	00&tU3	
 0s   B5c                   t         j                  j                  j                  j                  t         j                  j                  j                  j
                  fd               d g}| j                  ||       fd}| j                  j                  j                  |t        ||             y )Nc                R     |       sy | \  }}t        t        t        |             S r   )rJ  mapr  )hooks	pack_hookunpack_hookare_inline_hookss      r   hooks_ids_fnz?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.hooks_ids_fnl  s)    #E*%*"I{R((r   zCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == c                $                   k(  S r   r  )r   	get_hooksguard_hooks_idsr  s    r   r  z5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS.<locals>.fnz  s    "l9;&???r   )r   r  _aot_autogradrF  top_saved_tensors_hooks"saved_tensors_hooks_are_inlineabler  r   r   rk  r]  )r   r   r  r  r  r  r  r  s       @@@@r   AUTOGRAD_SAVED_TENSORS_HOOKSz)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKSf  s    $$2288PP	**00SS 		) 'y{3 RRaQbc
 	##E40	@ 	00&tU3	
r   c                   | j                  |j                        t        | j                  |j                        j                         d         t	        d      rt               fd}nfd}dt        |       dt        j                          }| j                  |      j                  |t        ||             y )Nr8   __metadata_guard__c                J    j                  | j                         d         S Nr8   )r  r,  )r   original_metadatarm  s    r   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s)    //%q';';'=a'@ r   c                0    | j                         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  rn  r   r,  r   rx   r  r#   current_compile_idr  rk  r]  )r   r   r  r$  r  rm  s       @@r   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH  s    $$TXXejj%9%L%L%Nq%QR5./%e,F +2.>+?*@>CdCdCfBghu%664[%H	
r   c                   | j                  |      }| j                  |j                        }t        rt        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  f}nd}t        t         f}t#        t$        t&        t"        t(        t*        t,        t.        t0        j2                  h||z        }t0        j4                  j7                         rddlm} ddlm}	m }
m!}m"} ||||
||	fz   }ddl#m$} ||fz   }dd l%m&c m'} tQ        ||      s. |jR                  t'        |            sJ dt'        |              tQ        |tT              rtW        jX                  |      rq| j[                  |       g }|j]                  d| d       | j_                  ||       | ja                  |      jc                  te               d	   tg        ||             y tQ        |th              rt        jX                  |      rq| j[                  |       g }|j]                  d
| d       | j_                  ||       | ja                  |      jc                  te               d   tg        ||             y | d|g}tQ        ||      rtk        |      }tg        ||      }|r|D cg c]
  }| d| d }}| ja                  |      jm                  ||       | j_                  ||       y c c}w )Nr  r   )
DeviceMesh)_StridedShardPartial	ReplicateShard)_IntWrapperzUnexpected type z__math_isnan(rg  r6  z__numpy_isnan(r7  r  z (HINT: )7r{  r  rn  r  int8int16int32int64uint8uint16uint32uint64float16float32float64r\  r   rJ  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._pytreerF  r3   ro   is_constant_classrC  rA  rB  r  r  r  r  rk  rI  r]  complexr   r  )r   r   recompile_hintr  r  np_typesok_mutable_typesok_typesr  r  r  r  r  r  pytreer  r   r   s                     r   r  zGuardBuilder.EQUALS_MATCH  s   ll5!hhuzz"						





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


 
 "

 ))+@   # H 	<{n,,,c8$(@(@(@c(K 	
tCyk*	
K
 #u$**S/OOE"DKK-uA./''t4""5)::!#N3&tU3  #wBHHSMOOE"DKK.Q/0''t4""5)::!#O4&tU3  %tC7#$#'( 3-C3D%@?Q"7;4& 02" " 	u%<<SBTU##E40"s   Mc                    | j                  |j                        }t        |t              r| j	                  |       y || j                  |       y t        |t        j                        r| j                  |       y | j                  |       y r   )
r  rn  ro   r  r  r  typesCodeTyper  r  r   r   r  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCH  sc    hhuzz"#tOOE"[OOE"C(MM% e$r   c                   | j                   dk(  r)t        j                  j                  j	                  d      | j                  |       | j                  |j                        }t        |d      r>t        |j                  t              sJ | j                  |dt        j                         y t        j                  dddt!        |       ddg	       y )
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  rn  r   ro   r  r  r  r  r  unimplemented_v2r  r  s      r   	NN_MODULEzGuardBuilder.NN_MODULE  s    ""f,--##007  	ehhuzz"3
##,,---$$UJ8S8ST  G''+Cyk5 `r   c                    | j                   dk(  r)t        j                  j                  j	                  d      | j                  |      S )z0things like torch.add and user defined functionsr  z*FUNCTION_MATCH guard cannot be serialized.)r  r   r   r;   r  r  ra  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH#  sC     ""f,--##00<  }}U##r   c                   | j                   dk(  r)t        j                  j                  j	                  d      | j                  |j                        }t        |      t        j                  k(  rOt        |d      rC| j                  |dt        j                         | j                  |dt        j                         y| j                  |       y)z!matches a closure by __code__ id.r  z)CLOSURE_MATCH guard cannot be serialized.__code__N)r  r   r   r;   r  r  rn  r  r
  FunctionTyper   r  r  r  r  r  s      r   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH,  s     ""f,--##00;  hhuzz"9***wsJ/G$$UJ8L8LM$$UJ8S8ST&r   c                $    | j                  |      S r   )r  ra  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCH;  s    ""5))r   c                >   | j                  |      }| j                  |j                        }t        |t              s| j                  |       g }t        |      dk(  r|j                  d|        n |j                  d| dt        |              | j                  ||       t        |t              r5| j                  |      j                  t        |      t        ||             y | j                  |      j                  t        |      t        ||             y )Nr   r  zlen(r  )r{  r  rn  r   r-  r  rW  r  r  r  add_dict_length_check_guardr]  add_length_check_guardr   r   r  rm  r  s        r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTH>  s     ll5!$%&OOE"u:?KK$se%KK$se5U56##E40eT"""5)EEE
24? ""5)@@E
24?r   c                   | j                  |      }| j                  |j                        }t        |      }g }|j	                  d| dt        |              | j                  ||       t        |      }| j                  |d|j                   d      }| j                  |      j                  t        |      |t        ||             y )Nz___tuple_iterator_len(r  r  rg  )r{  r  rn  r  r  rv   r  r  r  add_tuple_iterator_length_guardr]  )r   r   r  rm  r   r  r  s          r   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LENX  s    ll5!$K,SE7I%7P6QRS##E40KQ%

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

|1 561tTu%DD4v'=dE'J	
r   c                N   | j                   dk(  r)t        j                  j                  j	                  d      | j                  |      }| j                  |j                               }t        |j                        st        |      ry ||f}|| j                  v ry | j                  j                  ||f       | j                  j                  ||f       | d| g}| j                  ||       t        | j                  |      | j                  |      t        ||             y )Nr  z/DUPLICATE_INPUT guard cannot be serialized yet. is )r  r   r   r;   r  r{  rn  r   r  r  r   r  r   r  r9  r]  )r   r   source_bref_aref_bry  r  s          r   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT{  s   ""f,--##00A  U#X]]_-#$$
%h/ en$555++//?++//?'eW%&##E40%""5)..x8"4/	
r   c                   | j                   dk(  r)t        j                  j                  j	                  d      | j                  |       dg}| j                  ||       | j                  |      j                  t        ||             y )Nr  z)WEAKREF_ALIVE guard cannot be serialized.r  )
r  r   r   r;   r  r{  r  r  r  r]  r   r   r  s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE  s~    ""f,--##00;  <<&'|45##E40u%88"4/	
r   c           	     "   | j                  |      }| j                  |j                        }g }|j                  d| dt	        |j                                       | j                  ||       | j                  |      j                  ||       y)z7Guard on the key order of types.MappingProxyType objectzlist(z.keys()) == N)	r{  r  rn  r  r\  r  r  r  add_mapping_keys_guardr!  s        r   MAPPING_KEYS_CHECKzGuardBuilder.MAPPING_KEYS_CHECK  sw    ll5!$eC5T%**,-?,@AB##E40u%<<UDIr   c           
        | j                  |      }| j                  |j                        }|t        j                  j
                  j                  u r| j                  |       y| j                  |       g }|j                  d| dt        t        |                   | j                  ||       | j                  |j                        r| j                  ||       y| j!                  ||       y)z6Insert guard to check that the keys of a dict are sameNr|  z)) == )r{  r  rn  r   rF  r3   SUPPORTED_NODESr  r"  r  r\  rg   r  r  r  r  r  r!  s        r   DICT_KEYS_MATCHzGuardBuilder.DICT_KEYS_MATCH  s    ll5!$EKK''777e$U#
 	ocU&6G6N1O0RST##E40++E,D,DE--eU;44UEBr   c                H    t         j                  ry| j                  |       y)z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)r9   skip_nnmodule_hook_guardsr"  ra  s     r   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s    ++U#r   c                     y r   r  ra  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODE      r   c                     y r   r  ra  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS  rA  r   c                     y r   r  ra  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE  rA  r   c                     y r   r  ra  s     r   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE  rA  r   c                    |j                   t        j                  u sJ d| j                  j                  j
                  g}| j                  ||       | j                  |      j                  t        ||             y)z/Guard on CURRENT_DEVICE per torch.utils._devicezutils_device.CURRENT_DEVICE == N)
r   r)   GLOBALr  r  current_devicer  r  add_default_device_guardr]  r4  s      r   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE  su    ||{11111 .d.C.C.P.P._._-bc
 	##E40u%>>"4/	
r   c                   $%&' |j                   dk(  sJ  j                  j                  ' j                  dk(  rl j                  j                  J  j                  j                  }|j
                  }|j                  }|j                  |j                  }|j                  }n\'j                  %%D cg c]  }|j                   c}&'fd}'j                  ri }	g }
g }i }t               }'j                  D ]j  }|j                  'j                  v r;t        j                   j"                  j%                  ||'j&                  |	|
|||       Vt(        j+                  d       l t-        |
|t/        |j1                               |d      $nd $$%&' fd}t2        j4                  r	  |d      \  }}}d}nd	} |d
      \  }} j                  j                  j                   s'j&                  j9                           j                  dk(  rst;               j=                  d      }|t?        |t@              sJ |g n"t/        |jB                  jE                               }tG        |||||       j                  _        |jH                  D ]  } jK                  ||g        tM        jN                         x}r%|jP                  jS                  |jH                         g }g }|ssJ |jH                  |jB                  }}|sy |jU                         D ]  \  }}t?        |tV              rd	} j=                  |j                         i tX        t[                     }t?        |t\              r|j_                  ||f       nt?        |t`              r|j_                  ||f       d	} |sdd l1}ddl2m3} sJ |jH                  |jB                  }}ti        ||z         }	 tk        |      D cg c]   \  }} jm                  to        ||            " }}}djq                  d tk        |      D              }djq                  d tk        |      D              } |rd| d}| rd|  d} ts        jt                  d| d|  ddjq                  |       d      }!tv        jy                  d|!|jH                         |j{                  |!      }"|j}                  |"j~                  |j                        j                  }#|#sJ 	 t        |t        |      t        |      |#|"|jH                         y |jH                  r9 j                  |jH                  |jH                  i tX        t[                      y y c c}w # t6        $ r d	} |d
      \  }}Y w xY wc c}}w # t        j                  j                  j                  $ r Y w xY w)Nr   loadc                z    j                   |    D cg c]  }t        |t        j                  |       c}S c c}w r   )tracked_fakes_id_to_sourcer    r   SIZE)t_idra  r   r  s      r   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources  s?    
 #/"I"I$"O )1D1DcJ  s   "8z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlyc           	        j                   j                  D cg c]  }|j                   c}D cg c]  }|j                   c}j                  j
                  j                  j                   |       S c c}w c c}w )N)input_contextsequalities_inputsr  ignore_staticlangs)	shape_envproduce_guards_verbosefaker   r  r  r  export)r]  r  r[  rY  rZ  r  r   s     r   _get_code_partsz/GuardBuilder.SHAPE_ENV.<locals>._get_code_parts#  st    #--DD%'(QVV(')*!QXX*#1&7#'+'<'<'I'I'P'P#P E 	 	(*s
   A=B
)pythonverbose_pythoncppT)rc  rd  r  cpp_code_parts)python_code_partsr   rf  python_fallbackshape_env_sources)r   r   )CppCodeCacher   c              3  8   K   | ]  \  }\  }}| d | d  yw)z = int_values[r~  Nr  .0ir  symbols       r   	<genexpr>z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  s-      ,&;Av hnQCq1,   c              3  8   K   | ]  \  }\  }}| d | d  yw)z = float_values[r~  Nr  rl  s       r   rp  z)GuardBuilder.SHAPE_ENV.<locals>.<genexpr>  s.      .&;Av h.qc3.rq  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)Hrn  r  r  r  shape_code_partsrg  r   rf  rh  tracked_fakessymbolic_contextexport_constraintsr   rR  rP  r   ra  dynamic_shapes_process_equalitiesr^  rx  ry  r0   r\  ri  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   rI  r  r  rC  ctypestorch._inductor.codecacherj  r-  r  r9  r   rd  textwrapdedentrf  rg  rN  castr   c_void_prm  r   rW  	_inductorr;   InvalidCxxCompilerrr  )(r   r   rt  rg  r   rf  rh  r  rS  namesrT  rU  rV  rW  
constraintrb  maybe_cpp_code_partsmaybe_shape_env_sourcesr  compile_contextint_source_to_symbolfloat_source_to_symbolr   r~  r   ro  r  r  rj  rn  guard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardr[  rY  rZ  r  s(   `                                   @@@@r   	SHAPE_ENVzGuardBuilder.SHAPE_ENV  s#   zzR,,99""f,((99EEE#44EE 0 B B!1!D!D..:!1!@!@.>>O ++B:<=Qa00=N ..46<>  # 68/2u"."A"A SJ!,*Q*QQ33GG&'(22!(.++	 $QRS %7!-'9$()?)?)A$B$3#%! %)!
 
 66 ((KL J%'9> ',O #'8G095!#5 ((55<<&&--/""f, $*8<<0@#A '/:$&;4  
 (/ .??DDFG $
 6D"3#53 /"96D!!2 &++ 	7D''v6	7 -4466?6,,334F4L4LM!!#!!>$$// )J
 "2"8"8": /fn5&*O$(HH%L%L8I8K%L %- %M "-5,33VV4DE#M59.55vv6FG +//" >!!>$$// )J
  $$8;Q$QR< &//?%@"!6 66}VQ7OP" "
 #')) ,*34H*I, # %)II .*34J*K. %!
 #(00A&CO$*12C1DA(F%#?? ## $$% &#==45 6(   5&,,
 $((2TZZAGGv
 -",-./&,, 
 ""55!''"((DD0A0CD 6  #i >z % &*O<K4=9%'9n"^ ??&&99 s=   8U8.U= (V  6%VC)V  =VVV   'W
	W
c                |	   t         j                  r|j                         ry t        |      r| j	                  |       y t        |t              r |       }||n| j                  |j                        }t        |      }t        j                  j                  |      }t        |t        j                  j                        r0|j                  |j                  }|j                   |j                   }t        |t        j"                        sJ t         j$                  r|t        |t        j&                  j(                        rXt+               }|j-                  d|j/                                |j-                  d|j0                         |j-                  dd       | j3                  |      }g }| j4                  j6                  j8                  r| j;                  |       g d}|D ]  }	| j                  |dz   |	z         }
t=        |
t        j>                  t        j@                  f      r$|jC                  d| d|	 dtE        |
             h|jC                  | d|	 d	|
         nd| jG                  |      }t         jH                  r$t=        |t        j&                  j(                        sPt        |jJ                  tL              s6| jN                  jC                  |       | jP                  jC                  |       | j4                  j6                  }|jR                  |jJ                     }tU        |d
         }tU        |d         }tW        tY        ||||||      |      }|j[                  |||||||       t        |t        j&                  j(                        s/| j\                  j^                  ja                  |j                         |jb                  J te        |d|jJ                        \  }}|stg        |d      rU|jh                  }d| d| d| d}|jC                  |       | jG                  |      jk                  |tW        ||             nBd| d}|jC                  |       | jG                  |      jm                  dtW        ||             to        |      dkD  r| jq                  ||       y y )Nparam_numelparam_bytesparam_countr8   )rj  r;  rl  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  rn  r  r   r   _dispatch_keysr  r  rq  rr  r  log_compilation_metricsrA  	Parameterr"   	incrementnumelnbytesr{  r  r  ra  r  ro   r;  rj  r  r  r  ,skip_no_tensor_aliasing_guards_on_parametersr  rT   r  r  input_source_to_sizes_stridesre  r]  rv  add_tensor_match_guardr   r   r   r   rt   r   r  add_dynamic_indices_guardr  rW  r  )r   r   rm  rq  rr  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1e6J6J6L "%(MM% %/".EDHHUZZ4HE%[F!HH33E:M%!2!2!=!=><<+"\\F&&2$)$7$7MeU\\222--*UEHHDVDV2W"5"7))-G))-F))-;,,u-K, !D$$1188& " MD!%+*;d*B!CJj5<<*EFd;-qeC
OCV$WX{m1TF$zl$KLM !% 6 6u = GGuehh&8&89$U%=%=?PQ 1188E::AA-P#44AA'EE,, 2(62BC3HX4FG%;.{D&&- 	&" 44&! "%););<&&99==ejjI< <<+++<U5M5MOFG 5";<&+&C&CO"$[M1STcSddrs~r  @g  !hIKK	***51KK')?	5)Q #;-/TU  KK	***51FF1.y%@ 4y1}++E48 r   c                   t               }|J |j                  }~|J |j                  j                  }~|| j                  j
                  v s
J d|        |"|j                  }|sd n| j                  |      }n|}|t        j                  t        |            nd }	d }
t        |j                  dd      dk7  }|r5t        |t        j                  t        f      st        j                  |      }
|j!                  ||	||
       y )NzH_produce_guard_code must be called from inside GuardedCode. Called from __weakrefoffset__r   )r   f_backr  co_namer   r  rn  r  weakrefr  r  rD  r   enumEnumrJ  set_export_info)r   r   r  r  	cur_framecaller	func_namern  guarded_objectguarded_object_typeobj_refsupports_weakrefs               r   r  z#GuardBuilder._set_guard_export_info	  s    !N	$$$!!!!!MM))	DNN333 	
VW`Vab	
3
 #*::D)-T488D>N4N 2@1KGKK^,-QU 	  N,,.A1EJ 	 J~		5?Q$Rkk.1G		
r   r   )r  types.CodeTyper  zCallable[[Any, str], str]r  zCallable[[Source], str]r  z)Callable[[object], ReferenceType[object]]r  dict[str, object]r   r  r   r   r  CheckFunctionManagerr  r  )r   r&   )NT)rn  r  r   zOptional[dict[str, Any]]returnr   )r   zUnion[str, Guard]r  r  )r   r&   r	  r  )r   r&   r  None)r   r&   ry  r  r  r  )r   r&   r  r  )8r   r   r   r   r  r  staticmethodr  r  r  r  r  r"  r9  r  rr  r  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r%  r,  r2  r5  r8  r;  r>  r@  rC  rE  rG  rL  r  r  r  r  r   r   r  r  }  s    -1?5?5 *?5 ,	?5
 C?5 '?5 (?5 +?5 /?5 *?5B8$L  "Sj9	"?
dLL SF4 4Yl
(
(
$	
"

?@	

O
 
$
6
*jX	%,$'*4
 
&
<

JC2$
jX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y)PyExprCSEPassr8   c                  "    e Zd ZU ded<   ded<   y)PyExprCSEPass.Configzdict[str, int]
expr_countzdict[str, str]expr_to_nameNr  r  r   r   Configr  	  s    ""$$r   r  c                  (     e Zd ZddZd fdZ xZS )PyExprCSEPass.ExprCounterc                    || _         y r   )_config)r   r9   s     r   r   z"PyExprCSEPass.ExprCounter.__init__	  s	    !DLr   c                    t        |t        j                        r*| j                  j                  t        |      xx   dz  cc<   t        |   |       y r  )r   r  ALLOWED_NODE_TYPESr  r  rO  r   r   )r   r   r   s     r   r   zPyExprCSEPass.ExprCounter.visit	  s>    $ @ @A''T(:;q@;GM$r   )r9   r  r  r  r   ast.ASTr  r   r   r   r   r   r   r   r   s   @r   ExprCounterr  	  s    	"	  	 r   r  c                  8     e Zd Z	 	 	 	 	 	 d fdZd fdZ xZS )PyExprCSEPass.Replacerc                L    t         |           || _        || _        g | _        y r   )r   r   r  	_gen_namepreface)r   r9   gen_namer   s      r   r   zPyExprCSEPass.Replacer.__init__	  s%    
 G!DL%DN&(DLr   c                :   t        |t        j                        rt        |      }| j                  j
                  |   t        j                  kD  r|| j                  j                  vrdt        | %  |      }t        |      }| j                         }| j                  j                  | d|        || j                  j                  |<   n| j                  j                  |   }t        j                  |t        j                               S t        | %  |      S )Nz = )r   r  r  rO  r  r  USE_THRESHOLDr  r   r   r  r  r  rL  NameLoad)r   r   exprnode_expr_var_namer   s         r   r   zPyExprCSEPass.Replacer.visit	  s    $ @ @A#D) <<**40=3N3NN4<<#<#<< !&d 3 ,U 3#'>>#3++xjE7,CD:B11$7#'<<#<#<T#B88Hchhj997=&&r   )r9   r  r  zCallable[[], str]r  r  r  r  r   s   @r   Replacerr  	  s.    	)(	) (	) 		)	' 	'r   r  c                j    d| _         | j                  t        j                  d       i       | _        y )Nr   c                      yr   r  r  r   r   r0  z(PyExprCSEPass.__init__.<locals>.<lambda>	  s    r   )r  r  )_counterr  r>  defaultdictr  r   s    r   r   zPyExprCSEPass.__init__	  s.    {{"..y9 # 
r   c                P    | | j                    }| xj                   dz  c_         |S r  )r  )r   r   rn  s      r   _new_varzPyExprCSEPass._new_var 
  s'    $--)r   c                    | j                  | j                        }|D ]'  }	 |j                  t        j                  |             ) y # t
        $ r'}t        j                  d|j                  |        d }~ww xY w)Nz#Failed to visit expr at line %s.
%s)	r  r  r   rL  parseSyntaxErrorrx  	exceptionlineno)r   r  countereexs        r   countzPyExprCSEPass.count
  si    ""4<<0 	Aciil+	  DbiiQRSs   $A			A9"A44A9c                    | j                  | j                  | j                        }|j                  t	        j
                  |            }|j                  t        |      fS r   )r  r  r  r   rL  r  r  rO  )r   r  replacernew_nodes       r   rN  zPyExprCSEPass.replace
  sF    ==t}}=>>#))D/2h!777r   N)r  r  )_var)r   r  r  r  )r  r  r  r  r  r  r  ztuple[list[str], str])r   r   r   r  rL  	AttributeCall	Subscriptr  dataclasses	dataclassr  NodeVisitorr  NodeTransformerr  r   r  r  rN  r  r   r   r  r  	  sx     M --3==A% % % coo  #'3&& #'J

8r   r  c                    t        | j                  t              xs. t        j                  xr | 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  
  s@    
 	5++^< 	
 33 :<#9#99r   c                  $     e Zd Z fdZd Z xZS )DeletedGuardManagerWrapperc                0    t         |           || _        y r   )r   r   invalidation_reason)r   reasonr   s     r   r   z#DeletedGuardManagerWrapper.__init__#
  s    #) r   c                    d | _         y r   )r   r   s    r   r   z6DeletedGuardManagerWrapper.populate_diff_guard_manager'
  s
    #r   )r   r   r   r   r   r   r   s   @r   r  r  "
  s    *$r   r  c                  @    e Zd ZU ded<   ded<   ded<   ded<   ded	<   y
)r  r/   rg  r   zOptional[_CppShapeGuardsHelper]rf  r  rh  zlist[Source]ri  Nr  r  r   r   r  r  +
  s     ))**33##r   r  c                  "    e Zd ZU ded<   ded<   y)GuardsStater{   r  Optional[ShapeCodeParts]rt  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        |   |i | t        j                  j	                         | _        t        j                  j                  j                         | _        y r   )	r   r   r   r  FakeTensorMode	fake_modefake_tensorFakeTensorConvertertensor_converter)r   r   kwargsr   s      r   r   zGuardsStatePickler.__init__;
  sH    $)&)**99; % 1 1 = = Q Q Sr   c                d    t         j                  j                         }|j                  |       |S r   )r   rA  rB  __setstate__)clsstatemods      r   _unpickle_modulez#GuardsStatePickler._unpickle_module@
  s%    hhoo
r   c           	        t         j                  j                         }t         j                  j                  j	                         }|j                  ||||t         j                  j                  j                  |            S r   )	r   r  r  r  r  from_meta_and_devicer   r  from_raw_repr)r!  meta_tensorr;  rq  dispatch_keys_rawr  r  s          r   _unpickle_tensorz#GuardsStatePickler._unpickle_tensorF
  si    %%446	 ,,88LLN44HH##112CD
 	
r   c                   i }|D ]  \  }}	}
 |	|
 ||<    |j                   |j                         }}t        |      j                  ||||      }||_        t
        j                  j                  j                  |      |_	        |S r   )
shaper  r  __tensor_unflatten__rq  r   r   r  r'  rr  )r!  r(  r;  rq  r)  ctx
inner_datainner_tensorsr   unpickle_funcunpickle_func_args
outer_sizeouter_strider]  s                 r   $_unpickle_traceable_wrapper_subclassz7GuardsStatePickler._unpickle_traceable_wrapper_subclassR
  s    
 7A 	E3D-!3"/1C"DM$	E $/#4#4k6H6H6JL
;443
L
 
!HH33AABST
r   c                ,    t        j                  |      S r   )rD  rE  )r!  aliass     r   _unpickle_python_modulez*GuardsStatePickler._unpickle_python_modulec
  s    &&u--r   c                T    t         j                  j                  j                  |      S r   )r   r   r  r'  )r!  raw_reprs     r   _unpickle_dispatch_key_setz-GuardsStatePickler._unpickle_dispatch_key_setg
  s    xx&&44X>>r   c                h    t         j                  j                  j                  j	                  |      S r   )r   r   r  CInterpreterdeserialize)r!  jsons     r   _unpickle_functorch_interpreterz2GuardsStatePickler._unpickle_functorch_interpreterk
  s#    xx""//;;DAAr   c                ,    t        j                  |      S r   )r
  MappingProxyType)r!  ds     r   _unpickle_mapping_proxyz*GuardsStatePickler._unpickle_mapping_proxyo
  s    %%a((r   c                   dd l }t        |t        j                        rV|j                  j
                  dk7  r<ddlm}  ||      rg }|j                         \  }}|D ]6  }t        ||      }| j                  |      \  }	}
|j                  ||	|
f       8 t        |       j                  t        j                  |d      |j                  t        |      t        j                  j                  |      j!                         ||ffS t        |       j"                  t        j                  |d      |j                  t        |      t        j                  j                  |      j!                         ffS t        |t        j$                  j&                        rt        |      j(                  t        |      j*                  k(  rt,        S |j.                  j0                  t        j$                  j&                  j0                  k(  rt        |       j2                  |j1                         ffS t5        j6                  |      r"t        |       j8                  |j*                  ffS t        |t        j                  j:                        r&t        |       j<                  |j!                         ffS t        |t        j                  j>                  j@                        r&t        |       jB                  |jE                         ffS t5        jF                  |      rItI        ||jJ                        r3tM        |d      r'tM        |d      sJ |jN                  |jP                  ffS t        |t        jR                        rtU        d| d|jV                   d	      t        |tX        jZ                        r&t        |       j\                  |j_                         ffS t        |      j(                  t        |      j*                  k7  r?t        j`                  jb                  je                  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: rg  r  r  r  r  r  )3sympyr   r   r  r;  r  torch.utils._python_dispatchrG  r,  rD  reducer_overrider  r5  
empty_liker   r  r:  r*  rA  rB  r   r   NotImplementedr   __getstate__r$  r  ismoduler8  r  r;  r  r=  r@  	serializeisclass
issubclassFunctionr   rI  rH  r_  rC  r   r
  rB  rD  r  r   r;   r  )r   r  rJ  rG  r/  attrsr.  r   innerfunc
args_tuples              r   rL  z#GuardsStatePickler.reducer_overrides
  sc   c5<<(SZZ__-FR,S1  
 335
s! @D#C.E'+'<'<U'C$D*%%tT:&>?@
 DzFF$$S8JJIHH++C099;I   :..  V4

S	'',557	1   UXX__-Cy%%c););;%%}}))UXX__-I-IIDz22S5E5E5G4IIIc":55FFUXX445:883<<>:KKKUXX00==>:==?QQQ OOC 3/233 2333''#*A*A)CCCU\\*!9#hsxxjPQRSSU334:55
}DD9!!T#Y%7%77--##00S	{,se3DETUTU  r   )r7  r  )r:  r  )r?  bytes)r   r   r   r   classmethodr$  r*  r5  r8  r;  r@  rD  rL  r   r   s   @r   r  r  :
  s    T
  
 	
 	
    . . ? ? B B ) )Fr   r  c                   t        j                         }t        |      }	 |j                  |        |j                         S # t        $ r8}t
        j                  j                  j                  t        |            |d }~ww xY wr   )ioBytesIOr  dumpAttributeErrorr   r   r;   r  r  r   )r"  bufpicklerr  s       r   pickle_guards_staterb  
  si    
**,C %G<U <<>  <mm,,SV4!;<s   A 	B3A>>Bc                  R    e Zd Z	 	 	 	 	 	 d	 	 	 	 	 	 	 d	dZ	 d
dZd Zd Zd Zd Zy)r  Nc                *
    |r|j                   nd }i  _        t        |      }	| _        | _        |r|j
                  nd  _        | _        t        d      st        j                  d       t        |xs dt        j                        }
 j                  |
|	|||rd n j                        \  }|rfd} ||
D cg c]
  } ||       c}      }t        |      t        |
      k(  sJ t        d |D              sJ t!        |
      D cg c]  \  }}||   s| }
}} j                  |
|	|| j                        \  }| _         j%                  |
|       j&                   j"                  _        t(        j+                  d j"                         j&                   j"                  _        d|j,                  s j                  d	k7  r j"                  j/                  |j0                        sAt3         j"                  |j0                  t5        j6                               }t9        d
|       t:         t;         j"                  |j0                         t=         j"                  j>                  |j0                  d      t(        j+                  dd       tA        jB                  dtE                     d  _#         j                  dk(  rtI               tI               fd} j                  jK                         }|
D ]`  }tM        |jN                  tP              r2 j                  sJ  j                  jR                  D ]
  } ||        O ||jN                         b  j                  jT                  D ]
  } ||        d }tW        jX                  ||j0                  j[                         D ci c]  \  }}|v r|| c}}|j\                  j[                         D ci c]  \  }}|v r|| c}}t^        j`                  jc                  |
D ch c]+  }tW        jX                  |d d  ||jd                              - c}      tg        jh                  tj        |jl                              }to        | j                        }tq        |       _#        t^        jr                  ju                  d fd        j                  jw                          d  _        y c c}w c c}}w c c}}w c c}}w c c}w )N!pytorch/compiler:guard_nn_modulesz9guard_nn_modules is turned off using justknobs killswitchr  )ry  c           	        t               }t        | j                        }|dk(  rd}|}nd}j                  | j                        }t	        | j
                        d u}| j                  }t        |t        j                        r| j                  j                  }t        ||||j                  | j                  rt        | j                        nd||       S )Nr   FTr  )rn  	has_valuerm  
guard_typederived_guard_types	is_global
orig_guard)objectstrip_local_scopern  r  r   r  r
  r   	functoolspartialrW  re   r   guard_typesrJ  )r   MISSINGrn  rg  rm  rj  rq  builders          r   make_guard_filter_entryz>CheckFunctionManager.__init__.<locals>.make_guard_filter_entry
  s     ((42: %I#E $I#KK

3E253K3KLTXX	 ??h	(9(9:$33H'''00(( ).e.?.?(@'$
 
r   c              3  @   K   | ]  }t        |      t        k(    y wr   )r  r  )rm  r   s     r   rp  z0CheckFunctionManager.__init__.<locals>.<genexpr>  s     ?1tAw$?s   %sg        rN  zGuard check failed: r8   zGuard eval latency = %s us.2fguard_latency_usr  c                    t        |       x}r$t        |t              sJ j                  |       y t	        |       x}r$t        |t              sJ j                  |       y y r   )r   r   r  r   r   )r   rn  used_global_varsused_local_varss     r   prune_variablez5CheckFunctionManager.__init__.<locals>.prune_variable_  sd    1&9949%dC000$((.26::T:%dC000#''- ;r   c                6   t        | t        j                        rwd t        fd| j                  D              }| j
                  j                         D ci c]  \  }}| |       }}}t        j                  | j                  g|i |S | S c c}}w )Nc                T    t        | t        t        j                  f      r |        S | S r   )r   r7   r  r  r-  s    r   _refzHCheckFunctionManager.__init__.<locals>.normalize_create_fn.<locals>._refw  s!    %a-)EF#$3J r   c              3  .   K   | ]  } |        y wr   r  )rm  r  r~  s     r   rp  zMCheckFunctionManager.__init__.<locals>.normalize_create_fn.<locals>.<genexpr>|  s     $=T!W$=s   )r   rn  ro  rJ  r   keywordsr   rW  )r   new_argskvnew_keywordsr~  s        @r   normalize_create_fnz:CheckFunctionManager.__init__.<locals>.normalize_create_fnt  s    a!2!23!
  %$=aff$==H;<::;K;K;M#N41aAtAwJ#NL#N$,,QVVOhO,OO $Os   B)obj_weakrefguarded_class_weakrefr
  )r  r   _guardsr  )r  rt  dynamo_cpp_guards_strc                 *    j                    d ddS )Nz
Guard latency = rv  z us)r   )latencyr   s   r   r0  z/CheckFunctionManager.__init__.<locals>.<lambda>  s     $"4"4!55GPS}TWX r   
payload_fn)<r|   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesr  rt  torch_function_mode_stackguards_serialization_moder-   rx  ry  r   r&   sort_keybuild_guardsrW  allr  r   compile_check_fnr   rf  rg  ra  r   r  get_guard_fail_reason_helperr#   r  rV  ry   r   r   r!   increment_toplevelr  guards_stater   dump_guards_stater   r  rW   ri  r  r  rN  r   r   r   r  	GuardsSetr
  r  tree_maprb  r  r  rb  _loggingtrace_structuredclear)r   r  r  r   r   guard_filter_fnr  rt  r|   existing_diff_guard_sourcessorted_guardsr   rs  r   filter_resultsrn  reasonsr{  output_graph_guards_stater   r  r  r  r  rr  r  ry  rz  s   `                       @@@@r   r   zCheckFunctionManager.__init__
  s    )5$$$;= B+N 	$ ) !1
 7CL22 	& *C&BCKKSTv|@!%!2!2'#D)G)G"
 2 -=JKE(/KN ~&#m*<<<<?????&/&>"!U.QRBSM  &*%6%6+..&"G] +g}mD .5-D-D*t112-4-D-D* ""t'E'E'O%%++L,D,DE6&& ,,"557
 %';G9%EFF,8-&&(@(@ ,""'')A)A1G 9gc]L 112Dc'lS-1))V3"u!eO. )-(9(9(K(K(M%& =e66G0000"&"7"7"I"I /&v./ #5#;#;<= ++>> 'v&' )4(;(;) !: E E K K M1O+ qD !: F F L L N1,, qD
 // &3 " $++!(,26&9%//&J	
 /5oo2-KK//)%8 '6!%!6!6L !4L AD 	''#X 	( 	
 	 A L\
s$   S9S>#S>
T;T
,0Tc                   t               }||_        d fd}t        || j                  || j                  |j
                  |j                  || |	      }d }	t        j                  ||	      t        j                  xr t        d      }
|D ]`  }|
sK|j                         r;d|j                  vr-d|j                  vrt        j                  sd|j                  vrP|j                  |       b ||fS )Nc                    | j                         }|t        j                  u r| j                         S sJ         }|J |j	                  | j                               S r   )guard_sourcer)   CONSTANTrn  r{  )r   r  	r_builder	w_builders      r   r  z5CheckFunctionManager.build_guards.<locals>.source_ref  s]    !..0L{333{{}$9!I((($$V[[]33r   c                &     |        }|rd |_         y y r   )r  )weak_br/  s     r   cleanup_builderz:CheckFunctionManager.build_guards.<locals>.cleanup_builder  s    A r   re  rQ  rS  r  )r   r   r  r  r  r  r   r  r  r9   guard_nn_modulesr-   r  rn  r=  r}  )r   r  r  r  r  r  r   r  rr  r  guard_on_nn_modulesr   r  s               @r   r  z!CheckFunctionManager.build_guards  s     ,-+F(		4 KK  $$%%

	 KK9	$55 
//;
 # 	"E'224 #%**4$EJJ655

9RLL!	" %%r   c                   |j                   }|dgz  }t        j                  d       g g g t        | j                        }| j
                  j                  j                  dg       | j
                  j                  j                  | j                  dg       d | _        dfd	}t               }|j                  D ]=  }|j                  D ],  }	|	|vs ||	|j                  d       |j                  |	       . ? |j                  }
d }d }t        |
      dkD  r-t!        |j"                  |
dd	j%                  |
      z   d
z   g       | j&                  r| j&                  j(                  ng }|D ]T  }t+        |t,              rr|j.                  }|j0                  }|j3                          d|j3                          }t5        |j7                  |      |j7                  |      |g        ||d d       t+        |t8              r|j:                  D cg c]  }|j7                  |       }}|j<                  D cg c]  }|j7                  |       }}dd	j%                  d |j:                  D               dd	j%                  d |j<                  D               d}t?        |||g        ||d d       ItA        d|        |jB                  D ]'  }|j                  D ]  }	 ||	|j                  d        ) r$tD        jF                  jI                  dfd       tJ        jL                  }|tK        jN                         }|||jP                  |dtR        tU               }| j
                  jW                          d|jX                  d   i}t              dk(  sJ || j
                  _-        || j
                  _.        | j
                  j_                          | j
                  _0        || j
                  _1        || j
                  _2        d | j
                  _3        d | j
                  _4        |
| j
                  _5        y c c}w c c}w )Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()c                $    t               }t        j                  d|       j                   fd       t        j                  t        j                        rd}d}pj                  r,ddj                  j                  j                                }j                  r,ddj                  j                  j                                }t        j                  d ||       |s#j                          j                  |       y y )Nru  c                      r9j                   r-t        j                  j                   j                               nd r-j                  r!t        j                  j                        dS d dS )N)r  rU  rR  )rU  r,   from_tracebackrV  rR  )r  r   s   r   r0  zNCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>  sg    % !U[[ #11%++2E2E2GH! !U%5%5 #11%2B2BC  " r   r   z
Stack:
z
User stack:
zGuard: %s%s%s)rZ  rf  rg  r  verbose_guards_logisEnabledForloggingDEBUGrU  rd  formatrR  )	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  s     5i GT#45 ''  "..w}}= #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!),"))*;< r   Tr8   zcheck_no_aliasing(r   rg  r.  zcheck_overlapping(overlapping=[c              3  <   K   | ]  }|j                           y wr   rn  rm  r   s     r   rp  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>h  s     /\Q/\   z], non_overlapping=[c              3  <   K   | ]  }|j                           y wr   r  r  s     r   rp  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>i  s     3dAFFH3dr  z])zUnknown GuardEnvExpr: dynamo_guardsc                 8    D  cg c]	  }  |         c} S c c} w r   r  )fr  s    r   r0  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>  s    BV4WQQS4W 4Ws   r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr  r   r   )6r  rf  rg  $make_torch_function_mode_stack_guardr  r   r   add_global_state_guard#add_torch_function_mode_stack_guardr   r  r  r   r   r  rW  r   r  rd  r  aotautograd_guardsr   r%   input_source_ainput_source_brn  r   r9  r+   overlapping_sourcesnon_overlapping_sourcesr   rC  r  r   r  r  r:   initial_global_stateGlobalStateGuardr   r2   rI  r   r  r   r   r  r   r   r   r   r   r   )r   rr  
guards_outr   largs"torch_function_mode_stack_check_fnr  seengclr  r  check_tensors_fncheck_tensors_verbose_fnr  r   source_ar/  r  r   overlapping_guard_managersnon_overlapping_guard_managersglobal_stater   rp  r   r  r   s                           @@@r   r  z%CheckFunctionManager.compile_check_fn  si     '((#
CE-Q**.
*
 	668Q7RSCC**34	

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

 
  !
 	##% #W]]3%78 :!###*6'"'<<>0B-*>'+8( *.&)-&8P5G.2s   Q?Qc                T   t        | d      rt        | j                  t              s| j                  j                  x}h| j                  j
                  x}Ot        |t              sJ t        |t              sJ d| d}t        |      }|j                  ||       || _        y y y y y )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/*t113MN $ 2 2 > >>K $ 2 2 > >>Kk:666k:6666wi?OPF$>v$F!"";0EF!6D L L O +r   c                :   	 t        |      | j                  vr`t        j                  |      | j                  t        |      <   t        j                  |t        j                  | j                  |             t        |      S # t        $ r Y t        |      S w xY w)zadd a weakref, return the id)r  )	r  r  r  r  r   rn  ro  r  r  )r   r  r  s      r   r  zCheckFunctionManager.id_ref  s    
	#wdnn, +2++c*:r#w'  **4??GL
 #w  	#w	s   A7B 	BBc                b    t        |      | j                  v r| j                  t        |         S y)zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)r  r  )r   r  s     r   r  z$CheckFunctionManager.lookup_weakrefs  s(    c7dnn$>>"S'**r   )NNNNNN)r   z%Optional[Callable[[GuardFail], None]]r  z8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]r  r  rt  r  r   )	r   r   r   r   r  r  r  r  r  r  r   r   r  r  
  sm     ?C 3759f!
 =f!
f! $1f! 3f!\  =&~nQ`7"r   r  c                ,  	 ddl m} t               		 	j                  |        d	fd} |       }| D ]]  } ||      \  }}|j                  |       |j                  d| d       |j                         5  |j                  d       d d d        _  |       }|j                  d       |j                         5  |j                  |       |j                  d	       d d d         |       }|j                  d
| d       |j                         5  |j                  |       |j                  d       d d d        |j                         |j                         fS # t        $ r dd}Y Cw xY w# 1 sw Y   HxY w# 1 sw Y   xY w# 1 sw Y   VxY w)Nr   r   c                &    j                  |       S r   )rN  )r  csepasss    r   rN  z%build_guard_function.<locals>.replace  s    ??4((r   c                
    g | fS r   r  )r  s    r   rN  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   rN  
guard_bodyr  r  r   make_guard_fnr  s
            @r   re  re    s   4oG	j!	)  !J 1g&xvR01  	1  0	1 	1	1 E	OOO$	 'Z &' #$M3L>DE				 0U#/0  -"8"8":::?  		1 	1' '0 0s5   E 7E1;#E>#F
E.-E.1E;	>F
Fc                 h    t         j                  j                  j                  j	                  d      S )Nr}   r   r  	_internal	log_stateis_artifact_enabledr  r   r   is_recompiles_enabledr    s#    >>##--AA,OOr   c                 h    t         j                  j                  j                  j	                  d      S )Nr~   r  r  r   r   is_recompiles_verbose_enabledr    s$    >>##--AABVWWr   c                N    | D cg c]  }t        |       c}fd}|S c c}w )Nc                     t               } t        |       t              k7  ryt        |       D ]  \  }}|t        |      k7  s y yr  )rl   rW  r   r  )	cur_stacktymoder
  s      r   check_torch_function_mode_stackzMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stack  sL    13	y>SZ'E9- 	HBT$Z	 r   )r  )initial_stackr   r  r
  s      @r   r  r    s)    +,T!W,E
 +* -s   "c                `   t        | j                        }t        j                  t              }| j
                  D ]1  }||d<   t        t        |||            }||   j                  |       3 |D cg c]  }t        ||         dkD  s||     }}dj                  |      }d| gS c c}w )N__compile_source__r8   r   zDuplicate tensors found: )r-  r   r>  r  r\  r   r  rt  r  rW  rd  )	r   r  r   ids_to_sourcer  	tensor_idry  duplicate_tensorsr  s	            r   1recompilation_reason_for_no_tensor_aliasing_guardr    s    223L++D1M&AA 7-:)*tM<?@	i ''67 ,9$'Cc@R<SVW<W=
  YY()F'x011s   3B+
B+c                4    ddl }d}|j                  |d|       S )z
    Replace occurrences of L[...] with just the inner content.
    Handles both single and double quotes.

    This is to generate user friendly recompilation messages.
    r   NzL\[\s*['\"](.*?)['\"]\s*\]z\1)resub)r   r  patterns      r   rm  rm     s     +G66'5!$$r   c                   || j                   d   d}|j                  | j                         g }d}g }| j                  |      }|j                  s(|j
                  }t        |      dk(  rd|d   v rd}n|}g }|rt        | |      }n|D ]  }t        | j                         }	||	d<   t               5  	 t        ||	|      }
	 d	d	d	       t        
t              r|
s|}
t        |
t              sd|j!                  |
       t               r n | d
dj#                  |      z   }t%        |      S # t        $ r t               r
Y d	d	d	        w xY w# 1 sw Y   xY w)z
    Return the reason why `guard_manager` failed.
    Updates `guard_failures` with the generated reason.
    Only the first failed check of guard_manager is reported.
    r  r  Fr8   zDuplicate tensor foundr   Tr  Nr   z; )r   r  r   r   resultr   rW  r  r-  r6   rt  	Exceptionr  r   r  r  r  rd  rm  )r   f_locals
compile_idr  r  no_tensor_aliasing_check_failedr   guard_debug_infor   r   fail_reason
reason_strs               r   r  r  -  s    !;!;C!@AE	LL++,G&+#$&$228< ""-@@ !"a''+=a+@@26/,%'"&C5
 ' 	D : :;L15L-./1 "&t\5"AK +t,["+s+{+46'	* <r"TYYw%77JZ((! ! 46   	 s*   1E3D//EEEEE	c                P   t        | t              r| d| j                   S t        | ||      }t        t
        |      j                  |       	 | j                  &| j                  t        |xs dt
        |                |S # t        $ r t        j                  d       Y |S w xY w)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   r	  rx  r  )r   r  r
  r  r  s        r   get_guard_fail_reasonr  p  s     -!;<R A ABCC-mXzRJ=&'..z:
&&2''*8(8-:MN   
d	
 
s   2B B%$B%c                X   g | Xt        | j                  | j                  |j                  | j                        }|rj                  |       | j                  } | X|j                  }t               xs
 t               }|st        j                  rt               r"dj                  d t              D              }n%t        j                  dj                        d      }d| }d|j                    d|j"                   d|j$                   dt        j                  |d	       }|r5t               rt&        j)                  |       nt*        j)                  |       t        j                  rt-        j.                  |      t0        j2                  j5                  d
d fd       S )z
    Return the list of guard failure reasons using cache_entry.
    Logs the recompilation reason if `recompiles` logging is enabled.
    Raises a RecompileError if `config.error_on_recompile` is enabled.
    z

c              3  \   K   | ]$  \  }}d | dt        j                  |d      z    & yw)zguard z failures:
- N)r  r   )rm  rn  r  s      r   rp  z:get_and_maybe_log_recompilation_reasons.<locals>.<genexpr>  s5      #Av <(8??64+HH#s   *,rK  r  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     dddS )Nrecompile_reasonsr?  )rn  encodingr  r  r   r   r0  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    '
 r   c                      S r   r  )r  s   r   r0  z9get_and_maybe_log_recompilation_reasons.<locals>.<lambda>  s    7 r   )metadata_fnr  )r  r   r  r
  r  r  nextr  r  r  r9   error_on_recompilerd  r  r  r   r  co_filenameco_firstlinenorecompiles_verbose_logrg  recompiles_logr;   RecompileErrorr   r  r  )	r   framer  r  do_recompiles_logfailuresguard_failure_detailsmessager  s	           @r   'get_and_maybe_log_recompilation_reasonsr(    s    G

!&%%NN""	
 NN6"!&& 
! <<D ./R3P3RF55(*{{ #!*7!3# H
  tyy'94@H<XJG 	 $DLL>d6F6F5GqI\I\H]]_4f=>@ 	 ,.&,,W5$$W-$$$$W--	NN##
 # $  Nr   c                   | }t               }| 8|j                  | j                  j                                | j                  } | 8|} | :|| j                  _        | j                  j                          | j                  } | :|S r   )r   r  r   r   r  r   r   )r   first_cache_entryacc_diff_guard_sourcess      r   r  r    s    #
 !U

!%%%%@@B	
 "&&	 
! $K

!7M!!4!!==?!&& 
! "!r   c                   t        d|j                   d|j                   d|j                          t        ddj	                  | j
                        z   dz          t        ddj	                  | j                               t        |        d|i| j                  }| j                  D ]  }	 t        || j                  |        y #  t        d|        Y 0xY w)	NzERROR RUNNING GUARDS  r  zlambda r   z and
  r  zMalformed guard:
)
printr  r  r  rd  r   r   r   rt  r   )r   r  r
  rk  lastr  r   s          r   guard_error_hookr0    s     

~Qt/?/?.@$BUBUAVW 
)dii 2 23
3c
9:	#z}7789	-?M$>$>?K)) 0	022K@0	0&ug./s   -CCc              #  b   K   t               }| D ]  }||vs| |j                  |        y wr   )r   r   )seqr  r   s      r   uniquer3    s3     5D D=GHHQKs   //c                ,   |r|| k7  rt        |      }t        |       }t        |      st        |       r7t        j                  | j	                          d|j	                          d      ||k(  r%t        j                  t        j                  |      S y )Nz is aliasing zC. This is not supported. Please do a clone for corresponding input.)r/  )	r   r   r;   UnsafeScriptObjectErrorrn  rn  ro  r  r2  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardr:    s     {j02;?.z:/
1*=--??$%];3C3C3E2F G> ?  /1 $$\%A%AKXXr   )skipc                J   ddl m} t        j                  t        j
                        xs# t        j                  t        j
                        }|j                         j                  j                  j                  }|D ]"  }t        |t              sJ  |||| dz          $ y)z
    Add dynamo guards to the current tracing context.

    Args:
        guards: guard(s) to add
        skip: number of stack frames to ignore for debug stack trace
    r   )TracingContextr8   )collect_debug_stackr;  N)torch._guardsr=  rf  r  r  r  r  r  guards_contextr  r   r   r&   )r;  r|   r=  r>  r   r   s         r   install_guardrA  !  s     -$11 8		(	(	7  



-
-
;
;
?
?C K%'''E':JKr   )r   r  r  r  )r  r  r   r&   r  r  )r   zUnion[str | list[str]]r   r&   r  r  )r  zOptional[int])r  r   r  r	   )r  r  )r"  r  r  rY  )r  ztuple[str, str])r   r  r  r  )r   rf   r
  r  r  r$   r  r  )
r   rf   r  r  r
  r  r  r$   r  r  )r#  ra   r  r  )
r   rf   r  r  r
  r  rk  r  r/  r  )r  
__future__r   rL  r  r>  r  r  rn  rD  r  r\  r  rA  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"   r?  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   rF  rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   r  numpyr  ModuleNotFoundErrorrJ  rz   torch._dynamo.output_graphr{   	getLoggerr   rx  r  getArtifactLoggerrf  r!  r   r  r   r  cacher#  r$  rI  rO  r   r   rv  rZ  r]  rb  re  rv  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Picklerr  rb  r  re  r  r  r  r  rm  r  r  r(  r  r0  r3  r:  rA  r  r   r   <module>r[     sc  " # 
        	    
     %    J J !    >  	 	 	 H
 
 
 & 1  * / O * ( ( ,$ $ $ $ $ $ $ $ $ $J      , FJ B I
 A g!^^--hA
11(LI99"  ^^55h@PQ ^ ^BT 
. 
. .2* 1:/ hh&&:: %"Q&Q/4QQ'K31 d#! ! $!&R
G   
tyy 
 8 8n
# n
D:R8 R8j$!4 $ $ $ $ / / /
 D| |~(;VPX
+$2 
%@)@)@) @) 		@)F
   	
 	09'99x"200
0  0 	0
 0. % &D !" Kmk  	Bs   "O4 4O?>O?