
    wi                   V   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lZn# e$ r dZY nw xY we"rd dlmZ  ej        e          Ze%j                            ed          Ze%j                            ed          Ze%j                            ed          Ze%j                            ed          Z G d d          Zd  Z ej        d          d!             Zdad"ed#<   d$ Zdhd)Zd* Zd+ Zdid/Zdjd3Zd4 Zd5 Zd6 Zd7 Z ej        d89           G d: d;                      Zd< Zd= Zej         G d> d?                      Z G d@ dAej                  Z G dB dCe=          Z G dD dE          ZdF Z G dG dHe          Z G dI dJ          ZdkdLZdM ZdN ZdO ZdP ZdldWZdmdZZdnd]Zd^ ZdodcZ eWe           dd Zde Zd dfdgZdS )p    )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                  z    e Zd ZdZddZed             Zd Zd Zd Z	d Z
d	 Zdd
Zd Zd Zd Zd Zd Zd ZdS )GuardManagerWrappera  
    A helper class that contains the root guard manager. An instance of this
    class is stored in the Dynamo cache entry, so that the cache entry can
    access the RootGuardManager stored in the "root" attribute and directly call
    the check_nopybind from C++.
    Nc                   |t                      | _        n|| _        d | _        d | _        d | _        g | _        d | _        d | _        d | _        d | _	        d | _
        i | _        g | _        d| _        t                      | _        d S 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     d/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/torch/_dynamo/guards.py__init__zGuardManagerWrapper.__init__   s    <(**DIIDI# 	"& !!*,'.2+3=<<    c              #  H   K   d| _         	 d V  d| _         d S # d| _         w xY wrt   )r   r   s    r   '_preserve_print_no_tensor_aliasing_flagz;GuardManagerWrapper._preserve_print_no_tensor_aliasing_flag   s>      .2+	7EEE26D///$D/6666s    	!c                \      fd fdfd  j                     j        S )Nc                v   |                                  j        v p|                                 dk    }t          |                                                                           D ]"\  }\  }}| |           |          z  z  }#|r,j                            |                                             |S Nr   )
get_sourcer   
fail_countsortedget_key_value_managersitemsadd)nodeis_diff_guard_nodeidxkey_mgrval_mgrr   visits        r   visit_dict_managerzJGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_dict_manager   s    !!T%<<U@Q@QTU@U  ,2++--3355, , F F''gw #eeGnnuuW~~&EE""! ?'++DOO,=,=>>>%%r   c                B   t          | t                    rJ |                                 j        v p|                                 dk    }|                                 D ]}| |          z  }|r,j                            |                                            |S r   )
isinstancer   r   r   r   get_child_managersr   )r   r   	child_mgrr   r   s      r   visit_managerzEGuardManagerWrapper.collect_diff_guard_sources.<locals>.visit_manager   s    !$(899999 !!T%<<U@Q@QTU@U  "4466 7 7	"eeI&6&66""! ?'++DOO,=,=>>>%%r   c                b    | dS t          | t                    r |           S  |           S )NF)r   r   )r   r   r   s    r   r   z=GuardManagerWrapper.collect_diff_guard_sources.<locals>.visit   sA    |u$ 011 0))$/// =&&&r   )ru   r   )r   r   r   r   s   `@@@r   collect_diff_guard_sourcesz.GuardManagerWrapper.collect_diff_guard_sources   s}    	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	&	' 	' 	' 	' 	' 	' 	di&&r   c                V    |                                   |                                  d S N)r   populate_diff_guard_managerr   s    r   finalizezGuardManagerWrapper.finalize   s,    '')))((*****r   c                    |                      | j                  | _        | j        r| j                                         d S d S r   )clone_with_chosen_sourcesr   rv   r}   update_diff_guard_root_managerr   s    r   r   z/GuardManagerWrapper.populate_diff_guard_manager   sM    #==d>UVV  	>;;=====	> 	>r   c                B    fd}| j                             |          S )Nc                0    |                                  v S r   )r   )node_mgrchosen_sourcess    r   	filter_fnz@GuardManagerWrapper.clone_with_chosen_sources.<locals>.filter_fn  s    &&((N::r   )ru   clone_manager)r   r   r   s    ` r   r   z-GuardManagerWrapper.clone_with_chosen_sources  s4    	; 	; 	; 	; 	; y&&y111r   c                d    |j         j        |                                }fd|D             }|S )Nc                     g | ]
}d z   |z   S ):  ).0part
guard_names     r   
<listcomp>z7GuardManagerWrapper.get_guard_lines.<locals>.<listcomp>  s#    <<<dd"T)<<<r   )	__class____name__rz   )r   guardpartsr   s      @r   get_guard_linesz#GuardManagerWrapper.get_guard_lines  s<    _-
((**<<<<e<<<r   c                j    |                                 }|j        j        }|dz   |z   }|r|d|z   z  }|S )Nz	: source=, )r   r   r   )r   guard_manageraccessor_strsourcetss         r   get_manager_linez$GuardManagerWrapper.get_manager_line  sH    ))++#,Of$ 	%$$Ar   c                   t          |                                                                          D ]\  }\  }}|                    d|            |                                5  |rA|                    d|                     |                      |                     ||           |rA|                    d|                     |                      |                     ||           d d d            n# 1 swxY w Y   d S )NzKeyValueManager pair at index=zKeyManager: zValueManager: )r   r   r   	writelineindentr   construct_manager_string)r   mgrbodyr   r   r   s         r   construct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_string  si   '-c.H.H.J.J.P.P.R.R'S'S 		A 		A#C#'7NNACAABBB A A ANN#R$2G2G2P2P#R#RSSS11'4@@@ ANN#TD4I4I'4R4R#T#TUUU11'4@@@A A A A A A A A A A A A A A A		A 		As   (BC;;C?	C?	c           
     T   |                                 5  |                                D ]}t          |t          j        j        j        j                  rX| j        r0d| _        |	                    | 
                    |                     b|	                    |j        j        g           |	                    | 
                    |                     t          |t                    r|                     ||           t          |                                |                                          D ]Y\  }}|                    |                     |d|                                                      |                     ||           Z	 d d d            d S # 1 swxY w Y   d S )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+  s   [[]] 	? 	?,,.. A AeUX%5%<%OPP A: >C;(<(<U(C(CDDDD % 8    OOD$8$8$?$?@@@@ #/00 >223=== (+!!##S%;%;%=%=( ( ? ?#) )))5UHMMOO5U5UVV   --i>>>>?)	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   E:FF!$F!c                >   ddl m}  G d d|          }|                                 5   |            }d|_        |                    dd           |                    d	d           |                    d
           |                     | j        |           t          | j        d          rD| j                                        D ]*}|	                    | 
                    |                     +|                                cd d d            S # 1 swxY w Y   d S )Nr   IndentedBufferc                  &     e Zd Zd Zd fd	Z xZS )=GuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefixc                &    d| j         | j        z  z  S )Nz| )_indenttabwidthr   s    r   prefixzDGuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefix.prefixL  s    t|dm;<<r   Fc                    |r#t                                          |           d S t                                          d|z              d S )Nz+- )superr   )r   lineskip_prefixr   s      r   r   zGGuardManagerWrapper.__str__.<locals>.IndentedBufferWithPrefix.writelineO  sK     4GG%%d+++++GG%%edl33333r   F)r   
__module____qualname__r   r   __classcell__r   s   @r   IndentedBufferWithPrefixr   K  sL        = = =4 4 4 4 4 4 4 4 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88888	4 	4 	4 	4 	4~ 	4 	4 	4 99;; 
	# 
	#++--DDMNN24N000NN0dNCCCNN-...))$)T:::ty">?? A!YAACC A AEOOD$8$8$?$?@@@@==??
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	#s   CDDDc                6    | j                             |          S r   )ru   checkr   xs     r   r   zGuardManagerWrapper.checka  s    yq!!!r   c                6    | j                             |          S r   )ru   check_verboser   s     r   r   z!GuardManagerWrapper.check_verbosee  s    y&&q)))r   c                H     dd  fd  j                    d S )NFc                    g }|                                  D ]D}|                    d          d                                         }|                    |           E|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  sd    J%/%B%B%D%D - -!-33C88;BBDD	!!),,,,r   c                b   |                                  D ]v}t          |t          j        j        j        j                  r(s%j                             |                     dSj                             |                     w| 	                                D ]} |           d S 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 BeUX%5%<%OPP B5 :..~~e/D/DEEE592O**>>%+@+@AAAA 3355 ! !	i    ! !r   )ru   )r   r   r   r   s   `@@@r   !populate_code_parts_for_debuggingz5GuardManagerWrapper.populate_code_parts_for_debuggingi  s]    %*"	 	 		! 	! 	! 	! 	! 	! 	! 	! 	dir   r   )r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   rr   rr      s        @ @ @ @, 7 7 ^7/' /' /'b+ + +> > >2 2 2     
A 
A 
A? ? ?:# # #2" " "* * *    r   rr   c                    t           j                                        5  t          | t          j        t          j        f          rt          j        |           n| cd d d            S # 1 swxY w Y   d S r   )r   	overrides_enable_torch_functionr   npgenericndarray	as_tensor)as    r   
from_numpyr    s     
	/	/	1	1 T T%/BJ
3K%L%LSuq!!!RST T T T T T T T T T T T T T T T T Ts   <A((A,/A,c                     dd l } dd l} | j        j        | j        j        g}ddlm} |                    |           d |D             S )Nr   )POLYFILLED_MODULESc                6    h | ]}t          j        |          S r   )inspectgetfile)r   ms     r   	<setcomp>z&uninteresting_files.<locals>.<setcomp>  s"    ---1GOA---r   )torch._dynamo.external_utilstorch._dynamo.polyfillsr   external_utils	polyfillstorch._dynamo.polyfills.loaderr  r   )r   modsr  s      r   uninteresting_filesr    sg    ''''""""M(%-*ABDAAAAAAKK"###------r   zOptional[Dict[str, object]]_CLOSURE_VARSc                    t           i dt          dt          dt          j        j        dt          dt          dd dt          d	t          d
t          dt          dt          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_varsr<    s&   

|
  7 C
 I	

 |
  3 3
 $%7
 &';
 ()?
 23S
 DJ
 RZTTRX
 5<<
 Y4
 EK/
  el!
" Z#
$ "5)
 
 
, r   r   ast.ASTreturnstrc                R    t          j        |                               dd          S )N
r   )astunparsereplace)r   s    r   _ast_unparserE    s"    ;t$$T2...r   c                    t          j        d          }d}| D ]A}|dv rd}	|dv r/|r,|dk    r&|                    |          rt          |          c S <||z  }Bt	          |           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   rK  rK    s     M**JD  4<<DDV^^ 1:+;+;D+A+A*400000DLDD &&&r   c                8    t          j        d|           d         S )z*
    "a[1]" => "a"
    "a.foo" => "a"
    z[.\[]r   )rH  r   rM  s    r   rL  rL    s    
 8Hd##A&&r   r   r   r$   c                   d}||j         rCt          |j                   D ]-}|j        t                      vrdt	          |d           } n.n6|j        r/dt	          |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_partr\    s    E 	Eu/00  ;&9&;&;;;@<#>#>#>@@EE < [ 	ED<(;(;(=(=b(ABBDDE$$U$$$r   ry   Union[str | List[str]]	List[str]c                P    t          | t                    s| g} fd| D             S )Nc                0    g | ]}t          |          S r   )r\  )r   r   r   s     r   r   z*get_verbose_code_parts.<locals>.<listcomp>  s$    PPP	!)U33PPPr   )r   list)ry   r   s    `r   get_verbose_code_partsrb    s8     j$'' " \
PPPPZPPPPr   c                    g }| D ]o}t          |          s|                    |           't          |t          j                  sJ |                    |j                                                   p|S r   )r-   r   r   r   SymIntr   maybe_as_int)size_or_stride	converteddims      r   convert_to_concrete_valuesri    s    %'I 6 63 	6S!!!!c5<00000SX22445555r   c                R   t          |           }t          j                            |           t          j                                        z  t          j                                        z
  }| j        }| j        j        }| j	        }d| d|j
         d| d| d| d| d| d| d}	|	S )Nzcheck_tensor(r   z	, device=z, requires_grad=z, size=z	, stride=))typer   r   _dispatch_keys_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper.  indexrequires_gradr   )
valuerM  sizesstridespytypedispatch_keyrp  device_indexrr  	guard_strs
             r   get_tensor_guard_code_partrz    s    %[[F&&)Q)Q)S)SS00223L KE<%L'M	a 	a 	a 3 	a 	a| 	a 	au 	a 	a	a 	a0=	a 	aFK	a 	aV]	a 	a 	a  r   c                j    t          |                                                               |          S r   )ra  keysrq  )dctkeys     r   get_key_indexr    s&    

!!#&&&r   c                    d|  d| dS )Nlist(	.keys())[]r   )r   rq  s     r   get_key_index_sourcer    s    ,6,,E,,,,r   T)frozenc                  :    e Zd ZU dZded<   dZded<   dZded<   dS )NNModuleAttrAccessorInfoFboolpresent_in_generic_dictNzOptional[str]l1_keyl2_key)r   r   r   r  __annotations__r  r  r   r   r   r  r    sL          %*)))) !F     !F      r   r  c                   | j                                         }|                                 }t          | j        t                    r| j        j        }n,t          |t
                    sJ t          || j                  }t          ||          }t          |	                                          |         }	t          |	t          t          f          r	| d|	d}
n| d| d}
t          | j        t                    sG|                    ||| j        t          j                                      | j        | d|	g           |                    ||
||          S )N[r  rq  r   example_valueguard_manager_enum == )baserM  r   rq  r=   dictr  r  ra  r|  intr?  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_namerq  
key_sourcekey_example_valuevalue_sources              r   getitem_on_dict_managerr  #  s    {''))++--K&, 233 @",d333330&,??%&6>>J/446677>#c3Z00 ;*CC->CCC*::Z:::fl$677 

 	** ,/=	 	+ 	
 	

 !
 LjCC.?CCD
 
 
 //#-	 0   r   c                d    | j         }|                                o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$FFr   c                  $    e Zd ZU ded<   ded<   dS )GuardCodeListr^  	code_listr$   r   Nr   r   r   r  r   r   r   r  r  O  s%         LLLLLr   r  c                      e Zd ZdZdZdZdS )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dOdZd Zd Zed             Zd Zd Z	d Z
d Zd Zd ZdPdZ	 	 dQdZdRd"ZdSd$ZdTd&ZdPd'ZdUdVd)ZdVd*ZdPd+ZdWd/ZdPd0ZdUdPd1ZdPd2ZdPd3ZdPd4ZdPd5ZdPd6ZdPd7ZdPd8Z dPd9Z!dPd:Z"dPd;Z#dPd<Z$dPd=Z%d> Z&d? Z'd@ Z(dA Z)dB Z*dC Z+dD Z,dE Z-dPdFZ.dPdGZ/dPdHZ0dPdIZ1dPdJZ2dPdKZ3dPdLZ4dUdPdMZ5dUdNZ6dS )XGuardBuilderid_refCallable[[Any, str], str]
source_refCallable[[Source], str]lookup_weakrefs)Callable[[object], ReferenceType[object]]local_scopeDict[str, object]r{   r   rr   check_fn_managerCheckFunctionManagerc                   || _         || _        || _        ||d| _        t          j                                        | j        d<   t          j        j	        j
                                        D ]]\  }}	|                    dd                              dd                              dd          }|	| j        d         |<   |	| j        |<   ^|| _        g | _        g | _        g | _        g | _        g | _        || _        t)                      | _        | j        j        j        D ]<}
| j                            t3          |                     |
                               =i | _        i | _        t)                      | _        d S )NLG__builtins__>_<._dot_)r  r  r  scopebuiltins__dict__copyr   packagepackage_importer_package_imported_modulesr   rD  r   argnamescodeshape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managersr  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  r  r{   r   r  rM  package_moduler  s              r   r   zGuardBuilder.__init__\  s    $.9D<3X3X
%-%6%;%;%=%=
>" ]+EKKMM	. 	. 
<<S))11#s;;CCCQQD/=DJ~&t,-DJt*#%)+	
 46 46%LN.6F +.%%'0=P 	K 	KK+//488K3H3H0I0IJJJJ
 BD
  	# EHEE+++r   c                   |                      |          }t          |t                    rt          d|j                   |j                                        }|                                D ]U}||         }t          |j        |          }|                     ||          }|	                    || d|d||           Vd S )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )rq  r  r  r~  r   r  r  )
get_guard_managerr   r   NotImplementedErrorrM  r  r|  rA   get_guard_manager_typedict_getitem_manager)	r   r  r   dict_mgrdict_sourcer~  rs  r  r  s	            r   #guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_order  s   ))%00h 011 	%SFKjS S   .3355 %%'' 	 	C!#&E()AMMML!%!<!<m" " ))%00000##5	 *    	 	r   c                h   |                      |          }t          |t                    st          d|j                   t          |t                    sJ t          |                                          D ]\  }}t          |j        |          }|                    |||t          j
                  }t          |          rB|                     ||          }|                    |t          d| d| d|                     |                    |t          | d||                     d S )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r  z__check_obj_id(r   rk  r  )r  r   r   r  rM  	enumerater|  r  r  r  r  rb   r  add_id_match_guardrb  r  )	r   rs  r   r  r   r~  r  key_managerid_vals	            r   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_order  sx    ))%00($455 	%H;@:H H   ($455555!%**,,// 	 	HC-ej#>>J"22!!#3#A	 3  K ~~ S*55..*A*AAAAA5     22/:0J0J30J0JERR   '	 	r   c                    t           j        r<t          j        dk    r,t          j        dk     rt	          j        dt                     d S | S )N)r     )r  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  sR     '		 G++ :--M_   4r   c                0   d }|j         }	|j        }
t                      }t          j        |j                  D ].}|                    |j                                                   /t          ddd          }|	|
v rt          d|	d          }ncd|
v r|	|
d         v rt          dd|	          }nCd|
v r|	|
d         v rt          dd|	          }n#|	|vrd|
v r|	|
d         v rt          dd|	          }|j	        s|
                    |j         |||          S |j        sJ |j        }|j        }| d	}dx}}dx}}dx}}|rbt          |j        |          }|                                }|
|         }|                     ||          }|}|}|                     ||          }n|}|}|                     ||          }|                    ||                     |
          t&          j        
          } |||||
||          }|r |||||||          S |S )a(  
        This tries to avoid calling the expensive nn module custom getattr method by
        checking if the attribute is accessible via __dict__. For attributes that
        are not accessible via __dict__ (like descriptors), we fallback to
        PyObject_GetAttr.

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

        The most common and expensive case for nn module guards is of type
        mod.submod1.submod2.submod3.training. We avoid the python getattr of nn
        modules by going through the __dict__.
        c                <   t          | t                    rot          ||          }d| d|d}|                     |||t          j                                      || d|g           |                     ||||          S |                     ||||          S )Nr  r  r  r  r  r  )	r   r   r  r  r  r  r  r  r  )r   r~  r  r  r  r  rq  r  s           r   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr  s     #/00  &&8#>> F[EE5EEE
##%"%'7'E	 $  
 )(*/I/I#/I/I.JKKK ,,&"/'9	 -    //&"/'9	 0   r   FNT_parameters_buffers_modulesattrr   r  r  	.__dict__r   r  r  )r   r~  r  r  r  r  )memberr  r  r  getmror   updater|  r  r  getattr_managerr  r  r:   r  rM  r  get_generic_dict_managerr  r  r  )r   r   r  r  r  r  r  r  r  	attr_namemod_dictall_class_attribute_namesr   accessor_infor  r  mod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum	l1_sourcemod_generic_dict_managerl1_mgrs                             r   getattr_on_nn_modulez!GuardBuilder.getattr_on_nn_module  s   6	 	 	@ M	%..1ee! 2 <== 	@ 	@A%,,QZ__->->????0dCC  4T9dKKMMh&&98O+O+O4T=)TTMM8##	Xj5I(I(I4T:yQQMM666h&&Xj111 5T:yQQM4 A	 &55]"+#5	 6    !''''")F")F "2<<<O.22N^"&&Hx<@@!$9 &v{F;;	!*!1!1#F+ )-(C(CIx(X(X%!,((,(C(CM) )%% "-((,(C(CM) )% (:'R'R&"JJ8TT#3#A (S ( ($ )(,*#+&#8  F  ** .'/"*'<    Mr   c                    |                                 }|dk    rdS t          |                     |                    }|| j        v S )Nr   F)rM  r  r  r  )r   r   r  obj_ids       r   requires_key_order_guardingz(GuardBuilder.requires_key_order_guardingy  sF    kkmm"5DHH[))**888r   c                    t           j        }|                     |          rXt          |t                    sJ t          |          j        t          i           j        u rt           j        }nt           j        }|S r   )	r  r  r  r   r  rl  r|  r  r  )r   r   r  r  s       r   r  z#GuardBuilder.get_guard_manager_type  ss    -;++F33 	RmT22222 M""'488=88%5%H""%5%Q"!!r   c                B    |t           j        k    p|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	
r   c                    | 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  s@    !&;;jo*S//=	 < 
 
 	
r   c           	        | j         j        }d }                                }|dk    r|| j        v r| j        |         S |dk    r|                     |          }|                     |          }d }d }d }t          j        }	t          t                    rcj
                                        }|                     |          }|                     j
                  }|                     j
        |          }	t          t                    r |                    j        |||          }
nt          t                     r2|                                                     j        |||          }
nt          t&                    r2|                                                     j        |||          }
nt          t*                    r|S t          t,                    r|S t          t.                    r|sJ |                    |||          }
n)t          t2          t4          t6          t8          t:          f          r|sJ |}
nt          t<                    r|                    fd|||          }
nt          t@                    r|sJ |!                    |||          }
nt          tD          tF          f          rv|sJ t          |tH          j%        j&                  r3tO          |          tP          u r| )                    ||||||          }
n|*                    j+        |||          }
nt          tX                    rd|sJ t          |tZ          t\          j/        f          rt          |t`                    r,| 1                    |	          sJ te          ||||          }
nt          j3        th                    rtk          d          |                    j3        |||          }
n6t          |tl                    r'j7        s |8                    j3        |||          }
nt          |tr                    r'j7        s |:                    j3        |||          }
nj3        }j7        r;                                }|<                    ||||          }
nt          tz                    ret          |t`                    r,| 1                    |	          sJ te          ||||          }
n+|sJ |                    j3        |||          }
nt          t|                    r|sJ t          |          sJ j@        sE|A                    ||jB        t          j                  <                    jC        |||          }
n|jD        }|J |d	z   }|E                    ||t          j                  }t          |t`                    rJ |                    jC        |||          }
n(t          t                    r$|sJ |                    t          |||          }
nt          t                    r |sJ |                    d
 |||          }
nt          t                    r |sJ |                    d |||          }
nt          t                    r |sJ |                    d |||          }
nPt          t                    r |sJ |                    d |||          }
nt          t                    r#|sJ |M                    j3        |||          }
nt          th                    rCt          |t`                    st          d          |O                    j3        |||          }
nt          t                    r|sJ |Q                    |||          }
nYt          t                    r|sJ |S                    |||          }
n't          d d                                           |
| j                                        <   |
S )Nr   r  )global_namer   r  r  r  c                F    t                                                    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                6    |                                  d         S r   __tensor_flatten__r   s    r   r$  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (<(<(>(>q(A r   c                *    |                                  S r   )__obj_flatten__r$  s    r   r$  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (9(9(;(; r   c                N    |                                                                  S r   )_typequalified_namer$  s    r   r$  z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    		(@(@(B(B r   c                *    |                                  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   rM  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  r1  r2  r   r  r  rq  r=   RuntimeErrorra  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outrq  
kwdefaults	kw_sourcer  s    `             r   r,  z*GuardBuilder.get_guard_manager_from_source  sq
   !/4kkmm"0K!K!K.{;;" HH[11M!88OO  !!"2"@fm,, 	%{//11!%*:!;!;!%!C!CFK!P!P&*&A&A/' '#
 &+&& O	 %99%"+#5	 :  CC FL)) E	 //11FF&"+#5	 G  CC F/00 {	//11HH"."+#5	 I  CC F-.. t	 &%FN++ p	%%FJ'' n	%%%%$11"+#5 2  CC
 +2"	
 	
 g	 &%%%$CCF899 [	$33    #+#5 4  CC FJ'' R	%%%%$11"+#5 2  CC
 FZ)GHII K	%%%% -ux??&'9::./ / //&&!$&  )88&"/'9	 9   FM** s	%%%%,t[5L.MNN 0 02BCC 667NOOOOO1**%* CC "&,0BCC *<   -AA"L*&3+=	 B  CC .55 f>S (==&"/'9	 >   .66 v?T (>>&"/'9	 ?   ( 2"//11E(88&"/'9	 9   F.// @	,.>?? 223JKKKKK-&&!&  *)))(==&"/'9	 >   FN++ n	%%%%./////< (>>+"4"A'7'E ?   "/&"/'9	 "  	  0>
'333,/@@	 .EE$",'7'E F  
 &h0@AAAAA33&"/'9	 4   F-.. L	%%%%$33("+#5	 4  CC F233 D	%%%%$33AA"+#5	 4  CC F566 <	%%%%$33;;"+#5	 4  CC F;<< 4	%%%%$33BB"+#5	 4  CC FO,, ,	%%%%$3344"+#5	 4  CC F677 $	%%%%$CCl"+#5	 D  CC  233 	02BCC $J   %44l"+#5	 5  CC F-.. 	%%%%$99"+#5 :  CC
 F455 
	%%%%$BB"+#5 C  CC !KKKFKKMMKK   69#FKKMM2
r   r   r$   c                6    |                      |j                  S r   )r,  r  r   r   s     r   r  zGuardBuilder.get_guard_manager  s    11%2JKKKr   NTc                   |t                      }d                    |                                          }t          ||          \  }}i }d| j        d         i}	t          ||	|            |d         |                                 }
|r"| j        j        	                    |
|           d S | j        j        
                    |
|           d S )Nr   r  ___make_guard_fn)r<  joinr|  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pycoderH  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Q
F  #TZ_5V)3///*3)*L,?,?,A,AB 	S #==,     #44X?QRRRRRr   rM  r?  r>  r   c                F    t          || j        t                                S r   )evalr  r<  )r   rM  s     r   r  zGuardBuilder.get  s    D$*&7&9&9:::r   Union[str, Guard]c                L   t          |t                    r|}n|j        }t          t	          |                    }|| j        vr_t          j        d|          rJt          j        d|          rt          	                    d|           | j        
                    |           |S )Nz[a-zA-Z0-9_]+z^\d+$zinvalid var name: %s)r   r?  rM  rL  rK  r  rH  rJ  logwarningr   )r   r   rM  r  s       r   arg_refzGuardBuilder.arg_ref  s    eS!! 	DD:D$%8%>%>??t}$$x($// +8Hd++ ?KK 6>>>$$T***r   r  c                    t          |j        |          }t          |||j        |j                  }|                    |            d S )N)rX  rU  )r:   r  r$   rX  rU  create)r   r   r  rZ  attr_source	new_guards         r   _guard_on_attributez GuardBuilder._guard_on_attribute  sR     !99EEAQ
 
 
	 	r   c           	        |j         }t          |t                    r|j        }t          |t                    sJ d|j                     |j        }|                                }|j        }|                     |          }t          | 	                    |          |          }d }|r
d| d|d}n	d| d|d}| 
                    ||g| 	                    |                     |                     |          }	|r| 	                    |                                          }
| 	                    |          }|                     ||
          }t          |t          j        j                  rCt!          |          t"          u r-|                     ||	||
||                                |          S |	                    ||j        |
|           d S |	                    |t+          ||                     d S )Nzinvalid source hasattr(r   rk  znot hasattr()provided_guarded_objectr  )r  r   rG   r  r:   rM  r  rb  r   r  _set_guard_export_infor,  r  r   r2  r3  r]   ri   r  r   add_no_hasattr_guardrb  )r   r   r   base_sourcer  r  refvalr  base_managerr  r  r  s                r   HASATTRzGuardBuilder.HASATTR  s-   )fn-- 	![F&*--MM/M/M/MMM-k!!}ll4  dhhtnnd++ 	3.c..T...DD2#22222D##D6488D>> 	$ 	
 	
 	
 99+FF 	Y !HHV[[]]33M!%$!%!<!<V]!S!S
 -ux??&'9::./ / 00 &!KKMM&   ,, :"/'9	 -      --d4J4QV4W4WXXXXXr   rG  c                   |J |                      |          }|                     |j                  }t          |t          j        j                  sJ |                     |          }|j         d}|                    || 	                    |j
                  t          j                  }d|d| d}|                    d|t          ||                     d S )Nr  r  znot ___dict_contains(r   z
.__dict__)F)rb  r  rM  r   r   r2  r3  r  r  r  r  r  r  add_dict_contains_guardrb  )	r   r   r  rn  ro  rp  r  r  r  s	            r   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICTE  s    ll5!!hhuz""#ux/////--e44"Z222#/#H#H"FFs|TT/= $I $
 $
  At@@@@@ 884/e<<	
 	
 	
 	
 	
r   c                f   t          |                     |j                            }|                     |d|j         d          }d|                     |           d| d}|                     ||g           |                     |                              |t          ||                     d S )Ntype(rk  z___check_type_id(r   )	rl  r  rM  r  rb  rk  r  add_type_match_guardrb  )r   r   r   r  r  s        r   
TYPE_MATCHzGuardBuilder.TYPE_MATCHY  s    %*%%&&Q 5
 5 5 566C4<<#6#6CC&CCC##ED6222u%%::*477	
 	
 	
 	
 	
r   c                ^   |                      |          }|                     |j                  }t          |                     |j                            }d| d| }|                     ||g           |                     |                              |t          ||                     d S )Nz___dict_version() == )rb  r  rM  r   rk  r  add_dict_version_guardrb  )r   r   rn  ro  versionr  s         r   DICT_VERSIONzGuardBuilder.DICT_VERSIONd  s    ll5!!hhuz""txx
33445#55G55##ED6222 	u%%<<'e44	
 	
 	
 	
 	
r   r~  invertr  c                    |                      |          }|rdnd}| d|d| d}|                     ||g           |                     |                              | |t	          ||                     d S )Nnot r   z___dict_contains(r   rk  )rb  rk  r  rs  rb  )r   r   r~  r~  dict_ref	maybe_notr  s          r   DICT_CONTAINSzGuardBuilder.DICT_CONTAINSr  s    <<&&$,FF"	BBcBBxBBB##ED6222u%%==J3D%@@	
 	
 	
 	
 	
r   c                   t          |j        t                    r7|                     t	          |j        j        t          j                            S |                     |          }|                     |j	                  }| 
                    ||j	                  }d| d| d}|                     ||g           |                     |                              |t          ||                     t          |j        t                    rNt          |t           j        j                  r1|j        j        }|                     |          }||| j        |<   d S d S d S d S )Nz___check_obj_id(r   rk  )r   r  rP   rx  r$   r  r  rb  r  rM  r  rk  r  r  rb  rF   r   r2  r3  r-  r  r   )r   r   rn  ro  r  r  r-  weak_ids           r   ID_MATCHzGuardBuilder.ID_MATCH}  sf   e.
;; 	??e.3\5LMM   ll5!!hhuz""S%*--2#22222##ED6222u%%88*477	
 	
 	
 e.<< 	? #ux// ?"5@
..s33&7>D(444	? 	?? ? '&r   c                @   |                      |          }|                     |j                  }t          |t          j                  sJ | d}|                     ||g           |                     |                              t          ||                     d S Nz is not None)
rb  r  rM  r   r   Tensorrk  r  add_not_none_guardrb  )r   r   rs  rn  ro  r  s         r   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH  s    ll5!!hhuz""#u|,,,,,#####ED6222u%%88"4//	
 	
 	
 	
 	
r   c                H    |                      |dt          j                   d S )Nr   )rg  r  EQUALS_MATCHrL  s     r   
NAME_MATCHzGuardBuilder.NAME_MATCH  s#      
L4MNNNNNr   c                .   |                      |j                  }|                     |           d|                                 }|                     ||g           |                     |                              |t          ||                     d S )Nz.data_ptr() == )r  rM  rb  data_ptrrk  r  add_data_ptr_guardrb  )r   r   objr  s       r   DATA_PTR_MATCHzGuardBuilder.DATA_PTR_MATCH  s    hhuz"",,u%%FFcllnnFF##ED6222u%%88'e44	
 	
 	
 	
 	
r   c                    t           j        j        j        d g}|                     ||g           t           j        j        fd}| j        j                            |t          ||                     d S )Nz,torch.autograd.forward_ad._current_level == c                    j         k    S r   )_current_level)r   
dual_level
forward_ads    r   fnz#GuardBuilder.DUAL_LEVEL.<locals>.fn  s    ,
::r   )	r   autogradr  r  rk  r   ru   rT  rb  )r   r   r  r  r  r  s       @@r   
DUAL_LEVELzGuardBuilder.DUAL_LEVEL  s     ^.=
KzKKL##ED6222^.
	; 	; 	; 	; 	; 	; 	00&tU33	
 	
 	
 	
 	
r   c                6   t           j        j                                        }d |D             d dg}|                     ||           t           j        j        j        fd}| j        j                            |t          ||                     d S )Nc                6    g | ]}|                                 S r   )	get_state)r   cis     r   r   z6GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.<listcomp>  s     ///R",,..///r   z5torch._functorch.pyfunctorch.compare_functorch_state(rk  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_interpretersrk  compare_functorch_stater   ru   rT  rb  )r   r   cisr  r  r  r  s        @@r   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCH  s     *NNPP//3///QQQQR##E4000 %1I
	& 	& 	& 	& 	& 	& 	00&tU33	
 	
 	
 	
 	
r   c                   |                      |j                  t          |                      |j                                                  d                   t	          d          rt                     fd}nfd}dt          |           dt          j                     }| 	                    |          
                    |t          ||                     d S )Nr3   __metadata_guard__c                `                         |                                 d                   S Nr3   )r  r#  )r   original_metadatars  s    r   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s1    //%q';';'='=a'@  r   c                @    |                                  d         k    S r  r"  )r   r  s    r   r  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s     ++--a04EEEr   ___check_metadata__c)r  rM  r   r#  r   rj   r  r!   current_compile_idr  rT  rb  )r   r   r  r  r  rs  s       @@r   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH  s   $$$TXXej%9%9%L%L%N%Nq%QRR5.// 	F%e,,,      F F F F F i2.>+?+?hh>CdCfCfhhu%%664[%HH	
 	
 	
 	
 	
r   c                   |                      |          }|                     |j                  }t          |          }t          r|t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        t          j        f}nd}t           t"          f}t%          t&          t          t$          t(          t*          t,          t.          j        h||z            t.          j                                        rddlm} ddlm}m}	m }
 |
|	||fz   tC          |tD                    rUtG          fdtI          j%        |&                                |'                                          D                       sJ n-tC          |          sJ dt          |           d             tC          |tP                    rtS          j*        |          r| +                    |           g }|,                    d| d	           | -                    ||           | .                    |          /                    ta                      d
         tc          ||                     d S tC          |td                    rt	          j*        |          r| +                    |           g }|,                    d| d	           | -                    ||           | .                    |          /                    ta                      d         tc          ||                     d S | d|g}tC          ||          rtg          |          }| .                    |          4                    |tc          ||                     | -                    ||           d S )Nr   r   )
DeviceMesh)Partial	ReplicateShardc              3  8   K   | ]}t          |          V  d S r   )ra   )r   r   ok_typess     r   	<genexpr>z,GuardBuilder.EQUALS_MATCH.<locals>.<genexpr>  s>        ()q(##     r   zUnexpected type z	, not in z__math_isnan(rk  r)  z__numpy_isnan(r*  r  )5rb  r  rM  rl  r  int8int16int32int64uint8uint16uint32uint64float16float32float64ra  r  r7  r[   	frozensetsliceranger   Sizedistributedis_availabletorch.distributed.device_meshr  (torch.distributed.tensor.placement_typesr  r  r  ra   r  all	itertoolschainr|  rR  r6  r4  r5  rx  r   rk  r  rT  r<  rb  complexr   r  )r   r   rn  ro  r   np_typesok_mutable_typesr  r  r  r  r  r  s               @r   r  zGuardBuilder.EQUALS_MATCH  s   ll5!!hhuz""II 				


/HH H #;!
	 	 "	

 
 ))++ 	@@@@@@           	# H #t 	A    -6_SXXZZ-V-V           A A A$s))@@h@@A A  #u 
	$*S// 
	OOE"""DKK....///''t444""5))::!##N3&tU33   F #w 
	BHSMM 
	OOE"""DKK////000''t444""5))::!##O4&tU33   F ##C##$#'(( 	  3--Cu%%<<'e44	
 	
 	
 	##E4000r   c                    |                      |j                  }t          |t          t	          d           t
          j        f          r|                     |           d S |                     |           d S r   )	r  rM  ra   r  rl  typesCodeTyper  r  r   r   ro  s      r   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCHO  sh    hhuz""#d4jj%.9:: 	%MM%     e$$$$$r   c                J   |                      |           |                     |j                  }t          |d          r?t	          |j        t                    sJ |                     |dt          j	                   d S t          j        dt          |                      d S )Ntrainingz$Guard setup for uninitialized class )r  r  rM  r   ra   r  r  rg  r  r  r6   unimplementedrl  r  s      r   	NN_MODULEzGuardBuilder.NN_MODULEV  s    ehhuz""3
## 	R#,-----$$UJ8STTTTTPT#YYPPQQQQQr   c                ,    |                      |          S )z0things like torch.add and user defined functions)r  rL  s     r   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH_  s    }}U###r   c                F   |                      |j                  }t          |          t          j        k    rTt          |d          rD|                     |dt          j                   |                     |dt          j	                   dS | 	                    |           dS )z!matches a closure by __code__ id.__code__N)
r  rM  rl  r  FunctionTyper   rg  r  rq  r  r  s      r   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCHc  s    hhuz""99***wsJ/G/G*$$UJ8LMMM$$UJ8STTTTT&&&&&r   c                ,    |                      |          S r   r  rL  s     r   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCHm      ""5)))r   c                ,    |                      |          S r   r  rL  s     r   PYMODULE_MATCHzGuardBuilder.PYMODULE_MATCHp  r  r   c                   |                      |          }|                     |j                  }t          |          }t	          |t
                    s|                     |           g }t          |          dk    r|                    d|            n(|                    d| dt          |                      | 	                    ||           t	          |t
                    rF| 
                    |                              t          |          t          ||                     d S | 
                    |                              t          |          t          ||                     d S )Nr   r  zlen(rz  )rb  r  rM  rl  r   r  rx  lenr   rk  r  add_dict_length_check_guardrb  add_length_check_guardr   r   rn  rs  r   r  s         r   SEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTHs  se    ll5!!$$KK%&& 	#OOE"""u::??KKs%%%%KK5s55U55666##E4000eT"" 	""5))EEE

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

24??    r   c                   |                      |          }|                     |j                  }t          |          }g }|                    d| dt          |                      |                     ||           t          |          }|                     |d|j         d          }|                     |          	                    t          |          |t          ||                     d S )Nz___tuple_iterator_len(rz  rv  rk  )rb  r  rM  rl  r   rh   rk  r  r  add_tuple_iterator_length_guardrb  )r   r   rn  rs  r   r  r  s          r   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LEN  s    ll5!!$$KKRSRR7I%7P7PRRSSS##E4000KKQ 5
 5 5 566u%%EEu%%v/EdE/R/R	
 	
 	
 	
 	
r   c           
        |                      |          }|                     |j                  }t          |          }g }t	          |          }|                    d| d|            |                     ||           t          |          }|                     |d|j         d          }|\  }}	}
|                     |          	                    ||	|
|t          ||                     d S )Nz___normalize_range_iter(rz  rv  rk  )rb  r  rM  rl  rd   r   rk  r  r  add_range_iterator_match_guardrb  )r   r   rn  rs  r   r  normalized_range_iterr  startstopsteps              r   RANGE_ITERATOR_MATCHz!GuardBuilder.RANGE_ITERATOR_MATCH  s    ll5!!$$KK 4U ; ;PsPP9NPPQQQ##E4000KKQ 5
 5 5 5661tTu%%DD4v'=dE'J'J	
 	
 	
 	
 	
r   c                   |                      |          }|                      |                                          }t          |j                  st          |          rd S | d| g}|                     ||           ||f}|| j        v rd S | j                            ||f           | j                            ||f           t          |                     |          | 	                    |          t          ||                     d S )N is )rb  rM  r   r  rk  r  r   r   r  r,  rb  )r   r   source_bref_aref_br  r~  s          r   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT  s&   U##X]]__--#$
 
 	%h//	 F%%e%%&##E4000 en$555F+//???+//???%""5))..x88"4//	
 	
 	
 	
 	
r   c                   |                      |          }|                     |j                  }t          |          }|                     |           g }t          d |                                D                       }t          t          |          t          |j
                            }|r|                    d| d|            n|                    d| d|            |                     ||           |                     |j
                  r|                     ||           d S |                     ||           d S )Nc              3  4   K   | ]}t          |          V  d S r   )rb   )r   ks     r   r  z)GuardBuilder.DICT_KEYS.<locals>.<genexpr>  s(      ??QIaLL??????r   )localz___key_to_id(rz  r  .keys()) == )rb  r  rM  rl  rx  anyr|  r\   rc   r   r  r   rk  r  r  r  )r   r   rn  rs  r   r  any_key_is_idconst_keys_reprs           r   	DICT_KEYSzGuardBuilder.DICT_KEYS  sU   ll5!!$$KK??%**,,?????(e&u'?@@
 
 
  	DKKCCC/CCDDDDKKBBBBBCCC##E4000++E,DEE 	C--eU;;;;;44UEBBBBBr   c                    |                      |           dg}|                     ||           |                     |                              t	          ||                     d S r  )rb  rk  r  r  rb  )r   r   r  s      r   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE  sr    <<&&4445##E4000u%%88"4//	
 	
 	
 	
 	
r   c           	        |                      |          }|                     |j                  }t          |          }g }|                    d| dt          |                                                     |                     ||           |                     |j	                  r| 
                    ||           dS |                     ||           dS )zConstant keys matchr  r  N)rb  r  rM  rl  r   ra  r|  rk  r  r  r  r  r  s         r   DICT_CONST_KEYSzGuardBuilder.DICT_CONST_KEYS  s    ll5!!$$KKCCCCT%**,,-?-?CCDDD##E4000++E,DEE 	C--eU;;;;;44UEBBBBBr   c                L    t           j        rdS |                     |           dS )z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)r4   skip_nnmodule_hook_guardsr  rL  s     r   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s,    + 	FU#####r   c                j    t          j        |                     |j                  | j                   d S r   )r7   watchr  rM  r  rL  s     r   OBJECT_MUTATIONzGuardBuilder.OBJECT_MUTATION   s,    TXXej1143HIIIIIr   c                    d S r   r   rL  s     r   	GRAD_MODEzGuardBuilder.GRAD_MODE      r   c                    d S r   r   rL  s     r   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS  r  r   c                    d S r   r   rL  s     r   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE	  r  r   c                    d S r   r   rL  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}|                     ||           |                     |          	                    t          ||                     dS )z/Guard on CURRENT_DEVICE per torch.utils._devicer   Nzutils_device.CURRENT_DEVICE == )r   r'   GLOBALtorch.utils._devicer9  r:  CURRENT_DEVICErk  r  add_default_device_guardrb  )r   r   r  r  s       r   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE  s    |{11111'''''''''F!2BFFG##E4000u%%>>"4//	
 	
 	
 	
 	
r   c                   |j         dk    sJ | j        j        j        }d |D             }fd}j        ri }g }g }i }t                      }	j        D ][}
|
j        j        v r1t          j	        j
                            |
|j        |||||	           At                              d           \t          ||t!          |                                          |	d          }nd }j                            d |D             d |D             ||| j        | j        j        j	         	          \  }}| j        j        j	        sj                                         |D ]}|                     ||g           t-          j                    x}r|j                            |           |                     ||i t6          t9                      
           d S )Nr   c                    g | ]	}|j         
S r   )symbolic_contextr   r
  s     r   r   z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>#  s    999!,999r   c                8    fdj         |          D             S )Nc                F    g | ]}t          |t          j                  S r   )r    r   SIZE)r   r   rh  s     r   r   z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>(  s8        %V^-@#FF  r   )tracked_fakes_id_to_source)t_idrh  r  s    `r   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources%  s7       *EdK   r   z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbolsrelaxed_sources	warn_onlyc                    g | ]	}|j         
S r   )faker%  s     r   r   z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>M  s       QV   r   c                    g | ]	}|j         
S r   )r   r%  s     r   r   z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>N  s    """!QX"""r   )input_contextsequalities_inputsr  ignore_static)rw   )rM  r  r  tracked_fakesexport_constraintsr  r*  r)  r   exportdynamic_shapes_process_equalities	shape_envr`  ra  r,   ra  rR  produce_guards_verboser  freezerk  r!   try_getshape_env_guardsr   r[  r.   r<  )r   r   r[  r4  r+  namesr,  r-  r.  r/  
constraintr5  ry   rz   r  compile_contextr  s                   @r   	SHAPE_ENVzGuardBuilder.SHAPE_ENV  sj    zR,9'99b999	 	 	 	 	 * 	%02E8:L   24O+.55O*= O O
?l&MMML/CC"#$.$*''	 	 	 	 KK MNNNN 2)#5 $_%;%;%=%= > > /! ! ! !%)5)?)V)V  R   ""r""")/#4AHH *W *
 *
&
& $18 	,"))+++ 	7 	7D''v6666 -4666? 	H,334FGGG
 	11@L@,=,?,?@ 	2 	
 	
 	
 	
 	
r   c                   |                                 rt          |j        t                    rt	          |          r|                     |           d S t          |t                    r
 |            }||n|                     |j                  }t          |t          j
                  sJ |                     |          }g }| j        j        j        r|                     |           g d}|D ]}|                     |dz   |z             }t!          |t          j        t          j        f          r,|                    d| d| dt)          |                     o|                    | d| d|            n=|                     |          }t,          j        rt!          |t          j        j                  s4| j                            |           | j                            |           | j        j        }	|	j        |j                 }
t;          |
d                   }t;          |
d                   }t=          t?          ||||          |          }|                     |||||           t          |t          j        j                  s)| j        j!        j"        #                    |j                   |j$        J tK          |d|j        	          \  }}|stM          |d
          r`|j'        }d| d| d| d}|                    |           |                     |          (                    |t=          ||                     nRd| d}|                    |           |                     |          )                    d
t=          ||                     tU          |          dk    r| +                    ||           d S d S )N)rp  r.  rr  zndimension()r  zstr(rz  r  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)ri  z%, '_dynamo_dynamic_indices') == Falser   ),is_specialized_nn_moduler   r  rH   r  r  r2   r  rM  r   r  rb  r  r  r9  rx  ra   r.  rp  r   r?  r  r4   ,skip_no_tensor_aliasing_guards_on_parametersr2  	Parameterr  r  input_source_to_sizes_stridesri  rb  rz  add_tensor_match_guardr   r   r   r   rf   r   rJ  add_dynamic_indices_guardrl  r  rk  )r   r   rs  tensor_namer  termsterm
real_valuer   r  metadatarF  rG  rz   staticreasondynamic_indicesr   s                     r   TENSOR_MATCHzGuardBuilder.TENSOR_MATCHj  sW    **,,U	9u79JKKU	9 $E**U	9 MM%     %//  ".EEDHHUZ4H4HEeU\22222,,u--K, !D$18 ;&&&   " M MD!%+*;d*B!C!CJj5<*EFF M$W;$W$W$W$WC
OO$W$WXXXX{$K$KT$K$Kz$K$KLLLLM !% 6 6u = = GQueh&899Q 188EEE:AA-PPP#4A'E, 2(62BCC3HX4FGG%;.uk4PP& &" 44&   "%);<< )7JNN
  @ <+++;U5M  NFF  5";<< &+&CO !h[  !h  !hTc  !h  !hs~  !h  !h  !hIKK	*****511KK')?	5)Q)Q    V;UUU  KK	*****511FF1.y%@@   4yy1}}++E488888 }r   c                B   t                      }|J |j        }~|J t          |          d         }~|t          | j                  v sJ d|             |3|j        d uo
|j        dk    }|r|                     |j                  nd }n|}|!t          j        t          |                    nd }	d }
t          |j        dd          dk    }|r5t          |t          j        t          f          st          j        |          }
|                    ||	||
           d S )Nr  zH_produce_guard_code must be called from inside GuardedCode. Called from r   __weakrefoffset__r   )r   f_backr   dirr   rM  r  weakrefrn  rl  getattrr   enumEnumr7  set_export_info)r   r   r  rj  	cur_framecaller	func_name
name_validguarded_objectguarded_object_typeobj_refsupports_weakrefs               r   rk  z#GuardBuilder._set_guard_export_info  st    !NN	$$$!!!! ((+	CN
 
 
 
 
aV_aa
 
 

 #*4/DEJ"4DJ5?ITXXej111TNN4N 2@1KGK^,,---QU 	  N,.A1EEJ 	  	2J~	5?Q$R$R 	2k.11G		
 	
 	
 	
 	
r   )r  r  r  r  r  r  r  r  r{   r  r   rr   r  r  )r   r$   rt   )rM  r?  r>  r   )r   r^  r>  r?  )r   r$   r  r?  r   )r   r$   r>  rG  )r   r$   r~  r?  r~  r  )7r   r   r   r   r  r  staticmethodr  r  r  r  r  r  r,  r  r[  r  rb  rg  rq  rt  rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r!  rD  rY  rk  r   r   r   r  r  [  s       ;J ;J ;J ;Jz  .     D   \"S S Sj9 9 9
" 
" 
"
 
 

 
 
n n n`	L L L L S S S SD; ; ; ;      4Y 4Y 4Y 4Yl
 
 
 
 
(	
 	
 	
 	

 
 
 
	
 	
 	
 	
? ? ? ?<	
 	
 	
 	
 	
O O O O
 
 
 

 
 
 
 
 
 
 
$
 
 
 
*c c c cJ% % % %R R R R$ $ $ $' ' ' '* * * ** * * *  6
 
 
 
 
 
&
 
 
2C C C0
 
 
C C C$ $ $J J J J            

 

 

 

M
 M
 M
 M
^[9 [9 [9 [9 [9|*
 *
 *
 *
 *
 *
r   r  c                      e Zd ZdZej        ej        ej        fZe	j
         G d d                      Z G d dej                  Z G d dej                  Zdd
ZdddZddZddZdS )PyExprCSEPassr3   c                  $    e Zd ZU ded<   ded<   dS )PyExprCSEPass.ConfigzDict[str, int]
expr_countzDict[str, str]expr_to_nameNr  r   r   r   Configro  N  s*         """"$$$$$$r   rr  c                  (     e Zd Zd
dZd fd	Z xZS )PyExprCSEPass.ExprCounterr4   ro  r>  rG  c                    || _         d S r   )_config)r   r4   s     r   r   z"PyExprCSEPass.ExprCounter.__init__T  s    !DLLLr   r   r=  r   c                    t          |t          j                  r'| j        j        t          |          xx         dz  cc<   t                                          |           d S r  )r   rm  ALLOWED_NODE_TYPESrv  rp  rE  r   r   )r   r   r   s     r   r   zPyExprCSEPass.ExprCounter.visitW  s^    $ @AA A'T(:(:;;;q@;;;GGMM$r   )r4   ro  r>  rG  r   r=  r>  r   r   r   r   r   r   r   r   s   @r   ExprCounterrt  S  sQ        	" 	" 	" 	"	  	  	  	  	  	  	  	  	  	 r   r{  c                  ,     e Zd Zd fdZd fdZ xZS )PyExprCSEPass.Replacerr4   ro  gen_nameCallable[[], str]r>  rG  c                r    t                                                       || _        || _        g | _        d S r   )r   r   rv  	_gen_namepreface)r   r4   r~  r   s      r   r   zPyExprCSEPass.Replacer.__init__]  s4    
 GG!DL%DN&(DLLLr   r   r=  r   c                J   t          |t          j                  rt          |          }| j        j        |         t          j        k    r|| j        j        vrst                      	                    |          }t          |          }| 
                                }| j                            | d|            || j        j        |<   n| j        j        |         }t          j        |t          j                              S t                      	                    |          S )Nz = )r   rm  rx  rE  rv  rp  USE_THRESHOLDrq  r   r   r  r  r   rB  NameLoad)r   r   exprnode_expr_var_namer   s         r   r   zPyExprCSEPass.Replacer.visitg  s    $ @AA :#D)) <*40=3NNN4<#<<< !&d 3 3 ,U 3 3#'>>#3#3++x,C,CE,C,CDDD:B1$77#'<#<T#B8Hchjj99977==&&&r   )r4   ro  r~  r  r>  rG  ry  rz  r   s   @r   Replacerr}  \  s[        	) 	) 	) 	) 	) 	)	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r   r  r>  rG  c                r    d| _         |                     t          j        d           i           | _        d S )Nr   c                     dS r   r   r   r   r   r$  z(PyExprCSEPass.__init__.<locals>.<lambda>  s    q r   )rp  rq  )_counterrr  r1  defaultdictrv  r   s    r   r   zPyExprCSEPass.__init__  s9    {{".yy99 # 
 
r   _varr   r?  c                <    | | j          }| xj         dz  c_         |S r  )r  )r   r   rM  s      r   _new_varzPyExprCSEPass._new_var  s)    )$-))r   exprsr^  c                    |                      | j                  }|D ]^}	 |                    t          j        |                     +# t
          $ r'}t                              d|j        |            d }~ww xY wd S )Nz#Failed to visit expr at line %s.
%s)	r{  rv  r   rB  parseSyntaxErrorr`  	exceptionlineno)r   r  countereexs        r   countzPyExprCSEPass.count  s    ""4<00 	 	Acill++++   DbiQRSSS	 	s   'A
A9"A44A9r  Tuple[List[str], str]c                    |                      | j        | j                  }|                    t	          j        |                    }|j        t          |          fS r   )r  rv  r  r   rB  r  r  rE  )r   r  replacernew_nodes       r   rD  zPyExprCSEPass.replace  sH    ==t}==>>#)D//22h!7!777r   N)r>  rG  )r  )r   r?  r>  r?  )r  r^  r>  rG  r  r?  r>  r  )r   r   r   r  rB  	AttributeCall	Subscriptrx  dataclasses	dataclassrr  NodeVisitorr{  NodeTransformerr  r   r  r  rD  r   r   r   rm  rm  F  s        M -3=A% % % % % % % %         co      #' #' #' #' #'3& #' #' #'J
 
 
 
    
   8 8 8 8 8 8r   rm  c                t    t          | j        t                    pt          j        o| 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    s8    
 	5+^<< 	
 3 :<#99r   c                  $     e Zd Z fdZd Z xZS )DeletedGuardManagerWrapperc                V    t                                                       || _        d S r   )r   r   invalidation_reason)r   rW  r   s     r   r   z#DeletedGuardManagerWrapper.__init__  s'    #)   r   c                    d | _         d S r   )rv   r   s    r   r   z6DeletedGuardManagerWrapper.populate_diff_guard_manager  s    #r   )r   r   r   r   r   r   r   s   @r   r  r    sG        * * * * *$ $ $ $ $ $ $r   r  c                  6    e Zd Z	 	 	 d	d
dZd Zd Zd Zd ZdS )r  Nr|   %Optional[Callable[[GuardFail], None]]c           	         |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        ot#          d          }	t#          d          st$                              d           t)          |pg t*          j                  D ]U}
|	s<|
                                r(d|
j        vrd|
j        vrt          j        s	d|
j        vr@|
                    |           V                     |||           |j         j        _        t:          j                            d	 fd
           t@          !                    d j                   |j         j        _        |j"        sމ j        #                    |j                  s>tI           j        |j        tK          j&                              }tO          d|           tP          tQ           j        |j                   t@          )                    tT          j+                  r<tY           j        j-        |j                  }t@          !                    d|d            j        .                                 d  _        d S )Nc                    |                                  }|t          j        u r|                                 S sJ              }|J |                    |                                           S r   )guard_sourcer'   CONSTANTrM  rb  )r   r  	r_builder	w_builders      r   r  z1CheckFunctionManager.__init__.<locals>.source_ref  sn    !..00L{333{{}}$9!	I((($$V[[]]333r   c                0     |             }|r	d |_         d S d S 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)r~  r>  r@  hooksdynamo_cpp_guards_strc                 ,    t           j                  S r   )r?  r   r   s   r   r$  z/CheckFunctionManager.__init__.<locals>.<lambda>	  s    D<N8O8O 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{   r^  rn  r4   guard_nn_modulesr+   r`  ra  r   r$   sort_keyrK  rM  r  rd  compile_check_fnr   r   _loggingtrace_structured
guards_logdebugr9  r   get_guard_fail_reason_helperr!   r  rC  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N 	$ 1220K-(	
 7CLL22 	&	4 	4 	4 	4 	4 K $%
 
	 	 	 K99	$5 
//;
 ;
 BCC 	UKKSTTTFLben=== 	" 	"E'	2244	
 #%*44$EJ665 79@
9R9RLL!!!!gv}=== .5-D* 	''#0O0O0O0O 	( 	
 	
 	
 	t1222-4-D* " 	Q%++L,DEE G6& ,"577 
 %%EG%E%EFFF,8-&(@   &&w}55 Q/&+\-E    !='?O?OPPP 	 r   c                   j         }|dgz  }t                              d           g g g t          | j                  }| j        j                            dg           | j        j                            | j        dg           d | _        dfd	}t                      }j
        D ]7}|j        D ]-}	|	|vr' ||	|j        d           |                    |	           .8j        }
d }d }t          |
          dk    r0t!          j        |
d	d
                    |
          z   dz   g           | j        r| j        j        j        j        ng }|D ]P}t/          |t0                    r|j        }|j        }|                                 d|                                 }t9                              |                              |          |g            ||d d           t/          |t<                    rfd|j        D             }fd|j         D             }dd
                    d |j        D                        dd
                    d |j         D                        d}tC          |||g            ||d d           @tE          d|           j#        D ]}|j        D ]}	 ||	|j        d           r$tH          j%        &                    dfd           tN          j(        }|tO          j)                    }|||j*        |dtV          tY                      }| j        -                                 dj.        d         i}t                    dk    sJ || j        _/        || j        _0        | j        1                                 | j        _2        || j        _3        || j        _4        d | j        _5        d | j        _6        |
| j        _7        d S )Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()Fc                V    t                     }t                              d|                                fd           t                              t          j                  rd}d}lj        r/dd	                    j        
                                           }j        r/dd	                    j        
                                           }t                              d ||           |s,                                                    |           d S d S )Nr  c                      r2j         r+t          j        j                                                   nd r j        rt          j        j                  nd dS )N)r  rX  rU  )rX  r*   from_tracebackrY  rU  )r   r   s   r   r$  zNCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>U	  sr    % !"%*["
1%+2E2E2G2GHHH! !"%*%5"
1%2BCCC!  r   r   z
Stack:
z
User stack:
zGuard: %s%s%s)r\  r  r  r   verbose_guards_logr  r  r  rX  rO  formatrU  )	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	  sY    5i G GT#4555 ''        "..w}==  #% ${ S&R2775;;M;M;O;O3P3P&R&R' Rbgge6F6M6M6O6O.P.PRR ) #((#$	    =!!),,,"))*;<<<<<= =r   Tr3   zcheck_no_aliasing(r   rk  r  c                :    g | ]}                     |          S r   r,  r   r   r  s     r   r   z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>	  s7     . . . 99!<<. . .r   c                :    g | ]}                     |          S r   r  r  s     r   r   z9CheckFunctionManager.compile_check_fn.<locals>.<listcomp>	  s7     2 2 2 99!<<2 2 2r   zcheck_overlapping(overlapping=[c              3  >   K   | ]}|                                 V  d S r   rR  r   r   s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>	  s*      /\/\Q/\/\/\/\/\/\r   z], non_overlapping=[c              3  >   K   | ]}|                                 V  d S r   rR  r  s     r   r  z8CheckFunctionManager.compile_check_fn.<locals>.<genexpr>	  s*      3d3dAFFHH3d3d3d3d3d3dr   z])zUnknown GuardEnvExpr: dynamo_guardsc                     d  D             S )Nc                "    g | ]} |            S r   r   )r   fs     r   r   zKCheckFunctionManager.compile_check_fn.<locals>.<lambda>.<locals>.<listcomp>	  s    4W4W4WQQQSS4W4W4Wr   r   )r  s   r   r$  z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>	  s    4W4WBV4W4W4W r   r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_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  rO  r  tracing_contextguards_contextaotautograd_guardsr   r#   input_source_ainput_source_brM  r   r,  r)   overlapping_sourcesnon_overlapping_sourcesr   r4  r  r   r  r  r5   initial_global_stateGlobalStateGuardr   r.   r<  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   overlapping_guard_managersnon_overlapping_guard_managersglobal_staterw   rY  ry   r  rz   s    `                     @@@r   r  z%CheckFunctionManager.compile_check_fn7	  s    '((###
CE-Q*.
 .
*
 	668Q7RSSSCC*34	
 	
 	

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

 
  !!
 	##%%% #W]3%78 :!####*6'"'<<>>>0B-*>'+8( *.&)-&8P555r   c                b   t          | d          rt          | j        t                    s| j        j        x}t| j        j        x}ht          |t                    sJ t          |t                    sJ d| d}t          |          }|                    ||           || _        d S d S d S d S d S )Nr   zCache line invalidated because z got deallocated)	r   r   r   r  r}   r~   rU   rW   
invalidate)r   obj_strr}   r~   rW  deleted_guard_managers         r   r	  zCheckFunctionManager.invalidate	  s    
 D/**	7t13MNN	7 !% 2 >>K $ 2 >>Kk:66666k:66666PwPPPF$>v$F$F!"";0EFFF!6D	7 	7 	7 	7 LKKKr   c                   	 t          |          | j        vrWt          j        |          | j        t          |          <   t          j        |t          j        | j        |                     n# t          $ r Y nw xY wt          |          S )zadd a weakref, return the id)r
  )	r  r  r^  rn  r   	functoolspartialr	  	TypeError)r   r  r
  s      r   r  zCheckFunctionManager.id_ref	  s    
	#wwdn,, +2+c*:*:r#ww' *4?GLLL    	 	 	D	#wws   A-A0 0
A=<A=c                f    t          |          | j        v r| j        t          |                   S dS )zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)r  r  )r   r  s     r   r  z$CheckFunctionManager.lookup_weakrefs	
  s-    c77dn$$>"S''**tr   )NNN)r|   r  )r   r   r   r   r  r	  r  r  r   r   r   r  r    s         ?C	}! }! }! }! }!~pQ pQ pQd7 7 7"      r   r  Tuple[str, str]c                  	 ddl m} t                      		                    |            d	fd} |            }| D ]} ||          \  }}|                    |           |                    d| d	           |                                5  |                    d
           d d d            n# 1 swxY w Y    |            }|                    d           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y    |            }|                    d| d	           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y   |                                |                                fS )Nr   r   r  r?  r>  r  c                .                         |           S r   )rD  )r  csepasss    r   rD  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   rm  r  r   r   r   splicer   )
ry   closure_argsr   rD  rW  r  r  r   make_guard_fnr  s
            @r   rP  rP  
  s   444444ooGMM*% % % % % %
  !!J 1 1g&&&0000111   	1 	1  000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 NE	OOO$$$	 ' 'Z   &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' #N$$MDLDDDEEE					 0 0U###///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   -"8"8":":::s6   B11B5	8B5	0+D''D+.D+)+F  F$'F$c                 T    t           j        j        j                            d          S )Nrn   r   r  	_internal	log_stateis_artifact_enabledr   r   r   is_recompiles_enabledr  5
  s    >#-AA,OOOr   c                 T    t           j        j        j                            d          S )Nro   r  r   r   r   is_recompiles_verbose_enabledr  9
  s    >#-AABVWWWr   c                *    d | D             fd}|S )Nc                ,    g | ]}t          |          S r   )rl  )r   r   s     r   r   z8make_torch_function_mode_stack_guard.<locals>.<listcomp>?
  s    +++T!WW+++r   c                     t                      } t          |           t                    k    rdS t          |           D ]\  }}|t          |          k    r dS dS )NFT)r^   r  r   rl  )	cur_stacktymoder  s      r   check_torch_function_mode_stackzMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stackA
  sk    133	y>>SZZ''5E9-- 	 	HBT$ZZuu   tr   r   )intial_stackr&  r  s     @r   r  r  >
  s7    ++l+++E
 
 
 
 
 +*r   c                @   t          | j                  }t          j        t                    | j        D ]@}||d<   t          t          |||                    }|                             |           AfdD             }d	                    |          }d| gS )N__compile_source__c                T    g | ]$}t          |                   d k    |          %S )r3   )r  )r   r~  ids_to_sources     r   r   zErecompilation_reason_for_no_tensor_aliasing_guard.<locals>.<listcomp>X
  s@       $'Cc@R<S<SVW<W<W=<W<W<Wr   r   zDuplicate tensors found: )
r  r{   r1  r  ra  r   r  r]  r   rO  )r   r  r{   rI  	tensor_idduplicate_tensorsrW  r+  s          @r   1recompilation_reason_for_no_tensor_aliasing_guardr.  P
  s    233L+D11M&A 7 7-:)*tM<??@@	i ''6666   +8   YY())F00011r   r   rZ   f_localsr  
compile_idr"   c                   || j         d         d}|                    | j                   g }d}g }|                     |          }|j        s+|j        }t          |          dk    rd|d         v rd}n|}g }|rt          | |          }n|D ]}t          | j                   }	||	d<   t                      5  	 t          ||	|          }
n1# t          $ r$}t                      rY d	}~d	d	d	           e d	}~ww xY w	 d	d	d	           n# 1 swxY w Y   t          |
t                    r|
s|}
t          |
t                    r%|                    |
           t                      s n| d
d                    |          z   }|S )z
    Return the reason why `guard_manager` failed.
    Updates `guard_failures` with the generated reason.
    Only the first failed check of guard_manager is reported.
    r  r  Fr3   zDuplicate tensor foundr   Tr)  Nr   z; )r{   r  rw   r   resultrz   r  r.  r  r1   r]  	Exceptionr  r   r  r?  r   rO  )r   r/  r0  r  r  no_tensor_aliasing_check_failedrz   guard_debug_infor   r{   fail_reasonr  
reason_strs                r   r  r  `
  sG    !;C!@AAE	LL+,,,G&+#$&$228<< " (-@ !""a'''+=a+@@@26//,%'"& C5
 
 ' 	 	D :;;L15L-./11  "&t\5"A"AKK    466         	                 +t,, #[ #"+s++ {+++466 E"""TYYw%7%77JsB   6D8C
	D

C8C3"D2C33C88DD	D	r  types.CodeTypec                   t          | t                    r| d| j         S t          | ||          }t          t
          |                                      |           	 | j        0|                     t          |pdt
          |                              n1# t          $ r$}t                              d           Y d }~nd }~ww xY w|S )Nr   zunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)r   r  r  r  r`   re   r   r|   rY   r3  r`  r  )r   r  r/  r0  r7  r  s         r   get_guard_fail_reasonr:  
  s     -!;<< DCC ACCC-mXzRRJ=&'..z:::
&2''*8(8-:MNN    
 
 
d	
 	
 	
 	
 	
 	
 	
 	


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

c              3  T   K   | ]#\  }}d | dt          j        |d          z   V  $dS )zguard z failures:
- N)textwrapr   )r   irW  s      r   r  z9get_and_maybe_log_recompilation_reason.<locals>.<genexpr>
  sV       # #Av )(((8?64+H+HH# # # # # #r   rA  r>  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     dddS )Nrecompile_reasonsjson)rM  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/  r0  r   nextf_coder  r  r4   error_on_recompilerO  r  r?  r   co_nameco_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logr6   RecompileErrorr   r  r  )	r}   r;  rW  r  do_recompiles_logfailuresguard_failure_detailsmessager  s	           @r   &get_and_maybe_log_recompilation_reasonrV  
  s    G

!&%N"	
 
  	#NN6"""!& 
! <D .//R3P3R3R .F5 .(** 	A{{ # #!*7!3!3# # #  HH
  tyy'9'94@@HGXGG 	@DL @ @d6F @ @I\ @ @4f==@ @ 	  	.,.. .&,,W5555$$W---$ 	.$W---	N##
 
 #??? $    Nr   c                    | }t                      }| 5|                    | j                                                   | j        } | 5|} | .|| j        _        | j                                         | j        } | .|S r   )r  r  r   r   rI  r   r   )r}   first_cache_entryacc_diff_guard_sourcess      r   r  r  
  s    #
 !UU

!%%%@@BB	
 	
 	
 "&	 
! $K

!7M!4!==???!& 
! "!r   rq  r  lastr  c                   t          d|j         d|j         d|j                    t          dd                    | j                  z   dz              t          dd                    | j                             t          |            d|i| j        }| j        D ]2}	 t          || j	        |           #  t          d|            Y 0xY wd S )	NzERROR RUNNING GUARDS  rA  zlambda r   z and
  r  zMalformed guard:
)
printrL  rM  rN  rO  rx   ry   rw   r]  r{   )r   r  r/  rq  rZ  r  r   s          r   guard_error_hookr^    s     
WWWt/?WW$BUWW   
)dii 233
3c
9:::	#z}788999	-?M$>?K) 0 0	02K@@@@	0.u../////	0 0s   !B88Cc              #  j   K   t                      }| D ]}||vr|V  |                    |            d S r   )r  r   )seqr   r   s      r   uniquera  *  sJ      55D  D==GGGHHQKKK r   c                V   |r|| k    rt          |          }t          |           }t          |          st          |           r>t          j        |                                  d|                                 d          ||k    r t          j        t          j        |          S d S )Nz is alising zC. This is not supported. Please do a clone for corresponding input.)r  )	r   r   r6   UnsafeScriptObjectErrorrM  r  r  r  r  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       r   make_dupe_guardrh  2  s      Y{j002;??.z::/
 
 	1*==	 -??$$ ? ?+2B2B2D2D ? ? ?   /11 $\%AKXXXX4r   )skipc                B   ddl m} t                              t          j                  p#t                              t          j                  }|                                j        j	        j
        }|D ]*}t          |t                    sJ  |||| dz              +dS )z
    Add dynamo guards to the current tracing context.

    Args:
        guards: guard(s) to add
        skip: number of stack frames to ignore for debug stack trace
    r   )TracingContextr3   )collect_debug_stackri  N)torch._guardsrk  r  r  r  r  r  r  r  r  r   r   r$   )ri  rm   rk  rl  r   r   s         r   install_guardrn  T  s     -,,,,,$11  8		(	(	7	7  




-
;
?C K K%'''''E':JJJJJK Kr   )r   r=  r>  r?  )r   r?  r   r$   r>  r?  )ry   r]  r   r$   r>  r^  )r>  r  )r   rZ   r/  r  r0  r"   r>  r?  )
r   rZ   r  r8  r/  r  r0  r"   r>  r?  )r;  rV   r>  r^  )
r   rZ   r  r8  r/  r  rq  r  rZ  r  )
__future__r   rB  r  r1  r  r`  r  r7  r  r  r  r4  rH  r  r?  r  r  r^  
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    rm  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   r9  r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   r  numpyr  ModuleNotFoundErrorsympyrl   	getLoggerr   r`  r  getArtifactLoggerr  rP  rO  r  rr   r  	lru_cacher  r  r<  rE  rK  rL  r\  rb  ri  rz  r  r  r  r  r  r  r  ra  r  r  rm  r  r  r  rP  r  r  r  r.  r  r:  rV  r  r^  ra  rh  rn  r   r   r   <module>r     s
   # " " " " " " 



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



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