
    3j             	       l   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJrJrJrJr  SSKrSSKJr  SSKrSSKrSSKJrJr  SS	KJr  SS
KJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&J'r'J(r(J)r)J*r*  SSK+J,r,  SSK-J.r.J/r/J0r0  SSK1J2r2  SSK3J4r4J5r5J6r6J7r7J8r8J9r9J:r:  SSK;J<r<J=r=  SSK>J?r?J@r@  SSKAJBrB  SSKCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrN  SSKOJPrPJQrQJRrR  SSKSJTrT  SSKUJVrVJWrW  SSKXJYrY  SSKZJ[r[   SSK\r]\(       a   SSK_J`r`  SSKaJbrb  SSKcJdrdJere  SS KfJgrg  SS!KhJiri  \R                  " \k5      rl\R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  S".ru\R                  \R                  \R                  \R                  S#.rv0 \uE\vErw\xR                  \uR                  5       5      r{\xR                  \vR                  5       5      r|S$\}S%\~4S& jr\GR                   GR                  GR                  \GR                  GR                  -  r " S' S(\R5      r " S) S*\R5      r " S+ S,\5      r " S- S.\5      r " S/ S0\5      r " S1 S2\[5      r " S3 S4\R5      r " S5 S6\R5      rg! \^ a    Sr] GNf = f)7a  
This module contains variable tracker classes for handling tensors and tensor-related operations in Dynamo.

The main class is TensorVariable which represents torch.Tensor inputs and intermediate values in the FX graph.
It handles tensor operations, method calls, and maintains metadata about tensor properties like dtype, device, etc.

Other key classes include:
- SymNodeVariable: Represents symbolic scalars (int/float/bool) used for size computation and unspecialized values
- NumpyNdarrayVariable: Handles numpy array interop through torch._numpy
- UnspecializedPythonVariable: Represents unspecialized Python numeric values as 1-element tensors
- TensorSubclassVariable: Handles tensor subclasses with __torch_function__ overrides
- UntypedStorageVariable: Represents tensor storage objects
- DataPtrVariable: Handles tensor data pointer operations

These classes work together to track tensor operations and properties during Dynamo's tracing process.
    N)IterableSequence)nullcontext)chain)NoneType)AnyNoReturnOptionalTYPE_CHECKING)	sym_floatsym_int)compiled_autograd)is_opaque_reference_type)
OpaqueBase)is_sparse_any)guard_scalarGuardOnDataDependentSymNodehas_free_symbolsis_symbolicSymTypes)is_traceable_wrapper_subclass   )configgraph_break_hints	variables)trace_wrapped)ObservedAttributeErrorraise_observed_exceptionTorchRuntimeErrorunimplemented$UnknownPropertiesDuringBackwardTrace	UserErrorUserErrorType)_ApplyBackwardHookcall_hook_from_backward_state)GuardBuilderinstall_guard)
AttrSource)fqnget_custom_getattrget_fake_valueget_real_valueguard_if_dynobject_has_getattributeproductproxy_args_kwargsraise_args_mismatchset_example_valuetensortype_to_dtype   )AttributeMutationNewValueMutationNewVariableTrackerConstantVariable)ListIteratorVariableSizeVariable)TorchScriptObjectVariable)UserDefinedClassVariable)	PyCodegen)OutputGraph)InstructionTranslatorInstructionTranslatorBase)UserFunctionVariableTensorWithTFOverrideVariable)><z>=z<===!=isis not)rI   rJ   rG   rH   valuereturnc                 `   [        [        U 5      =(       a    [        R                  R                  R                  U 5      (       + =(       a_    [        U S5      =(       aL    [        U R                  [        R                  5      =(       a!    [        U R                  U R                  S 5      5      $ )N__self__)boolcallabletorch_dynamoutilsr.   hasattr
isinstancerN   Tensorgetattr__name__rK   s    X/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodr[      sy     	:##;;EBB	:E:&	: u~~u||4	: ENNENND9     c            #       
  ^  \ rS rSrSrSSSSSSS	S
SSSSSSS1\R                  krS\R                  4S jr	SSSSS.S\R                  R                  S\R                  S\R                  S\R                  S\S
\S\S\S\S\S\S\\S4   S-  S	\\S4   S-  S\S-  S\S-  S\SS4"U 4S jjjr SSSS\S-  SS4S jjrS\S-  4S jrSSS \S-  S!\SS4S" jrS\4S# jrS\R                  R                  4S$ jrS\4S% jrS\4S& jrSSS\4S' jr\S(\R                  S\\\4   4S) j5       r SSS*\S\4S+ jr!SSS\4S, jr"SSS\S-  4S- jr#SSS\S-  4S. jr$SSS\S-  4S/ jr%SSS\&S-  4S0 jr'SSS\4S1 jr(SSS\&S-  4S2 jr)SSS\&S-  4S3 jr*SSS\&S-  4S4 jr+SSS\&S-  4S5 jr,SSS\-4S6 jr.SSS\S-  4S7 jr/SSS\4S8 jr0SSS\&S-  4S9 jr1SSS\4S: jr2SSS*\S\&4S; jr3SSS*\S\4S< jr4SSS\4S= jr5SSS\4S> jr6 SSSS?\7\   S-  S\8\   4S@ jjr9SSSASBSC\SD\7\   SE\\\4   S\4SF jr:S\4SG jr;\<S\\S4   4SH j5       r=S\8\   4SI jr>S\8\   4SJ jr?SSSK\S\4SL jr@SSS*\SM\7\   SSNS\4
SO jrASSSM\S\S\S-  4SP jrBSSSM\S\S\S-  4SQ jrC SS*\SR\S-  S\S-  4SS jjrDSSS\S-  4ST jrE\ErFSSS\S-  4SU jrG\GrHSSS\&S-  4SV jrISSS\&S-  4SW jrJSSS\&S-  4SX jrK SSSSY\S-  S\&S-  4SZ jjrL  SSSS\S-  S\\S\S\S-  4
S] jjrMSSS^\SS_4S` jrNSSS\S-  4Sa jrOSSS\4Sb jrPS[Sc.SSSd\\-  SSe4Sf jjrQSSS\4Sg jrR SSh\S\   Si\S\8\   S-  4Sj jjrT    SSSSk\S-  Sl\S-  Sm\S-  Sn\S-  S\S-  4So jjrUSSSM\S\SSp4Sq jrVSSSr\S\4Ss jrWSSSM\S\SS4St jrXSSS\4Su jrYSSS\4Sv jrZSSS\4Sw jr[SSS\4Sx jr\SSS\4Sy jr]SSSM\S\S\4Sz jr^\\_R                  SS{ j5       5       raSSS\4S| jrbSSS\4S} jrcSSS\d4S~ jreSS.SSS\S\S(\S-  S\S-  4
S jjrfSSSK\S(\S\4S jrgSSSM\S\S\-4S jrhSSSM\S\S\-4S jriSSSM\S\S\-4S jrjSSSM\S\S\-4S jrkSSSM\S\SS4S jrlSS.SSS\S\S-  S\S-  4S jjrmSS.SSSS SS S(\S-  S\S-  4
S jjrnSSS\S\4S jroSSSM\S\S\4S jrpSSSM\S\S\4S jrqSSS*\S\S\4S jrr SSSS
\\-  S\4S jjrsSS jrtS\-4S jruSSSM\S\S\S-  4S jrvSS SSSM\S\S\S-  4
S jrw    SS jrxS*\SS4S jryS\4S jrzS\4S jr{S\|S\4S jr}Sr~U =r$ )TensorVariable   z=A torch.Tensor input or an intermediate value in the FX graphproxydtypedevicelayoutndimsizestriderequires_gradis_quantizedis_contiguous	is_nested	is_sparse
class_typespecialized_value_is_name_setrL   c                 j    [        U R                  R                  U R                  R                  5      $ )z
Get the actual value represented by this variable if computation is run
using the user-provided inputs.
NOTE: this runs actual tensor computation and may be
slow and memory-intensive.
)r,   r`   nodetracerselfs    rZ   r,   TensorVariable.get_real_value   s#     djjootzz/@/@AAr\   N)_sizerf   ri   rn   has_grad_fnru   .kwargsc                &  > [         TU ]  " S0 UD6  Xl        X l        X0l        X@l        XPl        Xl        Xl        X`l	        Xl
        Xl        Xpl        Xl        Xl        Xl        Uc#  U R                  R                   R"                  S:H  nXl        g )Nplaceholder )super__init__r`   ra   rb   rc   rd   ru   rf   rg   rh   ri   rj   rk   rl   rv   rp   oprn   )rs   r`   ra   rb   rc   rd   rg   rj   rh   rk   rl   rv   ru   rf   ri   rn   rw   	__class__s                    rZ   r|   TensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".r\   txr@   
target_clsc                     SSK JnJn  Uc  [        U 5      nU R                  R
                  R                  R                  S5      nU" X!XT" U5      5      nUR                  5        H  u  px[        XU5        M     g )Nr4   )get_specialized_propsinfer_subclass_typeexample_value)
builderr   r   typer`   rp   metagetitemssetattr)	rs   r   r   r   r   r   specialized_propskvs	            rZ   synchronize_attributes%TensorVariable.synchronize_attributes   sn     	HdJ

,,00A1M+>}+M
 &++-DADQ .r\   c                     U R                   R                  R                  R                  S5      nUb  UR                  $ S$ )zFGet the current version of self's fake tensor, or None if unavailable.r   N)r`   rp   r   r   _version)rs   	self_fakes     rZ   _get_fake_version TensorVariable._get_fake_version   s6    JJOO((,,_=	%.%:y!!DDr\   version_beforehas_tensor_argc                     U R                  5       nUb>  Ub:  XB:  a4  U(       a  U R                  U5        UR                  R                  U5        gggg)zs
Sync attributes if self was mutated by an inplace operation.

See Note [Inplace ops and VariableTracker metadata]
N)r   r   output&check_input_mutation_on_current_stream)rs   r   r   r   version_afters        rZ   _sync_if_inplace_mutation(TensorVariable._sync_if_inplace_mutation   sV     ..0&).++B/II<<R@	 / * 'r\   c                 Z    [        U R                  R                  R                  S   5      $ Nr   )reprr`   rp   r   rr   s    rZ   
debug_reprTensorVariable.debug_repr  s     DJJOO((9::r\   c                     U R                   $ Nr`   rr   s    rZ   as_proxyTensorVariable.as_proxy
      zzr\   c                     U R                   $ r   )rl   rr   s    rZ   python_typeTensorVariable.python_type  s    r\   c                     gNTrz   rr   s    rZ   	is_tensorTensorVariable.is_tensor      r\   c                 v   SSK Jn  U R                  US/ 0 5      n[        U[        5      (       a+  [        UR
                  [        R                  5      (       a  U$ [        X25      (       a*  [        R                  " U[        UR                  5      5      $ [        R                  XR                  5       S:g  5      $ )Nr4   r8   itemr   )constantr9   call_methodrU   SymNodeVariablesym_numrQ   SymBoolr7   buildrO   rK   creater   )rs   r   r9   r   s       rZ   	bool_implTensorVariable.bool_impl  s    .FB3dO,,LL%--2
 2
 Kd--"((T$**-=>>%%b--/Q*>??r\   rK   c                 &  ^  T R                   T R                  T R                  [        T R                  5      T R
                  T R                  T R                  T R                  [        T 5      S.	n T R                  S LUS'   [        T 5      (       a5  [        T 5      (       d%  [        S T R                  5        5       5      US'   U$ [        T 5      (       d  [        S T R                  5        5       5      US'   [        T R!                  5       5      US'   ["        R$                  R&                  R)                  T 5      (       a  S US'   U$ [        U 4S	 j["        R*                  R,                   5       5      US'   U$ ! [         a	    SUS'    GNf = f)
N)	ra   rb   rc   rd   rg   rj   rh   rk   rl   rv   Fc              3   \   #    U  H"  n[        U5      (       a  [        U5      OUv   M$     g 7fr   r   int.0ss     rZ   	<genexpr>,TensorVariable.specialize.<locals>.<genexpr>5  s$      #9EA+a..Aa/   *,ru   c              3   \   #    U  H"  n[        U5      (       a  [        U5      OUv   M$     g 7fr   r   r   s     rZ   r   r   ?  s*      # &A &a..Aa/%r   rf   ri   c              3   T   >#    U  H  nTR                  US 9(       d  M  Uv   M     g7f)memory_formatN)ri   )r   xrK   s     rZ   r   r   K  s+      /@***; A@s   (	()ra   rb   rc   r   rd   rg   rj   rh   rk   r   grad_fn	Exceptionr   r   tuplere   rf   rQ   _C
_functorchis_batchedtensor_prims_common_memory_formats)rK   propss   ` rZ   
specializeTensorVariable.specialize   sp    [[llll

O"00!..u+
!
	)#(==#<E-  (8(?(?" #9># E'N6 1 "%(( # # 	# E'N $ELLN3E(Oxx""33E:: *.o&  */ /"00@@/ *o&
 C  	) $)E- 	)s   1E= =FFnamec           
         U R                   R                  R                  S   nU R                  (       Gd]  [	        U5      (       GaL  UR                  5       u  pE[        U R                  5       U5      n[        X25      nX$;   a4  [        U[        R                  [        45      (       d   eSSKJn  U" XUS9$ [        [        U5      5      (       aT  [        R                   R"                  R%                  UR&                  R(                  U5      n	[*        R,                  " Xi5      $ [        U[        R                   R"                  R.                  5      (       a  [*        R,                  " Xg5      $ [1        U5      (       d  [2        R4                  " X5      $ U R                  (       a  U R                  R7                  5       (       d  [8        eUR&                  R:                  UR&                  R<                  S.n
 [?        U R                  R@                  U
5      nUc  [8        e[E        U5      (       a  [8        e[G        U5      (       a  [8        e [        X5      n[O        U R                  U5      n[Q        W5      (       a  SS	K)J*n  U" XU[        U5      S
9$ [W        U R                  RY                  [Z        R\                  " [^        R`                  US95      5        [2        R4                  " XU5      $ ! [B         a  n[8        UeS nAff = f! [H         a-    [K        [H        US[        U5      RL                   SU S3/S9   Nf = f)Nr   r4   wrap_fx_proxy)r   r`   r   LG'z' object has no attribute 'argsGetAttrVariable)sourcepy_typeattr)1r`   rp   r   r   r   __tensor_flatten__rW   r   rU   rQ   rV   r   r   r   r   r   _libraryfake_class_registrymaybe_to_fake_objr   	fake_moder<   r   FakeScriptObjectrP   r7   r   subguards_allowedNotImplementedErrorlocal_scopeglobal_scopeevalr   r   r.   r*   AttributeErrorr   rX   r(   r[   miscr   r'   
make_guard	functoolspartialr&   HASATTR)rs   r   r   fake_valattrs_ctxr`   r   r   fake_script_objscope_input_associated_real_valueexc
real_valueattr_sourcer   s                   rZ   dynamic_getattrTensorVariable.dynamic_getattrR  s    ::??''8 {{{<XFF"557KEDMMOT2E#H3M}!-%,,
1KLLLL2$}UU)$}*=>>"'.."D"D"V"VII''# 177OO22CC  177MM m,,&,,R?? = = ? ?%% ii++"))2H2HI	/ ,00@0@%+H( (/%%"#?@@%%:;;%%		 !=DJ !d3 "*---";Z8H  	KK""9#4#4\5I5IPT#UV	
 $$R[AAM  	/%3.	/  	$9:CCDD_`d_eefg	s*   7 K1 L
 1
L;LL
4M Mc                     U R                   b   [        R                  " XR                   5      $ U R                  US/ 0 5      $ )Ndim)rd   r7   r   r   rs   r   s     rZ   method_attr_ndimTensorVariable.method_attr_ndim  s8    99 "((YY77##Br266r\   c                 ^    U R                   b   [        R                  " XR                   5      $ g r   )ra   r7   r   r  s     rZ   method_attr_dtype TensorVariable.method_attr_dtype  s$    ::!"((ZZ88r\   c                 ^    U R                   b   [        R                  " XR                   5      $ g r   )rb   r7   r   r  s     rZ   method_attr_device!TensorVariable.method_attr_device  $    ;;""(([[99r\   c                 ^    U R                   b   [        R                  " XR                   5      $ g r   )rc   r7   r   r  s     rZ   method_attr_layout!TensorVariable.method_attr_layout  r  r\   c                 x    U R                   b-  [        R                  " XR                   R                  S:H  5      $ g )Ncuda)rb   r7   r   r   r  s     rZ   method_attr_is_cuda"TensorVariable.method_attr_is_cuda  s1     ;;""(([[-=-=-GHHr\   c                     U R                  5       (       a;  U R                   Vs/ s H  n[        R                  " X5      PM     nn[	        U5      $ U R                  US/ 0 5      $ s  snf Nre   )
valid_sizere   r7   r   r;   r   )rs   r   r   sizess       rZ   method_attr_shape TensorVariable.method_attr_shape  sc    ??6:ii,6?%%b,i  ,  &&##BB77,s    A%c                 ^    U R                   b   [        R                  " XR                   5      $ g r   )rg   r7   r   r  s     rZ   method_attr_requires_grad(TensorVariable.method_attr_requires_grad  s*     )"((-?-?@@r\   c                 ^    U R                   b   [        R                  " XR                   5      $ g r   )rh   r7   r   r  s     rZ   method_attr_is_quantized'TensorVariable.method_attr_is_quantized  s*     ("((->->??r\   c                 ^    U R                   b   [        R                  " XR                   5      $ g r   )rk   r7   r   r  s     rZ   method_attr_is_sparse$TensorVariable.method_attr_is_sparse  &     >>%"((^^<<r\   c                 ^    U R                   b   [        R                  " XR                   5      $ g r   )rj   r7   r   r  s     rZ   method_attr_is_nested$TensorVariable.method_attr_is_nested  r$  r\   c                 $    [        SSU  S3S/ S9  g )Nz'Tensor.retain_grad() with AOTDispatchervar_getattr z retain_gradz8`Tensor.retain_grad()` does not work with AOTDispatcher.gb_typecontextexplanationhintsr    r  s     rZ   method_attr_retain_grad&TensorVariable.method_attr_retain_grad  s    ="4&5R		
r\   c                     UR                   R                  R                  U S5      (       a&  UR                   R                  R                  U S5      $ g )Ngrad)r   side_effectshas_pending_mutation_of_attr	load_attrr  s     rZ   method_attr_gradTensorVariable.method_attr_grad  s?    99!!>>tVLL99))33D&AAr\   c                     [         R                  " [        R                  R                  R
                  5      R                  X/0 5      $ r   )r   TorchInGraphFunctionVariablerQ   r   	_autograd_get_data_attrcall_functionr  s     rZ   method_attr_dataTensorVariable.method_attr_data  s6    55HH--

-FB
'	(r\   c                     U R                   (       a  [        SSU  S3S/ S9  g [        R                  R	                  S 5      $ )NzTensor with grad_fn()r)  z grad_fnz@Dynamo does not support tracing tensors with a grad_fn directly.r*  )rv   r    r   r9   r   r  s     rZ   method_attr_grad_fn"TensorVariable.method_attr_grad_fn   sC     /&tfH5^	 --44T::r\   c                 \    SSK Jn  [        R                  " U5      R	                  X/0 5      $ )Nr   )_tensor_version)tensor_version_oprD  r   r:  r=  )rs   r   rD  s      rZ   method_attr__version#TensorVariable.method_attr__version  s*    755oFTT
 	
r\   c           	         SSK Jn  U[        ;   a  [        R                  " S5      $  [
        R                  " U[        5      R                  X[
        R                  " X5      /0 5      n[        XC5      (       + nU R                  (       aE  [        U R                  R                  [        R                   " ["        R$                  US95      5        [
        R                  " X5      $ ! [        [        4 a    Sn Nf = f)Nr4   r   TFr   ) r   all_tensor_attrsr9   r   r7   r   rW   r=  rU   r   r   r   r'   r   r   r   r&   r   )rs   r   r   r   varret_vals         rZ   call_obj_hasattrTensorVariable.call_obj_hasattr  s     	& ###**400	!''G4BB?00:;RC
 %S::G ;;&&%%l&:&:F $$R11  67 	G	s   AC% %C:9C:c                   ^ ^^ T R                  T5      (       aS  TT R                  5       ;   a  [        SST  ST 3ST S3ST S3/S9  O#TT R                  5       ;   a  [	        S	T S
35      eTS:X  a%  [
        R                  " TT R                  5       5      $ [        T ST 3S 5      nUb  U" T5      OS nUb  T R                  (       a}  T R                  R                  5       (       a^  TS;  a  UR                  5       (       dC  [        T R                  [        R                  5      5        [!        T R                  T5      Ul	        T R                  b  [#        [$        R&                  R(                  T5      (       a  [        [$        R&                  R(                  T5      n[#        US5      (       a  [#        XUR+                  5       S   5      (       at  [$        R,                  R.                  [        XUR+                  5       S   5      R0                  ;   a2  [2        R4                  R7                  [!        T R                  T5      SS9$ Uc   TS:w  a  S[
        S -  4UU U4S jjnU" 5       nUc  T R9                  TT5      nUc  [:        eU$ )NzStrict mode banned opr)   zGetattr invocation 'z"' in strict mode is not supported.zRemove `zj` from the list of banned ops by setting `torch._dynamo.config._autograd_backward_strict_mode_banned_ops`.r*  zUnknown property z] during speculating backward, dynamo will insert contiguous call ahead and speculate it againr~   method_attr_)r3  rg   	overloadsr   z9Getting an inplace view on a graph input is not supported)r   msgr3  rL   c                  *  > SSK Jn   SSKJn  [        R                  TS 5      nUc  g [        U5      [        R                  La  g UR                  TR                  5       T5      nTR                  b  U " TU[        TR                  T5      S9$ U " TUS9$ )Nr4   r   r   )r   r`   r   r   r`   )r   r   r   r   rJ  r   r   typesGetSetDescriptorTypecreate_getattr_proxyr   r   r(   )r   r   static_attrr`   r   rs   r   s       rZ   try_generic_attr_handling=TensorVariable.var_getattr.<locals>.try_generic_attr_handlingl  s    21.224>& $E,F,FF'<<T]]_dS;;*(U:dkk43P  )Be<<r\   )is_strict_mode_strict_mode_banned_opsr    #_strict_mode_conditional_banned_opsr!   r7   r   r   rW   r   r   is_python_constantr'   r   r&   
TYPE_MATCHr(   rT   rQ   opsatenrR  Taginplace_viewtagsr   r   DelayGraphBreakVariabler   r   )rs   r   r   handlerresultfnrZ  s   ```    rZ   var_getattrTensorVariable.var_getattr3  sI   r""t33553*4&$8"6tf<^ _"4& )d d	 AACC:'v  .K  L  ;"((T-=-=-?@@$,tf 5t< ' 3 --//55&:S:S:U:U $//,*A*ABC&t{{D9FM ;;"wuyy~~t'D'D.BK((Bq 122II**gb,,.:K.L.Q.QQ !~~==%dkk48S >   >dfn=/E = =2 /0F>))"d3F>%%r\   c           	          U R                   (       d  [        SSU  3S/ S9  U R                   (       d   eUR                  R                  UR                  R                  S.nS n [        U R                   R                  U5      nUc  [        S	SU  3S
/ S9  [        U R                   R                  [        R                  5      5        [        U5      n[        R                  " X5      $ ! [         a  n[        SSU  3S/ US9   S nANS nAff = f)Nz$Unsupported call_id() without sourcezcall_id z6call_id() not supported for sourceless TensorVariable.r*  r   z#Error getting associated real valuezJDynamo encountered an error while trying to get the associated real value.r+  r,  r-  r.  from_excz'call_id() without associated real valuez>Dynamo could not find an associated real value for the tensor.)r   r    r   r   r   r   r   r   r'   r   r&   ID_MATCHidr7   r   )rs   r   r   r   r   id_values         rZ   call_idTensorVariable.call_id  s   {{>"4&)T	 {{{ii++"))2H2HI'+$
	+/0@0@%+H( (/A"4&)\	 	dkk,,\-B-BCD23$$R22)  	="4&)1	s   $ C) )
D3DDc                      U R                   S:  $ Nr   )rd   r  s     rZ   has_unpack_var_sequence&TensorVariable.has_unpack_var_sequence  s    yy1}r\   idxesc           	      X   SSK Jn  SSKJn  U R	                  5       (       a  [        U R                  5      nO@U R                  US/ 0 5      n[        U[        5      (       d   e[        UR                  5      nUS:w  d   S5       eU R	                  5       (       a  U R                  S   nOU R                  US[        R                  " US5      /0 5      n[        U[        5      (       d  UR                  5       (       d   e[        U[        5      (       a  UR                  UR                   5      nOUR#                  5       nUc  [%        U5      nO&[        U5      U:X  d   SU S[        U5       S	35       e[        X5      (       ae  U V	s/ s H  n	U" [&        XR)                  5       U	   S
9PM!     n
n	U
 Vs/ s H+  nUR*                  " XU R,                  U R.                  5      PM-     sn$ U V	s/ s H$  n	U" [1        U 5      XR)                  5       U	   S
9PM&     sn	$ s  sn	f s  snf s  sn	f )Nr4   wrap_fx_proxy_clsrC   re   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.r   r   r`   )r   r{  torch_functionrD   r  lenre   r   rU   r;   r   r7   r   r   r_  evaluate_exprr   as_python_constantranger^   r   from_tensor_varrl   r   r   )rs   r   rx  r{  rD   size_lensize_varlength
dyn_lengthi	base_varsr   s               rZ   unpack_var_sequence"TensorVariable.unpack_var_sequence  s    	/@??499~H''FB;Hh55558>>*H1}<<<}??YYq\F))F_222q9:BJ :7700223 *o66#11"))<#668=&MEu:' +F83I#e*U_`'
 d99
 	 A "-"MMOA<N 	   #	 #A -<<4??DKK #	  
 d--/RSBTU
 	

s   
&H62H"/+H'tree_map_fnrB   map_fnresttree_map_kwargsc                 ,    UR                  X/UQ0 5      $ r   )r=  )rs   r   r  r  r  r  s         rZ   call_tree_mapTensorVariable.call_tree_map  s     ##Br::r\   c                     U R                   S L$ r   ru   rr   s    rZ   r  TensorVariable.valid_size  s    zz%%r\   c                 B    U R                   c   S5       eU R                   $ )Nz%accessing None size in TensorVariabler  rr   s    rZ   re   TensorVariable.size  s"    zz%N'NN%zzr\   c                 J    [         R                  R                  R                  $ r   )rQ   rR   r   )_autograd_backward_strict_mode_banned_opsrr   s    rZ   r]  &TensorVariable._strict_mode_banned_ops  s    }}##MMMr\   c                 J    [         R                  R                  R                  $ r   )rQ   rR   r   5_autograd_backward_strict_mode_conditional_banned_opsrr   s    rZ   r^  2TensorVariable._strict_mode_conditional_banned_ops  s    MM  VV	
r\   keyc           	         SSK JnJn  SSKJnJn  U R                  U5      (       a&  SU R                  5       ;   a  [        SSU  SU 3S/ S	9  0 n[        R                  SS 5      nUb  U" XU4U5      (       at  U R                  (       a.  U" U[        [        U R                  S
5      S5      5      " U5      n	O*UR                  U[        R                  R                   5      n	U" XX4U5      $ U R#                  X5      $ )Nr4   SourcelessBuilderVariableBuildercan_dispatch_torch_functiondispatch_torch_function__getitem__z-Illegal __getitem__ invocation in strict modezmp_subscript_impl rP  zHDynamo currently does not support __getitem__ invocation in strict mode.r*  r~   )r   r  r  r}  r  r  r\  r]  r    rJ  r   r   r(   r   rQ   rV   r  method___getitem__)
rs   r   r  r  r  r  r  empty_kwargsrY  func_vars
             rZ   mp_subscript_impl TensorVariable.mp_subscript_impl  s     	@Xr""}8T8T8V'VG,TF!C59- 46&**=$?"'Bs\(
 (
 {{*z$++{C]S 
 -33B8P8PQ*2$lSS&&r//r\   r   zdict[str, VariableTracker]c                    SSK JnJn  SSKJnJn  U R                  U5      (       a/  X R                  5       ;   a  [        SSU  SU SU SU 3SU S3/ S	9  US
:X  a  [        SSU  S3SS/S	9  [        R                  US 5      n	U	S Ln
U" U[        U /[        U5      -   5      U5      (       a  U
(       a  U R                  (       a.  U" U[        [        U R                  S5      U5      5      " U	5      nO*UR                  U[!        ["        R$                  U5      5      nU" X[        U /[        U5      -   5      U5      $  US:X  a7  ['        US   [(        5      (       a  [*        R,                  R                  S5      $ US:X  av  U(       d  U(       a)  ["        R.                  R0                  R3                  S5      eSSKJn  SSK Jn  U" UUR:                  R=                  SXR?                  5       40 5      5      $ US:X  a*  [        SSU SU< SU< S3SS/[@        RB                  QS	9  O5US :X  a/  S!U;   a)  [        S"SU SU< SU< S3SS#/[@        RB                  QS	9   [!        U S$U 35      n URE                  5        VVs0 s H  u  nnUURG                  5       _M     nnnU" U/UQ70 UD6nU(       a  U$  U RL                  RN                  RP                  R                  S)5      nUb  [S        U5      OU RT                  n[W        UU5      (       d9  [        S*SU  SU SU SU 3S+U S,URX                   S-3/ [@        RB                  QS	9  SSK Jn  UR:                  R<                  " S.U/[[        U /UQU5      Q76 nU R]                  5       nU" UU5      nU R_                  UU[a        S/ U 5       5      5        U$ s  snnf ! [H         a(  n[        S%SU  SU SU SU 3S&U S'3/ US(9   S nAGN5S nAff = f! [J         a     GNJf = f)0Nr4   r  r  z(Illegal method invocation in strict modecall_method rP  z/Dynamo currently does not support this method (z) invocation in strict mode.r*  __deepcopy__z#Attempted to copy.deepcopy a tensorzcopy.deepcopy()z3Dynamo does not support copy.deepcopy() on tensors.zAAvoid calling copy.deepcopy() on tensors inside compiled regions.r~   __eq__r   Fwaitz2`wait` and `wait_tensor` do not take any arguments)wait_tensorr   r=  random_zTensor.random_ opzTensor.(args=	, kwargs=z This is currently not supported.z'Use the out-of-place version of this opuniform_fromz-Tensor.uniform_ op called with `from` keywordzAvoid using the `from` keyword.method_zUnhandled args for methodz6Dynamo encountered an error while calling the method ``.rm  r   zUnhandled tensor methodzTensor method `z` is not defined on z9 and does not have an explicit handler in TensorVariable.r   c              3   @   #    U  H  oR                  5       v   M     g 7fr   )r   )r   args     rZ   r   -TensorVariable.call_method.<locals>.<genexpr>  s     #DtMMOOts   )1r   r  r  r}  r  r  r\  r]  r    rJ  r   r   listr   r(   r   rW   rQ   rV   rU   r=   r   r9   rR   r   InternalTorchDynamoError)torch.distributed._functional_collectivesr  r   r   create_proxyr   r   SUPPORTABLEr   realize	TypeErrorr   r`   rp   r   r   rl   rT   rX   r0   r   r   any)rs   r   r   r   rw   r  r  r  r  rY  is_base_tensor_methodr  r  r   handler_methodr   r   realized_kwargsrh  er   
check_typer`   r   s                           rZ   r   TensorVariable.call_method.  sf    	@Xr""t/K/K/M'MB&tfAdV1TF!F8D657 >!=(a0QW	 '**46 +4 7 (E4&4:2E,FOO%{{*
:dkk;#GN -33Bd8ST*eTFT$Z$78& 	 8
474L M M--44U;;6>vmm''@@H  N. 		&&#[==?2Db  9+!$wz&!<>=&22	 ZFf$4G!$wz&!<>5&22		$TWTF+;<N>Dlln"Mnda1aiik>n"M'ETE_E!M  

,,00A#0#<D$// 	 z4((1&tfAdV1TF!F8D-dV3G&&' (-- 7)556 	+		&&
 }t}f5
 //1r5)&&#Dt#D D	
 k #N  7*4&$qaxH!##'&!,   		s<   O3 ,N> ?N8N> 8N> >
O0O++O03
P Pc                 .    U R                   " S/UQ70 UD6$ r  _method_size_striders   r   r   rw   s       rZ   method_sizeTensorVariable.method_size  s     ''@@@@r\   c                 .    U R                   " S/UQ70 UD6$ )Nrf   r  r  s       rZ   method_strideTensorVariable.method_stride  s     ''B4B6BBr\   r  c                    [        U5      nS[        [           S[        S[        4S jnUS:X  a  UO[        R
                  nUS:w  a  [        X5      nO*US:X  a"  U R                  5       (       a  U R                  nOS nUb#  Uc  U" U5      $ [        R
                  " XR   5      $ U R                  R                  R                  R                  S5      =nb}  Uc:  [        Xa5      " 5       n[        U5      (       d  U" [        S U 5       5      5      $  g [        Xa5      " U5      n[        U5      (       d  [        R
                  " [        U5      5      $ g )Nr   optionsrL   c           
      p    [        U  Vs/ s H  n[        R                  " U40 UD6PM     sn40 UD6$ s  snf r   )r;   r9   r   )r   r  ys      rZ   make_const_size_variableDTensorVariable._method_size_stride.<locals>.make_const_size_variable  s=    @AB1!((6g6BFM Bs   !3re   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   r   rs     rZ   r   5TensorVariable._method_size_stride.<locals>.<genexpr>   s     ,DVSVVV   )r-   r   r   r;   r9   r   rW   r  re   r`   rp   r   r   r   r   r   )rs   r   r  r  RetVariabler  fakefake_rs           rZ   r  "TensorVariable._method_size_stride  s:    3	 	# 	, 	 )-$<L<S<S 	 6>#AV^ 1 1		AA={"1~%'..qv66 JJOO((,,_==DJ{ ,.'// 'u,DV,D'DEE 0  !,S1'//+223v;??r\   c                 f   U R                  5       (       a*  [        R                  " U[        U R                  5      5      $ U R
                  R                  R                  R                  S5      =nb@  UR                  5       n[        U5      (       d   [        R                  " U[        U5      5      $ g r   )r  r7   r   r/   re   r`   rp   r   r   numelr   r   )rs   r   r  r  s       rZ   method_numelTensorVariable.method_numel  s    ??"((WTYY-?@@ JJOO((,,_==DJZZ\F#F++&,,RV==r\   c                 ^    U R                   b   [        R                  " XR                   5      $ g r   )rd   r7   r   r  s     rZ   
method_dimTensorVariable.method_dim  s$    99 "((YY77r\   c                 r    U R                   b*  [        R                  " XR                   R                  5      $ g r   )ra   r7   r   is_floating_pointr  s     rZ   method_is_floating_point'TensorVariable.method_is_floating_point  s,     ::!"((ZZ-I-IJJr\   c                 2   [         R                  (       a,  [        SSS/ [        R                  Q[        R
                  QS9  U R                  R                  R                  R                  S5      =nb$  [        R                  " XR                  5       5      $ g )Nz0Encountered tensor.is_inference() during tracingrI  z&tensor.is_inference() is not supportedr*  r   )r   "fake_tensor_disable_inference_moder    r   FUNDAMENTALINFERENCE_MODEr`   rp   r   r   r7   r   is_inference)rs   r   r  s      rZ   method_is_inference"TensorVariable.method_is_inference"  s     44JD&22&55	 JJOO((,,_==DJ"((->->-@AAr\   c                 r    U R                   b*  [        R                  " XR                   R                  5      $ g r   )ra   r7   r   
is_complexr  s     rZ   method_is_complex TensorVariable.method_is_complex3  s*    ::!"((ZZ-B-BCCr\   r   c                 T   Ub  UR                  5       O[        R                  nU R                  b#  [        R
                  " XU R                  ;   5      $ U R                  R                  R                  R                  S5      =nb#  [        R
                  " XR                  US95      $ g )Nr   r   )
r  rQ   contiguous_formatri   r7   r   r`   rp   r   r   )rs   r   r   memory_format_constr  s        rZ   method_is_contiguous#TensorVariable.method_is_contiguous8  s    
 ( ,,.(( 	
 )"((DDVDV-VWWjjoo**..??dL"((&&5H&I  r\   Fnon_blockingc           
        ^  Uc  T R                   b  [        T R                  [        R                  5      (       a  [	        U 4S j[
        R                  " 5        5       5      nT R                  R                  S:X  a$  [        R                  " USUR                   35      $ [        R                  " UST R                  R                   SUR                   35      $ Ub  [        [        UR                  5       5      5      S:X  at  UR                  5       n[        R                  " U[        U5      5      nSSKJn  U(       a  SU0UEnU" UUR                  R                   " S	S
/[#        T U/U5      Q76 5      $ g )Nc              3   P   >#    U  H  u  pTR                   U;   d  M  Uv   M     g 7fr   )ra   )r   r   r   rs   s      rZ   r   -TensorVariable.method_type.<locals>.<genexpr>U  s#      9daTZZ1_9s   &	&cpuztorch..ztorch.tensortyper4   r   r  r   r   )ra   rU   rb   rQ   nextr3   r   r   r7   r   rX   r)   r  r   r   r   r  r0   )	rs   r   ra   r  rw   
tensortypetensor_typetensor_type_constr   s	   `        rZ   method_typeTensorVariable.method_typeI  sZ    M

&4;;55 1779 J {{5(&,,R6*:M:M9N1OPP&,,&!1!1 2!J4G4G3HI  D113459KK
  224K / 5 5b#k:J K.(,A&A 		&&! '.?'@&I  r\   clsrD   c                 b   [        U[        5      (       aw  UR                  (       af  SSKJn  UR                  5       nUR                  " XXBR                  5      nUR                  R                  R                  [        5       U[        S9  U$ [        SU  SU S3SS/[        R                  QS	9  g )
Nr4   rC   mutation_type_clszHArgument of `as_subclass` must be a non-dispatcher-style tensor subclassz.as_subclass(r  Currently not supportedz:Avoid this call or move it outside `torch.compile` regioner*  )rU   TensorSubclassVariabler   r}  rD   r  r  r   r4  
_track_objobjectr5   r    r   r  )rs   r   r
  rD   py_clsrK  s         rZ   method_as_subclass!TensorVariable.method_as_subclassw  s     c122szzD++-F.>>&**C II""--#1E .  J^fM#a01L"..		
r\   c                     [        U R                  [        R                  5      (       aH  U R                  R                  S:w  a  U R                  R                  OSn[
        R                  " X5      $ g )Nr  )rU   rb   rQ   r   indexr7   r   )rs   r   r  s      rZ   method_get_device TensorVariable.method_get_device  sM    dkk5<<00)-)9)9U)BDKK%%E"((33r\   c                 V    [         R                  " XR                  R                  5      $ r   )r7   r   ra   itemsizer  s     rZ   method_element_size"TensorVariable.method_element_size  s    $$R)<)<==r\   )forcer  NumpyNdarrayVariablec                ,   [         R                  (       d  [        SSU  S3SS/S9  [        (       d  [        SSU  S3SS	/S9  U R                  [
        R                  :w  a  [        S
U R                   S35      eU(       aW  UR                  5       (       aB  U R                  US/ 0 5      nUR                  R                  SSUR                  5       40 5      nO)UR                  R                  " SS/[        X /0 5      Q76 n[        R                  X5      $ )Nz%Tensor.numpy() with trace_numpy=Falser  z numpyzW`Tensor.numpy()` was called, but the `trace_numpy` configuration was manually disabled.zUSet `torch._dynamo.config.trace_numpy = True` to allow Dynamo to trace through NumPy.r*  z&Tensor.numpy() without NumPy installedz_`Tensor.numpy()` was called, but the NumPy library is not available in the current environment.z5Ensure NumPy is installed in your Python environment.zcan't convert z4 layout tensor to numpy. Use Tensor.to_dense() firstdetachr   r  view_as)r   trace_numpyr    nprc   rQ   stridedr  r  r   r   r  r   r0   r  r   )rs   r   r  tr`   s        rZ   method_numpyTensorVariable.method_numpy  s    !!?&tfF375	 r@&tfF3? L ;;%--' -ab  U--//  Xr26AII**=%!**,RTUE II**y+<d\2+NE $**255r\   c                 R  ^ ^^^ SSK Jm  S[        R                  S[        R                  R
                  S[        [        [           -  4U UUU4S jjmT R                  5       R                  R                  S   nT" UT R                  5       5      n[        R                  " TU5      $ )Nr4   r   tensor	sub_proxyrL   c           	      4  > S[         S[        R                  R                  S[        4UU	4S jjnU R
                  [        R                  [        R                  [        R                  [        R                  4;  a  [        SST S3SS	/S
9  U R                  5       S:X  a  U" X5      $ U R                  5       S:X  a)  [        U 5       VVs/ s H  u  p4U" XAU   5      PM     snn$ [        U 5       VVs/ s H  u  p5T" XQU   S9PM     snn$ s  snnf s  snnf )Nr  r+  rL   c                 2   > T" TUR                  5       5      $ r   )r   )r  r+  r   r   s     rZ   wrap:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrap  s    $NN$ r\   z'Tensor.tolist() with non-integer tensorr  z to_listzLDynamo currently does not support tracing `tolist()` on non-integer tensors.z[Ensure the input tensor to `tolist()` is an integer type (e.g., int8, int16, int32, int64).r*  r   r4   )r+  )r   rQ   fxProxyr7   ra   int8int16int32int64r    r  	enumerate)
r*  r+  r.  r  val
sub_tensorrs   tolistr   r   s
         rZ   r9  ,TensorVariable.method_tolist.<locals>.tolist  s     ?   ||

	$  E*4&9!9B	 zz|q F..zz|q >G>OP>OFASA,/>OPP &/v%6%6MA zq\:%6  Qs   D5Dr   )r   r   rQ   rV   r0  r1  r   r  r   rp   r   r7   r   )rs   r   r*  outr9  r   s   ``  @@rZ   method_tolistTensorVariable.method_tolist  s~    *!	5<< !	EHHNN !	sTRUY !	 !	F %%**?;VT]]_-$$R--r\   	vars_itererror_on_non_leafc                    SSK Jn  / n[        5       nU H  n[        U[        5      (       d  M  UR
                  (       d  M-  UR                  (       a  U(       a  [        SSU 3SS/S9  MW  MY  U(       a>  UR                   (       a  [        UR                   U5      (       a  [        SS	U 3S
S/S9  M  UR                  R                  nXu;  d  M  UR                  U5        UR                  U5        M     U$ )a  
Collect unique leaf tensors from vars_iter for backward.

Only collects leaf tensors (no grad_fn). Non-leaf tensors are skipped
(or error if error_on_non_leaf=True) because when auto-detecting inputs,
we must not stop gradients at non-leafs - they are intermediates, and the
real leaf tensors (parameters) are further up the autograd graph.

Deduplicates by proxy.node.
Returns list of unique leaf tensor variables.
r   )SyntheticLocalSourcezbackward() with non-leaf tensorz-backward(inputs=[...]) with non-leaf tensor: zBbackward(inputs=[...]) with non-leaf tensors is not yet supported.zIOnly pass leaf tensors (parameters, graph inputs) to backward(inputs=...)r*  z'backward() with in-graph created tensorz5backward(inputs=[...]) with in-graph created tensor: z^backward(inputs=[...]) with tensors created inside the compiled function is not yet supported.zSOnly pass tensors that are inputs to the compiled function or captured from outside)r   rA  setrU   r^   rg   rv   r    r`   rp   addappend)rs   r>  r?  rA  rh  
seen_nodesrK  rp   s           rZ   _collect_backward_inputs'TensorVariable._collect_backward_inputs  s     	2),
C#~..33D3D3D ??(%$E&STWSX$Y(l k#	 ) '

j=Q&R&R! I"WX[W\ ]%B r 99>>D-"t,c*O R r\   gradientretain_graphcreate_graphinputsc                 X   [         R                  (       d  [        SSU  SU SU SU SU 3
SS/S9  U R                  (       d  U R                  (       d  [        S5      eUS	L nU(       aq  [        UR                  R                  UR                  R                  R                  5       5      nU R                  U5      nU(       d  [        R                  " S	5      $ OR[        U[        R                   5      (       a  UR"                  OU/n	U R                  U	S
S9nU(       d  [        SSSS/S9  S[$        R&                  " X5      0n
Ub  X:S'   Ub  XJS'   [$        R&                  " X5      nX/nUb  UR)                  U5        [$        R&                  " U[*        R,                  R.                  5      nUR1                  XU
5      nSSKJn  UR                  USS
S9nUR7                  U5        [$        R&                  " U[*        R8                  R:                  R<                  R>                  5      nUc   e[A        U5       HE  u  nnURC                  US[$        R&                  " UU5      /0 5      nUR1                  UUU/0 5        MG     URE                  U5        [        R                  " S	5      $ )aD  
Trace tensor.backward() by rewriting as autograd.grad() + accumulate_grad.

Implementation:
1. Collect leaf tensors to compute gradients for
2. Call autograd.grad(loss, inputs) to compute gradients
3. For each leaf tensor, call accumulate_grad to update .grad

Non-leaf tensor handling:
- Auto-detect (inputs=None): Non-leaf tensors are silently skipped.
  This matches eager where only leaves get .grad.
- User-provided (inputs=[...]): Errors if any non-leaf tensor is found.
  While eager backward(inputs=[non_leaf]) works, Dynamo cannot trace it
  because the accumulate_grad polyfill accesses .grad, and Dynamo creates
  a generic GetAttrVariable for .grad on non-leaf tensors (instead of a
  TensorVariable), which cannot be used in tensor operations.

TODO: Support non-leaf tensors by fixing .grad access on non-leaf in Dynamo.
z"Unsupported Tensor.backward() callr  z
 backward rP  z]Dynamo currently does not support tracing `Tensor.backward()` when trace_autograd_ops is off.z)Set torch._dynamo.trace_autograd_ops=Truer*  z8tensor does not require grad and does not have a grad_fnNT)r?  zbackward() with empty inputsz8backward(inputs=[...]) resulted in no valid leaf tensorsz?backward(inputs=[...]) requires at least one valid leaf tensor.zOEnsure at least one tensor in inputs is a leaf (requires_grad=True, no grad_fn)allow_unusedrI  rJ  r4   )GradModeVariableF)initializedr  )#r   trace_autograd_opsr    rg   rv   r   r   r   leaf_var_creation_orderinput_source_to_varvaluesrF  r9   r   rU   r   BaseListVariabler   r7   r   rD  rQ   autogradr3  r=  ctx_managerrN  enterra  inductoraccumulate_grad_defaultr6  r   exit)rs   r   rH  rI  rJ  rK  auto_detectall_vars
input_varsprovided_varsgrad_kwargs
inputs_var	grad_argsautograd_grad_fn	grads_varrN  grad_mode_varaccumulate_grad_fnidx	input_vargrad_is                        rZ   method_backwardTensorVariable.method_backward*  s   6 ((<&tfJxj,qQ]P^^_`f_gh{BC	 !!$*:*:#J  n 		11		--446H 66x@J (..t44	  fi&@&@AA X 
 66 7 J  :V ai	 &'<'<R'MN#*6'#*6'$**2:
&	X&*00U^^5H5HI$222+N	 	2(//Et/LB,22		""33;;
 %%%'
3NC**MO$9$9"c$B#CRF ,,R)V1DbI	 4 	2&&t,,r\   DataPtrVariablec                     [        U 5      $ r   )rl  r  s       rZ   method_data_ptrTensorVariable.method_data_ptr  s     t$$r\   streamc                 Z   SSK Jn  [        X#5      (       d&  [        SUR	                  5       R
                   35      eUR                  R                  S[        R                  R                   R                  U R                  5       UR                  40 5        [        R                  " S 5      $ )Nr4   )StreamVariablez/record_stream() expects a Stream argument, got r=  )streamsrr  rU   RuntimeErrorr   rX   r   r  rQ   ra  record_streamr   user_object_indexr9   r   )rs   r   rp  rr  s       rZ   method_record_stream#TensorVariable.method_record_stream  s    
 	,&11A&BTBTBVB_B_A`a  			II++]]_f667		
  &&t,,r\   c           	          UR                   (       d;  [        R                  (       d&  U R                  5         [	        SSU  SU SU 3SS/S9  g )Nz@Unsupported Tensor.item() call with capture_scalar_outputs=Falser  z item rP  zYDynamo does not support tracing `Tensor.item()` with config.capture_scalar_outputs=False.zSet `torch._dynamo.config.capture_scalar_outputs = True` or `export TORCHDYNAMO_CAPTURE_SCALAR_OUTPUTS=1` to include these operations in the captured graph.r*  )	one_graphr   capture_scalar_outputs_warn_capture_scalar_outputsr    r  s       rZ   method_itemTensorVariable.method_item  sU     ||F$A$A--/Z&tfF4&&B<I
 r\   c           	      J   U R                   b  U R                   R                  (       dk  U R                   R                  (       dP  U R                  US/ 0 5      nSSKJn  U" UUR                  R                  S[        UR                  5       40 5      S9$ [        [        US/S9  g )Nr   r4   r   r=  rU  zEonly integer tensors of a single element can be converted to an indexr   )ra   r  r  r   r   r   r   r  r   r   r   r  rs   r   r   r   s       rZ   nb_index_implTensorVariable.nb_index_impl  s     ::!

,,TZZ5J5J##BB7D. ii,,#]]_&	  	!W	
r\   c           	         U R                   b+  U R                   R                  (       a  [        [        US/S9  U R	                  US/ 0 5      nSSKJn  U" UUR                  R                  S[        UR                  5       40 5      S9$ )Nz:value cannot be converted to type int64_t without overflowr   r   r4   r   r=  rU  )ra   r  r   rt  r   r   r   r   r  r   r   r  s       rZ   nb_int_implTensorVariable.nb_int_impl  s     ::!djj&;&;$RS FB3*))(("	
 	
r\   c                 $    U R                  U5      $ r   r  r  s     rZ   method___int__TensorVariable.method___int__
  s    ##r\   c           	         U R                   b+  U R                   R                  (       a  [        [        US/S9  U R	                  US/ 0 5      nSSKJn  U" UUR                  R                  S[        UR                  5       40 5      S9$ )Nz9value cannot be converted to type double without overflowr   r   r4   r   r=  rU  )ra   r  r   rt  r   r   r   r   r  r   r   r  s       rZ   nb_float_implTensorVariable.nb_float_impl  s     ::!djj&;&;$QR
 FB3*))(("	
 	
r\   c                 $    U R                  U5      $ r   r  r  s     rZ   method___float__TensorVariable.method___float__&  s    !!"%%r\   c           	      0   SSK Jn  [        US   [        5      (       a,  [        R
                  [        R                  " US5      US   /p%O[        R                  nUR                  R                  " SU/[        U /[        U5      -   U5      Q76 nU" X5      $ )Nr4   r   r   r=  )r   r   rU   r   rQ   selectr7   r   operatorgetitemr   r  r0   r  )rs   r   r   rw   r   ri  r`   s          rZ   r  !TensorVariable.method___getitem__)  s     	+d1g//
 #))"a0G  !!B		&&
 vT
2F;
 R''r\   c                      [         R                  R                  R                  5       n SR	                  [
        R                  " U 5      5      n[        R                  [        R                  " S5      U5        g )NrI  a                      Graph break from `Tensor.item()`, consider setting:
                        torch._dynamo.config.capture_scalar_outputs = True
                    or:
                        env TORCHDYNAMO_CAPTURE_SCALAR_OUTPUTS=1
                    to include these operations in the captured graph.

                    Graph break: from user code at:
                    %s
                )rQ   _guardsTracingContextextract_stackjoin	tracebackformat_listlogwarningtextwrapdedent)
user_stackuser_stack_formatteds     rZ   r|  +TensorVariable._warn_capture_scalar_outputsG  sX     ]]11??A
!wwy'<'<Z'HIOO	 !	
r\   c                 $    U R                  U5      $ r   )	sq_lengthr  s     rZ   method___len__TensorVariable.method___len__\  s    ~~b!!r\   c                 V    U R                  US[        R                  " US5      /0 5      $ )z9Sequence length for tensors (size along first dimension).re   r   )r   r7   r   r  s     rZ   r  TensorVariable.sq_length_  s)    F_-B-B2q-I,JBOOr\   c                 D    [        U R                  U5      [        5       S9$ )Nmutation_type)r:   r  r6   r  s     rZ   method___iter__TensorVariable.method___iter__c  s#    #$$R(8H8J
 	
r\   rY   tensor1tensor2c                B   Ub  [         R                  (       a  SSKJn  [        R
                  " [        R                  5      n[        R
                  " UR                  5      nUR                  XU/0 5      nUR                  XX@/0 5      n	U R                  USU	/0 5      $ g Nr   )inductor_primscopy_)r   enable_dynamo_decompositionstorch._inductorr  r   r:  rQ   mulfmar=  r   )
rs   r   r  r  rK   r  mul_varfma_varr/   rh  s
             rZ   method_addcmul_TensorVariable.method_addcmul_h  s     !D!D6<<UYYGG<<^=O=OPG++B'0BBGG**2/ErJF##B&2>>r\   c                 H   UR                   R                  " S[        R                  /[	        XU/0 5      Q76 nU R                  5       n[        R                  R                  R                  5          UR                  (       a?  UR                  R                  (       a$  UR                  R                  R                  5       O	[        5          [        UR                  USS9  S S S 5        S S S 5        U R!                  XUR#                  5       5        [$        R&                  (       d  [$        R(                  (       a0  UR                   R*                  R-                  UR                  S5        [.        R0                  " S 5      $ ! , (       d  f       N= f! , (       d  f       N= f)Nr=  F)allow_non_graph_faker   )r   r  r  setitemr0   r   rQ   rR   rS   +_disable_saved_tensors_hooks_during_tracingr   	shape_envignore_fresh_unbacked_symbolsr   r+   rp   r   r   r   use_graph_deduplicationtrack_nodes_for_deduplicationregion_trackeradd_node_mutationr9   r   )rs   r   r  rK   r`   r   s         rZ   method___setitem__!TensorVariable.method___setitem__z  s"    		&&
 5126
 //1 MMKKM|| 6 6 LL""@@B 5::rF	 N 	&&r5??;LM))V-Q-QII$$66uzz1E&&t,,  NMs%   1AFF"F
F	F
F!c           	      .    [        SSU  SU SU 3S/ S9  g )Nz!Unsupported Tensor.resize_() callr  z	 resize_ rP  z=Dynamo currently does not support tracing `Tensor.resize_()`.r*  r/  r  s       rZ   method_resize_TensorVariable.method_resize_  s+     	7"4&	$qAW		
r\   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz$Unsupported Tensor.resize_as_() callr  z resize_as_ rP  z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r*  r/  r  s       rZ   method_resize_as_ TensorVariable.method_resize_as_  s+     	:"4&TF!F8DZ		
r\   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz(Unsupported Tensor.sparse_resize_() callr  z sparse_resize_ rP  zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r*  r/  r  s       rZ   method_sparse_resize_$TensorVariable.method_sparse_resize_  s,     	>"4&(8axH^		
r\   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz2Unsupported Tensor.sparse_resize_and_clear_() callr  z sparse_resize_and_clear_ rP  zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r*  r/  r  s       rZ   method_sparse_resize_and_clear_.TensorVariable.method_sparse_resize_and_clear_  s,     	H"4&(B4&&Rh		
r\   c           	      l    [        U5      S:  a%  [        SSU  SU SU 3S/ [        R                  QS9  g )Nr4   zUnsupported Tensor.set_() callr  z set_ rP  zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r*  )r~  r    r   r  r  s       rZ   method_set_TensorVariable.method_set_  sL     t9q= 8&tfF4&&BA6)556 r\   )alphaotherr  c                    Uby  [        U[        5      (       ad  [        R                  (       aO  SSKJn  [        R                  " UR                  5      nUR                  XX0/0 5      nU R                  USU/0 5      $ g r  )rU   r^   r   r  r  r  r   r:  r  r=  r   )rs   r   r  r  r  r  rh  s          rZ   method_add_TensorVariable.method_add_  sl     5.11336<<^=O=OPG**2u/CRHF##B&2>>r\   c                >   Ub  [         R                  (       a  [        R                  " [        R
                  5      R                  XU/0 5      nSSKJn  [        R                  " UR                  5      nUR                  XX@/0 5      nU R                  USU/0 5      $ g r  )r   r  r   r:  rQ   divr=  r  r  r  r   )	rs   r   r  r  rK   rh  r  r  
fma_results	            rZ   method_addcdiv_TensorVariable.method_addcdiv_  s     !D!D;;EIIFTTg&F 7<<^=O=OPG ..rE3H"MJ##B*rBBr\   r  c                     [         R                  " [        R                  5      R	                  XU/0 5      n[         R                  " [        R
                  5      R	                  X/0 5      nUR                  US/ 0 5      $ )Nr   )r   r:  rQ   eqr=  r  r   )rs   r   r  rh  s       rZ   method___contains__"TensorVariable.method___contains__  sm     77AOOsR
 77		BPP"
 !!"fb"55r\   c                 0    U R                   " US/UQ70 UD6$ )Nregister_hook_method_register_hookr  s       rZ   method_register_hook#TensorVariable.method_register_hook  s!     ))"oOOOOr\   c                 0    U R                   " US/UQ70 UD6$ )N"register_post_accumulate_grad_hookr  r  s       rZ   )method_register_post_accumulate_grad_hook8TensorVariable.method_register_post_accumulate_grad_hook$  s-     ))4
7;
?E
 	
r\   hookc           	      D  ^^^^^ U R                   (       Gd1  [        R                  (       a  UR                  R	                  U5      u  mnS[
        R                  S[        R                  SS 4UU4S jjnSSKJ	n  U R                  5       nSUR                  R                  S'   U" UUR                  R                  S	UXt40 5      5      $ U R                  5       R                  n[        UR                  R!                  5       5      n	["        R$                  " [&        5      n
U
R)                  XU/0 5      nUR                  5       R                  n/ m[+        5       mS
[
        R,                  R.                  S[
        R,                  R.                  SS 4UUU4S jjmT" X5        UnT H  nUR1                  U5        UnM     U	 H  nUR3                  X5        M     [5        U[6        5      (       d   eUR                  5       U l        U R;                  U5        ["        R<                  " ["        R>                  RA                  5       S9$ ["        R<                  " ["        R>                  RA                  5       S9nUR                  RB                  RE                  XUT5        U$ )Nr*  bw_staterL   c           	      h   > [        U T5      nU" [        R                  " [        [        UTS95        g )N)ri  r  	hook_name)rW   r   r   r   r%   )r*  r  r  r  r   s      rZ   _register_hook_trampolineGTensorVariable._method_register_hook.<locals>._register_hook_trampoline<  s8     %,FD$9M!!)))<%-&/	  r\   r4   r   Thas_backward_hookr=  rp   stop_atc                   > U T;   d  XL a  g U R                    H6  n[        U[        R                  R                  5      (       d  M.  T" X!5        M8     U R
                  R                  5        H6  n[        U[        R                  R                  5      (       d  M.  T" X15        M8     TR                  U 5        TR                  U 5        g r   )	r   rU   rQ   r0  Noderw   rS  rC  rD  )rp   r  r  kwargcollect_depsnodes_to_movevisiteds       rZ   r  :TensorVariable._method_register_hook.<locals>.collect_deps  s    7?do99C!#uxx}}55$S2 % "[[//1E!%77$U4 2 D!$$T*r\   r  )#r   r   compiled_autograd_enabledr   add_backward_state_hookrQ   rV   BackwardStater   r   r   rp   r   r  r  userskeysr   AutogradFunctionVariabler$   
call_applyrB  r0  r  rD  replace_input_withrU   r^   r`   r   RemovableHandleVariablebaser6   r4  r  )rs   r   r   r  bw_state_proxyr  r   
self_proxytensor_nodeusers_to_replaceapply_hook_varrh  tensor_prime_nodeinsert_pointrp   userhandle_variabler  r  r  r  s     `              @@@@rZ   r  $TensorVariable._method_register_hook.  sD    {{{ !::,.II,M,Md,S)	> !LL 4E4S4S    " 3!]]_
<@
$$%89$II**'1#4	 P --/..K#K$5$5$:$:$<= '??@RSN#..r$<DF !' 1 6 6
 24M*-%G
+588== 
+588== 
+T 
+ 
+ *8 'L%##D)# & )''G ) fn5555*DJ ''+
 44'nn==?  $;;#..99;
 			,,T$Or\   c                 r   USLa  UR                  5       nU R                  5       R                  nUR                  S   nUR                  U:w  Ga9  U R
                  (       a  [        SSU  S3S/ S9  UR                  R                  (       a  [        SSU  S3S	S
S/S9  [        R                  R                  R                  5       n[        R                  R                  R                  S5         UR                  R                  S[        R                  R                  R                  S0 5        UR                  R!                  SSU R                  5       40 5        UR                  R                  S[        R                  R                  R                  U40 5        [        R                  R                  R                  U5        UR#                  U5        X l        U(       a  UR                  R$                  R'                  U 5        U R
                  (       dn  UR                  R(                  R+                  U 5      (       aD  UR                  R(                  R-                  U S[.        R0                  R3                  S 5      5        U $ ! [        R                  R                  R                  U5        f = f)NTr   z(Unsupported Tensor.requires_grad_() callr  z requires_grad_zaDynamo does not support changes to a Tensor's `requires_grad` through calling `requires_grad_()`.r*  z.requires_grad_() intermediate leaked as outputzAn intermediate tensor with requires_grad_() called on it (or a tensor derived from it) is returned from the compiled region. Graph breaking here to preserve partial acceleration.z8Call .detach() before returning if you only need values.zConsume the gradient inside the compiled function (call backward() and use .grad), or move requires_grad_() outside torch.compile.r=  Tr   requires_grad_r3  )r  r   rp   r   rg   r   r    speculation_loggraph_break_on_requires_grad_rQ   r   r   !get_inplace_requires_grad_allowed!set_inplace_requires_grad_allowedr   create_noder  r  rQ  rD  r4  is_attribute_mutation
store_attrr   r9   r   )rs   r   rg   rp   r   
prev_states         rZ   method_requires_grad_$TensorVariable.method_requires_grad_  s5    $)<<>M}}##		/2&&-7 {{F*4&@!J !!??L*4&@!$
 SJ0 ,,NNPJHHAA$GR		%%#HH''II	 		&&!$]]_&	 		%%#HH''IIM	 ##EEjQ((7!.		1188>
 {{ryy'='='S'S( ( II**55fi&@&@&G&G&M  ##EEjQs   0B.J +J6c                     SSK Jn  UR                  R                  SSU R	                  5       40 5      nU" X5        U R                  U5        U $ )Nr4   r   r   detach_)r   r   r   r  r   r   )rs   r   r   r`   s       rZ   method_detach_TensorVariable.method_detach_  sK    *		&&]]_	
 	b ##B'r\   c                 F    [        SSU  S3SS/[        R                  QS9  g )Nz'Unsupported Tensor.share_memory_() callr  z share_memory_zTDynamo does not support Tensor.share_memory_() which modifies tensor storage for IPCz7Move share_memory_() call outside the compiled region. r*  )r    r   r  rr   s    rZ   method_share_memory_#TensorVariable.method_share_memory_  s2    ="4&7nI"..		
r\   c                     [        U5      S:X  a  [        US   [        5      (       d&  [        U5      S:  a*  [        S U 5       5      (       a  U R	                  USX#5      $ g )Nr4   r   c              3      #    U  H:  nUR                  5       =(       a    [        UR                  5       [        5      v   M<     g 7fr   )r_  rU   r  r   )r   as     rZ   r   ,TensorVariable.method_new.<locals>.<genexpr>2  s8      A $$&R:a6J6J6Lc+RRs   AA	new_empty)r~  rU   r;   allr   r  s       rZ   
method_newTensorVariable.method_new(  s^     INz$q'<@@IN   
 ##BTBBr\   rs   c                    [        U5      S:w  a  g US   nUR                  S5      nUb9  UR                  5       (       d  g UR                  5       [        R
                  :w  a  g [        U5      nUR                  SS 5        UR                  SU R                  US5      5        UR                  SU R                  US5      5        [        R                  " [        R                  5      R                  UU/U5      $ )Nr4   r   rc   ra   rb   )r~  r   r_  r  rQ   r%  dictpop
setdefaultrj  r   r:  r*  r=  )rs   r   r   rw   data_argrc   
fwd_kwargss          rZ   method_new_tensor TensorVariable.method_new_tensor:  s     t9>7H%,,..((*emm;&\
x&gt'7'7G'DEh(8(8X(FG55ellCQQJ
 	
r\   c                 ~    [        X R                  5       R                  R                  S   R	                  5       5      $ r   )UntypedStorageVariabler   rp   r   untyped_storager  s     rZ   method_untyped_storage%TensorVariable.method_untyped_storageS  s4     &--/&&++O<LLN
 	
r\   c                 ~    U R                   (       d,  U R                  R                  R                  U5        SU l         g r   )rn   r`   rp   _rename)rs   r   s     rZ   set_name_hintTensorVariable.set_name_hintZ  s,      JJOO##D) $Dr\   c                 T    U R                  5       R                  R                  S   S L$ r   )r   rp   r   rr   s    rZ   is_python_hashable!TensorVariable.is_python_hashable`  s&     }}##((9EEr\   c                 b    [        U R                  5       R                  R                  S   5      $ r   )hashr   rp   r   rr   s    rZ   get_python_hashTensorVariable.get_python_hashf  s$    DMMO((--o>??r\   c                     [        U[        5      (       d  gU R                  5       R                  R                  S   nUR                  5       R                  R                  S   nX#L $ )NFr   )rU   r7   r   rp   r   )rs   r  r*  bs       rZ   is_python_equalTensorVariable.is_python_equali  sR    %11MMO  %%o6NN!!&&7vr\   )rn   ru   rl   rb   ra   rv   ri   rj   rh   rk   rc   rd   r`   rg   rf   r   )NF)F)NNNN)rL   Nr  )r   r@   rL   r^   )r   r@   rL   r9  )rX   
__module____qualname____firstlineno____doc__r7   _nonvar_fieldsrQ   rV   r,   r0  r1  ra   rb   rc   r   rO   r   r   r   r|   r   r   r   strr   r   r   r   r   staticmethodr1  r   r   r  r  r  r  r9   r  r  r  r  r"  r&  r	   r0  r7  r>  rA  rF  rM  rj  rr  rv  r   r  r  r  r  propertyre   r]  r^  r  r   r  r  r  r  method_nelementr  method_ndimensionr  r  r  r  r  r  r  r  r'  r<  r   rF  rj  rn  rw  r}  r  r  r  r  r  r  r   cacher|  r  r  r:   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r&  r.  r6  r;  r?  rB  rF  r  rJ  __static_attributes____classcell__r~   s   @rZ   r^   r^      s   G 	  
	'	'!N&B B. )-)-%)$(#&/xx~~&/ {{	&/
 &/ &/ &/ &/ &/ &/ &/ &/ &/ S#X%&/ c3h$&&/  d{!&/" Tk#&/$ %&/& 
'&/ &/R FJ ) 7;d{ 	 E3: E
A#A d
A 	A
 
A*;C ;%((.. T 4 @3 @ @ /%,, /4S> / /bXB)XB14XB	XBt7#: 7 7$; RV@V 
%< SWAW 
%< SWAW 
)	D	 8$; 8 8)	D	 )	D	 )	D	 )	D	 
*A 
h 
#: QU?U (#: ( (
;);	D	 ;
'> 
? 
2)2142	2>Y5 YS Y_ Yv#31 #3o #3J*A d  JN9
)9
2:3-$2F9
	o	9
v;#; ,;  	;
 '; c?23; 
;&D & eCHo  Nc N
T#Y 

!0#!0 !0 
	!0Fa#a a '	a
 -a 
aFA)A25AADA	4	A
C)C25CADC	4	C ,0**!Dj*	4	*X	6 	?T;Q 	 #O4 49O 
 #)	D	 )	D	 "$; @PSW@W  TX):ID:P	D	 ( !"	,#, Tz, 	,
 , 
4	,\
)
0?
	'
2$; RV@V >&= >/ > OT(6)(65Dt5K(6	(6T(. 7 (.O (.V OT;!/2;GK;	o		%;@ ,0/3/3)-s-#s- "D(s- &,	s-
 &,s-  $&s- 
4	s-j%#% % "	%
 
%-#-  - 
	-&#  "	
 
,
#
 

<
#
 

8$!8 $_ $
#
 

2&#: & &(#( ( "	(
 
(< __
  
&"!8 "_ "P3 P P
"9 
>R 
 !#  	 Tz 
t$-#- - 	-
 
-B
#
 
 "	

 


#
 
 "	

 


#
 
 "	

 


#
 
 "	

 

#  "	
 
6 )-# 
 % 
4	6 )-# " "	 % 
4	&6)60?6	6P#P P "	P
 
P
#
 
 "	

 

H)H14H<KH	HV TXU)U:>:PU	Un	
h 	
#  "	
 
4	$

#
 
 "	

 
4	
2
)
	!
# $ FD F@ @V   r\   r^   c                     ^  \ rS rSrSrSS1\R                  krS\4S jr\	 S%SS	S\
S\
S-  S
\
SS4
S jj5       rS\
S\
S\
SS4U 4S jjrS\4S jrS\4S jrS\
4S jrSS	S\4S jrSS	S\
S\4S jr S%S\S   S\\-  \-  4S jjrSSS\S\\   S\\\4   S\4
S jrSSS\4S jrSSS\
S\
S\4S jrSSS\4S jrSSS\
S\
S\4S jrS\4S  jr S\4S! jr!S"\"S\4S# jr#S$r$U =r%$ )&r   iq  z
Represents a symbolic scalar, either int, float or bool.  This is most commonly used to
handle symbolic size computation, e.g., tensor.size(0), but it is also used to
handle logic like float_tensor.item() or unspecialized float inputs.
r`   r   rL   c                 ,    [        U R                  5      $ r   )r   r   rr   s    rZ   r   SymNodeVariable.debug_repr~  s    DLL!!r\   Nr   rA   r  r7   c                 D   Uc  [        UR                  U5      nSUR                  R                  ;   a  UR                  R                  S   U:X  d   e[        UR                  U5        [	        U[
        R                  [        [        45      (       aB  [	        U[
        R                  5      (       a  [        U5      OUn[        R                  " X5      $ [        X#40 UD6nUR                  R                  S:w  a%  UR                  R                  R                  U5        U$ )Nr   ry   )r+   rp   r   r2   rU   sympyIntegerr   rO   r7   r   r   r}   r   current_tracerrecord_proxyable_vt)r
  r   r`   r   r  r;  s         rZ   r   SymNodeVariable.create  s     ?$UZZ4Gejjoo-::???3w>>>%**g.gsD9::&0%--&H&Hc'lgG"((55e88::==M)II$$88=
r\   rw   c                 L   > [         TU ]  " S0 UD6  Xl        X l        S U l        g Nrz   )r{   r|   r`   r   _tensor_var)rs   r`   r   rw   r~   s       rZ   r|   SymNodeVariable.__init__  s%    "6"
26r\   c                     [        U R                  [        5      (       a   U R                  R                  R                  $ [        U R                  5      $ r   )rU   r   r   rp   pytyper   rr   s    rZ   r   SymNodeVariable.python_type  s8    dllH--<<$$+++%%r\   c                     gr   rz   rr   s    rZ   is_symnode_likeSymNodeVariable.is_symnode_like  r   r\   c                     U R                   $ r   r   rr   s    rZ   r   SymNodeVariable.as_proxy  r   r\   c                    [        U R                  [        R                  5      (       a  U $ [        U R                  [        R                  [        R
                  45      (       d   e[        R                  XR                  5       S:g  5      $ ru  )	rU   r   rQ   r   SymIntSymFloatr   r   r   r  s     rZ   r   SymNodeVariable.bool_impl  s^     dllEMM22K$,,u~~(FGGGG%%b--/Q*>??r\   ra   c           	          U R                   cQ  [        R                  " U[        R                  5      R                  X/S[        R                  " X5      05      U l         U R                   $ )Nra   )re  r7   r   rQ   scalar_tensorr=  )rs   r   ra   s      rZ   	as_tensorSymNodeVariable.as_tensor  s[    #.44E'' mB/2G2G2R(ST  r\   output_graphr?   c                     [        U R                  5      $ ! [         a^  n[        R                  R
                  R                  R                  (       a  e [        [        R                  S[        U5       3SS9eS nAff = f)Nz5Consider annotating your code using torch._check*(). constrain_as_size_example)	case_name)r   r   r   rQ   r0  experimental_configno_data_dependent_graph_breakr"   r#   ANTI_PATTERNrQ  )rs   rw  r  s      rZ   r  SymNodeVariable.evaluate_expr  si    
	--* 	xx$$,,JJ**GAxP5 		s    
A?AA::A?r@   r   r   c           
      r    SSK Jn  U" UUR                  R                  " SU/[	        U /UQU5      Q76 5      $ )Nr4   r   r   )r   r   r   r  r0   )rs   r   r   r   rw   r   s         rZ   r   SymNodeVariable.call_method  sF     	+II"" #D=4=&9
 	
r\   c           	      z    SSK Jn  U" UUR                  R                  S[        U R                  5       40 5      S9$ Nr4   r   r=  rU  )r   r   r   r  r   r   rs   r   r   s      rZ   r  SymNodeVariable.nb_int_impl  s>     	+))(("	
 	
r\   c                 $    U R                  U5      $ r   r  r  s       rZ   r  SymNodeVariable.method___int__  s     ##r\   c           	      z    SSK Jn  U" UUR                  R                  S[        U R                  5       40 5      S9$ r  )r   r   r   r  r   r   r  s      rZ   r  SymNodeVariable.nb_float_impl  s>    
 	+))(("	
 	
r\   c                 $    U R                  U5      $ r   r  r  s       rZ   r   SymNodeVariable.method___float__	  s     !!"%%r\   c                     gr   rz   rr   s    rZ   rB  "SymNodeVariable.is_python_hashable	  r   r\   c                 4    [        U R                  5       5      $ r   )rE  r  rr   s    rZ   rF  SymNodeVariable.get_python_hash	  s     D&&())r\   r  c                     [        U[        5      (       a!  U R                  5       UR                  5       :H  $ [        U[        5      =(       a!    U R                  5       UR	                  5       :H  $ r   )rU   r   r  r7   r  )rs   r  s     rZ   rJ  SymNodeVariable.is_python_equal	  s]    e_--%%'5+>+>+@@@ uo. C""$(@(@(BB	
r\   )re  r`   r   r   )&rX   rL  rM  rN  rO  r7   rP  rQ  r   classmethodr   r   r|   r   r   rO   rk  r   r   r^   ru  r
   r   floatr  r   r1  r   r  r  r  r  rB  rF  r  rJ  rW  rX  rY  s   @rZ   r   r   q  s    	 
	'	'N"C " 
 #	'  t	
  
 ,7c 7C 73 74 7&T & # 
@'
@ 

@ 7       7;$]3	e	
#
 
 '	

 S/)*
 

$
#
 

&$)$25$AD$	$

#
 

"&)&25&AD&	&
D * *

V 
 
 
r\   r   c                     ^  \ rS rSrSr\SSS\R                  R                  S\	SS 4S j5       r
SSS	\S\4S
 jr\S	\S\\   S\\\4   S\\\   \\\4   4   4S j5       rSSS	\S\\   S\\\4   S\4
U 4S jjrS\4S jrSrU =r$ )r  i	  zq
Represents a np.ndarray, but backed by torch Tensor via torch._numpy.ndarray.
Use this for Tensor.numpy() call.
r   r@   r`   r  rL   c                 .    SSK Jn  U" S[        U US.UD6$ )Nr4   rz  r|  rz   )r   r{  r  )r   r`   r  r{  s       rZ   r   NumpyNdarrayVariable.create%	  s,     	/  
+
 	
 	
r\   r   c                 d  ^ ^^^	^
 SSK Jm	  SSKJm
  S nT R	                  5       R
                  R                  S   n[        R                  " U5      nS[        4UU	U UU
4S jjnTS;   aE  TR                  R                  S	T	T R	                  5       T40 5      n[        R                  TU5      nOTS
;   a!  [        R                  " T[        UT5      5      $ TS;   aJ  [!        [        UT5      =n5      (       d'  [        R                  " T[#        S U 5       5      5      $ U" 5       $ TS:X  aC  [!        UR$                  =n5      (       d   [        R                  " T['        U5      5      $ U" 5       $ TS;   a  [)        SST  ST 3ST S3/ S9  OTS:X  a  [)        SST  ST 3ST S3/ S9  Uc  [*        eU$ )Nr   )numpy_attr_wrapperr4   r   r   rL   c            	      n   > T" TTR                   R                  STTR                  5       T 40 5      5      $ )Nr=  )r   r  r   )r   r  rs   r   r   s   rZ   insert_into_graph;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph?	  s;     		&&#%7$--/49PRT r\   )Trealimagflatr=  )rd   r  )shaperf   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r  r  s     rZ   r   3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>a	  s     6Iq!s1vvqr  re   )r	  flagsra   z$Unsupported ndarray attribute accessr)  rP  z3Dynamo currently does not support tracing `ndarray.r  r*  __version__z&Unsupported ndarray.__version__ access)rS   r  r   r   r   rp   r   tnpndarrayr7   r   r  r  r   r   rW   r   r   re   r   r    r   )rs   r   r   rh  r   example_ndarrayr  r`   r  r  r   s   ```      @@rZ   rj   NumpyNdarrayVariable.var_getattr2	  s   
 	/*,,11/B++m4	? 	 	 00II**"$'	E *00U;F ))"((W_d-KLL((#$)G$GAHH&,,R6Iq6I1IJJ$&&V^#)=)=$=A>>&,,RQ88$&&//>&tfAdV4QRVQWWYZ	 ]"@&tfAdV4QRVQWWYZ	 >%%r\   r   rw   c                     U S:X  a9  SSS.nUR                  5        VVs0 s H  u  pEUR                  XD5      U_M     nnnX4$ s  snnf )Nclipminmax)a_mina_max)r   r   )r   r   rw   kwargs_renamer   r   s         rZ   
patch_argsNumpyNdarrayVariable.patch_argsy	  sO     6>&+e<M=C\\^L^TQm''-q0^FL| Ms   Ac                   > SSK Jn  SSKJn  U R	                  X#U5      u  p4US:X  a  SSKJn  S nSU;   a  US   nO[        U5      S:  a  US   nUS L=(       a    UR                  S	5      n	[        X5      =(       a    UR                  [        L n
U	(       d  U
(       a%  U" S
SU  SU SU SU 3S/ [        R                  QS9  US;   a  [        TU ]=  XX45      $ US;   a  U" SSU  SU SU SU 3SU S3/ S9  UR                   R"                  " SU" U5      /[%        U /['        U5      -   U5      Q76 n[(        R+                  X5      $ )Nr   r/  )numpy_method_wrapperastyper4   )BuiltinVariablera   r   Ozndarray.astype(object)r  rP  z`ndarray.astype('O')` or `ndarray.astype(object)` is not supported by torch.compile, as there is no equivalent to object type in torch.Tensor. This will be executed eagerly.r*  )__len__re   r9  __iter__)tostringtobytes__delattr__zUnsupported ndarray method callz	`ndarray.z&()` is not modelled in `torch._numpy`.r=  )r   r    rS   r  r  builtinr  r~  is_constant_matchrU   ri  r  r   r  r{   r   r   r  r0   r  r  r   )rs   r   r   r   rw   r    r  r  	dtype_argis_object_stris_object_typer`   r~   s               rZ   r    NumpyNdarrayVariable.call_method	  sy    	(0t6:80I& "7O	TQ G	%T1Vi6Q6QRU6VM96Q9<<6;Q  4*4&$qaxH9 ;-99:	 <<7&r>>999&tfAdV1TF!F8D'v-ST	 		&& &
 vT
2F;

 $**255r\   c                 <    [         b  [         R                  $ [        $ r   )r$  r  r   rr   s    rZ   r    NumpyNdarrayVariable.python_type	  s    >::Or\   rz   )rX   rL  rM  rN  rO  rR  rQ   r0  r1  r   r   rQ  r7   rj  r   r1  r   r  r   r   r   rW  rX  rY  s   @rZ   r  r  	  s   
 

#

,1HHNN

GJ

	

 

E5 ES E_ EN !/2<@oAU<V	x($sO/C*DD	E 26#26 26 '	26
 S/)*26 
26hT  r\   r  c                      ^  \ rS rSrSrSS1\R                  krSSS.S\R                  R                  S\
\-  S-  S\S	\S
S4
U 4S jjjr\ SS\S\
\-  S-  S\S
S 4S jj5       rSrU =r$ )UnspecializedPythonVariablei	  zG
This is a 1-element tensor represents unspecialized python float/int.
	raw_valueneed_unwrapNTr  r  r`   rw   rL   c                @   > [         TU ]  " U40 UD6  X l        X0l        g r   )r{   r|   r  r  )rs   r`   r  r  rw   r~   s        rZ   r|   $UnspecializedPythonVariable.__init__	  s"     	)&)"&r\   tensor_variablec                 H    [        S0 [        UR                  5      DUUS.D6$ )Nr  rz   )r  r1  __dict__)r
  r  r  r  s       rZ   from_tensor_variable0UnspecializedPythonVariable.from_tensor_variable	  s/     + 
?++,
#
 	
r\   )r  r  r  )rX   rL  rM  rN  rO  r^   rP  rQ   r0  r1  r  r   rO   r   r|   r  r  rW  rX  rY  s   @rZ   r  r  	  s    
 	 
	&	&N )- 
'xx~~
' 3;%	
'
 
' 
' 

' 
' 
 !	
'
 3;%
 	

 
'
 
r\   r  c                      ^  \ rS rSrSrS1\R                  krS\R                  R                  S\
SS4U 4S jjr\S	\SS 4S
 j5       rSrU =r$ )FakeItemVariablei	  zAn unspecialized python variable which prevents access to the underlying raw value.
This is needed if item is called on a FakeTensor.r  r`   rw   rL   Nc                 X   > UR                  SS5      n[        TU ]  " U40 UD6  X0l        g )Nr  F)r2  r{   r|   r  )rs   r`   rw   r  r~   s       rZ   r|   FakeItemVariable.__init__	  s+    jj6)&)&r\   r  c                 >    [        S0 [        UR                  5      D6$ rd  )r  r1  r  )r
  r  s     rZ   r  %FakeItemVariable.from_tensor_variable	  s      A$'?'?"@AAr\   )r  )rX   rL  rM  rN  rO  r^   rP  rQ   r0  r1  r   r|   r  r  rW  rX  rY  s   @rZ   r  r  	  sl    9 			&	&N
'ehhnn ' ' '
 B,B	B Br\   r  c                   L    \ rS rSrSSS\\   S\\\4   S\4S jrS\	4S jr
S	rg
)r  i	  r   r@   r   rw   rL   c           	      ,   SSK Jn  U R                  R                  nU[        R
                  R                  L a  S n[        U5      S:X  aU  US   R                  5       (       a=  [        U5      S:X  a.  US   nUR                  " XU R                  U R                  5      nOd[        SU R                   SU SU S3SS	/[        R                  QS
9  O3[        R                  " X5      R                  X/[!        U5      -   U5      nUc   eU R                  R"                  nU[        R
                  R"                  La'  [        R                  " X5      R                  X/U5        UR$                  R&                  R)                  [+        5       U[,        S9  U$ )Nr4   rC   r   zCCalling subclass default constructor with more than tensor argumentr  r  r  r  zFAvoid this constructor call or move it outside `torch.compile` regioner*  r  )r}  rD   rK   __new__rQ   rV   r~  r   r  r   r    r   r  r7   r   r=  r  r|   r   r4  r  r  r5   )	rs   r   r   rw   rD   new_funcrK  data	init_funcs	            rZ   r=  $TensorSubclassVariable.call_function	  sm    	A::%%u||+++C4yA~$q'"3"3"5"5#f+:JAw 3BBdjj$++ a#zzl&ixqI 92 +66		 "''5CCFT$Z'C JJ''	 ELL111!!"0>>r5&Q 			))Hc-A 	* 	
 
r\   c                     U R                   $ r   rY   rr   s    rZ   r  )TensorSubclassVariable.as_python_constant*
  r   r\   rz   N)rX   rL  rM  rN  r   r7   r1  rQ  r=  r   r  rW  rz   r\   rZ   r  r  	  sI    /#/ '/ S/)*	/
 
/bD r\   r  c            
          ^  \ rS rSrS1\R
                  krS\S\R                  S\	SS4U 4S jjr
S\4S jrS	S
S\S\\   S\\\4   S\4
U 4S jjrSS jrSrU =r$ )r9  i.
  r   from_tensorrw   rL   Nc                 >   > [         TU ]  " S0 UD6  Xl        X l        g rd  )r{   r|   r  r   )rs   r  r   rw   r~   s       rZ   r|   UntypedStorageVariable.__init__4
  s!     	"6"&*r\   c                 "    [         R                  $ r   )rQ   UntypedStoragerr   s    rZ   r   "UntypedStorageVariable.python_type?
  s    ###r\   r   r@   r   r   c           
        > US:X  a  U(       d  U(       a&  [        UUS[        U5       S[        U5       S35        U R                  R                  5       n[	        U5      (       d   [
        R                  " U[        U5      5      $ SSKJ	n  SSK
Jn  U" UUR                  R                  S	UU R                  R                  5       40 5      5      $ US
:X  a  [        U5      S:X  a  U(       a  [        XS[        U5       S35        UR                  R                  S	[         R"                  R$                  R&                  U R                  R                  5       US   R                  5       40 5        U $ [(        TU ]U  XX45      $ )Nre   z0 args and 0 kwargsz
 args and z kwargsr   )untyped_storage_sizer4   r   r=  resize_z0 kwargsr   )r1   r~  r   re   r   r7   r   r   external_utilsr  r   r   r   r  r  r   rQ   ra  rX  resize_storage_bytes_r{   r   )	rs   r   r   r   rw   rh  r  r   r~   s	           rZ   r   "UntypedStorageVariable.call_methodB
  sN    6>v#)4ykCK=@	 '',,.F#F++&,,RV==A2$II**',))2246	  9Ta#BjS[M:QRII""		""88!!**,d1g.>.>.@A	 Kw"2T::r\   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )Nr:  r   r  load_methodr   rs   codegens     rZ   reconstruct"UntypedStorageVariable.reconstructo
  s-      !-.Ar\   )r   r  r  r>   rL   N)rX   rL  rM  rN  r7   rP  r^   rQ   r  r   r|   r   r   rQ  r  r1  r   r  rW  rX  rY  s   @rZ   r9  r9  .
  s    		'	'N
	+#	+ ++	+ 		+
 
	+$T $+;#+; +; ?#	+;
 S/)*+; 
+;Z r\   r9  c                   P   ^  \ rS rSrS\S\SS4U 4S jjrS\4S jrS
S jr	S	r
U =r$ )rl  iu
  r  rw   rL   Nc                 2   > [         TU ]  " S0 UD6  Xl        g rd  )r{   r|   r  )rs   r  rw   r~   s      rZ   r|   DataPtrVariable.__init__v
  s    
 	"6"&r\   c                     [         $ r   r  rr   s    rZ   r   DataPtrVariable.python_type~
  s    
r\   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )Ndata_ptrr   r  r  s     rZ   r  DataPtrVariable.reconstruct
  s,      !J'Ar\   )r  r  )rX   rL  rM  rN  r^   r   r|   r   r   r  rW  rX  rY  s   @rZ   rl  rl  u
  s:    '#' ' 
	'T  r\   rl  )rO  r   loggingr  r  r  rV  collections.abcr   r   
contextlibr   	itertoolsr   r   typingr   r	   r
   r   r^  torch._numpy_numpyr  torch.fxrQ   torch.randomr   r   torch._dynamor   torch._library.opaque_objectr   torch._opaque_baser   torch._subclasses.meta_utilsr   %torch.fx.experimental.symbolic_shapesr   r   r   r   r   torch.utils._python_dispatchr   rI  r   r   r   _trace_wrapped_higher_order_opr   r   r   r   r   r    r!   r"   r#   r  r$   r%   guardsr&   r'   r   r(   rS   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r	  r5   r6   r7   r   r9   listsr:   r;   script_objectr<   user_definedr=   numpyr$  ModuleNotFoundErrortorch._dynamo.codegenr>   torch._dynamo.output_graphr?   torch._dynamo.symbolic_convertr@   rA   	functionsrB   r}  rD   	getLoggerrX   r  gtltgeler  neis_is_notsupported_tensor_comparison_opssupported_const_comparison_opssupported_comparison_opsr1  fromkeysrS  %supported_tensor_comparison_op_values$supported_const_comparison_op_valuesr  rO   r[   r   
TensorBaser  rV   rJ  r^   r   r  r  r  r  r9  rl  rz   r\   rZ   <module>r%     sW  "       . "   9 9     $ + A ) 6  G 3 3 :   O 0     J I & 5 4 2
 /6
 0< ! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
& T  88&&//%,,2G2GG X_ Xv>k
o k
\[> [|#
. #
LB~ B*35 3lD_ DNo AQ  	Bs   >J' 'J32J3