
    #h                      U 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mZ d dlmZmZmZmZ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)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d d	l2m3Z3m4Z4m5Z5m6Z6m7Z7 d d
l8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZE d dlFmGZGmHZHmIZI d dlJmKZK d dlLmMZMmNZN d dlOmPZP ddlQmRZRmSZSmTZTmUZU ddlVmWZW ddlXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZt ddlmuZumvZvmwZwmxZxmyZymzZz ddl{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZ dZded<   	 d dlZe"rd dlmZ  ej&                  e      Ze%j,                  j/                  ed      Ze%j,                  j/                  ed      Ze%j,                  j/                  ed      Ze%j,                  j/                  ed      Z G d d      Zd  Z ej<                  d      d!        Zdad"ed#<   d$ ZdOd%Zd& Zd' ZdPd(Z	 	 	 	 	 	 dQd)Zd* Zd+ Zd, Zd- Z ejV                  d./       G d0 d1             Zd2 Zd3 ZejV                   G d4 d5             Z G d6 d7ej`                        Z G d8 d9e=      Z G d: d;      Zd< Z G d= d>e      Z G d? d@      ZdRdAZdB ZdC ZdD ZdE Z	 	 	 	 	 	 	 	 dSdFZ	 	 	 	 	 	 	 	 	 	 dTdGZ	 	 	 	 dUdHZdI Z	 	 	 	 	 	 	 	 	 	 dVdJZ eWe       dK ZdL Zd dMdNZy# e$ r dZY w xY w)W    )annotationsN)contextmanager)deepcopy)currentframegetframeinfo)
AnyCallableDictListOptionalSetTupleTypeTYPE_CHECKINGUnion)ReferenceType)	check_obj_idcheck_type_iddict_versionDictGuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardprofile_guard_managerRootGuardManager)$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceTensorPropertyTensorPropertySource)	CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSourceStorageOverlap)
structured)justknobs_check)EqualityConstraintis_symbolicSYMPY_INTERP)
OrderedSet)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexcmutation_guard)set_guard_error_hook)AttrProxySource
AttrSourceCallFunctionNoArgsSourceChainedSourceConstDictKeySourceDefaultsSourceFlattenScriptObjectSourceFSDPNNModuleSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceLocalSourceNNModuleSourceNumpyTensorSourceODictGetItemSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSourceTupleIteratorGetItemSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntryDynamoFrameType
ExtraStateGuardedCode	GuardFailGuardFn)common_constant_typesdict_keys_repr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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 | _        d| _        t               | _        y NT)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print_no_tensor_aliasing_guardr/   diff_guard_sources)selfru   s     Q/var/www/html/sandstorm/venv/lib/python3.12/site-packages/torch/_dynamo/guards.py__init__zGuardManagerWrapper.__init__   s    <(*DIDI# 	"& !!*,'.2+3=<    c              #  J   K   d| _         	 d  d| _         y # d| _         w xY wwrt   )r   r   s    r   '_preserve_print_no_tensor_aliasing_flagz;GuardManagerWrapper._preserve_print_no_tensor_aliasing_flag   s&     .2+	726D/$D/s   # #	 #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   )ru   r   )r   r   r   r   s   `@@@r   collect_diff_guard_sourcesz.GuardManagerWrapper.collect_diff_guard_sources   s,    	&	&	' 	dii&&&r   c                D    | j                          | j                          y N)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   rv   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   )ru   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__rz   )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_line  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           
        |j                         5  |j                         D ]  }t        |t        j                  j
                  j                  j                        r[| j                  r(d| _        |j                  | j                  |             o|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)NFzaccessed_by=)r   get_leaf_guardsr   torch_C_dynamorm   NO_TENSOR_ALIASINGr   
writelinesr   r   r   r   r   zipget_accessorsr   r   r   reprr   )r   r   r   r   accessorr   s         r   r   z,GuardManagerWrapper.construct_manager_string+  sF   [[] 	?,,. AeUXX%5%5%<%<%O%OP::>C;(<(<U(CD % 8 8 OOD$8$8$?@A #/0223= (+!!#S%;%;%=( ?#) )))|HMMOCT5UV --i>?)	? 	? 	?s   EE::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.prefixL  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.writelineO  s$    G%d+G%edl3r   F)r   
__module____qualname__r   r   __classcell__r   s   @r   IndentedBufferWithPrefixr   K  s    =4 4r   r   r3    T)r   zTREE_GUARD_MANAGER:r   get_epilogue_lambda_guards)torch._inductor.utilsr   r   r   r   r   ru   hasattrr   r   r   getvalue)r   r   r   r   r   s        r   __str__zGuardManagerWrapper.__str__H  s    8	4~ 	4 99; 
	#+-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   )ru   checkr   xs     r   r   zGuardManagerWrapper.checka  s    yyq!!r   c                8    | j                   j                  |      S r   )ru   check_verboser   s     r   r   z!GuardManagerWrapper.check_verbosee  s    yy&&q))r   c                J     dd  fd  j                          y )NFc                    g }| j                         D ]5  }|j                  d      d   j                         }|j                  |       7 |S )N#r   )rz   splitrstripappend)
leaf_guardry   verbose_code_part	code_parts       r   get_code_partszMGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.get_code_partsm  sT    J%/%B%B%D -!-33C8;BBD	!!),- r   c                j   | j                         D ]  }t        |t        j                  j                  j
                  j                        r'r>j                  j                   |             dbj                  j                   |              | j                         D ]
  } |        y rt   )
r   r   r   r   r   rm   r   ry   extendr   )r   r   r   r   r   tensor_aliasing_guard_seenr   s      r   r   zDGuardManagerWrapper.populate_code_parts_for_debugging.<locals>.visitt  s    ,,. BeUXX%5%5%<%<%O%OP5..~e/DE592OO**>%+@AB !335 !	i !r   )ru   )r   r   r   r   s   `@@@r   !populate_code_parts_for_debuggingz5GuardManagerWrapper.populate_code_parts_for_debuggingi  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   rr   rr      s_    @, 7 7/'b+>2
A?:#2"*r   rr   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        j                  dt        d nt        j                  dt        d      dt         j"                  dt$        j&                  j(                  dt$        j*                  dt,        t$        j.                  t$        t0        da t         S )N___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                
    | |v S r   r   )r  bs     r   <lambda>z#_get_closure_vars.<locals>.<lambda>  s
    Q!V r   ___tuple_iterator_len___normalize_range_iter___tuple_iterator_getitem#___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__rc   r   rh   rd   rg   r_   mathisnanr  float	importlibimport_moduler   utils_devicer)  r  _as_tensor_fullprecr  r   r   r   _get_closure_varsr7    s,   

|
  7 7 C C
 I	

 |
  3
 $%7
 &';
 ()?
 23S
 DJJ
 RZTRXX
 5<
 Y44
 EKK//
  ell!
" Z#
$ "55)
, r   c                L    t        j                  |       j                  dd      S )N
r   )astunparsereplace)r   s    r   _ast_unparser=    s    ;;t$$T2..r   c                    t        j                  d      }d}| D ]:  }|dv rd}
|dv r(|s|dk7  s|j                  |      s)t        |      c S ||z  }< t	        |       S )z
    "___odict_getitem(a, 1)" => "a"
    "a.layers[slice(2)][0]._xyz" ==> "a"
    "getattr(a.layers[slice(2)][0]._abc, '0')" ==> "a"
    "getattr(getattr(a.x[3], '0'), '3')" ==> "a"
    "a.layers[slice(None, -1, None)][0]._xyz" ==> "a"
    z[A-Za-z_].*r   z (z),[]None)recompilematchstrip_function_callstrip_getattr_getitem)name
valid_namecurrchars       r   rC  rC    sp     M*JD 4<DV^:+;+;D+A*400DLD !&&r   c                4    t        j                  d|       d   S )z*
    "a[1]" => "a"
    "a.foo" => "a"
    z[.\[]r   )r@  r   rE  s    r   rD  rD    s    
 88Hd#A&&r   c                    d}||j                   rCt        |j                         D ]*  }|j                  t               vsdt	        |d       } n7 n5|j
                  r)dt	        |j
                  j                         d          }| d| S )Nr   z  # T)r   z<60)
user_stackreversedfilenamer  r0   stacksummary)r   r   extrafss       r   get_verbose_code_partrT    s    Eu//0 ;;&9&;;"<#>"?@E [[<(;(;(=b(ABCDE_UG$$r   c                f    t        | t              s| g} | D cg c]  }t        ||       c}S c c}w r   )r   listrT  )ry   r   r   s      r   get_verbose_code_partsrW    s1     j$' \
EOP	!)U3PPPs   .c                    g }| D ]d  }t        |      s|j                  |        t        |t        j                        sJ |j                  |j
                  j                                f |S r   )r-   r   r   r   SymIntr   maybe_as_int)size_or_stride	converteddims      r   convert_to_concrete_valuesr^    sc    %'I 63S!c5<<000SXX22456 r   c                |   t        |       }t        j                  j                  |       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=))typer   r   _dispatch_keys_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper)  indexrequires_gradr   )
valuerE  sizesstridespytypedispatch_keyre  device_indexrg  	guard_strs
             r   get_tensor_guard_code_partro    s    %[F&)Q)Q)SS0023L KKE<<%%L''M
vR 3 34B|nBug N/geWIV]U^^_	a  r   c                R    t        | j                               j                  |      S r   )rV  keysrf  )dctkeys     r   get_key_indexrt    s    
!!#&&r   c                    d|  d| dS )Nlist(	.keys())[]r   )r   rf  s     r   get_key_index_sourcery    s    6()E7!,,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_dictNz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                   | j                   j                         }| j                         }t        | j                  t              r| j                  j                  }n(t        |t
              sJ t        || j                        }t        ||      }t        |j                               |   }	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[rx  rf  r   example_valueguard_manager_enum == )baserE  r   rf  r=   dictrt  ry  rV  rq  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_namesource_namerf  
key_sourcekey_example_valuevalue_sources              r   getitem_on_dict_managerr  #  sF    {{'')++-K&,, 23"",d3330&,,?%&6>J/4467>#c3Z0*+1->,AC*+1ZL:fll$67 	** ,,/==	 	+ 	

 !
 LLj\.?-BCD
 //#-	 0  r   c                `    | j                   }|j                         xr t        |t               S r   )originating_sourceis_dict_keyr   rE   )r   r   s     r   match_on_id_for_tensorr  H  s+    %%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  O  s    Lr   r  c                      e Zd ZdZdZdZy)r  r3         N)r   r   r   r  DICT_GUARD_MANAGERDICT_SUBCLASS_GUARD_MANAGERr   r   r   r  r  U  s    M"#r   r  c                     e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5dZd Zd Zed        Zd Zd Z	d Z
d Zd	 Zd
 Zd6dZ	 	 d7dZd8dZd9dZd:dZd6dZd;d<dZd<dZd6dZd=dZd6dZd;d6dZd6dZd6dZd6dZd6dZd6dZd6dZd6dZ d6dZ!d6d Z"d6d!Z#d6d"Z$d6d#Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d6d,Z.d6d-Z/d6d.Z0d6d/Z1d6d0Z2d6d1Z3d6d2Z4d;d6d3Z5d;d4Z6y)>GuardBuilderc                   || _         || _        || _        ||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,                  j.                  D ]5  }
| j*                  j1                  t3        | j5                  |
                   7 i | _        i | _        t)               | _        y )NLG__builtins__>_<._dot_)id_ref
source_reflookup_weakrefsscopebuiltins__dict__copyr   packagepackage_importer_package_imported_modulesr   r<  r   argnamescodeshape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managersetkey_order_guarded_dict_idsoutput_graphguard_on_key_orderr   idgetr   _cached_guard_managers_cached_duplicate_input_guards)r   r  r  r  local_scoper{   r   r  rE  package_moduler  s              r   r   zGuardBuilder.__init__\  su    $.9D<3X
%-%6%6%;%;%=

>" ]]++EEKKM	. 
<<S)11#s;CCCQD/=DJJ~&t,-DJJt	. +#%)+	
 46 46%LN.6F +.%'00==PP 	KK++//488K3H0IJ	K BD
  	# EHE+r   c                f   | j                  |      }t        |t              rt        d|j                         |j
                  j	                         }|j                         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 )rf  r  rx  rs  r   r  r  )
get_guard_managerr   r   NotImplementedErrorrE  r  rq  rA   get_guard_manager_typedict_getitem_manager)	r   r  r   dict_mgrdict_sourcers  rh  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 %%' 	C!#&E()A)AML!%!<!<m" ))%awa0##5	 * 	r   c                   | j                  |      }t        |t              st        d|j                         t        |t              sJ t        |j                               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   r`  r  )r  r   r   r  rE  	enumeraterq  ry  r  r  r  rb   r  add_id_match_guardrW  r  )	r   rh  r   r  r   rs  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!%**,/ 	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  r  r3   zMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)r4   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 )Nrv  rw  rx  r  r  r  )	r   r   rt  r  r  r  r  r  r  )r   rs  r  r  r  r  rf  r  s           r   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr  s     #/0 &&8#>  %[M5)1E
##%"%'7'E'E	 $ 
 )(*T#/I.JK ,,&"/'9	 -   //&"/'9	 0  r   FNT_parameters_buffers_modulesattrr   r  r  	.__dict__r   r  r  )r   rs  r  r  r  r  )memberr  r  r  getmror   updaterq  r|  r~  getattr_managerr  r  r:   r  rE  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)rE  r  r  r  )r   r   r  obj_ids       r   requires_key_order_guardingz(GuardBuilder.requires_key_order_guardingy  s<    kkm"DHH[)*8888r   c                   t         j                  }| j                  |      r^t        |t              sJ t        |      j                  t        i       j                  u rt         j                  }|S t         j                  }|S r   )	r  r  r  r   r  ra  rq  r  r  )r   r   r  r  s       r   r  z#GuardBuilder.get_guard_manager_type  sq    -;;++F3mT222 M"''48==8%5%H%H" "! &6%Q%Q"!!r   c                R    |t         j                  k(  xs |t         j                  k(  S r   )r  r  r  )r   mgr_enums     r   manager_guards_on_keysz#GuardBuilder.manager_guards_on_keys  s+    (;;; H+GGG	
r   c                    | j                   j                  j                  | j                  d   d| j                  d   t        j
                        S )Nr  )	f_globalsr   r  r  )r   ru   globals_dict_managerr  r  r  r   s    r   get_global_guard_managerz%GuardBuilder.get_global_guard_manager  sH    !!&&;;jjo**S//==	 < 
 	
r   c           	     F   | 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              r!|j                  j                  |||      }
nWt        t               r/| j#                         j                  j$                  |||      }
nt        t&              r/| j#                         j)                  j$                  |||      }
nt        t*              r|S t        t,              r|S t        t.              r|sJ |j1                  |||      }
nt        t2        t4        t6        t8        t:        f      r|sJ |}
n^t        t<              r|j?                  fd|||      }
n4t        t@              r|sJ |jC                  |||      }
n
t        tD        tF        f      rs|sJ t        |tH        jJ                  jL                        r*tO        |      tP        u r| jS                  ||||||      }
n|jU                  jV                  |||      }
nt        tX              rW|sJ t        |tZ        t\        j^                  f      rzt        |t`              r$| jc                  |	      sJ te        ||||      }
nt        jf                  th              rtk        d      |j                  jf                  |||      }
nt        |tl              r-jn                  s!|jq                  jf                  |||      }
nt        |tr              r-jn                  s!|ju                  jf                  |||      }
nXjf                  }jn                  rjw                         }|jy                  ||||      }
nt        tz              rYt        |t`              r$| jc                  |	      sJ te        ||||      }
n|sJ |j                  jf                  |||      }
nt        t|              r|sJ t        |      sJ j                  sK|j                  ||j                  t        j                        jy                  j                  |||      }
n8|j                  }|J |d	z   }|j                  ||t        j                        }t        |t`              rJ |j                  j                  |||      }
nt        t              r|sJ |j?                  t        |||      }
nt        t              r|sJ |j?                  d
 |||      }
nst        t              r|sJ |j?                  d |||      }
nGt        t              r|sJ |j?                  d |||      }
nt        t              r|sJ |j?                  d |||      }
nt        t              r$|sJ |j                  jf                  |||      }
nt        th              r;t        |t`              st        d      |j                  jf                  |||      }
nqt        t              r|sJ |j                  |||      }
nHt        t              r|sJ |j                  |||      }
nt        d dj                                |
| j                  j                         <   |
S )Nr   r  )global_namer   r  r  r  c                6    t        j                               S r   )r_   
_get_index)r  r   s    r   r  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_orderz.__kwdefaults__c                (    | j                         d   S r   __tensor_flatten__r   s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (<(<(>q(A r   c                "    | j                         S r   )__obj_flatten__r  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (9(9(; r   c                >    | j                         j                         S r   )_typequalified_namer  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    	(@(@(B r   c                "    | j                         S r   )get_baser  s    r   r  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    

 r   r  z4ConstDictKeySource can only work on DictGuardManagerzmissing guard manager builder z - )Tr   ru   rE  r  r  r  r  r  r   r<   r  get_guard_manager_from_sourcera   rF   r  
local_namerB   r  r  rD   global_weakref_managerrC   rL   rP   type_managerrJ   rG   rR   rQ   r@   rN   lambda_managerrE   grad_managerr:   rS   r   nnModuler]   ri   r  r  r  rA   r  r,  r-  r   r	  r  rf  r=   RuntimeErrorrV  index_is_slicelist_getitem_managertupletuple_getitem_managerunpack_slicegetitem_managerrI   r>   callableis_kwfunc_defaults_manager__defaults__idx_key__kwdefaults__func_kwdefaults_managerrH   r  rM   r?   rK   r9   rO   tuple_iterator_getitem_managerAssertionErrorr  rT   weakref_call_managerr;   call_function_no_args_manager)r   r   root_guard_managerr  r  r  r  r  r  base_guard_manager_enumoutrf  
kwdefaults	kw_sourcer  s    `             r   r  z*GuardBuilder.get_guard_manager_from_source  sA   !//44kkm"0K0K!K..{;;" HH[1M!88O  !!"2"@"@fm,%{{//1!%*:!;!%!C!CFKK!P&*&A&A/'#
 &+& %99%%"+#5	 : 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
 FZ)GHI%%% -uxx?&'9:./ //&&!$& )88&"/'9	 9  FM*%%%,t[5L5L.MN 02BC667NOOO1**%*C "&,,0BC*<  -AA"LL*&3+=	 B C .5f>S>S(==&"/'9	 >  .6v?T?T(>>&"/'9	 ?  (("//1E(88&"/'9	 9  F./,.>?223JKKK-&&!& *))(==&"/'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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 !0FKKM?K  69##FKKM2
r   c                8    | j                  |j                        S r   )r  r  r   r   s     r   r  zGuardBuilder.get_guard_manager  s    11%2J2JKKr   Nc                   |
t               }dj                  |j                               }t        ||      \  }}i }d| j                  d   i}	t        ||	|        |d   |j                          }
|r'| j                  j                  j                  |
|       y | j                  j                  j                  |
|       y )Nr   r  ___make_guard_fn)r7  joinrq  build_guard_functionr  execvaluesr   ru   add_epilogue_lambda_guardadd_lambda_guard)r   ry   rz   rw   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':;1*>PQ
F  #TZZ_5V)3/*3)*L,?,?,AB ##==, ##44X?QRr   c                @    t        || j                  t                     S r   )evalr  r7  )r   rE  s     r   r  zGuardBuilder.get  s    D$**&7&9::r   c                B   t        |t              r|}n|j                  }t        t	        |            }|| j
                  vr]t        j                  d|      rGt        j                  d|      rt        j                  d|       | j
                  j                  |       |S )Nz[a-zA-Z0-9_]+z^\d+$zinvalid var name: %s)r   r  rE  rD  rC  r  r@  rB  logwarningr   )r   r   rE  r  s       r   arg_refzGuardBuilder.arg_ref  sy    eS!D::D$%8%>?t}}$xx($/88Hd+KK 6>$$T*r   c                    t        |j                  |      }t        |||j                  |j                        }|j                  |        y )N)rP  rM  )r:   r  r$   rP  rM  create)r   r   r  rL  attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attribute  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   r`  znot hasattr()provided_guarded_objectr  )r  r   rG   r  r:   rE  r  rS  r   r  _set_guard_export_infor  r  r   r$  r%  r]   ri   r  r  add_no_hasattr_guardrW  )r   r   r   base_sourcer  r  refvalr  base_managerr  r  r  s                r   HASATTRzGuardBuilder.HASATTR  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)rS  r  rE  r   r   r$  r%  r  r  r  r  r  r  add_dict_contains_guardrW  )	r   r   r  r_  r`  ra  r  r   r  s	            r   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICTE  s    ll5!hhuzz"#uxx///--e4"ZZL	2#/#H#H"FFs||T/== $I $
  'thbZ@ 884/e<	
r   c                8   t        | j                  |j                              }| j                  |d|j                   d      }d| j	                  |       d| d}| j                  ||g       | j                  |      j                  |t        ||             y )Ntype(r`  z___check_type_id(r   )	ra  r  rE  r  rS  r\  r  add_type_match_guardrW  )r   r   r   r  r  s        r   
TYPE_MATCHzGuardBuilder.TYPE_MATCHY  s    %**%&Q%

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

34!#eG95##ED62 	u%<<'e4	
r   c                    | j                  |      }|rdnd}| d|d| d}| j                  ||g       | j                  |      j                  | |t	        ||             y )Nnot r   z___dict_contains(r   r`  )rS  r\  r  rd  rW  )r   r   rs  invertdict_ref	maybe_notr  s          r   DICT_CONTAINSzGuardBuilder.DICT_CONTAINSr  sn    <<&$F"	-cWBxjB##ED62u%==J3D%@	
r   c                   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&                  }| j)                  |      }||| j*                  |<   y y y y )Nz___check_obj_id(r   r`  )r   r  rP   ri  r$   r  r  rS  r  rE  r  r\  r  r  rW  rF   r   r$  r%  r  r  r   )r   r   r_  r`  r  r  r  weak_ids           r   ID_MATCHzGuardBuilder.ID_MATCH}  s-   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 Nz is not None)
rS  r  rE  r   r   Tensorr\  r  add_not_none_guardrW  )r   r   rh  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                F    | j                  |dt        j                         y )Nr   )rX  r  EQUALS_MATCHr>  s     r   
NAME_MATCHzGuardBuilder.NAME_MATCH  s      
L4M4MNr   c                    | j                  |j                        }| j                  |       d|j                          }| j	                  ||g       | j                  |      j                  |t        ||             y )Nz.data_ptr() == )r  rE  rS  data_ptrr\  r  add_data_ptr_guardrW  )r   r   objr  s       r   DATA_PTR_MATCHzGuardBuilder.DATA_PTR_MATCH  sm    hhuzz",,u%&oclln5EF##ED62u%88'e4	
r   c                "   t         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>.fn  s    ,,
::r   )	r   autogradr  r  r\  r   ru   rF  rW  )r   r   r  r  r  r  s       @@r   
DUAL_LEVELzGuardBuilder.DUAL_LEVEL  sx     ^^..==
>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(r`  c                           S r   r   )r   
compare_fnstatess    r   r  z.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fn  s    f%%r   )r   
_functorchpyfunctorch#retrieve_all_functorch_interpreters	get_stater\  compare_functorch_stater   ru   rF  rW  )r   r   ciscir  r  r  r  s         @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCH  s     **NNP+./R",,./GxqQR##E40 %%11II
	& 	00&tU3	
 0s   B=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 )Nr3   __metadata_guard__c                J    j                  | j                         d         S Nr3   )r  r  )r   original_metadatarh  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  rE  r   r  r   rj   r  r!   current_compile_idr  rF  rW  )r   r   r  r  r  rh  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        |      }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.        j0                  h||z        t.        j2                  j5                         rddlm} ddlm}m}	m }
 |
|	||fz   tC        |tD              rFtG        fdtI        jJ                  |jM                         |jO                               D              s$J tC        |      sJ dt        |       d        tC        |tP              rtS        jT                  |      rq| jW                  |       g }|jY                  d| d	       | j[                  ||       | j]                  |      j_                  ta               d
   tc        ||             y tC        |td              rt	        jT                  |      rq| jW                  |       g }|jY                  d| d	       | j[                  ||       | j]                  |      j_                  ta               d   tc        ||             y | d|g}tC        ||      rtg        |      }| j]                  |      ji                  |tc        ||             | j[                  ||       y )Nr   r   )
DeviceMesh)Partial	ReplicateShardc              3  6   K   | ]  }t        |        y wr   )ra   ).0r   ok_typess     r   	<genexpr>z,GuardBuilder.EQUALS_MATCH.<locals>.<genexpr>  s      ()q(#s   zUnexpected type z	, not in z__math_isnan(r`  r$  z__numpy_isnan(r%  r  )5rS  r  rE  ra  r  int8int16int32int64uint8uint16uint32uint64float16float32float64rV  r  r)  r[   	frozensetsliceranger   Sizedistributedis_availabletorch.distributed.device_meshr  (torch.distributed.tensor.placement_typesr  r  r  ra   r  all	itertoolschainrq  rD  r1  r/  r0  ri  r   r\  r  rF  r7  rW  complexr   r  )r   r   r_  r`  r   np_typesok_mutable_typesr  r  r  r  r  r  s               @r   r~  zGuardBuilder.EQUALS_MATCH  s   ll5!hhuzz"I						





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

	 	 "	

 ))+@   	# H #t -6__SXXZ-V     A "$s)IhZ@A  #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u%<<'e4	
 	##E40r   c                    | j                  |j                        }t        |t        t	        d       t
        j                  f      r| j                  |       y | j                  |       y r   )	r  rE  ra   r}  ra  typesCodeTyperw  r~  r   r   r`  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCHO  sG    hhuzz"#d4j%..9:MM% e$r   c                2   | j                  |       | j                  |j                        }t        |d      r>t	        |j
                  t              sJ | j                  |dt        j                         y t        j                  dt        |              y )Ntrainingz$Guard setup for uninitialized class )rw  r  rE  r   ra   r  r}  rX  r  r  r6   unimplementedra  r  s      r   	NN_MODULEzGuardBuilder.NN_MODULEV  sp    ehhuzz"3
##,,---$$UJ8S8ST DT#YKPQr   c                $    | j                  |      S )z0things like torch.add and user defined functions)rw  r>  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH_  s    }}U##r   c                2   | j                  |j                        }t        |      t        j                  k(  rOt        |d      rC| j                  |dt        j                         | j                  |dt        j                         y| j                  |       y)z!matches a closure by __code__ id.__code__N)
r  rE  ra  r  FunctionTyper   rX  r  rb  r  r  s      r   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCHc  sm    hhuzz"9***wsJ/G$$UJ8L8LM$$UJ8S8ST&r   c                $    | j                  |      S r   r  r>  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCHm      ""5))r   c                $    | j                  |      S r   r  r>  s     r   PYMODULE_MATCHzGuardBuilder.PYMODULE_MATCHp  r  r   c                T   | j                  |      }| j                  |j                        }t        |      }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   rp  zlen(rk  )rS  r  rE  ra  r   r  ri  lenr   r\  r  add_dict_length_check_guardrW  add_length_check_guardr   r   r_  rh  r   r  s         r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTHs  s     ll5!$K%&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(rk  rg  r`  )rS  r  rE  ra  r   rh   r\  r  r  add_tuple_iterator_length_guardrW  )r   r   r_  rh  r   r  r  s          r   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LEN  s    ll5!$K,SE7I%7P6QRS##E40KQ%

|1 56u%EEu%v/EdE/R	
r   c           
        | j                  |      }| j                  |j                        }t        |      }g }t	        |      }|j                  d| d|        | j                  ||       t        |      }| j                  |d|j                   d      }|\  }}	}
| j                  |      j                  ||	|
|t        ||             y )Nz___normalize_range_iter(rk  rg  r`  )rS  r  rE  ra  rd   r   r\  r  r  add_range_iterator_match_guardrW  )r   r   r_  rh  r   r  normalized_range_iterr  startstopsteps              r   RANGE_ITERATOR_MATCHz!GuardBuilder.RANGE_ITERATOR_MATCH  s    ll5!$K 4U ;.se59N8OPQ##E40KQ%

|1 561tTu%DD4v'=dE'J	
r   c                   | j                  |      }| j                  |j                               }t        |j                        st        |      ry | d| g}| j	                  ||       ||f}|| j
                  v ry | j
                  j                  ||f       | j
                  j                  ||f       t        | j                  |      | j                  |      t        ||             y )N is )rS  rE  r   r  r\  r  r   r   r  r  rW  )r   r   source_bref_aref_br  rs  s          r   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT  s    U#X]]_-#$$
%h/'eW%&##E40 en$555++//?++//?%""5)..x8"4/	
r   c                0   | j                  |      }| j                  |j                        }t        |      }| j	                  |       g }t        d |j                         D              }t        t        |      t        |j                              }|r|j                  d| d|        n|j                  d| d|        | j                  ||       | j                  |j                        r| j                  ||       y | j                  ||       y )Nc              3  2   K   | ]  }t        |        y wr   )rb   )r  ks     r   r  z)GuardBuilder.DICT_KEYS.<locals>.<genexpr>  s     ?QIaL?s   )localz___key_to_id(rk  rv  .keys()) == )rS  r  rE  ra  ri  anyrq  r\   rc   r   r  r   r\  r  r  r  )r   r   r_  rh  r   r  any_key_is_idconst_keys_reprs           r   	DICT_KEYSzGuardBuilder.DICT_KEYS  s    ll5!$K?%**,??(e&u'?'?@
 KK-uE/1BCDKK%uL0ABC##E40++E,D,DE--eU;44UEBr   c                    | j                  |       dg}| j                  ||       | j                  |      j                  t	        ||             y ry  )rS  r\  r  r{  rW  )r   r   r  s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE  sN    <<&'|45##E40u%88"4/	
r   c           	     v   | j                  |      }| j                  |j                        }t        |      }g }|j	                  d| dt        |j                                      | j                  ||       | j                  |j                        r| j                  ||       y| j                  ||       y)zConstant keys matchrv  r  N)rS  r  rE  ra  r   rV  rq  r\  r  r  r  r  r  s         r   DICT_CONST_KEYSzGuardBuilder.DICT_CONST_KEYS  s    ll5!$KeC5T%**,-?,BCD##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)r4   skip_nnmodule_hook_guardsr  r>  s     r   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s    ++U#r   c                v    t        j                  | j                  |j                        | j                         y r   )r7   watchr  rE  r  r>  s     r   OBJECT_MUTATIONzGuardBuilder.OBJECT_MUTATION   s%    TXXejj143H3HIr   c                     y r   r   r>  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODE      r   c                     y r   r   r>  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS  r  r   c                     y r   r   r>  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE	  r  r   c                     y r   r   r>  s     r   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE  r  r   c                    |j                   t        j                  u sJ ddlmc m} d|j                  g}| j                  ||       | j                  |      j                  t        ||             y)z/Guard on CURRENT_DEVICE per torch.utils._devicer   Nzutils_device.CURRENT_DEVICE == )r   r'   GLOBALtorch.utils._devicer4  r5  CURRENT_DEVICEr\  r  add_default_device_guardrW  )r   r   r  r  s       r   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE  si    ||{11111''1!2B2B1EFG##E40u%>>"4/	
r   c                   |j                   dk(  sJ | j                  j                  j                  }|D cg c]  }|j                   }}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#        |	j%                               |
d      }nd }j                  j'                  |D cg c]  }|j(                   c}|D cg c]  }|j*                   c}||| j,                  | j                  j                  j                         \  }}| j                  j                  j                  sj                  j/                          |D ]  }| j1                  ||g        t3        j4                         x}r|j6                  j9                  |       | j;                  ||i t<        t?                      y c c}w c c}w c c}w )Nr   c                z    j                   |    D cg c]  }t        |t        j                  |       c}S c c}w r   )tracked_fakes_id_to_sourcer    r   SIZE)t_idr]  r   r  s      r   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources%  s?    
 +EEdK %V^-@-@#F  s   "8z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_only)input_contextsequalities_inputsr  ignore_static)rw   ) rE  r  r  tracked_fakessymbolic_contextexport_constraintsr  r  r  r   exportdynamic_shapes_process_equalities	shape_envrQ  rR  r,   rV  rD  produce_guards_verbosefaker   r  freezer\  r!   try_getshape_env_guardsr   rM  r.   r7  )r   r   rS  r  r  r  namesr  r  r  r  
constraintr  ry   rz   r  compile_contextr  s                    @r   	SHAPE_ENVzGuardBuilder.SHAPE_ENV  s9    zzR,,99''689!,,99	 **02E8:L   24O+.5O*== O
??l&M&MMLL//CC"#$..$*''	 KK MNO !3)#5 $_%;%;%= > /! !%)5)?)?)V)V QVV !"!QXX")/#44AAHHH *W *
&
& $$1188""))+ 	7D''v6	7 -4466?6,,334FG
 	11@L@,=,?@ 	2 	
C :T !"s   H;-I I
c                R   |j                         rt        |j                  t              rt	        |      r| j                  |       y t        |t              r |       }||n| j                  |j                        }t        |t        j                        sJ | j                  |      }g }| j                  j                  j                  r| j                  |       g d}|D ]  }| j                  |dz   |z         }t!        |t        j"                  t        j$                  f      r$|j'                  d| d| dt)        |             h|j'                  | d| d|         nP| j+                  |      }t,        j.                  r$t!        |t        j0                  j2                        s6| j4                  j'                  |       | j6                  j'                  |       | j                  j                  }	|	j8                  |j                     }
t;        |
d         }t;        |
d         }t=        t?        ||||      |      }|jA                  |||||       t        |t        j0                  j2                        s9| j                  jB                  jD                  jG                  |j                         |jH                  J tK        |d|j                  	      \  }}|stM        |d
      rU|jN                  }d| d| d| d}|j'                  |       | j+                  |      jQ                  |t=        ||             nBd| d}|j'                  |       | j+                  |      jS                  d
t=        ||             tU        |      dkD  r| jW                  ||       y y )N)re  r)  rg  zndimension()r  zstr(rk  r  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)rZ  z%, '_dynamo_dynamic_indices') == Falser   ),is_specialized_nn_moduler   r  rH   r  rw  r2   r  rE  r   rz  rS  r  r  r$  ri  ra   r)  re  r   r  r  r4   ,skip_no_tensor_aliasing_guards_on_parametersr$  	Parameterr  r  input_source_to_sizes_stridesr^  rW  ro  add_tensor_match_guardr   r   r   r   rf   r   r6  add_dynamic_indices_guardr]  r  r\  )r   r   rh  tensor_namer  termsterm
real_valuer   r  metadatar2  r3  rz   staticreasondynamic_indicesr   s                     r   TENSOR_MATCHzGuardBuilder.TENSOR_MATCHj  s]    **,u779JK#E*MM% %/".EDHHUZZ4HEeU\\222,,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 1188E::AA-P#44AA'EE,, 2(62BC3HX4FG%;.uk4P&" 44& "%););<))77JJNN

@ <<+++;U5M5MNFF 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 t        |      d   }~|t        | j                        v s
J d|        |?|j
                  d uxr |j
                  dk7  }|r| j                  |j
                        nd }n|}|t        j                  t        |            nd }	d }
t        |j                  dd      dk7  }|r5t        |t        j                  t        f      st        j                  |      }
|j                  ||	||
       y )Nr  zH_produce_guard_code must be called from inside GuardedCode. Called from r   __weakrefoffset__r   )r   f_backr   dirr   rE  r  weakrefr_  ra  getattrr   enumEnumr)  set_export_info)r   r   r  r[  	cur_framecaller	func_name
name_validguarded_objectguarded_object_typeobj_refsupports_weakrefs               r   r\  z#GuardBuilder._set_guard_export_info  s;    !N	$$$!!!!! (+	CNN
 
 	bUV_U`a	b 

 #*4/DEJJ"4DJ5?TXXejj1TN4N 2@1KGKK^,-QU 	  N,,.A1EJ 	 J~		5?Q$Rkk.1G		
r   )r  zCallable[[Any, str], str]r  zCallable[[Source], str]r  z)Callable[[object], ReferenceType[object]]r  Dict[str, object]r{   rW  r   rr   r  CheckFunctionManager)r   r$   rt   )rE  r  returnr   )r   zUnion[str, Guard]rY  r  )r   r$   r  r  r   )r   r$   rY  r?  )r   r$   rs  r  rq  r}  )7r   r   r   r   r  r  staticmethodr  r  r  r  r	  r  r  r  rM  r  rS  rX  rb  re  ri  rn  rt  rw  r|  r  r  r  r  r  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r
  r  r  r0  rE  r\  r   r   r   r  r  [  s{   ;J);J ,;J C	;J
 ';J (;J +;J /;Jz. D  "Sj9
"

n`	L SD;4Yl
(	

	
?<	
O

 
$
*cJ%R$'**6
 
&
2C0
C$J

M
^[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)PyExprCSEPassr3   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^  N  s    ""$$r   ra  c                  (     e Zd ZddZd fdZ xZS )PyExprCSEPass.ExprCounterc                    || _         y r   )_config)r   r4   s     r   r   z"PyExprCSEPass.ExprCounter.__init__T  s	    !DLr   c                    t        |t        j                        r*| j                  j                  t        |      xx   dz  cc<   t        |   |       y r  )r   r\  ALLOWED_NODE_TYPESre  r_  r=  r   r   )r   r   r   s     r   r   zPyExprCSEPass.ExprCounter.visitW  s>    $ @ @A''T(:;q@;GM$r   )r4   r^  rY  r?  r   ast.ASTrY  r   r   r   r   r   r   r   r   s   @r   ExprCounterrc  S  s    	"	  	 r   rk  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   re  	_gen_namepreface)r   r4   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\  rg  r=  re  r_  USE_THRESHOLDr`  r   r   ro  rp  r   r:  NameLoad)r   r   exprnode_expr_var_namer   s         r   r   zPyExprCSEPass.Replacer.visitg  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   )r4   r^  rq  zCallable[[], str]rY  r?  rh  rj  r   s   @r   Replacerrm  \  s.    	)(	) (	) 		)	' 	'r   rz  c                j    d| _         | j                  t        j                  d       i       | _        y )Nr   c                      yr   r   r   r   r   r  z(PyExprCSEPass.__init__.<locals>.<lambda>  s    r   )r_  r`  )_counterra  r,  defaultdictre  r   s    r   r   zPyExprCSEPass.__init__  s.    {{"..y9 # 
r   c                P    | | j                    }| xj                   dz  c_         |S r  )r}  )r   r   rE  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)	rk  re  r   r:  parseSyntaxErrorrQ  	exceptionlineno)r   exprs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   )rz  re  r  r   r:  r  rp  r=  )r   rv  replacernew_nodes       r   r<  zPyExprCSEPass.replace  sF    ==t}}=>>#))D/2h!777r   N)rY  r?  )_var)r   r  rY  r  )r  r  rY  r?  rv  r  rY  zTuple[List[str], str])r   r   r   rs  r:  	AttributeCall	Subscriptrg  dataclasses	dataclassra  NodeVisitorrk  NodeTransformerrz  r   r  r  r<  r   r   r   r\  r\  F  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  r>   r4    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   rC  r   s     r   r   z#DeletedGuardManagerWrapper.__init__  s    #) r   c                    d | _         y r   )rv   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                  6    e Zd Z	 	 	 d	 ddZd Zd Zd Zd Zy)	rX  Nc           	     ^    |r|j                   nd }i  _        t        |      }t                _        | j                  _        | _        d |r|j                  nd  _        fd}t         j                  | j                  |j                  |j                   j                         }d }t        j                  ||      t        j                   xr t#        d      }	t#        d      st$        j'                  d       t)        |xs g t*        j,                        D ]`  }
|	sK|
j/                         r;d|
j0                  vr-d|
j0                  vrt        j2                  sd|
j0                  vrP|
j5                  |       b  j7                  |||       |j8                   j                  _        t:        j<                  j?                  d	 fd
       t@        jC                  d j                         |j8                   j                  _        |jD                  s j                  jG                  |j                        sAtI         j                  |j                  tK        jL                               }tO        d|       tP         tQ         j                  |j                         t@        jS                  tT        jV                        rBtY         j                  jZ                  |j                        }t@        jC                  d|d        j                  j]                          d  _        y )Nc                    | j                         }|t        j                  u r| j                         S sJ         }|J |j	                  | j                               S r   )guard_sourcer'   CONSTANTrE  rS  )r   r  	r_builder	w_builders      r   r  z1CheckFunctionManager.__init__.<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_builderz6CheckFunctionManager.__init__.<locals>.cleanup_builder  s    A r   z!pytorch/compiler:guard_nn_modulesz9guard_nn_modules is turned off using justknobs killswitch)rs  r0  r2  hooksdynamo_cpp_guards_strc                 .    t         j                        S r   )r  r   r   s   r   r  z/CheckFunctionManager.__init__.<locals>.<lambda>	  s    D<N<N8O r   
payload_fn%szGuard check failed: zGuard eval latency = %s usz.2f)/rm   	_weakrefs5update_diff_guard_managers_for_existing_cache_entriesrr   r   r   r  torch_function_mode_stackr  r  r  r  r{   rJ  r_  r4   guard_nn_modulesr+   rQ  rR  r   r$   sort_keyr7  rE  r  rU  compile_check_fnr   r   _loggingtrace_structured
guards_logdebugr$  r   get_guard_fail_reason_helperr!   r  r5  rk   isEnabledForloggingDEBUGr   ru   clear)r   r  r}   r|   rm   existing_diff_guard_sourcesr  builderr  guard_on_nn_modulesr   reasonslatencyr  s   `            @r   r   zCheckFunctionManager.__init__  s    )5$$$;= B+N 	$ 120K-(	
 7CL22 	&	4 KK  $$%%
	 KK9	$55 
//;
 BCKKSTFLbenn= 	"E'224 #%**4$EJJ655

9RLL!	" 	gv}= .5-D-D* 	''#0O 	( 	
 	t112-4-D-D* ""%%++L,D,DE6&& ,,"557
 %';G9%EFF,8-&&(@(@ &&w}}5/&&++\-E-E   !='#P 	 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(                  j*                  j,                  ng }|D ]T  }t/        |t0              rr|j2                  }|j4                  }|j7                          d|j7                          }t9        |j;                  |      |j;                  |      |g        ||d d       t/        |t<              r|j>                  D cg c]  }|j;                  |       }}|j@                  D cg c]  }|j;                  |       }}dd	j%                  d |j>                  D               dd	j%                  d |j@                  D               d}tC        |||g        ||d d       ItE        d|        |jF                  D ]'  }|j                  D ]  }	 ||	|j                  d        ) r$tH        jJ                  jM                  dfd       tN        jP                  }|tO        jR                         }|||jT                  |dtV        tY               }| j
                  j[                          d|j\                  d   i}t              dk(  sJ || j
                  _/        || j
                  _0        | j
                  jc                          | j
                  _2        || j
                  _3        || j
                  _4        d | j
                  _5        d | j
                  _6        |
| j
                  _7        y c c}w c c}w )Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()c                $    t               }t        j                  d|       j                   fd       t        j                  t        j                        rd}d}pj                  r,ddj                  j                  j                                }j                  r,ddj                  j                  j                                }t        j                  d ||       |s#j                          j                  |       y y )Nr  c                      r9j                   r-t        j                  j                   j                               nd r-j                  r!t        j                  j                        dS d dS )N)r  rP  rM  )rP  r*   from_tracebackrQ  rM  )r   r   s   r   r  zNCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>U	  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)rT  r  r  r   verbose_guards_logr  r  r  rP  rA  formatrM  )	r   r   log_onlyr   maybe_stackmaybe_user_stackry   structured_guard_fnsrz   s	   ``    r   add_code_partz<CheckFunctionManager.compile_check_fn.<locals>.add_code_partP	  s     5i GT#45 ''  "..w}}= #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!),"))*;< r   Tr3   zcheck_no_aliasing(r   r`  r  zcheck_overlapping(overlapping=[c              3  <   K   | ]  }|j                           y wr   rJ  r  r   s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>	  s     /\Q/\   z], non_overlapping=[c              3  <   K   | ]  }|j                           y wr   rJ  r  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>	  s     3dAFFH3dr  z])zUnknown GuardEnvExpr: dynamo_guardsc                 8    D  cg c]	  }  |         c} S c c} w r   r   )fr  s    r   r  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>	  s    BV4WQQS4W 4Ws   r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr  r   r   )8r  r  r  $make_torch_function_mode_stack_guardr  r   ru   add_global_state_guard#add_torch_function_mode_stack_guardr  r  r  r   r   r  r  r   r  rA  r  tracing_contextguards_contextaotautograd_guardsr   r#   input_source_ainput_source_brE  r   r  r)   overlapping_sourcesnon_overlapping_sourcesr   r&  r  r   r  r  r5   initial_global_stateGlobalStateGuardr   r.   r7  r   r  rw   rx   r   rz   r{   r|   r}   r~   r   )r   r  
guards_outr|   largs"torch_function_mode_stack_check_fnr  seengclr  r  check_tensors_fncheck_tensors_verbose_fnr  r   source_ar  r   r   overlapping_guard_managersnon_overlapping_guard_managersglobal_staterw   rK  ry   r  rz   s                           @@@r   r  z%CheckFunctionManager.compile_check_fn7	  sy     '((#
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    --<<OO 	 (  	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~   rU   rW   
invalidate)r   obj_strr}   r~   rC  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  rJ  r_  r   	functoolspartialr  	TypeError)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   )NNN)r|   z%Optional[Callable[[GuardFail], None]])r   r   r   r   r  r  r  r  r   r   r   rX  rX    s6     ?C	}! =	}!~pQd7"r   rX  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 # 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   BxY w)Nr   r   c                &    j                  |       S r   )r<  )rv  csepasss    r   r<  z%build_guard_function.<locals>.replace
  s    t$$r   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardr  )	r   r   r\  r  r   r   r   splicer   )
ry   closure_argsr   r<  rI  rv  rp  r   make_guard_fnr  s
            @r   rB  rB  
  sg   4oGMM*%
  !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 0s$   6E:#E)#E5E&	)E25E>c                 h    t         j                  j                  j                  j	                  d      S )Nrn   r   r  	_internal	log_stateis_artifact_enabledr   r   r   is_recompiles_enabledr  5
  s#    >>##--AA,OOr   c                 h    t         j                  j                  j                  j	                  d      S )Nro   r  r   r   r   is_recompiles_verbose_enabledr  9
  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)NFT)r^   r  r   ra  )	cur_stacktymoder  s      r   check_torch_function_mode_stackzMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stackA
  sL    13	y>SZ'E9- 	HBT$Z	 r   )ra  )intial_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__r3   r   zDuplicate tensors found: )r  r{   r,  r~  rV  r   r  rO  r   r  rA  )	r   r  r{   ids_to_sourcer5  	tensor_idrs  duplicate_tensorsrC  s	            r   1recompilation_reason_for_no_tensor_aliasing_guardr  P
  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                   || 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   }|S # t        $ r}t               rY d	}~d	d	d	        d	}~w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  Fr3   zDuplicate tensor foundr   Tr  Nr   z; )r{   r  rw   r   resultrz   r  r  r  r1   rO  	Exceptionr  r   r}  r  r   rA  )r   f_locals
compile_idr  r  no_tensor_aliasing_check_failedrz   guard_debug_infor   r{   fail_reasonr  
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! ! 46   	 s6   1E3D&&	E/
E9EEEEE	c                ^   t        | t              r| d| j                   S t        | ||      }t        t
        |      j                  |       	 | j                  &| j                  t        |xs dt
        |                |S # t        $ r }t        j                  d       Y d }~|S d }~w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  r`   re   r   r|   rY   r  rQ  r  )r   r  r  r  r  r  s         r   get_guard_fail_reasonr  
  s     -!;<R A ABCC-mXzRJ=&'..z:
&&2''*8(8-:MN   
d	
 	
 
s   2B 	B,B''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)textwrapr   )r  irC  s      r   r  z9get_and_maybe_log_recompilation_reason.<locals>.<genexpr>
  s5      #Av <(8??64+HH#s   *,r9  r"  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     dddS )Nrecompile_reasonsjson)rE  encodingr   r   r   r   r  z8get_and_maybe_log_recompilation_reason.<locals>.<lambda>
  s    '
 r   c                      S r   r   )r  s   r   r  z8get_and_maybe_log_recompilation_reason.<locals>.<lambda>
  s    7 r   )metadata_fnr  )r  r   r  r  r  r   nextf_coder  r  r4   error_on_recompilerA  r  r#  r   co_nameco_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logr6   RecompileErrorr   r  r  )	r}   framerC  r  do_recompiles_logfailuresguard_failure_detailsmessager  s	           @r   &get_and_maybe_log_recompilation_reasonr;  
  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:
)
printr0  r1  r2  rA  rx   ry   rw   rO  r{   )r   r  r  rf  lastr  r   s          r   guard_error_hookrC    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   uniquerF  *  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 alising zC. This is not supported. Please do a clone for corresponding input.)r  )	r   r   r6   UnsafeScriptObjectErrorrE  r  r  r  r  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardrM  2  s     {j02;?.z:/
1*=--??$%\+2B2B2D1E F> ?  /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   )TracingContextr3   )collect_debug_stackrN  N)torch._guardsrP  r  r  r  r  r  r  r  r  r   r   r$   )rN  rm   rP  rQ  r   r   s         r   install_guardrS  T  s     -$11 8		(	(	7  



-
-
;
;
?
?C K%'''E':JKr   )r   ri  rY  r  )r   r  r   r$   rY  r  )ry   zUnion[str | List[str]]r   r$   rY  r  )rY  zTuple[str, str])r   rZ   r  rW  r  r"   rY  r  )
r   rZ   r  types.CodeTyper  rW  r  r"   rY  r  )r6  rV   rY  r  )
r   rZ   r  rT  r  rW  rf  r  rB  r}  )
__future__r   r:  r  r,  r  rL  r  r2  r  r  r  r/  r@  r  r#  r  r  rJ  
contextlibr   r  r   r   r   typingr   r	   r
   r   r   r   r   r   r   r   r   r   torch.overridesr  torch._C._dynamo.guardsr   r   r   r   r   r   r   r   r   torch._dynamo.sourcer   r   r   r   r    rR  r!   r"   r#   r$   r%   r&   r'   r(   r)   torch._loggingr*   torch._utils_internalr+   %torch.fx.experimental.symbolic_shapesr,   r-   r.   torch.utils._ordered_setr/   torch.utils._tracebackr0   r1   torch.utils.weakr2   r   r4   r5   r6   r7   
eval_framer8   r   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r4  r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   r  numpyr  ModuleNotFoundErrorsympyrl   	getLoggerr   rQ  r  getArtifactLoggerr  r4  r3  r  rr   r  	lru_cacher  r  r7  r=  rC  rD  rT  rW  r^  ro  rt  ry  r  r|  r  r  r  rM  r  r  r\  r  r  rX  rB  r  r  r  r  r  r  r;  r  rC  rF  rM  rS  r   r   r   <module>rh     s   # 
           	 
     %  .   "   
 
 
 
 
 
 & 1 
 0 O * 8 8 ,       <     ( FJ B I
  g!^^--hA
11(LI99"  ^^55h@PQ ^ ^BT T
. 
. .2* 18/'.'
%Q&Q/4QQ'- d#! ! $!"JG   
$tyy $W
# W
V/R8 R8j$!4 $V Vr
";JPX
+$2 @@@ @ 		@F
   	
 	09'99x"200
0  0 	0
 0. % &D !" KEV  	Bs   8L? ?M
	M
