
    קg                   >   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lZn# e$ r dZY nw xY we"rd dlmZ  ej        e          Ze%j                            ed          Ze%j                            ed          Ze%j                            ed          Ze%j                            ed          Z G d d          Zd Z ej        d          d             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ej        d* ed*          d+ej        d,e%js        j        d-e%j        d.ed/e%j        d0e%d1e	iZej        dd2         d3k    r	 d dlZdxd8Zd9Zn# e$ r d:ZY n
w xY wd9Zdxd;Zd< Zd= ZdydAZdzdEZdF ZdG ZdH ZdI Z ej        d9J           G dK dL                      ZdM ZdN Zej         G dO dP                      Z G dQ dRej                  Z G dS dTe;          Z G dU dV          ZdW Z G dX dY          Z G dZ d[          Zd{d]Zd^ Zd_ Zd` Zda Zd|dhZd}dkZd~dnZddsZ eRe           dt Zdu Zd dvdwZdS )    )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                  `    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dS )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| _        d S 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    P/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/guards.py__init__zGuardManager.__init__   sk    $&&	 	"& !#*,'.2+++    c              #  H   K   d| _         	 d V  d| _         d S # d| _         w xY wrk   )rw   rx   s    rz   '_preserve_print_no_tensor_aliasing_flagz4GuardManager._preserve_print_no_tensor_aliasing_flag   s>      .2+	7EEE26D///$D/6666s    	!c                d    |j         j        |                                }fd|D             }|S )Nc                     g | ]
}d z   |z   S ):  ).0part
guard_names     rz   
<listcomp>z0GuardManager.get_guard_lines.<locals>.<listcomp>   s#    <<<dd"T)<<<r|   )	__class____name__rp   )ry   guardpartsr   s      @rz   get_guard_lineszGuardManager.get_guard_lines   s<    _-
((**<<<<e<<<r|   Nc                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   sH    ))++#,Of$ 	%$$Ar|   c                   t          |                                                                          D ]\  }\  }}|                    d|            |                                5  |rA|                    d|                     |                      |                     ||           |rA|                    d|                     |                      |                     ||           d d d            n# 1 swxY w Y   d S )NzKeyValueManager pair at index=zKeyManager: zValueManager: )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   si   '-c.H.H.J.J.P.P.R.R'S'S 		A 		A#C#'7NNACAABBB A A ANN#R$2G2G2P2P#R#RSSS11'4@@@ ANN#TD4I4I'4R4R#T#TUUU11'4@@@A A A A A A A A A A A A A A A		A 		As   (BC;;C?	C?	c           
     T   |                                 5  |                                D ]}t          |t          j        j        j        j                  rX| j        r0d| _        |	                    | 
                    |                     b|	                    |j        j        g           |	                    | 
                    |                     t          |t                    r|                     ||           t          |                                |                                          D ]Y\  }}|                    |                     |d|                                                      |                     ||           Z	 d d d            d S # 1 swxY w Y   d S )NFzaccessed_by=)r   get_leaf_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   s   [[]] 	? 	?,,.. A AeUX%5%<%OPP A: >C;(<(<U(C(CDDDD % 8    OOD$8$8$?$?@@@@ #/00 >223=== (+!!##S%;%;%=%=( ( ? ?#) )))5UHMMOO5U5UVV   --i>>>>?)	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   E:FF!$F!c                   ddl m}  G d d|          }|                                 5   |            }d|_        |                    dd           |                    d	d           |                    d
           |                     | j        |           | j                                        D ]*}|                    | 	                    |                     +|
                                cd d d            S # 1 swxY w Y   d S )Nr   IndentedBufferc                  &     e Zd Zd Zd fd	Z xZS )6GuardManager.__str__.<locals>.IndentedBufferWithPrefixc                &    d| j         | j        z  z  S )Nz| )_indenttabwidthrx   s    rz   prefixz=GuardManager.__str__.<locals>.IndentedBufferWithPrefix.prefix   s    t|dm;<<r|   Fc                    |r#t                                          |           d S t                                          d|z              d S )Nz+- )superr   )ry   lineskip_prefixr   s      rz   r   z@GuardManager.__str__.<locals>.IndentedBufferWithPrefix.writeline   sK     4GG%%d+++++GG%%edl33333r|   F)r   
__module____qualname__r   r   __classcell__r   s   @rz   IndentedBufferWithPrefixr      sL        = = =4 4 4 4 4 4 4 4 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__   sn   888888	4 	4 	4 	4 	4~ 	4 	4 	4 99;; 		# 		#++--DDMNN24N000NN0dNCCCNN-...))$)T:::==?? = = 4 4U ; ;<<<<==??		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		#s   CC==DDc                6    | j                             |          S N)rl   checkry   xs     rz   r   zGuardManager.check   s    yq!!!r|   c                6    | j                             |          S r   )rl   check_verboser   s     rz   r   zGuardManager.check_verbose  s    y&&q)))r|   c                H     dd  fd  j                    d S )NFc                    g }|                                  D ]D}|                    d          d                                         }|                    |           E|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  sd    J%/%B%B%D%D - -!-33C88;BBDD	!!),,,,r|   c                b   |                                  D ]v}t          |t          j        j        j        j                  r(s%j                             |                     dSj                             |                     w| 	                                D ]} |           d S 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 BeUX%5%<%OPP B5 :..~~e/D/DEEE592O**>>%+@+@AAAA 3355 ! !	i    ! !r|   )rl   )ry   r   r   r   s   `@@@rz   !populate_code_parts_for_debuggingz.GuardManager.populate_code_parts_for_debugging  s]    %*"	 	 		! 	! 	! 	! 	! 	! 	! 	! 	dir|   r   )r   r   r   __doc__r{   r   r~   r   r   r   r   r   r   r   r   r   r|   rz   ri   ri      s         3 3 3  7 7 ^7     
A 
A 
A? ? ?:# # #0" " "* * *    r|   ri   c                z    t          | t          j        t          j        f          rt	          j        |           n| S r   )r   npgenericndarrayr   	as_tensor)as    rz   
from_numpyr   #  s/    !+A
BJ/G!H!HO5?1aOr|   c                 <    dd l } | j        j        g}d |D             S )Nr   c                6    h | ]}t          j        |          S r   )inspectgetfile)r   ms     rz   	<setcomp>z&uninteresting_files.<locals>.<setcomp>0  s"    ---1GOA---r|   )torch._dynamo.external_utilsr   external_utils)r   modss     rz   uninteresting_filesr   )  s5    '''' 	$D .-----r|   ___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      )      nodeast.ASTreturnstrc                R    t          j        |                               dd          S N
r   )
astunparseunparsereplacer  s    rz   _ast_unparser  P  s#    %d++33D"===r|   TFc                R    t          j        |                               dd          S r  )astr  r  r  s    rz   r  r  Y  s"    {4  ((r222r|   c                    t          j        d          }d}| D ]A}|dv rd}	|dv r/|r,|dk    r&|                    |          rt          |          c S <||z  }Bt	          |           S )z
    "___odict_getitem(a, 1)" => "a"
    "a.layers[slice(2)][0]._xyz" ==> "a"
    "getattr(a.layers[slice(2)][0]._abc, '0')" ==> "a"
    "getattr(getattr(a.x[3], '0'), '3')" ==> "a"
    "a.layers[slice(None, -1, None)][0]._xyz" ==> "a"
    z[A-Za-z_].*r   z (z),[]None)recompilematchstrip_function_callstrip_getattr_getitem)name
valid_namecurrchars       rz   r  r  ]  s     M**JD  4<<DDV^^ 1:+;+;D+A+A*400000DLDD &&&r|   c                8    t          j        d|           d         S )z*
    "a[1]" => "a"
    "a.foo" => "a"
    z[.\[]r   )r  r   )r  s    rz   r  r  t  s    
 8Hd##A&&r|   r   r   r#   c                   d}|j         rCt          |j                   D ]-}|j        t                      vrdt	          |d           } n.n6|j        r/dt	          |j                                        d                    }| d| S )Nr   z  # T)r   z<60)
user_stackreversedfilenamer   r-   stacksummary)r   r   extrafss       rz   get_verbose_code_partr)  |  s    E A5+,, 	 	B{"5"7"777<|BT:::<< 8 
 A@|EK$7$7$9$9"$=>>@@$$U$$$r|   ro   Union[str | List[str]]	List[str]c                P    t          | t                    s| g} fd| D             S )Nc                0    g | ]}t          |          S r   )r)  )r   r   r   s     rz   r   z*get_verbose_code_parts.<locals>.<listcomp>  s$    PPP	!)U33PPPr|   )r   list)ro   r   s    `rz   get_verbose_code_partsr/    s8     j$'' " \
PPPPZPPPPr|   c                    g }| D ]o}t          |          s|                    |           't          |t          j                  sJ |                    |j                                                   p|S r   )r+   r   r   r   SymIntr  maybe_as_int)size_or_stride	converteddims      rz   convert_to_concrete_valuesr6    s    %'I 6 63 	6S!!!!c5<00000SX22445555r|   c                R   t          |           }t          j                            |           t          j                                        z  t          j                                        z
  }| j        }| j        j        }| j	        }d| d|j
         d| d| d| d| d| d| d}	|	S )Nzcheck_tensor(r   z	, device=z, requires_grad=z, size=z	, stride=))typer   r   _dispatch_keys_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyper   indexrequires_gradr   )
valuer  sizesstridespytypedispatch_keyr=  device_indexr?  	guard_strs
             rz   get_tensor_guard_code_partrG    s    %[[F&&)Q)Q)S)SS00223L KE<%L'M	a 	a 	a 3 	a 	a| 	a 	au 	a 	a	a 	a0=	a 	aFK	a 	aV]	a 	a 	a  r|   c                j    t          |                                                               |          S r   )r.  keysr>  )dctkeys     rz   get_key_indexrL    s&    

!!#&&&r|   c                    d|  d| dS )Nlist(	.keys())[]r   )r   r>  s     rz   get_key_index_sourcerQ    s    ,6,,E,,,,r|   )frozenc                  :    e Zd ZU dZded<   dZded<   dZded<   dS )NNModuleAttrAccessorInfoFboolpresent_in_generic_dictNzOptional[str]l1_keyl2_key)r   r   r   rV  __annotations__rW  rX  r   r|   rz   rT  rT    sL          %*)))) !F     !F      r|   rT  c                   | j                                         }|                                 }t          | j        t                    r| j        j        }n,t          |t
                    sJ t          || j                  }t          ||          }t          |	                                          |         }	t          |	t          t          f          r	| d|	d}
n| d| d}
t          | j        t                    sG|                    ||| j        t          j                                      | j        | d|	g           |                    ||
||          S )N[rP  r>  r   example_valueguard_manager_enum == )baser  r   r>  r9   dictrL  rQ  r.  rI  intr	  get_key_managerGuardManagerTypeGUARD_MANAGERadd_equals_match_guardget_value_manager)r   base_guard_managerbase_example_valuer]  r^  base_source_namesource_namer>  
key_sourcekey_example_valuevalue_sources              rz   getitem_on_dict_managerro    s    {''))++--K&, 233 @",d333330&,??%&6>>J/446677>#c3Z00 ;*CC->CCC*::Z:::fl$677 

 	** ,/=	 	+ 	
 	

 !
 LjCC.?CCD
 
 
 //#-	 0   r|   c                d    | j         }|                                ot          |t                     S r   )originating_sourceis_dict_keyr   rA   )r   r   s     rz   match_on_id_for_tensorrs    s.    %FF
6:(F(F$FFr|   c                  $    e Zd ZU ded<   ded<   dS )GuardCodeListr+  	code_listr#   r   Nr   r   r   rY  r   r|   rz   ru  ru    s%         LLLLLr|   ru  c                      e Zd ZdZdZdZdS )rd  r0   r  r  N)r   r   r   re  DICT_GUARD_MANAGERDICT_SUBCLASS_GUARD_MANAGERr   r|   rz   rd  rd    s!        M"#r|   rd  c                     e Zd ZdOdZd Zd Zd Zd Zd Zd Z	d Z
d ZdPdZedfdZdQd ZdRd"ZdSd$ZdPd%ZdTdUd(ZdUd)ZdPd*ZdVd.ZdPd/ZdTdPd0ZdPd1ZdPd2ZdPd3ZdPd4ZdPd5ZdPd6ZdPd7ZdPd8Z dPd9Z!dPd:Z"dPd;Z#dPd<Z$d= Z%d> Z&d? Z'd@ Z(dA Z)dB Z*dC Z+dPdDZ,dPdEZ-dPdFZ.dPdGZ/dPdHZ0dPdIZ1dPdJZ2dTdPdKZ3dWdMZ4dTdNZ5d&S )XGuardBuilderid_refCallable[[Any], str]
source_refCallable[[Source], str]lookup_weakrefs)Callable[[object], ReferenceType[object]]local_scopeDict[str, object]rq   r   Optional[GuardManager]check_fn_managerCheckFunctionManagerc                   || _         || _        || _        ||d| _        t          j                                        | j        d<   t          j        j	        j
                                        D ]]\  }}	|                    dd                              dd                              dd          }|	| j        d         |<   |	| j        |<   ^|| _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        || _        t-                      | _        | j        j        j        D ]<}
| j                            t7          |                     |
                               =i | _        i | _        t-                      | _        d S )NLG__builtins__>_<._dot_) r}  r  r  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_managersr  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  r  rq   r   r  r  package_modulerk  s              rz   r{   zGuardBuilder.__init__  s    $.9D<3X3X
%-%6%;%;%=%=
>" ]+EKKMM	. 	. 
<<S))11#s;;CCCQQD/=DJ~&t,-DJt*#%)+	
 46 .09;"02 ?A(6F +.%%'0=P 	K 	KK+//488K3H3H0I0IJJJJ
 BD
  	# EHEE+++r|   c                   |                      |          }t          |t                    rt          d|j                   |j                                        }|                                D ]U}||         }t          |j        |          }|                     ||          }|	                    || d|d||           Vd S )NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )r>  r[  rP  rK  r   r]  r^  )
get_guard_managerr   r   NotImplementedErrorr  rq  rI  r=   get_guard_manager_typedict_getitem_manager)	ry   r]  r   dict_mgrdict_sourcerK  r@  rn  r^  s	            rz   #guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_orderF  s   ))%00h 011 	%SFKjS S   .3355 %%'' 	 	C!#&E()AMMML!%!<!<m" " ))%00000##5	 *    	 	r|   c                f   |                      |          }t          |t                    st          d|j                   t          |t                    sJ t          |                                          D ]\  }}t          |j        |          }|                    |||t          j
                  }t          |          rA|                     |          }|                    |t          d| d| d|                     |                    |t          | d||                     d S )Nz_Expecting a DictGuardManager. Seems like Dynamo forgot to set the right guard manager enum for r\  z__check_obj_id(r   r8  r_  )r  r   r   r  r  	enumeraterI  rQ  rc  rd  re  r[   r}  add_id_match_guardr/  rf  )	ry   r@  r   r  r   rK  rl  key_managerid_vals	            rz   guard_on_dict_keys_and_orderz)GuardBuilder.guard_on_dict_keys_and_order]  sv    ))%00($455 	%H;@:H H   ($455555!%**,,// 	 	HC-ej#>>J"22!!#3#A	 3  K ~~ S))..*A*AAAAA5     22/:0J0J30J0JERR   '	 	r|   c                
   d }|j         }	|j        }
t                      }t          j        |j                  D ].}|                    |j                                                   /t          ddd          }|	|
v rt          d|	d          }ncd|
v r|	|
d         v rt          dd|	          }nCd|
v r|	|
d         v rt          dd|	          }n#|	|vrd|
v r|	|
d         v rt          dd|	          }|j	        s|
                    |j         |||          S |j        sJ |j        }|j        }| d	}dx}}dx}}dx}}|rbt          |j        |          }|                                }|
|         }|                     ||          }|}|}|                     ||          }n|}|}|                     ||          }|                    ||
t$          j        
          } |||||
||          }|r |||||||          S |S )a(  
        This tries to avoid calling the expensive nn module custom getattr method by
        checking if the attribute is accessible via __dict__. For attributes that
        are not accessible via __dict__ (like descriptors), we fallback to
        PyObject_GetAttr.

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

        The most common and expensive case for nn module guards is of type
        mod.submod1.submod2.submod3.training. We avoid the python getattr of nn
        modules by going through the __dict__.
        c                <   t          | t                    rot          ||          }d| d|d}|                     |||t          j                                      || d|g           |                     ||||          S |                     ||||          S )NrN  rO  rP  r\  r_  r  )	r   r   rL  rc  rd  re  rf  rg  r  )r   rK  rk  ri  r]  r^  r>  rl  s           rz   getitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module.<locals>.getitem_on_dict_mgr  s     #/00  &&8#>> F[EE5EEE
##%"%'7'E	 $  
 )(*/I/I#/I/I.JKKK ,,&"/'9	 -    //&"/'9	 0   r|   FNT_parameters_buffers_modulesattrr   r]  r^  	.__dict__r   r]  r^  )r   rK  rk  ri  r]  r^  )memberr  r  r   getmror   updaterI  rT  rV  getattr_managerrW  rX  r7   r`  r  r  get_generic_dict_managerrd  re  )ry   r   rh  ri  r]  rj  rk  r^  r  	attr_namemod_dictall_class_attribute_namesr   accessor_inforW  rX  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  s   6	 	 	@ M	%..1ee! 2 <== 	@ 	@A%,,QZ__->->????0dCC  4T9dKKMMh&&98O+O+O4T=)TTMM8##	Xj5I(I(I4T:yQQMM666h&&Xj111 5T:yQQM4 A	 &55]"+#5	 6    !''''")F")F "2<<<O.22N^"&&Hx<@@!$9 &v{F;;	!*!1!1#F+ )-(C(CIx(X(X%!,((,(C(CM) )%% "-((,(C(CM) )% (:'R'R&&#3#A (S ( ($ )(,*#+&#8  F  ** .'/"*'<    Mr|   c                    |                                 }|dk    rdS t          |                     |                    }|| j        v S )Nr   F)r  r  r  r  )ry   r   rk  obj_ids       rz   requires_key_order_guardingz(GuardBuilder.requires_key_order_guarding  sF    kkmm"5DHH[))**888r|   c                    t           j        }|                     |          rXt          |t                    sJ t          |          j        t          i           j        u rt           j        }nt           j        }|S r   )	rd  re  r  r   ra  r9  rI  ry  rz  )ry   r   r]  r^  s       rz   r  z#GuardBuilder.get_guard_manager_type  ss    -;++F33 	RmT22222 M""'488=88%5%H""%5%Q"!!r|   c                B    |t           j        k    p|t           j        k    S r   )rd  ry  rz  )ry   mgr_enums     rz   manager_guards_on_keysz#GuardBuilder.manager_guards_on_keys'  s%    (;; H+GG	
r|   c                    | j         sJ | j         j                            | j        d         d| j        d         t          j                  S )Nr  )	f_globalsr   r]  r^  )r   rl   globals_dict_managerr  rd  re  rx   s    rz   get_global_guard_managerz%GuardBuilder.get_global_guard_manager-  sO    !!!!!&;;jo*S//=	 < 
 
 	
r|   c           	        | j         sJ | j         j        }d }|                                }|dk    r|| j        v r| j        |         S |dk    r|                     |          }|                     ||          }d }d }d }t          j        }	t          |t                    rc|j
                                        }|                     |          }|                     |j
                  }|                     |j
        |          }	t          |t                    r |                    |j        |||          }
nt          |t                     r2|                                                     |j        |||          }
nkt          |t&                    r2|                                                     |j        |||          }
n$t          |t*                    r|S t          |t,                    r|S t          |t.                    r|sJ |                    |||          }
nt          |t2          t4          t6          t8          t:          f          r|sJ |}
nt          |t<                    r|sJ |                    |||          }
nZt          |t@          tB          f          rv|sJ t          |tD          j#        j$                  r3tK          |          tL          u r| '                    |||||||          }
n|(                    |j)        |||          }
nt          |tT                    rd|sJ t          |tV          tX          j-        f          rt          |t\                    r,| /                    |	          sJ ta          |||||          }
nLt          |j1        td                    rtg          d          |                    |j1        |||          }
nt          |th                    r'|j5        s |6                    |j1        |||          }
nt          |tn                    r'|j5        s |8                    |j1        |||          }
n|j1        }|j5        r|9                                }|:                    ||||          }
nNt          |tv                    ret          |t\                    r,| /                    |	          sJ ta          |||||          }
n|sJ |                    |j1        |||          }
nt          |tx                    r|sJ t{          |          sJ |j>        sE|?                    ||j@        t          j                  :                    |jA        |||          }
n^|jB        }|J |dz   }|C                    ||t          j                  }t          |t\                    rJ |                    |jA        |||          }
nt          |t                    r$|sJ |E                    t          |||          }
nt          |t                    r |sJ |E                    d	 |||          }
nt          |t                    r |sJ |E                    d
 |||          }
nRt          |t                    r |sJ |E                    d |||          }
nt          |t                    r|sJ |E                    d |||          }
nt          |t                    r#|sJ |L                    |j1        |||          }
nt          |td                    rCt          |t\                    st          d          |N                    |j1        |||          }
nYt          |t                    r|sJ |P                    |||          }
n't          d| d|                                           |
| j        |                                <   |
S )Nr   r  )global_namer   r]  r^  r  r  zUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_orderz.__kwdefaults__)python_lambdar   r]  r^  c                6    |                                  d         S Nr   __tensor_flatten__r   s    rz   r   z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>  s    (<(<(>(>q(A r|   c                *    |                                  S r   )__obj_flatten__r  s    rz   r   z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>   s    (9(9(;(; r|   c                N    |                                                                  S r   )_typequalified_namer  s    rz   r   z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>(  s    		(@(@(B(B r|   c                *    |                                  S r   )get_baser  s    rz   r   z<GuardBuilder.get_guard_manager_from_source.<locals>.<lambda>0  s    

 r|   r\  z4ConstDictKeySource can only work on DictGuardManagerzmissing guard manager builder z - )Qr   rl   r  r  r  r  rd  re  r   r8   r`  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=   ra  collectionsOrderedDictr   r  ro  r>  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AssertionErrorrc  rO   weakref_call_manager)ry   r   root_guard_managerr]  rk  r^  rj  ri  rh  base_guard_manager_enumoutr>  
kwdefaults	kw_sourcer  s                  rz   r  z*GuardBuilder.get_guard_manager_from_source6  s	   !!!!!/4kkmm"0K!K!K.{;;" HH[11M!88OO  !!"2"@fm,, 	%{//11!%*:!;!;!%!C!CFK!P!P&*&A&A/' '#
 &+&& 	 %99%"+#5	 :  CC FL)) u	 //11FF&"+#5	 G  CC F/00 k	//11HH"."+#5	 I  CC F-.. d	 &%FN++ `	%%FJ'' ^	%%%%$11"+#5 2  CC
 +2"	
 	
 W	 &%%%$CCFJ'' K	%%%%$11"+#5 2  CC
 FZ)GHII D	%%%% -ux??&'9::./ / //&&!$&  )88&"/'9	 9   FM** l	%%%%,t[5L.MNN 0 02BCC 667NOOOOO1**%* CC "&,0BCC *<   -AA"L*&3+=	 B  CC .55 f>S (==&"/'9	 >   .66 v?T (>>&"/'9	 ?   ( 2"//11E(88&"/'9	 9   F.// y	,.>?? 223JKKKKK-&&!&  *)))(==&"/'9	 >   FN++ g	%%%%./////< (>>+"4"A'7'E ?   "/&"/'9	 "  	  0>
'333,/@@	 .EE$",'7'E F  
 &h0@AAAAA33&"/'9	 4   F-.. E	%%%%$33("+#5	 4  CC F233 =	%%%%$33AA"+#5	 4  CC F566 5	%%%%$33;;"+#5	 4  CC F;<< -	%%%%$33BB"+#5	 4  CC FO,, %	%%%%$3344"+#5	 4  CC F677 	%%%%$CCl"+#5	 D  CC  233 	02BCC $J   %44l"+#5	 5  CC  122 
	%%%%$99"+#5 :  CC !KKKFKKMMKK   69#FKKMM2
r|   r   r#   c                6    |                      |j                  S r   )r  rq  ry   r   s     rz   r  zGuardBuilder.get_guard_managerW  s    11%2JKKKr|   Tc                   d                     |                                          }t          ||          \  }}i }d| j        d         i}	t	          ||	|            |d         |                                 }
| j        sJ |r"| j        j                            |
|           d S | j        j        	                    |
|           d S )Nr   r  ___make_guard_fn)
joinrI  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Q
F  #TZ_5V)3///*3)*L,?,?,A,AB!!!! 	S #==,     #44X?QRRRRRr|   r  r	  r  r   c                8    t          || j        t                    S r   )evalr  CLOSURE_VARS)ry   r  s     rz   r  zGuardBuilder.get{  s    D$*l333r|   Union[str, Guard]c                L   t          |t                    r|}n|j        }t          t	          |                    }|| j        vr_t          j        d|          rJt          j        d|          rt          	                    d|           | j        
                    |           |S )Nz[a-zA-Z0-9_]+z^\d+$zinvalid var name: %s)r   r	  r  r  r  r  r  r  logwarningr   )ry   r   r  r`  s       rz   arg_refzGuardBuilder.arg_ref  s    eS!! 	DD:D$%8%>%>??t}$$x($// +8Hd++ ?KK 6>>>$$T***r|   r  c                    t          |j        |          }t          |||j        |j                  }|                    |            d S )N)r%  r"  )r7   rq  r#   r%  r"  create)ry   r   r  r   attr_source	new_guards         rz   _guard_on_attributez GuardBuilder._guard_on_attribute  sR     !99EEAQ
 
 
	 	r|   c           	     >   |j         }t          |t                    r|j        }t          |t                    sJ d|j                     |j        }|                                }|j        }|                     |          }t          | 	                    |          |          }d }|r
d| d|d}n	d| d|d}| 
                    ||g| 	                    |                     t          j        r|                     |          }	|r| 	                    |                                          }
| 	                    |          }|                     ||
          }t          |t          j        j                  rCt%          |          t&          u r-|                     ||	||
||                                |          S |	                    ||j        |
|           d S |	                    |t/          ||                     d S |                     ||g           d S )Nzinvalid source hasattr(r   r8  znot hasattr()provided_guarded_objectr  )rq  r   rC   r`  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_sourcer`  r  refvalr  base_managerr]  ri  r^  s                rz   HASATTRzGuardBuilder.HASATTR  sa   )fn-- 	![F&*--MM/M/M/MMMMk!!}ll4  dhhtnnd++ 	3.c..T...DD2#22222D##D6488D>> 	$ 	
 	
 	
 * %	4==kJJL ! !% 7 7%)XXd^^"%)%@%@%W%W"
 158?CC*+=>>23 3  44$*%*   !00!$z&3+=	 1      110u==     $$UTF33333r|   Nr  c                   |J |                      |          }|                     |j                  }t          |t          j        j                  sJ |                     |          }|j         d}|                    ||j	        t          j                  }d|d| d}|                    d|t          ||                     d S )Nr  r  znot ___dict_contains(r   z
.__dict__)F)r)  r  r  r   r   r  r  r  r  r  rd  re  add_dict_contains_guardr/  )	ry   r   r  r8  r9  r:  r  r  r  s	            rz   NOT_PRESENT_IN_GENERIC_DICTz(GuardBuilder.NOT_PRESENT_IN_GENERIC_DICT  s    ll5!!hhuz""#ux/////--e44"Z222#/#H#H",/= $I $
 $
  At@@@@@ 884/e<<	
 	
 	
 	
 	
r|   c                   t          |                     |j                            }|                     |          }d|                     |           d| d}|                     ||g           t          j        r9|                     |          	                    |t          ||                     d S |                     ||g           d S )N___check_type_id(r   r8  )r9  r  r  r}  r)  r3  r1   r4  r  add_type_match_guardr/  r6  )ry   r   r   r  r  s        rz   
TYPE_MATCHzGuardBuilder.TYPE_MATCH  s    %*%%&&QC4<<#6#6CC&CCC##ED6222* 	4""5))>>.tU;;     $$UTF33333r|   c                   |                      |          }|                     |j                  }t          |                     |j                            }d| d| }|                     ||g           t
          j        r9|                     |                              |t          ||                     d S | 
                    ||g           d S )Nz___dict_version() == )r)  r  r  r   r3  r1   r4  r  add_dict_version_guardr/  r6  )ry   r   r8  r9  versionr  s         rz   DICT_VERSIONzGuardBuilder.DICT_VERSION  s    ll5!!hhuz""txx
33445#55G55##ED6222* 	4 ""5))@@+D%88     $$UTF33333r|   rK  invertrU  c                <   |                      |          }|rdnd}| d|d| d}|                     ||g           t          j        r;|                     |                              | |t          ||                     d S |                     ||g           d S )Nnot r   z___dict_contains(r   r8  )r)  r3  r1   r4  r  r=  r/  r6  )ry   r   rK  rH  dict_ref	maybe_notr  s          rz   DICT_CONTAINSzGuardBuilder.DICT_CONTAINS	  s    <<&&$,FF"	BBcBBxBBB##ED6222* 	4""5))AA
C!7e!D!D     $$UTF33333r|   c                   t          |j        t                    r7|                     t	          |j        j        t          j                            S |                     |          }|                     |j	                  }| 
                    |          }d| d| d}|                     ||g           t          j        r8|                     |                              |t!          ||                     n|                     ||g           t          |j        t$                    rNt          |t&          j        j                  r1|j        j        }|                     |          }||| j        |<   d S d S d S d S )Nz___check_obj_id(r   r8  )r   rq  rK   rB  r#   r`  r|  r)  r  r  r}  r3  r1   r4  r  r  r/  r6  rB   r   r  r  r  r  ru   )ry   r   r8  r9  r  r  r  weak_ids           rz   ID_MATCHzGuardBuilder.ID_MATCH  s   e.
;; 	??e.3\5LMM   ll5!!hhuz""S!!2#22222##ED6222* 	4""5))<<.tU;;    $$UTF333 e.<< 	? #ux// ?"5@
..s33&7>D(444	? 	?? ? '&r|   c                   |                      |          }|                     |j                  }t          |t          j                  sJ | d}|                     ||g           t          j        r8| 	                    |          
                    t          ||                     d S |                     ||g           d S Nz is not None)r)  r  r  r   r   Tensorr3  r1   r4  r  add_not_none_guardr/  r6  )ry   r   r@  r8  r9  r  s         rz   NOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCH8  s    ll5!!hhuz""#u|,,,,,#####ED6222* 	4""5))<<&tU33     $$UTF33333r|   c                H    |                      |dt          j                   d S )Nr   )r.  r|  EQUALS_MATCHr  s     rz   
NAME_MATCHzGuardBuilder.NAME_MATCHF  s#      
L4MNNNNNr|   c                   t           j        s|                     |           |                     |j                  }|                     |           d|                                 }|                     ||g           t           j        r9|                     |          	                    |t          ||                     d S |                     ||g           d S )Nz.data_ptr() == )r1   r4  rB  r  r  r)  data_ptrr3  r  add_data_ptr_guardr/  r6  )ry   r   objr  s       rz   DATA_PTR_MATCHzGuardBuilder.DATA_PTR_MATCHI  s     . 	#OOE"""hhuz"",,u%%FFcllnnFF##ED6222* 	4""5))<<+D%88     $$UTF33333r|   c                T   t           j        j        j        d g}|                     ||g           t
          j        rPt           j        j        fd}| j        sJ | j        j        	                    |t          ||                     d S |                     ||           d S )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    !0J>>r|   )r   autogradrb  r`  r3  r1   r4  r   rl   r  r/  r6  )ry   r   r  rc  ra  rb  s       @@rz   
DUAL_LEVELzGuardBuilder.DUAL_LEVELZ  s     ^.=
KzKKL##ED6222* 	22J? ? ? ? ? ? %%%%#44*477     $$UD11111r|   c                   t           j        j                                        }d |D             d dg}|                     ||           t
          j        rUt           j        j        j        fd}| j        sJ | j        j	        
                    |t          ||                     d S |                     ||           d S )Nc                6    g | ]}|                                 S r   )	get_state)r   cis     rz   r   z6GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.<listcomp>r  s     ///R",,..///r|   z5torch._functorch.pyfunctorch.compare_functorch_state(r8  c                               S r   r   )r   
compare_fnstatess    rz   rc  z.GuardBuilder.FUNCTORCH_STACK_MATCH.<locals>.fnz  s    !z&)))r|   )r   
_functorchpyfunctorch#retrieve_all_functorch_interpretersr3  r1   r4  compare_functorch_stater   rl   r  r/  r6  )ry   r   cisr  rc  rk  rl  s        @@rz   FUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCHn  s     *NNPP//3///QQQQR##E4000* 	2)5MJ* * * * * * %%%%#44*477     $$UD11111r|   c                   |                      |j                  t          |                      |j                                                  d                   t	          d          rt                     fd}nfd}dt          |           dt          j                     }t          j
        r9|                     |                              |t          ||                     d S |                      d          }|||<   | d|                      |j                   d	g}|                     ||           d S )
Nr0   __metadata_guard__c                `                         |                                 d                   S Nr0   )rt  r  )r   original_metadatar@  s    rz   metadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s1    //%q';';'='=a'@  r|   c                @    |                                  d         k    S rv  r  )r   rw  s    rz   rx  zEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.<locals>.metadata_checker  s     ++--a04EEEr|   ___check_metadata__cr  (r8  )r  r  r   r  r2  rb   r  r    current_compile_idr1   r4  r  r  r/  r6  )ry   r   rx  r  rq   r  rw  r@  s         @@rz   TENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH  sz   $$$TXXej%9%9%L%L%N%Nq%QRR5.// 	F%e,,,      F F F F F i2.>+?+?hh>CdCfCfhh* 	2""5)):: "8e"L"L      88C==L(8L%"<<TXXej%9%9<<<=D$$UD11111r|   c                z
   |                      |          }|                     |j                  }t          |          }t          r|t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        t          j        f}nd}t           t"          f}t%          t&          t          t$          t(          t*          t,          t.          j        h||z            t.          j                                        rddlm} ddlm}m}	m }
 |
|	||fz   tC          |tD                    rUtG          fdtI          j%        |&                                |'                                          D                       sJ n-tC          |          sJ dt          |           d             tC          |tP                    rtS          j*        |          r| +                    |           g }|,                    d| d	           | -                    ||           t\          j/        rC| 0                    |          1                    td          d
         tg          ||                     n| 4                    ||           d S tC          |tj                    rt	          j*        |          r| +                    |           g }|,                    d| d	           | -                    ||           t\          j/        rC| 0                    |          1                    td          d         tg          ||                     n| 4                    ||           d S t\          j/        rv| d|g}tC          ||          rtm          |          }| 0                    |          7                    |tg          ||                     | -                    ||           d S g }tC          |t           t$          f          rj| 8                    |           ts          |          D ]D\  }}|,                    d| d| d| :                    t          |                     d	           En| +                    |           tC          |t.          j                  rt%          |          }tC          |tv          j<                  rJ |,                    | d|           | 4                    ||           | -                    ||           d S )Nr   r   )
DeviceMesh)Partial	ReplicateShardc              3  8   K   | ]}t          |          V  d S r   )rZ   )r   r   ok_typess     rz   	<genexpr>z,GuardBuilder.EQUALS_MATCH.<locals>.<genexpr>  s>        ()q(##     r|   zUnexpected type z	, not in z__math_isnan(r8  r   z__numpy_isnan(r   r_  r@  r[  z], )=r)  r  r  r9  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_meshr  (torch.distributed.tensor.placement_typesr  r  r  rZ   ra  all	itertoolschainrI  r  floatmathisnanrB  r   r3  r1   r4  r  r  r$  r/  r6  complexr   rf  SEQUENCE_LENGTHr  r}  typesCodeType)ry   r   r8  r9  r   np_typesok_mutable_typesr  r  r  r  r  r   elemr  s                 @rz   rW  zGuardBuilder.EQUALS_MATCH  s   ll5!!hhuz""II 				


/HH H #;!
	 	 "	

 
 ))++ 	@@@@@@           	# H #t 	A    -6_SXXZZ-V-V           A A A$s))@@h@@A A A #u 	$*S// 	OOE"""DKK....///''t444. 6&&u-->> 02Hu2U2U    ((555F #w 	BHSMM 	OOE"""DKK////000''t444. 6&&u-->> 13I$PU3V3V    ((555F* 	''''(Dc+,, $ smm""5))@@+D%88   ''t444F #e}%% 
	#  '''&s^^  	TPPPcPPdkk$t**6M6MPPP    OOE"""#uz"" 	**C #u~.....
 	s''''(((  ---##E400000r|   c                    |                      |j                  }t          |t          t	          d           t
          j        f          r|                     |           d S |                     |           d S r   )	r  r  rZ   rU  r9  r  r  rP  rW  ry   r   r9  s      rz   CONSTANT_MATCHzGuardBuilder.CONSTANT_MATCH'  sh    hhuz""#d4jj%.9:: 	%MM%     e$$$$$r|   c                J   |                      |           |                     |j                  }t          |d          r?t	          |j        t                    sJ |                     |dt          j	                   d S t          j        dt          |                      d S )Ntrainingz$Guard setup for uninitialized class )rP  r  r  r2  rZ   r  rU  r.  r|  r  r3   unimplementedr9  r  s      rz   	NN_MODULEzGuardBuilder.NN_MODULE.  s    ehhuz""3
## 	R#,-----$$UJ8STTTTTPT#YYPPQQQQQr|   c                ,    |                      |          S )z0things like torch.add and user defined functions)rP  r  s     rz   FUNCTION_MATCHzGuardBuilder.FUNCTION_MATCH7  s    }}U###r|   c                F   |                      |j                  }t          |          t          j        k    rTt          |d          rD|                     |dt          j                   |                     |dt          j	                   dS | 	                    |           dS )z!matches a closure by __code__ id.__code__N)
r  r  r9  r  FunctionTyper2  r.  r|  r;  r  r  s      rz   CLOSURE_MATCHzGuardBuilder.CLOSURE_MATCH;  s    hhuz""99***wsJ/G/G*$$UJ8LMMM$$UJ8STTTTT&&&&&r|   c                ,    |                      |          S r   r  r  s     rz   BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCHE      ""5)))r|   c                ,    |                      |          S r   r  r  s     rz   PYMODULE_MATCHzGuardBuilder.PYMODULE_MATCHH  r  r|   c                L   |                      |          }|                     |j                  }t          |          }t          j        rt          |t                    s|                     |           g }t          |          dk    r|
                    d|            n(|
                    d| dt          |                      |                     ||           t          j        rt          |t                    rF|                     |                              t          |          t          ||                     d S |                     |                              t          |          t          ||                     d S |                     ||           d S )Nr   rJ  zlen(rD  )r)  r  r  r9  r1   r4  r   ra  rB  lenr   r3  r  add_dict_length_check_guardr/  add_length_check_guardr6  ry   r   r8  r@  r   r  s         rz   r  zGuardBuilder.SEQUENCE_LENGTHK  s    ll5!!$$KK/ 	#Jud4K4K 	#OOE"""u::??KKs%%%%KK5s55U55666##E4000* 
	2%&& &&u--IIJJ 6tU C C     &&u--DDJJ 6tU C C     $$UD11111r|   c                ^   |                      |          }|                     |j                  }t          |          }t          j        s|                     |           g }|                    d| dt          |                      | 	                    ||           t          j        rkt          |          }| 
                    |          }|                     |                              t          |          |t          ||                     d S |                     ||           d S )Nz___tuple_iterator_len(rD  )r)  r  r  r9  r1   r4  rB  r   r`   r3  r}  r  add_tuple_iterator_length_guardr/  r6  )ry   r   r8  r@  r   r  r  s          rz   TUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LENi  s#   ll5!!$$KK. 	#OOE"""RSRR7I%7P7PRRSSS##E4000* 	2UA[[^^F""5))II"5))63I$PU3V3V     $$UD11111r|   c                d   |                      |          }|                      |                                          }t          |j                  st          |          rd S | d| g}|                     ||           t
          j        r||f}|| j        v rd S | j                            ||f           | j                            ||f           t          | 
                    |          |                     |          t          ||                     d S |                     ||           d S )N is )r)  r  r   rq  r3  r1   r4  r  r  r   r  r  r/  r6  )ry   r   source_bref_aref_br  rK  s          rz   DUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT  sM   U##X]]__--#$
 
 	%h//	 F%%e%%&##E4000* 	2%.Cd999/33UENCCC/33UENCCC)&&u--228<<&tU33     $$UD11111r|   c                   |                      |          }|                     |j                  }t          |          }|                     |           g }t          d |                                D                       }t          t          |          t          |j
                            }|r|                    d| d|            n|                    d| d|            |                     ||           t          j        rJ|                     |j
                  r|                     ||           d S |                     ||           d S |                     ||           d S )Nc              3  4   K   | ]}t          |          V  d S r   )r[   )r   ks     rz   r  z)GuardBuilder.DICT_KEYS.<locals>.<genexpr>  s(      ??QIaLL??????r|   )localz___key_to_id(rD  rN  .keys()) == )r)  r  r  r9  rB  anyrI  rV   r\   r   rq  r   r3  r1   r4  r  r  r  r6  )ry   r   r8  r@  r   r  any_key_is_idconst_keys_reprs           rz   	DICT_KEYSzGuardBuilder.DICT_KEYS  s|   ll5!!$$KK??%**,,?????(e&u'?@@
 
 
  	DKKCCC/CCDDDDKKBBBBBCCC##E4000* 	2//0HII G11%?????88FFFFF$$UD11111r|   c                   |                      |           dg}|                     ||           t          j        r8|                     |                              t          ||                     d S |                     ||           d S rR  )r)  r3  r1   r4  r  rT  r/  r6  )ry   r   r  s      rz   WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVE  s    <<&&4445##E4000* 	2""5))<<&tU33     $$UD11111r|   c           	     @   |                      |          }|                     |j                  }t          |          }t          j        s|                     |           g }|                    d| dt          |	                                                     | 
                    ||           t          j        rJ|                     |j                  r|                     ||           dS |                     ||           dS |                     ||           dS )zConstant keys matchrN  r  N)r)  r  r  r9  r1   r4  rB  r   r.  rI  r3  r  rq  r  r  r6  r  s         rz   DICT_CONST_KEYSzGuardBuilder.DICT_CONST_KEYS  s   ll5!!$$KK. 	#OOE"""CCCCT%**,,-?-?CCDDD##E4000* 	2//0HII G11%?????88FFFFF$$UD11111r|   c                L    t           j        rdS |                     |           dS )z\Special guard to skip guards on empty hooks. This is controlled by skip_nnmodule_hook_guardsN)r1   skip_nnmodule_hook_guardsr  r  s     rz   EMPTY_NN_MODULE_HOOKS_DICTz'GuardBuilder.EMPTY_NN_MODULE_HOOKS_DICT  s,    + 	FU#####r|   c                j    t          j        |                     |j                  | j                   d S r   )r4   watchr  r  r  r  s     rz   OBJECT_MUTATIONzGuardBuilder.OBJECT_MUTATION  s,    TXXej1143HIIIIIr|   c                    d S r   r   r  s     rz   	GRAD_MODEzGuardBuilder.GRAD_MODE      r|   c                    d S r   r   r  s     rz   DETERMINISTIC_ALGORITHMSz%GuardBuilder.DETERMINISTIC_ALGORITHMS  r  r|   c                    d S r   r   r  s     rz   TORCH_FUNCTION_STATEz!GuardBuilder.TORCH_FUNCTION_STATE  r  r|   c                    d S r   r   r  s     rz   FSDP_TRAINING_STATEz GuardBuilder.FSDP_TRAINING_STATE  r  r|   c                8   |j         t          j        u sJ ddlmc m} d|j        g}|                     ||           t          j	        r8| 
                    |                              t          ||                     dS |                     ||           dS )z/Guard on CURRENT_DEVICE per torch.utils._devicer   Nzutils_device.CURRENT_DEVICE == )r   r&   GLOBALtorch.utils._deviceutils_deviceCURRENT_DEVICEr3  r1   r4  r  add_default_device_guardr/  r6  )ry   r   r   r  s       rz   DEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE  s    |{11111'''''''''F!2BFFG##E4000* 	2""5))BB&tU33     $$UD11111r|   c           
        |j         dk    sJ | j        j        j        }d |D             }fd}j        ri }g }g }i }j        D ]Z}	|	j        j        v r0t          j        j	        
                    |	|j        ||||           @t                              d           [t          ||t          |                                          d          }
nd }
j                            d |D             d |D             ||
| j        | j        j        j         	          }| j        j        j        sj                                         |D ]}|                     ||g           t*          j        r8|}|                     |t1          ||          i t2          t4          
           d S |D ]}|                     ||gd           d S )Nr   c                    g | ]	}|j         
S r   )symbolic_contextr   r   s     rz   r   z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>  s    999!,999r|   c                8    fdj         |          D             S )Nc                F    g | ]}t          |t          j                  S r   )r   r   SIZE)r   r   r5  s     rz   r   z?GuardBuilder.SHAPE_ENV.<locals>.get_sources.<locals>.<listcomp>  s8        %V^-@#FF  r|   )tracked_fakes_id_to_source)t_idr5  r  s    `rz   get_sourcesz+GuardBuilder.SHAPE_ENV.<locals>.get_sources  s7       *EdK   r|   z+Untracked tensor used in export constraintsF)source_pairsderived_equalitiesphantom_symbols	warn_onlyc                    g | ]	}|j         
S r   )faker  s     rz   r   z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>-  s       QV   r|   c                    g | ]	}|j         
S r   )r   r  s     rz   r   z*GuardBuilder.SHAPE_ENV.<locals>.<listcomp>.  s    """!QX"""r|   )input_contextsequalities_inputsr  ignore_static)rm   T)	shape_env)r  r  r  tracked_fakesexport_constraintsr  r  r   exportdynamic_shapes_process_equalitiesr   r'  r(  r*   r.  r  produce_guardsr  freezer3  r1   r4  r!  r/  r,   r$  r6  )ry   r   r(  r  r  namesr  r  r  
constraintr  rd   shape_guardro   r  s                 @rz   	SHAPE_ENVzGuardBuilder.SHAPE_ENV  sv    zR,9'99b999	 	 	 	 	 * 	%02E8:L   24O*= O O
?l&MMML/CC"#$.$*'    KK MNNNN 2)#5 $_%;%;%=%= > >	! ! ! !%'66  R   ""r""")/#4AHH 7 
 
 $18 	,"))+++! 	> 	>K''}====* 	O  J55&z599=== 6       & O O(((NNNNO Or|   c                   |                                 rd S |                                rt          |j        t                    rt          |          r|                     |           d S t          |t                    r
 |            }||n|                     |j	                  }t          |t          j                  sJ |                     |          }g }| j        j        j        r|                     |           g d}|D ]}|                     |dz   |z             }t#          |t          j        t          j        f          r,|                    d| d| dt+          |                     o|                    | d| d|            n
| j                            |           | j                            |           | j                            |           t2          j        r|                     |          }| j                            |           | j        j        }	|	j        |j                 }
t=          |
d                   }t=          |
d                   }t?          tA          ||||          |          }|!                    |||||           |j"        J tG          |d|j        	          \  }}|stI          |d
          rl|j%        }d| d| d| d}|                    |           t2          j        r7|                     |          &                    |t?          ||                     n^d| d}|                    |           t2          j        r7|                     |          '                    d
t?          ||                     tQ          |          dk    r:| )                    ||           t2          j        s| *                    ||           d S d S d S )N)r=  r   r?  zndimension()r  zstr(rD  r_  sizestrideT)	is_tensortensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)r0  z%, '_dynamo_dynamic_indices') == Falser   )+is_fsdp_moduleis_specialized_nn_moduler   rq  rD   rs  rP  r/   r  r  r   rS  r)  r  r  r  rB  rZ   r   r=  r   r	  r  r  r  r1   r4  r  r  input_source_to_sizes_stridesr6  r/  rG  add_tensor_match_guardr   r^   r2  r  add_dynamic_indices_guardr5  r  r3  r6  )ry   r   r@  tensor_namer  termsterm
real_valuer   r  metadatar  r  rp   staticreasondynamic_indicesr   s                     rz   TENSOR_MATCHzGuardBuilder.TENSOR_MATCHK  s    !! 	F **,,J	:u79JKKJ	: $E**J	: MM%     %//  ".EEDHHUZ4H4HEeU\22222,,u--K, !D$18 ,&&&   " M MD!%+*;d*B!C!CJj5<*EFF M$W;$W$W$W$WC
OO$W$WXXXX{$K$KT$K$Kz$K$KLLLLM *11%888'..{;;;(//6662 $($:$:5$A$AM 4;;MJJJ#'#8#EL+I0 H 6hv6FGGD78JKKF)?25+tVTT* *& "88#*  H <+++;U5M  NFF  5";<< &+&CO !h[  !h  !hTc  !h  !hs~  !h  !h  !hIKK	***6 ..u55OO+-CIu-U-U   V;UUU  KK	***6 ..u55JJ529eDD   4yy1}}++E48886 :,,UD99999 }: :r|   Fc                    t           j        rJ |r*| j                            t	          ||                     d S | j                            t	          ||                     d S r   )r1   r4  r  r   ru  r  )ry   r   rv  r   s       rz   r6  z GuardBuilder._produce_guard_code  sf    2222 	>&&}Y'F'FGGGGGI]9e<<=====r|   c                &   t                      }|J |j        }~|J t          |          d         }~|t          | j                  v sJ d|             |3|j        d uo
|j        dk    }|r|                     |j                  nd }n|}|!t          j        t          |                    nd }	d }
t          |j        d          r.t          |t          j                  st          j        |          }
|                    ||	||
           d S )Nr  zH_produce_guard_code must be called from inside GuardedCode. Called from r   __weakref__)r   f_backr   dirr   r  r  weakrefr8  r9  r2  r   enumEnumset_export_info)ry   r   rv  r1  	cur_framecaller	func_name
name_validguarded_objectguarded_object_typeobj_refs              rz   r3  z#GuardBuilder._set_guard_export_info  sf    !NN	$$$!!!! ((+	CN
 
 
 
 
aV_aa
 
 

 #*4/DEJ"4DJ5?ITXXej111TNN4N 2@1KGK^,,---QU 	  >+];; 	2JDIE
 E
 	2 k.11G		
 	
 	
 	
 	
r|   )r}  r~  r  r  r  r  r  r  rq   r  r   r  r  r  )r   r#   )r  r	  r  r   )r   r%  r  r	  )r   r#   r  r	  r   )r   r#   r  r  )r   r#   rK  r	  rH  rU  r   )6r   r   r   r{   r  r  r  r  r  r  r  r  r  r$  r!  r  r)  r.  r;  r>  rB  rG  rM  rP  rU  rX  r]  re  rr  r~  rW  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6  r3  r   r|   rz   r|  r|    s       IJ IJ IJ IJV  .     DS S Sj9 9 9
" 
" 
"
 
 

 
 
_ _ _B	L L L L "S S S SB4 4 4 4      94 94 94 94v
 
 
 
 
(4 4 4 44 4 4 4"4 4 4 4? ? ? ?B4 4 4 4 4O O O O4 4 4 4"2 2 2 2(2 2 2 2,2 2 2 26F1 F1 F1 F1P% % % %R R R R$ $ $ $' ' ' '* * * ** * * *2 2 2<2 2 202 2 282 2 26	2 	2 	22 2 2,$ $ $J J J J            2 2 2 2KO KO KO KOZU: U: U: U: U:p> > > >(
 (
 (
 (
 (
 (
r|   r|  c                      e Zd ZdZej        ej        ej        fZe	j
         G d d                      Z G d dej                  Z G d dej                  Zdd
ZdddZddZddZdS )PyExprCSEPassr0   c                  $    e Zd ZU ded<   ded<   dS )PyExprCSEPass.ConfigzDict[str, int]
expr_countzDict[str, str]expr_to_nameNrw  r   r|   rz   Configr3  /  s*         """"$$$$$$r|   r6  c                  (     e Zd Zd
dZd fd	Z xZS )PyExprCSEPass.ExprCounterr1   r3  r  r  c                    || _         d S r   )_config)ry   r1   s     rz   r{   z"PyExprCSEPass.ExprCounter.__init__5  s    !DLLLr|   r  r  r   c                    t          |t          j                  r'| j        j        t          |          xx         dz  cc<   t                                          |           d S rv  )r   r1  ALLOWED_NODE_TYPESr:  r4  r  r   r   )ry   r  r   s     rz   r   zPyExprCSEPass.ExprCounter.visit8  s^    $ @AA A'T(:(:;;;q@;;;GGMM$r|   )r1   r3  r  r  r  r  r  r   r   r   r   r{   r   r   r   s   @rz   ExprCounterr8  4  sQ        	" 	" 	" 	"	  	  	  	  	  	  	  	  	  	 r|   r?  c                  ,     e Zd Zd fdZd fdZ xZS )PyExprCSEPass.Replacerr1   r3  gen_nameCallable[[], str]r  r  c                r    t                                                       || _        || _        g | _        d S r   )r   r{   r:  	_gen_namepreface)ry   r1   rB  r   s      rz   r{   zPyExprCSEPass.Replacer.__init__>  s4    
 GG!DL%DN&(DLLLr|   r  r  r   c                J   t          |t          j                  rt          |          }| j        j        |         t          j        k    r|| j        j        vrst                      	                    |          }t          |          }| 
                                }| j                            | d|            || j        j        |<   n| j        j        |         }t          j        |t          j                              S t                      	                    |          S )Nz = )r   r1  r<  r  r:  r4  USE_THRESHOLDr5  r   r   rE  rF  r   r  NameLoad)ry   r  exprnode_expr_var_namer   s         rz   r   zPyExprCSEPass.Replacer.visitH  s    $ @AA :#D)) <*40=3NNN4<#<<< !&d 3 3 ,U 3 3#'>>#3#3++x,C,CE,C,CDDD:B1$77#'<#<T#B8Hchjj99977==&&&r|   )r1   r3  rB  rC  r  r  r=  r>  r   s   @rz   ReplacerrA  =  s[        	) 	) 	) 	) 	) 	)	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r|   rO  r  r  c                r    d| _         |                     t          j        d           i           | _        d S )Nr   c                     dS r  r   r   r|   rz   r   z(PyExprCSEPass.__init__.<locals>.<lambda>e  s    q r|   )r4  r5  )_counterr6  r  defaultdictr:  rx   s    rz   r{   zPyExprCSEPass.__init__b  s9    {{".yy99 # 
 
r|   _varr   r	  c                <    | | j          }| xj         dz  c_         |S rv  )rR  )ry   r   r  s      rz   _new_varzPyExprCSEPass._new_varh  s)    )$-))r|   exprsr+  c                    |                      | j                  }|D ]^}	 |                    t          j        |                     +# t
          $ r'}t                              d|j        |            d }~ww xY wd S )Nz#Failed to visit expr at line %s.
%s)	r?  r:  r   r  parseSyntaxErrorr'  	exceptionlineno)ry   rW  countereexs        rz   countzPyExprCSEPass.countm  s    ""4<00 	 	Acill++++   DbiQRSSS	 	s   'A
A9"A44A9rK  Tuple[List[str], str]c                    |                      | j        | j                  }|                    t	          j        |                    }|j        t          |          fS r   )rO  r:  rV  r   r  rY  rF  r  )ry   rK  replacernew_nodes       rz   r  zPyExprCSEPass.replacev  sH    ==t}==>>#)D//22h!7!777r|   N)r  r  )rT  )r   r	  r  r	  )rW  r+  r  r  rK  r	  r  ra  )r   r   r   rH  r  	AttributeCall	Subscriptr<  dataclasses	dataclassr6  NodeVisitorr?  NodeTransformerrO  r{   rV  r`  r  r   r|   rz   r1  r1  '  s        M -3=A% % % % % % % %         co      #' #' #' #' #'3& #' #' #'J
 
 
 
    
   8 8 8 8 8 8r|   r1  c                t    t          | j        t                    pt          j        o| j        t          j        u S r   )r   rq  r:   r1    guard_nn_modules_using_dict_tags	create_fnr|  r  )r   s    rz   must_add_nn_module_guardsrp  |  s8    
 	5+^<< 	
 3 :<#99r|   c                      e Zd ZdS )DeletedGuardFnN)r   r   r   r   r|   rz   rr  rr    s        Dr|   rr  c                  4    e Zd Z	 	 d	d
dZd Zd Zd Zd ZdS )r  Nrr   %Optional[Callable[[GuardFail], None]]c           	        
 |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        ot!          d          }t!          d          st"                              d           t'          |pg t(          j                  D ]U}|s<|                                r(d|j        vrd|j        vrt          j        s	d|j        vr@|                    |           V                     |||           _        |j         j        _        t          j        rt:          j                            d	 fd
           t@          !                    d j                    j        sJ |j         j        _         j         _        |j"        s] j        #                    |j                  s>tI           j        |j        tK          j&                              }	tO          d|	            j        (                                 d  _        d S )Nc                    |                                  }|t          j        u r|                                 S sJ              }|J |                    |                                           S r   )guard_sourcer&   CONSTANTr  r)  )r   rw  	r_builder	w_builders      rz   r  z1CheckFunctionManager.__init__.<locals>.source_ref  so    !..00L{333{{}}$!	I((($$V[[]]333r|   c                0     |             }|r	d |_         d S d S r   )r  )weak_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)rK  r  r  hooksdynamo_cpp_guards_strc                 ,    t           j                  S r   )r	  r   rx   s   rz   r   z/CheckFunctionManager.__init__.<locals>.<lambda>  s    C@R<S<S r|   
payload_fn%szGuard check failed: ))rd   	_weakrefsr   r1   r4  ri   r  torch_function_mode_stackr|  r}  r  r  rq   r%  r8  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    r}  r
  clear)ry   r  rr   rd   r  builderr}  guard_on_nn_modulesr   reasonsrz  s   `         @rz   r{   zCheckFunctionManager.__init__  s   
 )5>$$$;=!* 	0!-D(	 7CLL22 	&	4 	4 	4 	4 	4 K $%
 
	 	 	 K99	$5 
//;
 ;
 BCC 	UKKSTTTFLben=== 	" 	"E'	2244	
 #%*44$EJ665 79@
9R9RLL!!!!--gv}MM )0(?%* 	KN++'4S4S4S4S ,    T4#5666%%%%181HD. .DM  & K)//0HII K:*$0&9;; G
 ))I)I)IJJJ 	 r|   c                ~  ,-. |j         }|dgz  }t                              d           g ,g .g -t          | j                  }t
          j        rkddlm} | j	        sJ | j	        j
                            dg           | j	        j
                            | j        t          |          dg           d | _        nXd},                    |           .                    |           d},                    |           .                    |           d!,-.fd	}	t                      }
|j        D ]A}|j        D ]7}||
vr1 |	||j        t
          j                   |
                    |           8B|j        }d }d }|rkt
          j        s^|j        }| j        j        r
J d	            |j        }g }g }t3          ||          D ]l\  }}| j        j        |j                 }|                    t9          |d
                              |                    t9          |d                              mt;          |||d}|j        }|j        }d                     |dgz             },                    d| d           .                    d| d           tC          |          D ]C\  }}||         }||         }||         }tE          ||||          } |	|||         d           DtG          |          dk    r<t
          j        r0tI          |j%        |dd                     |          z   dz   g           | j        r| j        j&        j'        j(        ng }|D ]}tS          |tT                    r|j+        } |j,        }!| -                                 d|!-                                 }t
          j        r8t]          |/                    |           |/                    |!          |g            |	|d t
          j                   ta          d|           |j1        D ](}|j        D ]} |	||j        t
          j                   )-r$td          j3        4                    d-fd           tj          j6        }"|"tk          j7                    }"|||"j        ||dtp          tr          }#d|j:        d         i}$t
          j        r&| j	        sJ | j	        }%tG          ,          dk    sJ nt          tw          ,                    }&d                     |#<                                          }'t{          |&|'          \  }(})t|          j?        @                    dd           dk    rt          d|(           i }*	 t          |)|$|*           n4# t          $ r'}+t          E                    d|+jF        |)            d }+~+ww xY w |*d          |#G                                 }%|#|%_H        ||%_I        t
          j        r|%J                                 n,|%_K        .|%_L        |$|%_M        ||%_N        d |%_O        d |%_P        ||%_Q        |%S )"Nz**___kwargs_ignoredzGUARDS:r0   IGNORED_MODESz___check_global_state()z$___check_torch_function_mode_stack()Fc                V    t                     }t                              d|                                fd           t                              t          j                  rd}d}lj        r/dd	                    j        
                                           }j        r/dd	                    j        
                                           }t                              d ||           |s,                                                    |           d S d S )Nr  c                      j         r+t          j        j                                                   nd j        rt          j        j                  n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^    %{Z6u{7J7J7L7LMMM'#*";E<L"M"M"M  r|   r   z
Stack:
z
User stack:
zGuard: %s%s%s)r)  r  r  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,	  sY    5i G GT#4555 ''    
 
 
 "..w}==  #% ${ S&R2775;;M;M;O;O3P3P&R&R' Rbgge6F6M6M6O6O.P.PR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(r8  T)r  zcheck_no_aliasing(r  zUnknown GuardEnvExpr: dynamo_guardsc                     d  D             S )Nc                "    g | ]} |            S r   r   )r   fs     rz   r   zKCheckFunctionManager.compile_check_fn.<locals>.<lambda>.<locals>.<listcomp>	  s    4W4W4WQQQSS4W4W4Wr|   r   )r  s   rz   r   z7CheckFunctionManager.compile_check_fn.<locals>.<lambda>	  s    4W4WBV4W4W4W r|   r  )___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr  r  r   TORCHDYNAMO_PRINT_GUARDS1zGUARDS
z#Failed to exec guard at line %s.
%sr  r   )Rr  r  r  $make_torch_function_mode_stack_guardr  r1   r4  variables.torch_functionr  r   rl   add_global_state_guard#add_torch_function_mode_stack_guardr.  r   r  r  rv  r   r  r  r  r  r  r  r   r  rq  r6  r   r   r   r  r  rG  r  r   r  tracing_contextguards_contextaotautograd_guardsr   r"   input_source_ainput_source_br  r   r  r  r  r   r  r  r2   initial_global_stateGlobalStateGuardr,   r$  r  uniquerI  r  osenvironr  printr  rZ  r'  r[  r\  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  rA  rB  r   r  r   source_ar  global_staterm   r  r   unique_code_partsr  r  r  r  r_  ro   r  rp   s/                                               @@@rz   r  z%CheckFunctionManager.compile_check_fn	  s    '((###
CE-Q*.
 .
* * 	;?????? %%%%#::<U;VWWW#GG.]##78   .2D** 5Ll+++%%l333"H1222%%&9:::#	= #	= #	= #	= #	= #	= #	= #	=J uu< 	# 	#C # #t## "M$	63RSSSHHTNNN# %7#'  '	Pf&E '	P")"=%,> >=> > > %,$A!!##% 13FGG  1,J( #))*DXfEU*V*VWWW$++.x/ABB    )&#5%9  M
  -2'4'B$ $		"&M%NN! ! F2CFFFGGG%%&N:K&N&N&NOOO$%788 P P4 *!,*1-.q16q$wOO	i)<Q)?$OOOOO!""Q&&6+J& -3"%		2D(E(EEKL    D-<OO 	 ( 	E 	EE%11 E / /'}}EEHMMOOEE	2 1==hGG==hGG"  
 iv/NOOOO"#CE#C#CDDD ) 	P 	PC P P dCIv/NOOOOP   	N++,W,W,W,W ,    %9(9;;L 0(@%1%72T"4
 
 
 
 !$W]3%78* 	G%%%% )Hz??a''''' $VJ%7%7 8 8!%<+<+<+>+>!?!?!5!#5" "J z~~8$??3FFj*---"$C
V137777   DbiQWXXX /s-.0C0C0E0EFH ,* 	-668888",H&8# 4!.  $#.@+s   :V 
V="V88V=c                X   t          | d          r| j        t          ur| j        j        x}{| j        j        x}ot          |t                    sJ t          |t                    sJ |                    |           d | j        _        d | j        _        t          | _        d S d S d S d S d S )Nr  )	r2  r  rr  rs   rt   r   rP   rQ   
invalidate)ry   rs   rt   s      rz   r  zCheckFunctionManager.invalidate	  s    
 D*%%	+^33 $ 99F $ 99Fk:66666k:66666"";///(,DM%(,DM%*DMMM	+ 	+33FFFFr|   c                    	 t          |          | j        vrCt          j        |          | j        t          |          <   t          j        || j                   n# t          $ r Y nw xY wt          |          S )zadd a weakref, return the id)r  r  r%  r8  finalizer  	TypeErrorry   r\  s     rz   r}  zCheckFunctionManager.id_ref
  sy    	#wwdn,, +2+c*:*:r#ww' do666 	 	 	D	#wws   AA 
A)(A)c                f    t          |          | j        v r| j        t          |                   S dS )zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)r  r  r  s     rz   r  z$CheckFunctionManager.lookup_weakrefs
  s-    c77dn$$>"S''**tr|   )NN)rr   rt  )r   r   r   r{   r  r  r}  r  r   r|   rz   r  r    s{         ?Co! o! o! o! o!bn n n`+ + +"      r|   r  Tuple[str, str]c                  	 ddl m} t          r*t                      		                    |            d	fd}ndd} |            }| D ]} ||          \  }}|                    |           |                    d	| d
           |                                5  |                    d           d d d            n# 1 swxY w Y    |            }|                    d           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y    |            }|                    d| d
           |                                5  |                    |           |                    d           d d d            n# 1 swxY w Y   |	                                |	                                fS )Nr   r   rK  r	  r  ra  c                .                         |           S r   )r  )rK  csepasss    rz   r  z%build_guard_function.<locals>.replace!
  s    ??4(((r|   c                
    g | fS r   r   )rK  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 guardre  )
r   r   HAS_UNPARSE_FUNCTIONSr1  r`  r   r   r   splicer   )
ro   closure_argsr   r  r  rK  rF  r   make_guard_fnr  s
            @rz   r  r  
  s   444444 
//j!!!	) 	) 	) 	) 	) 	) 	)
	 	 	 	
  !!J 1 1g&&&0000111   	1 	1  000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 NE	OOO$$$	 ' 'Z   &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' #N$$MDLDDDEEE					 0 0U###///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   -"8"8":":::s6   B==C	C	<+D33D7:D75+F,,F03F0c                 T    t           j        j        j                            d          S )Nre   r   r  	_internal	log_stateis_artifact_enabledr   r|   rz   is_recompiles_enabledr  E
  s    >#-AA,OOOr|   c                 T    t           j        j        j                            d          S )Nrf   r  r   r|   rz   is_recompiles_verbose_enabledr  I
  s    >#-AABVWWWr|   c                :    d | D             ddl m fd}|S )Nc                ,    g | ]}t          |          S r   )r9  )r   r   s     rz   r   z8make_torch_function_mode_stack_guard.<locals>.<listcomp>O
  s    +++T!WW+++r|   r0   r  c                     t                      } t          |           t                    k    rdS t          |           D ] \  }}|v r
|t          |          k    r dS !dS )NFT)rX   r  r   r9  )	cur_stacktymoder  r  s      rz   check_torch_function_mode_stackzMmake_torch_function_mode_stack_guard.<locals>.check_torch_function_mode_stackR
  sy    133	y>>SZZ''5E9-- 	 	HB]""T$ZZuu   tr|   )r  r  )intial_stackr  r  r  s     @@rz   r  r  N
  sO    ++l+++E777777      +*r|   c                   g }t          | j                  }t          j        t                    }| j        D ]@}||d<   t          t          |||                    }||                             |           A|D ]7}t          ||                   dk    r|                    ||                     8d
                    |          }d| gS )N__compile_source__r0   r   zDuplicate tensors found: )ra  rq   r  rS  r.  rv   r  r#  r   r  r  )	r   r  duplicate_tensorsrq   ids_to_sourcer  	tensor_idrK  r  s	            rz   1recompilation_reason_for_no_tensor_aliasing_guardr  b
  s    233L+D11M&A 7 7-:)*tM<??@@	i ''6666 > >}S!""Q&&$$c(:%<===YY())F00011r|   r   rT   f_localsr  
compile_idr!   c                J   || j         d         d}|                    | j                   g }d}g }t          j        rJ| }|                    |          }|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          |	|
|          }n1# t          $ r$}t                      rY d}~ddd           e d}~ww xY w	 ddd           n# 1 swxY w Y   t          |t                     r|s|	}t          |t"                    r%|                    |           t                      s n| dd                    |          z   }|S )z
    Return the reason why `guard_fn` failed.
    Updates `guard_failures` with the generated reason.
    Only the first failed check of guard_fn is reported.
    r  r  Fr0   zDuplicate tensor foundr   Tr  r  r  Nr   z; )rq   r  rm   r1   r4  r   resultrp   r  r  ra  r.   r#  	Exceptionr  r   rU  r	  r   r  )r   r  r  r  r  no_tensor_aliasing_check_failedrp   r   guard_debug_infor   rq   fail_reasonr^  
reason_strs                 rz   r  r  s
  sn    !6s!;<<E	LL&'''G&+#$&& F (66x@@  & 	,!1!D %&&!+++/A!/DDD6:330G)+&%8 %**D$E !& CHeTT& 	 	D 566L15L-./11  "&t\5"A"AKK    466         	                 +t,, #[ #"+s++ {+++466 E"""TYYw%7%77JsB   D)C+*D)+
D5DD)DDD))D-	0D-	r  types.CodeTypec                R   t          | ||          }t          t          |                                      |           	 | j        0|                     t          |pdt          |                              n1# t          $ r$}t                              d           Y d }~nd }~ww xY w|S )Nzunknown reasonzVFailure in guard_fail_fn callback - raising here will cause a NULL Error on guard eval)	r  rY   r]   r   rr   rS   r  r'  r[  )r   r  r  r  r  r^  s         rz   get_guard_fail_reasonr  
  s     .h*MMJ=&'..z:::
!-""*8(8-:MNN    
 
 
d	
 	
 	
 	
 	
 	
 	
 	


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

c              3  T   K   | ]#\  }}d | dt          j        |d          z   V  $dS )zguard z failures:
- N)textwrapr   )r   r  r  s      rz   r  z9get_and_maybe_log_recompilation_reason.<locals>.<genexpr>
  sV       # #Av )(((8?64+H+HH# # # # # #r|   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_fnr  )r  r  r  r  r  r   nextf_coder  r  r1   error_on_recompiler  r  r  r   co_nameco_filenameco_firstlinenorecompiles_verbose_logr  recompiles_logr3   RecompileErrorr   r  r  )	rs   r   r  r  do_recompiles_logfailuresguard_failure_detailsmessager  s	           @rz   &get_and_maybe_log_recompilation_reasonr  
  s    G

!& N"	
 
  	#NN6"""!& 
! <D .//R3P3R3R .F5 .(** 	A{{ # #!*7!3!3# # #  HH
  tyy'9'94@@HGXGG 	@DL @ @d6F @ @I\ @ @4f==@ @ 	  	.,.. .&,,W5555$$W---$ 	.$W---	N##
 
 #??? $    Nr|   r>  rb  lastrU  c                   t          d|j         d|j         d|j                    t          dd                    | j                  z   dz              t          dd                    | j                             t          j        rt          |            d|i| j	        }| j        D ]2}	 t          || j        |           #  t          d|            Y 0xY wd S )	NzERROR RUNNING GUARDS  r  zlambda r   z and
  r  zMalformed guard:
)r  r  r  r  r  rn   ro   r1   r4  rm   r#  rq   )r   r  r  r>  r  r  r   s          rz   guard_error_hookr    s    
WWWt/?WW$BUWW   
)dii..
.
4555	#zx233444& h:H$9:K$ 0 0	0-{;;;;	0.u../////	0 0s   -CCc              #  j   K   t                      }| D ]}||vr|V  |                    |            d S r   )r  r  )seqr  r   s      rz   r  r  (  sJ      55D  D==GGGHHQKKK r|   c                V   |r|| k    rt          |          }t          |           }t          |          st          |           r>t          j        |                                  d|                                 d          ||k    r t          j        t          j        |          S d S )Nz is alising zC. This is not supported. Please do a clone for corresponding input.)r  )	r   r   r3   UnsafeScriptObjectErrorr  	functoolspartialr|  r  )
obj_sourcedupe_sourceser_source_is_localsource_is_locals       rz   make_dupe_guardr*  0  s      Y{j002;??.z::/
 
 	1*==	 -??$$ ? ?+2B2B2D2D ? ? ?   /11 $\%AKXXXX4r|   )skipc                B   ddl m} t                              t          j                  p#t                              t          j                  }|                                j        j	        j
        }|D ]*}t          |t                    sJ  |||| dz              +dS )z
    Add dynamo guards to the current tracing context.

    Args:
        guards: guard(s) to add
        skip: number of stack frames to ignore for debug stack trace
    r   )TracingContextr0   )collect_debug_stackr+  N)torch._guardsr-  r  r  r  r  r  r  r  r  r  r   r#   )r+  rd   r-  r.  r  r   s         rz   install_guardr0  R  s     -,,,,,$11  8		(	(	7	7  




-
;
?C K K%'''''E':JJJJJK Kr|   )r  r  r  r	  )r   r	  r   r#   r  r	  )ro   r*  r   r#   r  r+  )r  r  )r   rT   r  r  r  r!   r  r	  )
r   rT   r  r  r  r  r  r!   r  r	  )r   r  r  r+  )
r   rT   r  r  r  r  r>  rb  r  rU  )
__future__r   r  r  r  ri  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'  r  getArtifactLoggerr  r  r  r  ri   r   	lru_cacher   r  __getitem__r  r  import_moduler  r   r   r$  version_infor  r  r  ImportErrorr  r  r)  r/  r6  rG  rL  rQ  rj  rT  ro  rs  ru  r'  rd  r|  r1  rp  rr  r  r  r  r  r  r  r  r  r  r  r  r*  r0  r   r|   rz   <module>rH     sJ   " " " " " " 



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



    % % % % % %       . . . . . . . .                        " ! ! ! ! !     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	             	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 & % % % % % 1 1 1 1 1 1         
 P O O O O O O O * * * * * * 8 8 8 8 8 8 8 8 8 8 8 8 , , , , , ,                                                       8 K J J J J J J J J J J J J J                               $   	BBB   g!!^--hAA
11(LII99"   ^55h@PQQ O O O O O O O OdP P P T. . .| /; I	
 | ++ /  !7 DJ RZTTRX 
55<< Y, EK' el Z  EO!" U#$ w% * BQB6!!
&	> 	> 	> 	> !% & & & %& !3 3 3 3' ' '.' ' '
% 
% 
% 
%Q Q Q Q    ' ' '- - - d###! ! ! ! ! ! ! $#!" " "JG G G        
$ $ $ $ $ty $ $ $Y
 Y
 Y
 Y
 Y
# Y
 Y
 Y
Z1R8 R8 R8 R8 R8 R8 R8 R8j  	 	 	 	 	 	 	 	D D D D D D D DN(; (; (; (;VP P PX X X
+ + +(2 2 2"E E E EP   ,9 9 9 9x0 0 0 00  % & & &    D !" K K K K K K Ks$   E E'&E'
J* *J43J4