
    ɯwg                      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'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d d	l0m1Z1m2Z2m3Z3m4Z4m5Z5 d d
l6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZF d dlGmHZHmIZI d dlJmKZK ddlLmMZMmNZNmOZOmPZP ddlQmRZR ddlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZm ddlmnZnmoZompZpmqZqmrZr ddlsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZ 	 d dlZe"rd dlmZ  ej                  e      Ze%j                  j                  ed      Ze%j                  j                  ed      Ze%j                  j                  ed      Ze%j                  j                  ed      Z G d d      Zd Z ej$                  d      d        Zi de)d e(d!ej(                  j*                  d"e{d#e*d$d% d&ed'e~d(ej,                  d)ednej,                  d* ed*      d+ej0                  d,e%j                  j2                  d-e%j4                  d.ed/e%j6                  d0e%d1e	iZej:                  dd2 d3k  r	 d dlZd_d4Zd5Znd5Zd_d7Zd8 Zd9 Zd`d:Z	 	 	 	 	 	 dad;Zd< Zd= Zd> Zd? Z ejT                  d5@       G dA dB             ZdC ZdD ZejT                   G dE dF             Z G dG dHej^                        Z G dI dJe;      Z G dK dL      ZdM Z G dN dO      Z G dP dQ      ZdbdRZdS ZdT ZdU ZdV Z	 	 	 	 	 	 	 	 dcdWZ	 	 	 	 	 	 	 	 	 	 dddXZ	 	 	 	 dedYZ	 	 	 	 	 	 	 	 	 	 dfdZZ eRe       d[ Zd\ Zd d]d^Zy# e$ r dZY w xY w# e$ r d6ZY w xY w)g    )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RootGuardManagerTensorGuards)$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceTensorPropertyTensorPropertySource)CompileContext	CompileIdDuplicateInputsGuardGuardBuilderBaseGuardEnvExprGuardSourceSource)
structured)justknobs_check)EqualityConstraintis_symbolicSYMPY_INTERP)format_framereport_compile_source_on_error)TensorWeakRef   )configconvert_frameexcmutation_guard)set_guard_error_hook)AttrProxySource
AttrSourceChainedSourceConstDictKeySourceDefaultsSourceFlattenScriptObjectSourceFSDPNNModuleSourceGetItemSourceGlobalSourceGlobalStateSourceGlobalWeakRefSource
GradSourceLocalSourceNNModuleSourceNumpyTensorSourceODictGetItemSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTupleIteratorGetItemSource
TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource)
CacheEntry
ExtraStateGuardedCode	GuardFailGuardFn)common_constant_typesdict_keys_reprget_custom_getattrget_torch_function_mode_stackguard_failuresistype	key_is_id	key_to_idorig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenunpatched_nn_module_getattrverify_guard_fn_signature)Symbolguards
recompilesrecompiles_verboseverbose_guardsc                  X    e Zd ZdZd Zed        Zd ZddZd Z	d Z
d	 Zd
 Zd Zd Zy)GuardManagera  
    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++.
    c                    t               | _        d | _        d | _        g | _        d | _        d | _        d | _        d | _        d | _	        d | _
        g | _        d| _        y NT)r   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_guardselfs    Y/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/_dynamo/guards.py__init__zGuardManager.__init__   sb    $&	 	"& !#*,'.2+    c              #  J   K   d| _         	 d  d| _         y # d| _         w xY wwrk   )rw   rx   s    rz   '_preserve_print_no_tensor_aliasing_flagz4GuardManager._preserve_print_no_tensor_aliasing_flag   s&     .2+	726D/$D/s   # #	 #c                    |j                   j                  }|j                         }|D cg c]
  }|dz   |z    }}|S c c}w )N: )	__class____name__rp   )ry   guard
guard_namepartsparts        rz   get_guard_lineszGuardManager.get_guard_lines   sF    __--
((*6;<dd"T)<< =s   >Nc                v    |j                         }|j                  j                  }|dz   |z   }|r|d|z   z  }|S )Nz	: source=, )
get_sourcer   r   )ry   guard_manageraccessor_strsourcetss         rz   get_manager_linezGuardManager.get_manager_line   sF    ))+##,,Of$$$Ar|   c                   t        |j                         j                               D ]  \  }\  }}|j                  d|        |j	                         5  |r5|j                  d| j                  |              | j                  ||       |r5|j                  d| j                  |              | j                  ||       d d d         y # 1 sw Y   xY w)NzKeyValueManager pair at index=zKeyManager: zValueManager: )sortedget_key_value_managersitems	writelineindentr   construct_manager_string)ry   mgrbodyidxkey_mgrval_mgrs         rz   construct_dict_manager_stringz*GuardManager.construct_dict_manager_string   s    '-c.H.H.J.P.P.R'S 		A#C#'7NN;C5AB ANN\$2G2G2P1Q#RS11'4@NN^D4I4I'4R3S#TU11'4@A A		AA As   A/CC	c           
        |j                         5  |j                         D ]  }t        |t        j                  j
                  j                  j                        r[| j                  r(d| _        |j                  | j                  |             o|j                  |j                  j                  g       |j                  | j                  |              t        |t              r| j                  ||       t        |j!                         |j#                               D ]I  \  }}|j%                  | j'                  |d|j)                                       | j+                  ||       K 	 d d d        y # 1 sw Y   y xY w)NFzaccessed_by=)r   get_leaf_guards
isinstancetorch_C_dynamord   NO_TENSOR_ALIASINGrw   
writelinesr   r   r   r   r   zipget_accessorsget_child_managersr   r   reprr   )ry   r   r   r   accessor	child_mgrs         rz   r   z%GuardManager.construct_manager_string   sF   [[] 	?,,. AeUXX%5%5%<%<%O%OP::>C;(<(<U(CD % 8 8 OOD$8$8$?@A #/0223= (+!!#S%;%;%=( ?#) )))|HMMOCT5UV --i>?)	? 	? 	?s   EE::Fc                   ddl m}  G d d|      }| j                         5   |       }d|_        |j	                  dd       |j	                  d	d       |j	                  d
       | j                  | j                  |       | j                  j                         D ]"  }|j                  | j                  |             $ |j                         cd d d        S # 1 sw Y   y xY w)Nr   IndentedBufferc                  &     e Zd Zd Zd fd	Z xZS )6GuardManager.__str__.<locals>.IndentedBufferWithPrefixc                :    d| j                   | j                  z  z  S )Nz| )_indenttabwidthrx   s    rz   prefixz=GuardManager.__str__.<locals>.IndentedBufferWithPrefix.prefix   s    t||dmm;<<r|   c                N    |rt         |   |       y t         |   d|z          y )Nz+- )superr   )ry   lineskip_prefixr   s      rz   r   z@GuardManager.__str__.<locals>.IndentedBufferWithPrefix.writeline   s$    G%d+G%edl3r|   F)r   
__module____qualname__r   r   __classcell__r   s   @rz   IndentedBufferWithPrefixr      s    =4 4r|   r   r0    T)r   zTREE_GUARD_MANAGER:r   )torch._inductor.utilsr   r~   r   r   r   rl   get_epilogue_lambda_guardsr   r   getvalue)ry   r   r   r   r   s        rz   __str__zGuardManager.__str__   s    8	4~ 	4 99; 		#+-DDMNN24N0NN0dNCNN-.))$))T:==? = 4 4U ;<===?		# 		# 		#s   B0CC%c                8    | j                   j                  |      S N)rl   checkry   xs     rz   r   zGuardManager.check   s    yyq!!r|   c                8    | j                   j                  |      S r   )rl   check_verboser   s     rz   r   zGuardManager.check_verbose  s    yy&&q))r|   c                J     dd  fd  j                          y )NFc                    g }| j                         D ]5  }|j                  d      d   j                         }|j                  |       7 |S )N#r   )rp   splitrstripappend)
leaf_guardro   verbose_code_part	code_parts       rz   get_code_partszFGuardManager.populate_code_parts_for_debugging.<locals>.get_code_parts  sT    J%/%B%B%D -!-33C8;BBD	!!),- r|   c                j   | j                         D ]  }t        |t        j                  j                  j
                  j                        r'r>j                  j                   |             dbj                  j                   |              | j                         D ]
  } |        y rk   )
r   r   r   r   r   rd   r   ro   extendr   )r   r   r   r   ry   tensor_aliasing_guard_seenvisits      rz   r   z=GuardManager.populate_code_parts_for_debugging.<locals>.visit  s    ,,. BeUXX%5%5%<%<%O%OP5..~e/DE592OO**>%+@AB !335 !	i !r|   )rl   )ry   r   r   r   s   `@@@rz   !populate_code_parts_for_debuggingz.GuardManager.populate_code_parts_for_debugging  s!    %*"		! 	diir|   r   )r   r   r   __doc__r{   r   r~   r   r   r   r   r   r   r   r    r|   rz   ri   ri      sI    3  7 7
A?:#0"*r|   ri   c                    t        | t        j                  t        j                  f      rt	        j
                  |       S | S r   )r   npgenericndarrayr   	as_tensor)as    rz   
from_numpyr   #  s,    !+A

BJJ/G!H5??1OaOr|   c                     dd l } | j                  j                  g}|D ch c]  }t        j                  |       c}S c c}w Nr   )torch._dynamo.external_utilsr   external_utilsinspectgetfile)r   modsms      rz   uninteresting_filesr   )  s:    ' 	$$D )--1GOOA---s   ?___check_type_id___check_obj_id___odict_getitem___key_to_id___dict_version___dict_containsc                
    | |v S r   r   )r   bs     rz   <lambda>r   9  s
    Q!V r|   ___tuple_iterator_len___tuple_iterator_getitem__math_isnan__numpy_isnaninf__load_moduleutils_devicedevice___from_numpy___as_tensorr   r      )      c                L    t        j                  |       j                  dd      S N
r   )
astunparseunparsereplacenodes    rz   _ast_unparser
  P  s     %%d+33D"==r|   TFc                L    t        j                  |       j                  dd      S r  )astr  r  r  s    rz   r
  r
  Y  s    {{4 ((r22r|   c                    t        j                  d      }d}| D ]:  }|dv rd}
|dv r(|s|dk7  s|j                  |      s)t        |      c S ||z  }< t	        |       S )z
    "___odict_getitem(a, 1)" => "a"
    "a.layers[slice(2)][0]._xyz" ==> "a"
    "getattr(a.layers[slice(2)][0]._abc, '0')" ==> "a"
    "getattr(getattr(a.x[3], '0'), '3')" ==> "a"
    "a.layers[slice(None, -1, None)][0]._xyz" ==> "a"
    z[A-Za-z_].*r   z (z),[]None)recompilematchstrip_function_callstrip_getattr_getitem)name
valid_namecurrchars       rz   r  r  ]  sp     M*JD 4<DV^:+;+;D+A*400DLD !&&r|   c                4    t        j                  d|       d   S )z*
    "a[1]" => "a"
    "a.foo" => "a"
    z[.\[]r   )r  r   )r  s    rz   r  r  t  s    
 88Hd#A&&r|   c                   d}|j                   rCt        |j                         D ]*  }|j                  t               vsdt	        |d       } n7 n5|j
                  r)dt	        |j
                  j                         d          }| d| S )Nr   z  # T)r   z<60)
user_stackreversedfilenamer   r-   stacksummary)r   r   extrafss       rz   get_verbose_code_partr"  |  s    E5++, 	B{{"5"77|BT:;<	 
|EKK$7$7$9"$=>?@_UG$$r|   c                f    t        | t              s| g} | D cg c]  }t        ||       c}S c c}w r   )r   listr"  )ro   r   r   s      rz   get_verbose_code_partsr%    s1     j$' \
EOP	!)U3PPPs   .c                    g }| D ]d  }t        |      s|j                  |        t        |t        j                        sJ |j                  |j
                  j                                f |S r   )r+   r   r   r   SymIntr	  maybe_as_int)size_or_stride	converteddims      rz   convert_to_concrete_valuesr,    sc    %'I 63S!c5<<000SXX22456 r|   c                |   t        |       }t        j                  j                  |       t        j                  j	                         z  t        j                  j                         z
  }| j                  }| j                  j                  }| j                  }d| d|j                   d| d| d| d| d| d| d}	|	S )Nzcheck_tensor(r   z	, device=z, requires_grad=z, size=z	, stride=))typer   r   _dispatch_keys_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper   indexrequires_gradr   )
valuer  sizesstridespytypedispatch_keyr3  device_indexr5  	guard_strs
             rz   get_tensor_guard_code_partr=    s    %[F&)Q)Q)SS0023L KKE<<%%L''M
vR 3 34B|nBug N/geWIV]U^^_	a  r|   c                R    t        | j                               j                  |      S r   )r$  keysr4  )dctkeys     rz   get_key_indexrB    s    
!!#&&r|   c                    d|  d| dS )Nlist(	.keys())[]r   )r   r4  s     rz   get_key_index_sourcerG    s    6()E7!,,r|   )frozenc                  8    e Zd ZU dZded<   dZded<   dZded<   y)NNModuleAttrAccessorInfoFboolpresent_in_generic_dictNzOptional[str]l1_keyl2_key)r   r   r   rL  __annotations__rM  rN  r   r|   rz   rJ  rJ    s'     %*T) !FM  !FM r|   rJ  c                   | j                   j                         }| j                         }t        | j                  t              r| j                  j                  }n(t        |t
              sJ t        || j                        }t        ||      }t        |j                               |   }	t        |	t        t        f      r	| d|	d}
n| d| d}
t        | j                  t              sM|j                  ||| j                  t        j                        j                  | j                  | d|	g       |j!                  ||
||      S )N[rF  r4  r   example_valueguard_manager_enum == )baser  r   r4  r9   dictrB  rG  r$  r?  intstrget_key_managerGuardManagerTypeGUARD_MANAGERadd_equals_match_guardget_value_manager)r   base_guard_managerbase_example_valuerS  rT  base_source_namesource_namer4  
key_sourcekey_example_valuevalue_sources              rz   getitem_on_dict_managerrf    sF    {{'')++-K&,, 23"",d3330&,,?%&6>J/4467>#c3Z0*+1->,AC*+1ZL:fll$67 	** ,,/==	 	+ 	

 !
 LLj\.?-BCD
 //#-	 0  r|   c                `    | j                   }|j                         xr t        |t               S r   )originating_sourceis_dict_keyr   rA   )r   r   s     rz   match_on_id_for_tensorrj    s+    %%FF
6:(F$FFr|   c                  "    e Zd ZU ded<   ded<   y)GuardCodeList	List[str]	code_listr#   r   Nr   r   r   rO  r   r|   rz   rl  rl    s    Lr|   rl  c                      e Zd ZdZdZdZy)r[  r0   r   r   N)r   r   r   r\  DICT_GUARD_MANAGERDICT_SUBCLASS_GUARD_MANAGERr   r|   rz   r[  r[    s    M"#r|   r[  c                     e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5dZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd6d
ZedfdZd7dZd8dZd9dZd6dZd:d;dZd;dZd6dZd<dZd6dZd:d6dZd6dZd6dZd6dZd6dZd6dZd6dZd6dZd6dZ d6d Z!d6d!Z"d6d"Z#d6d#Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d6d+Z,d6d,Z-d6d-Z.d6d.Z/d6d/Z0d6d0Z1d6d1Z2d:d6d2Z3d=d3Z4d:d4Z5y)>GuardBuilderc                8   || _         || _        || _        ||d| _        t        j
                  j                         | j                  d<   t        j                  j                  j                  j                         D ]X  \  }}	|j                  dd      j                  dd      j                  dd      }|	| j                  d   |<   |	| j                  |<   Z || _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        || _        t-               | _        | j*                  j0                  j2                  D ]5  }
| j.                  j5                  t7        | j9                  |
                   7 i | _        i | _        t-               | _        y )NLG__builtins__>_<._dot_) id_ref
source_reflookup_weakrefsscopebuiltins__dict__copyr   packagepackage_importer_package_imported_modulesr   r  r   argnamescodeshape_env_codetensor_check_namestensor_check_examplestensor_check_guardstensor_check_guard_managerscheck_fn_managersetkey_order_guarded_dict_idsoutput_graphguard_on_key_orderaddidgetru   _cached_guard_managers_cached_duplicate_input_guards)ry   r  r  r  local_scoperq   r   r  r  package_modulerb  s              rz   r{   zGuardBuilder.__init__  s    $.9D<3X
%-%6%6%;%;%=

>" ]]++EEKKM	. 
<<S)11#s;CCCQD/=DJJ~&t,-DJJt	. +#%)+	
 46 .09;"02 ?A(6F +.%'00==PP 	KK++//488K3H0IJ	K BD
  	# EHE+r|   c                f   | j                  |      }t        |t              rt        d|j                         |j
                  j	                         }|j                         D ]K  }||   }t        |j
                  |      }| j                  ||      }|j                  || d|d||       M y )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )r4  rQ  rF  rA  r   rS  rT  )
get_guard_managerr   r   NotImplementedErrorr  rh  r?  r=   get_guard_manager_typedict_getitem_manager)	ry   rS  r   dict_mgrdict_sourcerA  r6  re  rT  s	            rz   #guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_orderF  s    ))%0h 01%FFKjj\S  ..335 %%' 	C!#&E()A)AML!%!<!<m" ))%awa0##5	 * 	r|   c                   | j                  |      }t        |t              st        d|j                         t        |t              sJ t        |j                               D ]  \  }}t        |j                  |      }|j                  |||t        j                        }t        |      r5| j                  |      }|j                  |t        d| d| d|             |j                  |t        | d||              y )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for rR  z__check_obj_id(r   r.  rU  )r  r   r   r  r  	enumerater?  rG  rZ  r[  r\  r[   r  add_id_match_guardr%  r]  )	ry   r6  r   r  r   rA  rc  key_managerid_vals	            rz   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_order]  s    ))%0($45%;;@::,H  ($4555!%**,/ 	HC-ejj#>J"22!!#3#A#A	 3 K ~S)..*)*RxqA5 22/:,d3'0JER'	r|   c                   d }|j                   }	|j                  }
t               }t        j                  |j
                        D ]+  }|j                  |j                  j                                - t        ddd      }|	|
v rt        d|	d      }nNd|
v r|	|
d   v rt        dd|	      }n5d|
v r|	|
d   v rt        dd|	      }n|	|vrd|
v r|	|
d   v rt        dd|	      }|j                  s|j                  |j                   |||      S |j                  sJ |j                  }|j                  }| d	}dx}}dx}}dx}}|rTt        |j                  |      }|j                         }|
|   }| j!                  ||      }|}|}| j!                  ||      }n|}|}| j!                  ||      }|j#                  ||
t$        j&                  
      } |||||
||      }|r |||||||      S |S )a(  
        This tries to avoid calling the expensive nn module custom getattr method by
        checking if the attribute is accessible via __dict__. For attributes that
        are not accessible via __dict__ (like descriptors), we fallback to
        PyObject_GetAttr.

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

        The most common and expensive case for nn module guards is of type
        mod.submod1.submod2.submod3.training. We avoid the python getattr of nn
        modules by going through the __dict__.
        c                   t        | t              rct        ||      }d| d|d}| j                  |||t        j
                        j                  || d|g       | j                  ||||      S | j                  ||||      S )NrD  rE  rF  rR  rU  r  )	r   r   rB  rZ  r[  r\  r]  r^  r  )r   rA  rb  r`  rS  rT  r4  rc  s           rz   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr  s     #/0 &&8#>  %[M5)1E
##%"%'7'E'E	 $ 
 )(*T#/I.JK ,,&"/'9	 -   //&"/'9	 0  r|   FNT_parameters_buffers_modulesattrr   rS  rT  	.__dict__r   rS  rT  )r   rA  rb  r`  rS  rT  )memberr  r  r   getmror   updater?  rJ  rL  getattr_managerrM  rN  r7   rV  r  r  get_generic_dict_managerr[  r\  )ry   r   r_  r`  rS  ra  rb  rT  r  	attr_namemod_dictall_class_attribute_namesr   accessor_inforM  rN  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                             rz   getattr_on_nn_modulez!GuardBuilder.getattr_on_nn_module  sr   6	@ MM	%...1e! 2 < <= 	@A%,,QZZ__->?	@ 1dC 4T9dKMh&98O+O4T=)TM8#	Xj5I(I4T:yQM66h&Xj11 5T:yQM44 &55]]"+#5	 6   !''''"))F"))F "2 2)<O.22N^"&&Hx<@@!$9&v{{F;	!*!1#F+ )-(C(CIx(X%!,((,(C(CM)% "-((,(C(CM)% (:'R'R&&#3#A#A (S ($ ),*#+&#8F * .'/"*'<  Mr|   c                ~    |j                         }|dk(  ryt        | j                  |            }|| j                  v S )Nr   F)r  r  r  r  )ry   r   rb  obj_ids       rz   requires_key_order_guardingz(GuardBuilder.requires_key_order_guarding  s<    kkm"DHH[)*8888r|   c                   t         j                  }| j                  |      r^t        |t              sJ t        |      j                  t        i       j                  u rt         j                  }|S t         j                  }|S r   )	r[  r\  r  r   rW  r/  r?  rq  rr  )ry   r   rS  rT  s       rz   r  z#GuardBuilder.get_guard_manager_type  sq    -;;++F3mT222 M"''48==8%5%H%H" "! &6%Q%Q"!!r|   c                R    |t         j                  k(  xs |t         j                  k(  S r   )r[  rq  rr  )ry   mgr_enums     rz   manager_guards_on_keysz#GuardBuilder.manager_guards_on_keys'  s+    (;;; H+GGG	
r|   c                    | j                   sJ | j                   j                  j                  | j                  d   d| j                  d   t        j
                        S )Nrx  )	f_globalsr   rS  rT  )r   rl   globals_dict_managerr  r[  r\  rx   s    rz   get_global_guard_managerz%GuardBuilder.get_global_guard_manager-  sW    !!!!!!&&;;jjo**S//==	 < 
 	
r|   c           	        | j                   sJ | j                   j                  }d }|j                         }|dk7  r|| j                  v r| j                  |   S |dk7  r| j	                  |      }| j                  ||      }d }d }d }t        j                  }	t        |t              rb|j                  j                         }| j	                  |      }| j                  |j                        }| j                  |j                  |      }	t        |t              r!|j                  |j                  |||      }
nt        |t               r/| j#                         j                  |j$                  |||      }
nt        |t&              r/| j#                         j)                  |j$                  |||      }
nt        |t*              r|S t        |t,              r|S t        |t.              r|sJ |j1                  |||      }
n7t        |t2        t4        t6        t8        t:        f      r|sJ |}
n
t        |t<              r|sJ |j?                  |||      }
nt        |t@        tB        f      rs|sJ t        |tD        jF                  jH                        r*tK        |      tL        u r| jO                  |||||||      }
nx|jQ                  |jR                  |||      }
nWt        |tT              rW|sJ t        |tV        tX        jZ                  f      rzt        |t\              r$| j_                  |	      sJ ta        |||||      }
nt        |jb                  td              rtg        d      |j                  |jb                  |||      }
nt        |th              r-|jj                  s!|jm                  |jb                  |||      }
nkt        |tn              r-|jj                  s!|jq                  |jb                  |||      }
n.|jb                  }|jj                  r|js                         }|ju                  ||||      }
nt        |tv              rYt        |t\              r$| j_                  |	      sJ ta        |||||      }
n|sJ |j                  |jb                  |||      }
nt        |tx              r|sJ t{        |      sJ |j|                  sK|j                  ||j                  t        j                        ju                  |j                  |||      }
n|j                  }|J |dz   }|j                  ||t        j                        }t        |t\              rJ |j                  |j                  |||      }
nt        |t              r|sJ |j                  t        |||      }
nut        |t              r|sJ |j                  d	 |||      }
nIt        |t              r|sJ |j                  d
 |||      }
nt        |t              r|sJ |j                  d |||      }
nt        |t              r|sJ |j                  d |||      }
nt        |t              r$|sJ |j                  |jb                  |||      }
nt        |td              r;t        |t\              st        d      |j                  |jb                  |||      }
nHt        |t              r|sJ |j                  |||      }
nt        d| d|j                                |
| j                  |j                         <   |
S )Nr   r  )global_namer   rS  rT  r  r  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_orderz.__kwdefaults__)python_lambdar   rS  rT  c                (    | j                         d   S r   __tensor_flatten__r   s    rz   r   z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (<(<(>q(A r|   c                "    | j                         S r   )__obj_flatten__r  s    rz   r   z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>   s    (9(9(; r|   c                >    | j                         j                         S r   )_typequalified_namer  s    rz   r   z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>(  s    	(@(@(B r|   c                "    | j                         S r   )get_baser  s    rz   r   z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>0  s    

 r|   rR  z4ConstDictKeySource can only work on DictGuardManagerzmissing guard manager builder z - )Qr   rl   r  r  r  r  r[  r\  r   r8   rV  get_guard_manager_from_sourcerZ   rB   r  
local_namer>   r  r  r@   global_weakref_managerr?   rH   rK   type_managerrF   rC   rM   rL   r<   rA   grad_managerr7   rN   r   nnModulerW   ra   r  r  r  r=   rW  collectionsOrderedDictr   r  rf  r4  r9   RuntimeErrorr$  index_is_slicelist_getitem_managertupletuple_getitem_managerunpack_slicegetitem_managerrE   r:   callableis_kwfunc_defaults_manager__defaults__idx_key__kwdefaults__func_kwdefaults_managerrD   lambda_managerr   rI   r;   rG   r6   rJ   tuple_iterator_getitem_managerAssertionErrorrZ  rO   weakref_call_manager)ry   r   root_guard_managerrS  rb  rT  ra  r`  r_  base_guard_manager_enumoutr4  
kwdefaults	kw_sourcer  s                  rz   r  z*GuardBuilder.get_guard_manager_from_source6  s   !!!!!//44kkm"0K0K!K..{;;" HH[1M!88O  !!"2"@"@fm,%{{//1!%*:!;!%!C!CFKK!P&*&A&A/'#
 &+& %99%%"+#5	 : C FL) //1FF&&"+#5	 G C F/0//1HH".."+#5	 I C F-. &%FN+%%FJ'%%%$11"+#5 2 C
 +2"	
 &%%$CFJ'%%%$11"+#5 2 C
 FZ)GHI%%% -uxx?&'9:./ //&&!$& )88&"/'9	 9  FM*%%%,t[5L5L.MN 02BC667NOOO1**%*C "&,,0BC*<  -AA"LL*&3+=	 B C .5f>S>S(==&"/'9	 >  .6v?T?T(>>&"/'9	 ?  (("//1E(88&"/'9	 9  F./,.>?223JKKK-&&!& *))(==&"/'9	 >  FN+%%%.///<<(>>+"4"A"A'7'E'E ?  "/&"/'9	 " 	  0>>
'333,/@@	 .EE$",'7'E'E F 
 &h0@AAA33&"/'9	 4  F-.%%%$33("+#5	 4 C F23%%%$33A"+#5	 4 C F56%%%$33;"+#5	 4 C F;<%%%$33B"+#5	 4 C FO,%%%$334"+#5	 4 C F67%%%$CCll"+#5	 D C  2302BC$J  %44ll"+#5	 5 C  12%%%$99"+#5 : C !0FKKM?K  69##FKKM2
r|   c                8    | j                  |j                        S r   )r  rh  ry   r   s     rz   r  zGuardBuilder.get_guard_managerW  s    11%2J2JKKr|   Tc                   dj                  |j                               }t        ||      \  }}i }d| j                  d   i}	t	        ||	|        |d   |j                          }
| j                  sJ |r'| j                  j                  j                  |
|       y | j                  j                  j                  |
|       y )Nr   rx  ___make_guard_fn)
joinr?  build_guard_functionr  execvaluesr   rl   add_epilogue_lambda_guardadd_lambda_guard)ry   ro   rp   rm   is_epiloguemake_guard_fn_args
guard_bodypycoder  globals_for_guard_fnguard_fns              rz   $add_python_lambda_leaf_guard_to_rootz1GuardBuilder.add_python_lambda_leaf_guard_to_rootZ  s     "YY|'8'8':;1*>PQ
F  #TZZ_5V)3/*3)*L,?,?,AB!!!! ##==, ##44X?QRr|   c                8    t        || j                  t              S r   )evalr  CLOSURE_VARS)ry   r  s     rz   r  zGuardBuilder.get{  s    D$**l33r|   c                B   t        |t              r|}n|j                  }t        t	        |            }|| j
                  vr]t        j                  d|      rGt        j                  d|      rt        j                  d|       | j
                  j                  |       |S )Nz[a-zA-Z0-9_]+z^\d+$zinvalid var name: %s)r   rY  r  r  r  r  r  r  logwarningr   )ry   r   r  rV  s       rz   arg_refzGuardBuilder.arg_ref  sy    eS!D::D$%8%>?t}}$xx($/88Hd+KK 6>$$T*r|   c                    t        |j                  |      }t        |||j                  |j                        }|j                  |        y )N)r  r  )r7   rh  r#   r  r  create)ry   r   r  r  attr_source	new_guards         rz   _guard_on_attributez GuardBuilder._guard_on_attribute  sA     !9!99EAQAQ
	 	r|   c           	        |j                   }t        |t              r|j                  }t        |t              sJ d|j
                          |j                  }|j                         }|j                  }| j                  |      }t        | j                  |      |      }d }|r
d| d|d}n	d| d|d}| j                  ||g| j                  |             t        j                  r| j                  |      }	|r| j                  |j                               }
| j                  |      }| j                  ||
      }t        |t        j                   j"                        r6t%        |      t&        u r%| j)                  ||	||
||j                         |      S |	j+                  ||j
                  |
|       y |	j-                  |t/        ||             y | j1                  ||g       y )Nzinvalid source hasattr(r   r.  znot hasattr()provided_guarded_objectr  )rh  r   rC   rV  r7   r  r  r  hasattrr  _set_guard_export_infor1   enable_cpp_guard_managerr  r  r   r  r  rW   ra   r  r  add_no_hasattr_guardr%  _produce_guard_code)ry   r   r   base_sourcerV  r  refvalr  base_managerrS  r`  rT  s                rz   HASATTRzGuardBuilder.HASATTR  s   ))fn-[[F&*-M/MM-kk!}}ll4 dhhtnd+cU"THA.D!#b2D##D6488D> 	$ 	
 **==kJL !% 7%)XXd^"%)%@%@%W"
 1588??C*+=>23  44$*%*  !00!$zz&3+=	 1  110u= $$UTF3r|   Nc                   |J | j                  |      }| j                  |j                        }t        |t        j
                  j                        sJ | j                  |      }|j                   d}|j                  ||j                  t        j                        }d|d| d}|j                  d|t        ||             y )Nr  r  znot ___dict_contains(r   z
.__dict__)F)r  r  r  r   r   r  r  r  r  r  r[  r\  add_dict_contains_guardr%  )	ry   r   r  r(  r)  r*  r  r  r  s	            rz   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT  s    ll5!hhuzz"#uxx///--e4"ZZL	2#/#H#H",,/== $I $
  'thbZ@ 884/e<	
r|   c                b   t        | j                  |j                              }| j                  |      }d| j	                  |       d| d}| j                  ||g       t        j                  r,| j                  |      j                  |t        ||             y | j                  ||g       y )N___check_type_id(r   r.  )r/  r  r  r  r  r#  r1   r$  r  add_type_match_guardr%  r&  )ry   r   r   r  r  s        rz   
TYPE_MATCHzGuardBuilder.TYPE_MATCH  s    %**%&Q"4<<#6"7r&C##ED62**""5)>>.tU; $$UTF3r|   c                x   | j                  |      }| j                  |j                        }t        | j                  |j                              }d| d| }| j	                  ||g       t
        j                  r,| j                  |      j                  |t        ||             y | j                  ||g       y )Nz___dict_version() == )r  r  r  r   r#  r1   r$  r  add_dict_version_guardr%  r&  )ry   r   r(  r)  versionr  s         rz   DICT_VERSIONzGuardBuilder.DICT_VERSION  s    ll5!hhuzz"txx

34!#eG95##ED62** ""5)@@+D%8 $$UTF3r|   c                   | j                  |      }|rdnd}| d|d| d}| j                  ||g       t        j                  r.| j	                  |      j                  | |t        ||             y | j                  ||g       y )Nnot r   z___dict_contains(r   r.  )r  r#  r1   r$  r  r-  r%  r&  )ry   r   rA  invertdict_ref	maybe_notr  s          rz   DICT_CONTAINSzGuardBuilder.DICT_CONTAINS	  s    <<&$F"	-cWBxjB##ED62**""5)AA
C!7e!D $$UTF3r|   c                   t        |j                  t              r=| j                  t	        |j                  j
                  t        j                              S | j                  |      }| j                  |j                        }| j                  |      }d| d| d}| j                  ||g       t        j                  r,| j                  |      j                  |t!        ||             n| j#                  ||g       t        |j                  t$              r_t        |t&        j(                  j*                        r:|j                  j,                  }| j/                  |      }||| j0                  |<   y y y y )Nz___check_obj_id(r   r.  )r   rh  rK   r2  r#   rV  rt  r  r  r  r  r#  r1   r$  r  r  r%  r&  rB   r   r  r  r  r  ru   )ry   r   r(  r)  r  r  r  weak_ids           rz   ID_MATCHzGuardBuilder.ID_MATCH  sD   e..
;??e..33\5L5LM  ll5!hhuzz"S!!#b2##ED62**""5)<<.tU; $$UTF3 e..< #uxx/"55@@
..s3&7>D((4 ' 0	 =r|   c                `   | j                  |      }| j                  |j                        }t        |t        j
                        sJ | d}| j                  ||g       t        j                  r+| j                  |      j                  t        ||             y | j                  ||g       y Nz is not None)r  r  r  r   r   Tensorr#  r1   r$  r  add_not_none_guardr%  r&  )ry   r   r6  r(  r)  r  s         rz   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH8  s    ll5!hhuzz"#u||,,,l###ED62**""5)<<&tU3 $$UTF3r|   c                F    | j                  |dt        j                         y )Nr   )r  rt  EQUALS_MATCHr  s     rz   
NAME_MATCHzGuardBuilder.NAME_MATCHF  s      
L4M4MNr|   c                   t         j                  s| j                  |       | j                  |j                        }| j                  |       d|j                          }| j                  ||g       t         j                  r,| j                  |      j                  |t        ||             y | j                  ||g       y )Nz.data_ptr() == )r1   r$  r2  r  r  r  data_ptrr#  r  add_data_ptr_guardr%  r&  )ry   r   objr  s       rz   DATA_PTR_MATCHzGuardBuilder.DATA_PTR_MATCHI  s     ..OOE"hhuzz",,u%&oclln5EF##ED62**""5)<<+D%8 $$UTF3r|   c                   t         j                  j                  j                  d g}| j	                  ||g       t
        j                  r_t         j                  j                  fd}| j                  sJ | j                  j                  j                  |t        ||             y | j                  ||       y )Nz,torch.autograd.forward_ad._current_level == c                "    j                   k(  S r   )_current_level)r   
dual_level
forward_ads    rz   fnz#GuardBuilder.DUAL_LEVEL.<locals>.fnd  s    !00J>>r|   )r   autogradrR  rP  r#  r1   r$  r   rl   r  r%  r&  )ry   r   r  rS  rQ  rR  s       @@rz   
DUAL_LEVELzGuardBuilder.DUAL_LEVELZ  s     ^^..==
>zlKL##ED62**22J? %%%%##44*47 $$UD1r|   c                   t         j                  j                  j                         }|D cg c]  }|j	                          c}d dg}| j                  ||       t        j                  rit         j                  j                  j                  fd}| j                  sJ | j                  j                  j                  |t        ||             y | j                  ||       y c c}w )Nz5torch._functorch.pyfunctorch.compare_functorch_state(r.  c                           S r   r   )r   
compare_fnstatess    rz   rS  z.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fnz  s    !&))r|   )r   
_functorchpyfunctorch#retrieve_all_functorch_interpreters	get_stater#  r1   r$  compare_functorch_stater   rl   r  r%  r&  )ry   r   ciscir  rS  rX  rY  s         @@rz   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCHn  s     **NNP+./R",,./GxqQR##E40**))55MMJ* %%%%##44*47 $$UD1! 0s   C.c                @   | j                  |j                        t        | j                  |j                        j                         d         t	        d      rt               fd}nfd}dt        |       dt        j                          }t        j                  r,| j                  |      j                  |t        ||             y | j                  d      }|||<   | d| j                  |j                         d	g}| j                  ||       y )
Nr0   __metadata_guard__c                J    j                  | j                         d         S Nr0   )rc  r  )r   original_metadatar6  s    rz   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s)    //%q';';'=a'@ r|   c                0    | j                         d   k(  S re  r  )r   rf  s    rz   rg  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s    ++-a04EEEr|   ___check_metadata__crx  (r.  )r  r  r   r  r"  rb   r  r    current_compile_idr1   r$  r  r  r%  r&  )ry   r   rg  r  rq   r  rf  r6  s         @@rz   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH  s    $$TXXejj%9%L%L%Nq%QR5./%e,F +2.>+?*@>CdCdCfBgh**""5):: "8e"L  88C=L(8L%"m1TXXejj%9$:!<=D$$UD1r|   c                l	   | j                  |      }| j                  |j                        }t        |      }t        rt        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  f}nd}t         t"        f}t%        t&        t        t$        t(        t*        t,        t.        j0                  h||z        t.        j2                  j5                         rddlm} ddlm}m}	m }
 |
|	||fz   tC        |tD              rFtG        fdtI        jJ                  |jM                         |jO                               D              s$J tC        |      sJ dt        |       d        tC        |tP              rtS        jT                  |      r| jW                  |       g }|jY                  d| d	       | j[                  ||       t\        j^                  r3| ja                  |      jc                  td        d
   tg        ||             y | ji                  ||       y tC        |tj              rt	        jT                  |      r| jW                  |       g }|jY                  d| d	       | j[                  ||       t\        j^                  r3| ja                  |      jc                  td        d   tg        ||             y | ji                  ||       y t\        j^                  r]| d|g}tC        ||      rtm        |      }| ja                  |      jo                  |tg        ||             | j[                  ||       y g }tC        |t         t$        f      rX| jq                  |       ts        |      D ]8  \  }}|jY                  d| d| d| ju                  t        |             d	       : n| jW                  |       tC        |t.        j0                        rt%        |      }tC        |tv        jx                        rJ |jY                  | d|       | ji                  ||       | j[                  ||       y )Nr   r   )
DeviceMesh)Partial	ReplicateShardc              3  6   K   | ]  }t        |        y wr   )rZ   ).0r   ok_typess     rz   	<genexpr>z,GuardBuilder.EQUALS_MATCH.<locals>.<genexpr>  s      ()q(#s   zUnexpected type z	, not in z__math_isnan(r.  r   z__numpy_isnan(r   rU  r0  rQ  z], )=r  r  r  r/  r   int8int16int32int64uint8uint16uint32uint64float16float32float64r$  r  r  rU   	frozensetsliceranger   Sizedistributedis_availabletorch.distributed.device_meshro  (torch.distributed.tensor.placement_typesrp  rq  rr  rZ   rW  all	itertoolschainr?  r	  floatmathisnanr2  r   r#  r1   r$  r  r  r  r%  r&  complexr   r]  SEQUENCE_LENGTHr  r  typesCodeType)ry   r   r(  r)  r   np_typesok_mutable_typesro  rp  rq  rr  r  r   elemru  s                 @rz   rG  zGuardBuilder.EQUALS_MATCH  s   ll5!hhuzz"I						





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

	 	 "	

 ))+@   	# H #t -6__SXXZ-V     A "$s)IhZ@A  #u$**S/OOE"DKK-uA./''t4..&&u->> 02Hu2U
  ((5 #wBHHSMOOE"DKK.Q/0''t4..&&u->> 13I$PU3V
  ((5**e4w'(Dc+, sm""5)@@+D%8 ''t4 #e}%  '&s^ 	T'uAcU#dkk$t*6M5NaP OOE"#uzz"*C #u~~...
 	se4w'(  -##E40r|   c                    | j                  |j                        }t        |t        t	        d       t
        j                  f      r| j                  |       y | j                  |       y r   )	r  r  rZ   rK  r/  r  r  r@  rG  ry   r   r)  s      rz   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCH'  sG    hhuzz"#d4j%..9:MM% e$r|   c                2   | j                  |       | j                  |j                        }t        |d      r>t	        |j
                  t              sJ | j                  |dt        j                         y t        j                  dt        |              y )Ntrainingz$Guard setup for uninitialized class )r@  r  r  r"  rZ   r  rK  r  rt  r  r3   unimplementedr/  r  s      rz   	NN_MODULEzGuardBuilder.NN_MODULE.  sp    ehhuzz"3
##,,---$$UJ8S8ST DT#YKPQr|   c                $    | j                  |      S )z0things like torch.add and user defined functions)r@  r  s     rz   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH7  s    }}U##r|   c                2   | j                  |j                        }t        |      t        j                  k(  rOt        |d      rC| j                  |dt        j                         | j                  |dt        j                         y| j                  |       y)z!matches a closure by __code__ id.__code__N)
r  r  r/  r  FunctionTyper"  r  rt  r+  r  r  s      rz   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH;  sm    hhuzz"9***wsJ/G$$UJ8L8LM$$UJ8S8ST&r|   c                $    | j                  |      S r   r  r  s     rz   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCHE      ""5))r|   c                $    | j                  |      S r   r  r  s     rz   PYMODULE_MATCHzGuardBuilder.PYMODULE_MATCHH  r  r|   c                   | j                  |      }| j                  |j                        }t        |      }t        j
                  rt        |t              s| j                  |       g }t        |      dk(  r|j                  d|        n |j                  d| dt        |              | j                  ||       t        j
                  rzt        |t              r5| j                  |      j                  t        |      t        ||             y | j                  |      j                  t        |      t        ||             y | j!                  ||       y )Nr   r9  zlen(r4  )r  r  r  r/  r1   r$  r   rW  r2  lenr   r#  r  add_dict_length_check_guardr%  add_length_check_guardr&  ry   r   r(  r6  r   r  s         rz   r  zGuardBuilder.SEQUENCE_LENGTHK  s    ll5!$K//Jud4KOOE"u:?KK$se%KK$se5U56##E40**%&&&u-IIJ 6tU C &&u-DDJ 6tU C $$UD1r|   c                   | j                  |      }| j                  |j                        }t        |      }t        j
                  s| j                  |       g }|j                  d| dt        |              | j                  ||       t        j
                  rRt        |      }| j                  |      }| j                  |      j                  t        |      |t        ||             y | j                  ||       y )Nz___tuple_iterator_len(r4  )r  r  r  r/  r1   r$  r2  r   r`   r#  r  r  add_tuple_iterator_length_guardr%  r&  )ry   r   r(  r6  r   r  r  s          rz   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LENi  s    ll5!$K..OOE",SE7I%7P6QRS##E40**UA[[^F""5)II"5)63I$PU3V $$UD1r|   c                $   | j                  |      }| j                  |j                               }t        |j                        st        |      ry | d| g}| j	                  ||       t
        j                  r||f}|| j                  v ry | j                  j                  ||f       | j                  j                  ||f       t        | j                  |      | j                  |      t        ||             y | j                  ||       y )N is )r  r  r   rh  r#  r1   r$  r  r  r   r  r  r%  r&  )ry   r   source_bref_aref_br  rA  s          rz   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT  s    U#X]]_-#$$
%h/'eW%&##E40**%.Cd999//33UENC//33UENC)&&u-228<&tU3 $$UD1r|   c                v   | j                  |      }| j                  |j                        }t        |      }| j	                  |       g }t        d |j                         D              }t        t        |      t        |j                              }|r|j                  d| d|        n|j                  d| d|        | j                  ||       t        j                  rA| j                  |j                        r| j!                  ||       y | j#                  ||       y | j%                  ||       y )Nc              3  2   K   | ]  }t        |        y wr   )r[   )rt  ks     rz   rv  z)GuardBuilder.DICT_KEYS.<locals>.<genexpr>  s     ?QIaL?s   )localz___key_to_id(r4  rD  .keys()) == )r  r  r  r/  r2  anyr?  rV   r\   r   rh  r   r#  r1   r$  r  r  r  r&  )ry   r   r(  r6  r   r  any_key_is_idconst_keys_reprs           rz   	DICT_KEYSzGuardBuilder.DICT_KEYS  s   ll5!$K?%**,??(e&u'?'?@
 KK-uE/1BCDKK%uL0ABC##E40**//0H0HI11%?88F$$UD1r|   c                    | j                  |       dg}| j                  ||       t        j                  r+| j	                  |      j                  t        ||             y | j                  ||       y rB  )r  r#  r1   r$  r  rD  r%  r&  )ry   r   r  s      rz   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE  si    <<&'|45##E40**""5)<<&tU3 $$UD1r|   c           	        | j                  |      }| j                  |j                        }t        |      }t        j
                  s| j                  |       g }|j                  d| dt        |j                                      | j                  ||       t        j
                  rA| j                  |j                        r| j                  ||       y| j                  ||       y| j                  ||       y)zConstant keys matchrD  r  N)r  r  r  r/  r1   r$  r2  r   r$  r?  r#  r  rh  r  r  r&  r  s         rz   DICT_CONST_KEYSzGuardBuilder.DICT_CONST_KEYS  s    ll5!$K..OOE"eC5T%**,-?,BCD##E40**//0H0HI11%?88F$$UD1r|   c                H    t         j                  ry| j                  |       y)z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)r1   skip_nnmodule_hook_guardsr  r  s     rz   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s    ++U#r|   c                v    t        j                  | j                  |j                        | j                         y r   )r4   watchr  r  r  r  s     rz   OBJECT_MUTATIONzGuardBuilder.OBJECT_MUTATION  s%    TXXejj143H3HIr|   c                     y r   r   r  s     rz   	GRAD_MODEzGuardBuilder.GRAD_MODE      r|   c                     y r   r   r  s     rz   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS  r  r|   c                     y r   r   r  s     rz   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE  r  r|   c                     y r   r   r  s     rz   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE  r  r|   c                0   |j                   t        j                  u sJ ddlmc m} d|j                  g}| j                  ||       t        j                  r+| j                  |      j                  t        ||             y| j                  ||       y)z/Guard on CURRENT_DEVICE per torch.utils._devicer   Nzutils_device.CURRENT_DEVICE == )r   r&   GLOBALtorch.utils._deviceutils_deviceCURRENT_DEVICEr#  r1   r$  r  add_default_device_guardr%  r&  )ry   r   r   r  s       rz   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE  s    ||{11111''1!2B2B1EFG##E40**""5)BB&tU3 $$UD1r|   c           
     ~   |j                   dk(  sJ | j                  j                  j                  }|D cg c]  }|j                   }}fd}j
                  ri }g }g }i }	j
                  D ]i  }
|
j                  j                  v r:t        j                  j                  j                  |
|j                  ||||	       Ut        j                  d       k t        ||t!        |	j#                               d      }nd }j                  j%                  |D cg c]  }|j&                   c}|D cg c]  }|j(                   c}||| j*                  | j                  j                  j                         }| j                  j                  j                  sj                  j-                          |D ]  }| j/                  ||g        t0        j2                  r-|}| j5                  |t7        ||      i t8        t:               y |D ]  }| j=                  ||gd	        y c c}w c c}w c c}w )
Nr   c                z    j                   |    D cg c]  }t        |t        j                  |       c}S c c}w r   )tracked_fakes_id_to_sourcer   r   SIZE)t_idr+  r   r  s      rz   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources  s?    
 +EEdK %V^-@-@#F  s   "8z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbols	warn_only)input_contextsequalities_inputsr  ignore_static)rm   T)	shape_env)r  r  r  tracked_fakessymbolic_contextexport_constraintsr  r  r   exportdynamic_shapes_process_equalitiesr  r  r  r*   r$  r	  produce_guardsfaker   r  freezer#  r1   r$  r  r%  r,   r  r&  )ry   r   r!  r   r  r  namesr  r  r  
constraintr  rd   shape_guardro   r  s                  @rz   	SHAPE_ENVzGuardBuilder.SHAPE_ENV  s7    zzR,,99''689!,,99	 **02E8:L   24O*== O
??l&M&MMLL//CC"#$..$*' KK MNO !3)#5 $_%;%;%= >	! !%''66 QVV !"!QXX")/#44AAHHH 7 
 $$1188""))+! 	>K''}=	> **  J55&z59=== 6   & O(((NOE :N !"s   H0!H5:H:
c                d   |j                         ry |j                         rt        |j                  t              rt        |      r| j                  |       y t        |t              r |       }||n| j                  |j                        }t        |t        j                        sJ | j                  |      }g }| j                  j                  j                  r| j!                  |       g d}|D ]  }| j                  |dz   |z         }t#        |t        j$                  t        j&                  f      r$|j)                  d| d| dt+        |             h|j)                  | d| d|         n| j,                  j)                  |       | j.                  j)                  |       | j0                  j)                  |       t2        j4                  r| j7                  |      }| j8                  j)                  |       | j                  j                  }	|	j:                  |j                     }
t=        |
d         }t=        |
d         }t?        tA        ||||      |      }|jC                  |||||       |jD                  J tG        |d|j                  	      \  }}|stI        |d
      re|jJ                  }d| d| d| d}|j)                  |       t2        j4                  r~| j7                  |      jM                  |t?        ||             nRd| d}|j)                  |       t2        j4                  r+| j7                  |      jO                  d
t?        ||             tQ        |      dkD  r6| jS                  ||       t2        j4                  s| jU                  ||       y y y )N)r3  r   r5  zndimension()r}  zstr(r4  rU  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)r   z%, '_dynamo_dynamic_indices') == Falser   )+is_fsdp_moduleis_specialized_nn_moduler   rh  rD   rj  r@  r/   r  r  r   rC  r  r  r  r  r2  rZ   r   r3  r   rY  r  r  r  r1   r$  r  r  input_source_to_sizes_stridesr,  r%  r=  add_tensor_match_guardr   r^   r"  r  add_dynamic_indices_guardr%  r  r#  r&  )ry   r   r6  tensor_namer  termsterm
real_valuer   r  metadatar  r  rp   staticreasondynamic_indicesr   s                     rz   TENSOR_MATCHzGuardBuilder.TENSOR_MATCHK  ss    ! **,u779JK#E*MM% %/".EDHHUZZ4HEeU\\222,,u-K, !D$$1188& " MD!%+*;d*B!CJj5<<*EFd;-qeC
OCV$WX{m1TF$zl$KLM **11%8''..{;((//622$($:$:5$AM 44;;MJ#'#8#8#E#EL+II00 H 6hv6FGD78JKF)?25+tVT*& "88#*H <<+++;U5M5MNFF 5";<&+&C&CO"$[M1STcSddrs~r  @g  !hIKK	*66..u5OO+-CIu-U #;-/TU  KK	*66..u5JJ529eD 4y1}++E4866,,UD9 7 r|   c                    t         j                  rJ |r&| j                  j                  t	        ||             y | j
                  j                  t	        ||             y r   )r1   r$  r  r   rl  r  )ry   r   rn  r  s       rz   r&  z GuardBuilder._produce_guard_code  sH    2222&&}Y'FGII]9e<=r|   c                "   t               }|J |j                  }~|J t        |      d   }~|t        | j                        v s
J d|        |?|j
                  d uxr |j
                  dk7  }|r| j                  |j
                        nd }n|}|t        j                  t        |            nd }	d }
t        |j                  d      r/t        |t        j                        st        j                  |      }
|j                  ||	||
       y )Nr   zH_produce_guard_code must be called from inside GuardedCode. Called from r   __weakref__)r   f_backr   dirr   r  r  weakrefr(  r/  r"  r   enumEnumset_export_info)ry   r   rn  r!  	cur_framecaller	func_name
name_validguarded_objectguarded_object_typeobj_refs              rz   r#  z#GuardBuilder._set_guard_export_info  s*    !N	$$$!!!!! (+	CNN
 
 	bUV_U`a	b 

 #*4/DEJJ"4DJ5?TXXejj1TN4N 2@1KGKK^,-QU 	  >++];JDIIE
 kk.1G		
r|   )r  zCallable[[Any], str]r  zCallable[[Source], str]r  z)Callable[[object], ReferenceType[object]]r  Dict[str, object]rq   r  r   zOptional[GuardManager]r  CheckFunctionManager)r   r#   )r  rY  returnr   )r   zUnion[str, Guard]r  rY  )r   r#   r  rY  r   )r   r#   r  r  )r   r#   rA  rY  r:  rK  r   )6r   r   r   r{   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r.  r2  r7  r=  r@  rE  rH  rM  rU  ra  rm  rG  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|   rz   rt  rt    sn   IJ$IJ ,IJ C	IJ
 'IJ (IJ .IJ /IJV. DSj9
"

_B	L "SB494v
(44"4?B4O4"2(2,26F1P%R$'**2<202826	22,$J2KOZU:p>(
r|   rt  c                      e Zd ZdZej
                  ej                  ej                  fZe	j                   G d d             Z G d dej                        Z G d dej                        ZddZddd	Zdd
ZddZy)PyExprCSEPassr0   c                  "    e Zd ZU ded<   ded<   y)PyExprCSEPass.ConfigzDict[str, int]
expr_countzDict[str, str]expr_to_nameNro  r   r|   rz   Configr!  /  s    ""$$r|   r$  c                  (     e Zd ZddZd fdZ xZS )PyExprCSEPass.ExprCounterc                    || _         y r   )_config)ry   r1   s     rz   r{   z"PyExprCSEPass.ExprCounter.__init__5  s	    !DLr|   c                    t        |t        j                        r*| j                  j                  t        |      xx   dz  cc<   t        |   |       y re  )r   r  ALLOWED_NODE_TYPESr(  r"  r
  r   r   )ry   r	  r   s     rz   r   zPyExprCSEPass.ExprCounter.visit8  s>    $ @ @A''T(:;q@;GM$r|   )r1   r!  r  r  r	  ast.ASTr  r   r   r   r   r{   r   r   r   s   @rz   ExprCounterr&  4  s    	"	  	 r|   r.  c                  8     e Zd Z	 	 	 	 	 	 d fdZd fdZ xZS )PyExprCSEPass.Replacerc                L    t         |           || _        || _        g | _        y r   )r   r{   r(  	_gen_namepreface)ry   r1   gen_namer   s      rz   r{   zPyExprCSEPass.Replacer.__init__>  s%    
 G!DL%DN&(DLr|   c                :   t        |t        j                        rt        |      }| j                  j
                  |   t        j                  kD  r|| j                  j                  vrdt        | %  |      }t        |      }| j                         }| j                  j                  | d|        || j                  j                  |<   n| j                  j                  |   }t        j                  |t        j                               S t        | %  |      S )Nz = )r   r  r*  r
  r(  r"  USE_THRESHOLDr#  r   r   r2  r3  r   r  NameLoad)ry   r	  exprnode_expr_var_namer   s         rz   r   zPyExprCSEPass.Replacer.visitH  s    $ @ @A#D) <<**40=3N3NN4<<#<#<< !&d 3 ,U 3#'>>#3++xjE7,CD:B11$7#'<<#<#<T#B88Hchhj997=&&r|   )r1   r!  r4  zCallable[[], str]r  r  r+  r-  r   s   @rz   Replacerr0  =  s.    	)(	) (	) 		)	' 	'r|   r=  c                j    d| _         | j                  t        j                  d       i       | _        y )Nr   c                      yr   r   r   r|   rz   r   z(PyExprCSEPass.__init__.<locals>.<lambda>e  s    r|   )r"  r#  )_counterr$  r  defaultdictr(  rx   s    rz   r{   zPyExprCSEPass.__init__b  s.    {{"..y9 # 
r|   c                P    | | j                    }| xj                   dz  c_         |S re  )r@  )ry   r   r  s      rz   _new_varzPyExprCSEPass._new_varh  s'    $--)r|   c                    | j                  | j                        }|D ]'  }	 |j                  t        j                  |             ) y # t
        $ r'}t        j                  d|j                  |        d }~ww xY w)Nz#Failed to visit expr at line %s.
%s)	r.  r(  r   r  parseSyntaxErrorr  	exceptionlineno)ry   exprscountereexs        rz   countzPyExprCSEPass.countm  si    ""4<<0 	Aciil+	  DbiiQRSs   $A			A9"A44A9c                    | j                  | j                  | j                        }|j                  t	        j
                  |            }|j                  t        |      fS r   )r=  r(  rC  r   r  rE  r3  r
  )ry   r9  replacernew_nodes       rz   r  zPyExprCSEPass.replacev  sF    ==t}}=>>#))D/2h!777r|   N)r  r  )_var)r   rY  r  rY  )rI  rm  r  r  r9  rY  r  zTuple[List[str], str])r   r   r   r6  r  	AttributeCall	Subscriptr*  dataclasses	dataclassr$  NodeVisitorr.  NodeTransformerr=  r{   rC  rM  r  r   r|   rz   r  r  '  sx     M --3==A% % % coo  #'3&& #'J

8r|   r  c                    t        | j                  t              xs. t        j                  xr | j
                  t        j                  u S r   )r   rh  r:   r1    guard_nn_modules_using_dict_tags	create_fnrt  r  )r   s    rz   must_add_nn_module_guardsr]  |  s@    
 	5++^< 	
 33 :<#9#99r|   c                      e Zd Zy)DeletedGuardFnN)r   r   r   r   r|   rz   r_  r_    s    r|   r_  c                  4    e Zd Z	 	 d	 ddZd Zd Zd Zd Zy)	r  Nc           	        
 |r|j                   nd }i  _        d  _        t        j                  rt                _        | _        d 
|r|j                  nd  _        
fd}t         j                  | j                  |j                  |j                   j                         }d }t        j                  ||      
t        j                  xr t!        d      }t!        d      st"        j%                  d       t'        |xs g t(        j*                        D ]`  }|sK|j-                         r;d|j.                  vr-d|j.                  vrt        j0                  sd|j.                  vrP|j3                  |       b  j5                  |||       _        |j8                   j6                  _        t        j                  rt:        j<                  j?                  d	 fd
       t@        jC                  d j                          j                  sJ |j8                   j                  _         j                   _        |jD                  sf j                  jG                  |j                        sAtI         j                  |j                  tK        jL                               }	tO        d|	        j                  jQ                          d  _        y )Nc                    | j                         }|t        j                  u r| j                         S sJ         }|J |j	                  | j                               S r   )guard_sourcer&   CONSTANTr  r  )r   rc  	r_builder	w_builders      rz   r  z1CheckFunctionManager.__init__.<locals>.source_ref  s]    !..0L{333{{}$9!I((($$V[[]33r|   c                &     |        }|rd |_         y y r   )r  )weak_br   s     rz   cleanup_builderz6CheckFunctionManager.__init__.<locals>.cleanup_builder  s    A r|   z!pytorch/compiler:guard_nn_modulesz9guard_nn_modules is turned off using justknobs killswitch)rA  r  r  hooksdynamo_cpp_guards_strc                 .    t         j                        S r   )rY  r   rx   s   rz   r   z/CheckFunctionManager.__init__.<locals>.<lambda>  s    C@R@R<S r|   
payload_fn%szGuard check failed: ))rd   	_weakrefsr   r1   r$  ri   r  torch_function_mode_stackrt  r  r  r  rq   r  r(  guard_nn_modulesr)   r  r  r   r#   sort_keyr  r  r  r  compile_check_fncheck_fnru   r   _loggingtrace_structured
guards_logdebugr  r   get_guard_fail_reason_helperr    rl  r  clear)ry   r  rr   rd   r  builderri  guard_on_nn_modulesr   reasonsrf  s   `         @rz   r{   zCheckFunctionManager.__init__  sg   
 )5$$$;=!**!-D(	 7CL22 	&	4 KK  $$%%
	 KK9	$55 
//;
 BCKKSTFLbenn= 	"E'224 #%**4$EJJ655

9RLL!	" --gv}M )0(?(?%**NN++'4S ,  T4#5#56%%%%181H1HD. ..DM  &&))//0H0HI:**$00&99;G
 )+?y)IJJ 	 r|   c                  ,-. |j                   }|dgz  }t        j                  d       g ,g .g -t        | j                        }t
        j                  r}ddlm} | j                  sJ | j                  j                  j                  dg       | j                  j                  j                  | j                  t        |      dg       d | _        nHd},j                  |       .j                  |       d},j                  |       .j                  |       d ,-.fd	}	t               }
|j                   D ]K  }|j"                  D ]:  }||
vs |	||j$                  t
        j                         |
j'                  |       < M |j(                  }d }d }|r\t
        j                  sK|j*                  }| j,                  j.                  rJ d       |j0                  }g }g }t3        ||      D ]b  \  }}| j,                  j4                  |j6                     }|j                  t9        |d	                |j                  t9        |d
                d t;        |||d}|j<                  }|j>                  }djA                  |dgz         },j                  d| d       .j                  d| d       tC        |      D ]0  \  }}||   }||   }||   }tE        ||||      } |	|||   d       2 tG        |      dkD  r=t
        j                  r-tI        |jJ                  |ddjA                  |      z   dz   g       | j,                  r*| j,                  jL                  jN                  jP                  ng }|D ]  }tS        |tT              r|jV                  } |jX                  }!| j[                          d|!j[                          }t
        j                  r,t]        |j_                  |       |j_                  |!      |g        |	|d t
        j                         ta        d|        |jb                  D ]5  }|j"                  D ]$  } |	||j$                  t
        j                         & 7 -r$td        jf                  ji                  d-fd       tj        jl                  }"|"tk        jn                         }"|||"j<                  ||dtp        tr        }#d|jt                  d   i}$t
        j                  r*| j                  sJ | j                  }%tG        ,      dk(  sJ t        tw        ,            }&djA                  |#jy                               }'t{        |&|'      \  }(})t|        j~                  j                  dd       dk(  rt        d|(       i }*	 t        |)|$|*        |*d   |#j                          }%|#|%_H        ||%_I        t
        j                  r|%j                          n,|%_K        .|%_L        |$|%_M        ||%_N        d |%_O        d |%_P        ||%_Q        |%S # t        $ r'}+t        j                  d|+j                  |)        d }+~+ww xY w)!Nz**___kwargs_ignoredzGUARDS:r0   IGNORED_MODESz___check_global_state()z$___check_torch_function_mode_stack()c                $    t               }t        j                  d|       j                   fd       t        j                  t        j                        rd}d}pj                  r,ddj                  j                  j                                }j                  r,ddj                  j                  j                                }t        j                  d ||       |s#j                          j                  |       y y )Nro  c                      j                   r-t        j                  j                   j                               nd j                  r!t        j                  j                        dS d dS )N)r  r  r  )r  r(   from_tracebackr  r  )r   r   s   rz   r   zNCheckFunctionManager.compile_check_fn.<locals>.add_code_part.<locals>.<lambda>1	  s_    %{{ (66u{{7J7J7LM'' #-";";E<L<L"M   r|   r   z
Stack:
z
User stack:
zGuard: %s%s%s)r"  rx  ry  r   verbose_guards_logisEnabledForloggingDEBUGr  r  formatr  )	r   r   log_onlyr   maybe_stackmaybe_user_stackro   structured_guard_fnsrp   s	   ``    rz   add_code_partz<CheckFunctionManager.compile_check_fn.<locals>.add_code_part,	  s     5i GT#45 ''
 "..w}}= #% ${{(22775;;;M;M;O3P2Q&R''-bgge6F6F6M6M6O.P-QR ) #((#$	 !!),"))*;< r|   z,Illegal to set tensor_check_names in export.r  r  )dynamic_dims_sizesdynamic_dims_stridesr   z%tensor_check_names=tensor_check_namesz___check_tensors(r.  T)r  zcheck_no_aliasing(r  zUnknown GuardEnvExpr: dynamo_guardsc                 8    D  cg c]	  }  |         c} S c c} w r   r   )fr  s    rz   r   z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>	  s    BV4WQQS4W 4Ws   rm  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr  rx  r   TORCHDYNAMO_PRINT_GUARDS1zGUARDS
z#Failed to exec guard at line %s.
%sr  r   )Rr  rx  ry  $make_torch_function_mode_stack_guardrq  r1   r$  variables.torch_functionr  r   rl   add_global_state_guard#add_torch_function_mode_stack_guardr$  r   r  r  rn  r   r  r  r  r  r  r  r   r  rh  r,  r   r   r   r  r  r=  r  r   r  tracing_contextguards_contextaotautograd_guardsr   r"   input_source_ainput_source_br  r   r  r  r  r   rv  rw  r2   initial_global_stateGlobalStateGuardr,   r  r  uniquer?  r  osenvironr  printr  rF  r  rG  rH  r	  rm   rn   r   ro   rp   rq   rr   rs   rt   rv   )/ry   r|  
guards_outrr   largs"torch_function_mode_stack_check_fnr  global_guardtf_mode_stack_guardr  seengclr  r  check_tensors_fncheck_tensors_verbose_fnr  r  r  r  r   gr  tensor_guardstensor_check_argsir  r7  r8  r   r  r   source_ar  global_staterm   r  r  unique_code_partsr  r  r  r  rL  ro   r  rp   s/                                               @@@rz   rt  z%CheckFunctionManager.compile_check_fn	  so     '((#
CE-Q**.
* **? %%%%##::<U;VW##GG..]#78 .2D* 5Ll+%%l3"H12%%&9:#	=J u<< 	#C #t# "$		63R3RSHHTN#	# %77#' f&E&E")"="=%%,,>=>,$+$A$A!!##% 13FG 1,,JJ(( #))*DXfEU*VW$++.x/AB )&#5%9M
  -22'4'B'B$ $		"&M%NN!  12C1DAFG%%(9:K9LA&NO$%78 P4 *!,*1-.q16q$wO	i)<Q)?$OP !"Q&6+J+J -33"%		2D(EEKL    --<<OO 	 ( 	EE%1 // //'}}/tHMMO3DE	221==hG==hG"
 iv/N/NO"%;E7#CDD	E" )) 	PC P dCIIv/N/NOP	P  NN++,W ,  %99(99;L 0(@%1%7%72T"4
 
 
 !$W]]3%78**%%%% ))Hz?a''' $VJ%7 8!%<+<+<+>!?!5!#5"J zz~~8$?3Fj*-"$C
V137 /s-.0C0C0EFH ,**668",H&8# 4!.  $#.@++  DbiiQWXs   X 	Y("Y

Yc                l   t        | d      r| j                  t        ur| j                  j                  x}|| j                  j                  x}ct        |t              sJ t        |t              sJ |j                  |       d | j                  _        d | j                  _        t        | _        y y y y y )Nru  )	r"  ru  r_  rs   rt   r   rP   rQ   
invalidate)ry   rs   rt   s      rz   r  zCheckFunctionManager.invalidate	  s    
 D*%^3 $ 9 99F $ 9 99Fk:666k:666"";/(,DMM%(,DMM%*DM G G 4 &r|   c                   	 t        |      | j                  vrKt        j                  |      | j                  t        |      <   t        j                  || j
                         t        |      S # t        $ r Y t        |      S w xY w)zadd a weakref, return the id)r  rp  r  r(  finalizer  	TypeErrorry   rL  s     rz   r  zCheckFunctionManager.id_ref
  sp    	#wdnn, +2++c*:r#w'  doo6 #w  	#w	s   A"A/ /	BBc                b    t        |      | j                  v r| j                  t        |         S y)zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)r  rp  r  s     rz   r  z$CheckFunctionManager.lookup_weakrefs
  s(    c7dnn$>>"S'**r|   )NN)rr   z%Optional[Callable[[GuardFail], None]])r   r   r   r{   rt  r  r  r  r   r|   rz   r  r    s2     ?Co! =o!bn`+"r|   r  c                  	 ddl m} t        r"t               		j	                  |        d	fd}ndd} |       }| D ]]  } ||      \  }}|j                  |       |j                  d| d       |j                         5  |j                  d       d d d        _  |       }|j                  d       |j                         5  |j                  |       |j                  d	       d d d         |       }|j                  d
| d       |j                         5  |j                  |       |j                  d       d d d        |j                         |j                         fS # 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   BxY w)Nr   r   c                &    j                  |       S r   )r  )r9  csepasss    rz   r  z%build_guard_function.<locals>.replace!
  s    ??4((r|   c                
    g | fS r   r   )r9  s    rz   r  z%build_guard_function.<locals>.replace&
  s    t8Or|   zif not (z):zreturn Falsezdef guard(L):zreturn Truezdef ___make_guard_fn(zreturn guardrR  )
r   r   HAS_UNPARSE_FUNCTIONSr  rM  r   r   r   splicer   )
ro   closure_argsr   r  r  r9  r3  r   make_guard_fnr  s
            @rz   r  r  
  so   4/j!	)
	
  !J 1g&xvR01  	1  0	1 	1	1 E	OOO$	 'Z &' #$M3L>DE				 0U#/0  -"8"8":::%	1 	1' '0 0s$   E'#E4#F 'E1	4E= F	c                 h    t         j                  j                  j                  j	                  d      S )Nre   r   rv  	_internal	log_stateis_artifact_enabledr   r|   rz   is_recompiles_enabledr  E
  s#    >>##--AA,OOr|   c                 h    t         j                  j                  j                  j	                  d      S )Nrf   r  r   r|   rz   is_recompiles_verbose_enabledr  I
  s$    >>##--AABVWWr|   c                ^    | D cg c]  }t        |       c}ddlm fd}|S c c}w )Nr0   r  c                     t               } t        |       t              k7  ryt        |       D ]  \  }}|v r|t        |      k7  s y y)NFT)rX   r  r   r/  )	cur_stacktymoder  r  s      rz   check_torch_function_mode_stackzMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stackR
  sW    13	y>SZ'E9- 	HB]"T$Z		 r|   )r/  r  r  )intial_stackr   r  r  r  s      @@rz   r  r  N
  s,    *+T!W+E7 +*! ,s   *c                l   g }t        | j                        }t        j                  t              }| j
                  D ]1  }||d<   t        t        |||            }||   j                  |       3 |D ])  }t        ||         dkD  s|j                  ||           + dj                  |      }d| gS )N__compile_source__r0   r   zDuplicate tensors found: )rW  rq   r  rA  r$  rv   r  r  r   r  r  )	r   r  duplicate_tensorsrq   ids_to_sourcer  	tensor_idrA  r  s	            rz   1recompilation_reason_for_no_tensor_aliasing_guardr  b
  s    223L++D1M&AA 7-:)*tM<?@	i ''67
  >}S!"Q&$$c(:';=> YY()F'x011r|   c                   || j                   d   d}|j                  | j                         g }d}g }t        j                  rH| }|j                  |      }|j                  s=|j                  }t        |      dk(  r#d|d   v rd}n|}g }n| j                  }|d   |d	<   |rt        | |      }n|D ]  }	t        | j                         }
|	|
d
<   t               5  	 t        |	|
|      }	 ddd       t        t               r|s|	}t        |t"              sd|j%                  |       t               r n | ddj'                  |      z   }|S # t        $ r}t               rY d}~ddd        d}~ww xY w# 1 sw Y   xY w)z
    Return the reason why `guard_fn` failed.
    Updates `guard_failures` with the generated reason.
    Only the first failed check of guard_fn is reported.
    rx  rv  Fr0   zDuplicate tensor foundr   Tr  r  r  Nr   z; )rq   r  rm   r1   r$  r   resultrp   r  r  rW  r.   r  	Exceptionr  r   rK  rY  r   r  )r  f_locals
compile_idr  r~  no_tensor_aliasing_check_failedrp   r   guard_debug_infor   rq   fail_reasonrK  
reason_strs                 rz   rz  rz  s
  s    !6!6s!;<E	LL&&'G&+#$&&& (66x@  &&!1!D!D %&!++/A!/DD6:30G)+&%88 %**D$E !&CHeT& 	D 5 56L15L-./1 "&t\5"AK +t,["+s+{+46'	* <r"TYYw%77J! ! 46   	 s6   E6E	E3
E. E6-E..E33E66E?	c                   t        | ||      }t        t        |      j                  |       	 | j                  &| j	                  t        |xs dt        |                |S # t        $ r }t        j                  d       Y d }~|S d }~ww xY w)Nzunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)	rz  rY   r]   r   rr   rS   r  r  rG  )r  r  r  r  r  rK  s         rz   get_guard_fail_reasonr  
  s     .h*MJ=&'..z:
!!-""*8(8-:MN   
d	
 	
 
s   2A" "	B+BBc                X   g | Xt        | j                  | j                  |j                  | j                        }|rj                  |       | j                  } | X|j                  }t               xs
 t               }|st        j                  rt               r"dj                  d t              D              }n%t        j                  dj                        d      }d| }d|j                    d|j"                   d|j$                   dt        j                  |d	       }|r5t               rt&        j)                  |       nt*        j)                  |       t        j                  rt-        j.                  |      t0        j2                  j5                  d
d fd       S )z
    Return the list of guard failure reasons using cache_entry.
    Logs the recompilation reason if `recompiles` logging is enabled.
    Raises a RecompileError if `config.error_on_recompile` is enabled.
    z

c              3  \   K   | ]$  \  }}d | dt        j                  |d      z    & yw)zguard z failures:
- N)textwrapr   )rt  r  r  s      rz   rv  z9get_and_maybe_log_recompilation_reason.<locals>.<genexpr>
  s5      #Av <(8??64+HH#s   *,r  r  z-triggered by the following guard failure(s):
zRecompiling function z in :z    artifactc                     dddS )Nrecompile_reasonsjson)r  encodingr   r   r|   rz   r   z8get_and_maybe_log_recompilation_reason.<locals>.<lambda>  s    '
 r|   c                      S r   r   )r~  s   rz   r   z8get_and_maybe_log_recompilation_reason.<locals>.<lambda>  s    7 r|   )metadata_fnrn  )r  ru  r  r  r  r   nextf_coder  r  r1   error_on_recompiler  r  r  r   co_nameco_filenameco_firstlinenorecompiles_verbose_logry  recompiles_logr3   RecompileErrorr   rv  rw  )	rs   framer  r  do_recompiles_logfailuresguard_failure_detailsmessager~  s	           @rz   &get_and_maybe_log_recompilation_reasonr  
  s    G

!&  NN""	
 NN6"!&& 
! <<D ./R3P3RF55(*{{ #!*7!3# H
  tyy'94@H<XJG 	 $DLL>d6F6F5GqI\I\H]]_4f=>@ 	 ,.&,,W5$$W-$$$$W--	NN##
 # $  Nr|   c                   t        d|j                   d|j                   d|j                          t        ddj	                  | j
                        z   dz          t        ddj	                  | j                               t        j                  rt        |        d|i| j                  }| j                  D ]  }	 t        || j                  |        y #  t        d|        Y 0xY w)	NzERROR RUNNING GUARDS  r  zlambda r   z and
  rw  zMalformed guard:
)r  r  r  r  r  rn   ro   r1   r$  rm   r  rq   )r  r  r  r4  lastr  r   s          rz   guard_error_hookr    s     

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

    Args:
        guards: guard(s) to add
        skip: number of stack frames to ignore for debug stack trace
    r   )TracingContextr0   )collect_debug_stackr  N)torch._guardsr  rx  r  r  r  r  r  r  r  r  r   r#   )r  rd   r  r  r  r   s         rz   install_guardr  R  s     -$11 8		(	(	7  



-
-
;
;
?
?C K%'''E':JKr|   )r	  r,  r  rY  )r   rY  r   r#   r  rY  )ro   zUnion[str | List[str]]r   r#   r  rm  )r  zTuple[str, str])r  rT   r  r  r  r!   r  rY  )
r  rT   r  types.CodeTyper  r  r  r!   r  rY  )r  ztypes.FrameTyper  rm  )
r  rT   r  r  r  r  r4  rX  r  rK  )
__future__r   r  r  r  rV  r  r  	importlibr   r  r  r  r  r  sysr  r  r  
contextlibr   r  r   r   r   typingr   r	   r
   r   r   r   r   r   r   r   r   r   r  torch._C._dynamo.guardsr   r   r   r   r   r   r   r   torch._dynamo.sourcer   r   r   r   r   r  r    r!   r"   r#   r$   r%   r&   r'   torch._loggingr(   torch._utils_internalr)   %torch.fx.experimental.symbolic_shapesr*   r+   r,   torch.utils._tracebackr-   r.   torch.utils.weakr/   r   r1   r2   r3   r4   
eval_framer5   r   r6   r7   r8   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   r  rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   numpyr   ModuleNotFoundErrorsympyrc   	getLoggerr   r  rv  getArtifactLoggerrx  r  r  r  ri   r   	lru_cacher   r  __getitem__r  r  import_moduler  r   r   r  version_infor  r
  r  ImportErrorr  r  r"  r%  r,  r=  rB  rG  rW  rJ  rf  rj  rl  r  r[  rt  r  r]  r_  r  r  r  r  r  r  rz  r  r  r  r  r  r  r   r|   rz   <module>r0     s   " 
           	 	 
    %  .   "  	 	 	 	 	 	 & 1 
 P * 8 8 ,      8 K J   $
  g!^^--hA
11(LI99"  ^^55h@PQ O OdP T. .| //;; I	
 | + /  !7 DJJ RZTRXX 
5< Y,, EKK'' ell Z  EOO!" U#$ w%* BQ6!
&	> !% !3'.'
%Q&Q/4QQ'- d#! ! $!"JG   
$tyy $Y
# Y
Z1R8 R8j	 	D DN(;VPX
+(2"EEE E 		EP
   	
 	,9'99x00
0  0 	0
 00 % &D !" KeV  	Bh  & %&s$   O 
O& O#"O#&O10O1