
    N jSh             	       B   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  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+J,r,  SSK-J.r.  SSK/J0r0J1r1J2r2J3r3J4r4  SSK5J6r6J7r7  SSK8J9r9J:r:  SSK;J<r<  SSK=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrH  SSKIJJrJJKrKJLrL  SSKMJNrNJOrO  SSKPJQrQJRrR  SSKSJTrT  SSKUJVrV   SSKWrX\(       a   SSKZJ[r[  SSK\J]r]  SSK^J_r_J`r`  SSKaJbrb  SSKcJdrd  \R                  " \f5      rg\R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  S .rp\R                  \R                  \R                  \R                  S!.rq0 \pE\qErr\sR                  \pR                  5       5      rv\sR                  \qR                  5       5      rwS"\xS#\y4S$ jrz\R                  R                  R                  \R                  R                  -  r " S% S&\L5      r " S' S(\L5      r " S) S*\5      r " S+ S,\5      r " S- S.\5      r " S/ S0\V5      r " S1 S2\L5      r " S3 S4\L5      rg! \Y a    SrX GNf = f)5a  
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)compiled_autograd)is_opaque_reference_type)is_sparse_any)guard_scalarGuardOnDataDependentSymNodehas_free_symbolsis_symbolicSymTypes)is_traceable_wrapper_subclass   )configgraph_break_hints	variables)trace_wrapped)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)CONSTANT_VARIABLE_NONEConstantVariable)ListIteratorVariableSizeVariable)TorchScriptObjectVariable)UserDefinedClassVariable)	PyCodegen)OutputGraph)InstructionTranslatorInstructionTranslatorBase)UserFunctionVariableTensorWithTFOverrideVariable)><z>=z<===!=isis not)rD   rE   rB   rC   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
isinstancerI   Tensorgetattr__name__rF   s    o/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodrV      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'\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S/ jr&SSS\4S0 jr'S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\,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)\S\4S: jr2SSS\4S; jr3SSS\4S< jr4 SSSS=\5\   S-  S\6\   4S> jjr7SSS?S@SA\SB\5\   SC\\\4   S\4SD jr8S\4SE jr9\:S\\S4   4SF j5       r;S\6\   4SG jr<S\6\   4SH jr=SSS)\SI\5\   SSJS\4
SK jr>SSSI\S\S\S-  4SL jr?SSSI\S\S\S-  4SM jr@ SS)\SN\S-  S\S-  4SO jjrASSS\S-  4SP jrB\BrCSSS\S-  4SQ jrD\DrESSS\%S-  4SR jrFSSS\%S-  4SS jrGSSS\%S-  4ST jrH SSSSU\S-  S\%S-  4SV jjrI  SSSS\S-  SX\S\S\S-  4
SY jjrJSSSZ\SS[4S\ jrKSSS\S-  4S] jrLSSS\4S^ jrMSWS_.SSS`\\-  SSa4Sb jjrNSSS\4Sc jrO SSd\P\   Se\S\Q\6\      4Sf jjrR    SSSSg\Q\   Sh\Q\   Si\Q\   Sj\Q\   S\Q\   4Sk jjrSSSSI\S\SSl4Sm jrTSSSI\S\SS4Sn jrUSSSI\S\S\4So jrV\\WR                  SSp j5       5       rYSSS\4Sq jrZSSS\[4Sr jr\SSs.SSSt\Su\S'\S-  S\S-  4
Sv jjr]SSSw\S'\S\4Sx jr^SSSI\S\S\,4Sy jr_SSSI\S\S\,4Sz jr`SSSI\S\S\,4S{ jraSSSI\S\S\,4S| jrbSSSI\S\SS4S} jrcSS~.SSS\S\S-  S\S-  4S jjrdSSs.SSStS SuS S'\S-  S\S-  4
S jjreSSS\S\4S jrfSSSI\S\S\4S jrgSSSI\S\S\4S jrhSSSI\S\S\4S jriSSSI\S\S\4S jrjSSS)\S\S\4S jrk SSSS
\\-  S\4S jjrlS\,4S jrmSSSI\S\S\S-  4S jrn    SS jroS)\SS4S jrpS\4S jrqS\4S jrrS\sS\4S jrtSruU =rv$ )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_setrG   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    rU   r'   TensorVariable.get_real_value   s#     djjootzz/@/@AArW   N)_sizera   rd   ri   has_grad_fnrp   .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[   r\   r]   r^   r_   rp   ra   rb   rc   rd   re   rf   rg   rq   rk   opri   )rn   r[   r\   r]   r^   r_   rb   re   rc   rf   rg   rq   rp   ra   rd   ri   rr   	__class__s                    rU   rw   TensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".rW   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 )Nr/   )get_specialized_propsinfer_subclass_typeexample_value)
builderr~   r   typer[   rk   metagetitemssetattr)	rn   r{   r|   r~   r   r   specialized_propskvs	            rU   synchronize_attributes%TensorVariable.synchronize_attributes   sn     	HdJ

,,00A1M+>}+M
 &++-DADQ .rW   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[   rk   r   r   _version)rn   	self_fakes     rU   _get_fake_version TensorVariable._get_fake_version   s6    JJOO((,,_=	%.%:y!!DDrW   version_beforehas_tensor_argc                 r    U R                  5       nUb$  Ub   XB:  a  U(       a  U R                  U5        g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   )rn   r{   r   r   version_afters        rU   _sync_if_inplace_mutation(TensorVariable._sync_if_inplace_mutation   sI     ..0&).''+  / * 'rW   c                 Z    [        U R                  R                  R                  S   5      $ Nr   )reprr[   rk   r   rm   s    rU   
debug_reprTensorVariable.debug_repr  s     DJJOO((9::rW   c                     U R                   $ Nr[   rm   s    rU   as_proxyTensorVariable.as_proxy      zzrW   c                     U R                   $ r   )rg   rm   s    rU   python_typeTensorVariable.python_type	  s    rW   c                     gNTru   rm   s    rU   	is_tensorTensorVariable.is_tensor      rW   rF   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)	r\   r]   r^   r_   rb   re   rc   rf   rg   rq   Fc              3   \   #    U  H"  n[        U5      (       a  [        U5      OUv   M$     g 7fr   r   int.0ss     rU   	<genexpr>,TensorVariable.specialize.<locals>.<genexpr>$  s$      #9EA+a..Aa/   *,rp   c              3   \   #    U  H"  n[        U5      (       a  [        U5      OUv   M$     g 7fr   r   r   s     rU   r   r   .  s*      # &A &a..Aa/%r   ra   rd   c              3   T   >#    U  H  nTR                  US 9(       d  M  Uv   M     g7f)memory_formatN)rd   )r   xrF   s     rU   r   r   :  s+      /@***; A@s   (	()r\   r]   r^   r   r_   rb   re   rc   rf   r   grad_fn	Exceptionr   r   tupler`   ra   rL   _C
_functorchis_batchedtensor_prims_common_memory_formats)rF   propss   ` rU   
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                 8   U R                   R                  R                  S   nU R                  (       Gd  [	        U5      (       a  UR                  5       u  pE[        U R                  5       U5      n[        X25      nX$;   a.  [        U[        R                  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5      (       d  [.        R0                  " X5      $ U R                  (       a  U R                  R3                  5       (       d  [4        eUR$                  R6                  UR$                  R8                  S.n
 [;        U R                  R<                  U
5      nUc  [4        e[A        U5      (       a  [4        e[C        U5      (       a  [4        e[        X5      n[E        U R                  U5      n[G        U5      (       a  SSK$J%n  U" XU[        U5      S9$ [M        URO                  [P        RR                  5      5        [.        R0                  " XU5      $ ! [>         a  n[4        UeS nAff = f)Nr   r/   wrap_fx_proxy)r{   r[   r   LGGetAttrVariable)sourcepy_type)*r[   rk   r   r   r   __tensor_flatten__rR   r   rP   rL   rQ   r   r   r   r   _libraryfake_class_registrymaybe_to_fake_objoutput	fake_moder7   createrK   r2   buildsubguards_allowedNotImplementedErrorlocal_scopeglobal_scopeevalr   r   r)   r%   r#   rV   miscr   r"   
make_guardr!   HASATTR)rn   r{   r   fake_valattrs_ctxr[   r   r   fake_script_objscope_input_associated_real_valueexc
real_valueattr_sourcer   s                   rU   dynamic_getattrTensorVariable.dynamic_getattrA  s    ::??''8 {{{<XFF"557KEDMMOT2E#H3M}!->>>>2$}UU)$}*=>>"'.."D"D"V"VII''# 177OO m,,&,,R?? = = ? ?%% ii++"))2H2HI	/ ,00@0@%+H( (/%%"#?@@%%:;;%%9@
 d3 "*---";Z8H  	k,,\-A-ABC$$R[AA7  	/%3.	/s   ' J 
JJJc                     U R                   b   [        R                  " U R                   5      $ U R                  US/ 0 5      $ )Ndim)r_   r4   r   call_methodrn   r{   s     rU   method_attr_ndimTensorVariable.method_attr_ndim  s8    99 #**49955##Br266rW   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )r\   r4   r   r   s     rU   method_attr_dtype TensorVariable.method_attr_dtype  s$    ::!#**4::66rW   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )r]   r4   r   r   s     rU   method_attr_device!TensorVariable.method_attr_device  $    ;;"#**4;;77rW   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )r^   r4   r   r   s     rU   method_attr_layout!TensorVariable.method_attr_layout  r   rW   c                 x    U R                   b-  [        R                  " U R                   R                  S:H  5      $ g )Ncuda)r]   r4   r   r   r   s     rU   method_attr_is_cuda"TensorVariable.method_attr_is_cuda  s1     ;;"#**4;;+;+;v+EFFrW   c                     U R                  5       (       aD  U R                   Vs/ s H"  n[        R                  R	                  U5      PM$     nn[        U5      $ U R                  US/ 0 5      $ s  snf Nr`   )
valid_sizer`   r   r4   r   r6   r   )rn   r{   r   sizess       rU   method_attr_shape TensorVariable.method_attr_shape  si    ??>Bii,>G	**11!4i  ,  &&##BB77,s   )A.c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )rb   r4   r   r   s     rU   method_attr_requires_grad(TensorVariable.method_attr_requires_grad  s*     )#**4+=+=>>rW   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )rc   r4   r   r   s     rU   method_attr_is_quantized'TensorVariable.method_attr_is_quantized  s*     (#**4+<+<==rW   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )rf   r4   r   r   s     rU   method_attr_is_sparse$TensorVariable.method_attr_is_sparse  &     >>%#**4>>::rW   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )re   r4   r   r   s     rU   method_attr_is_nested$TensorVariable.method_attr_is_nested  r  rW   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     rU   method_attr_retain_grad&TensorVariable.method_attr_retain_grad  s    ="4&5R		
rW   c                     [         R                  " [        R                  R                  R
                  5      R                  X/0 5      $ r   )r   TorchInGraphFunctionVariablerL   r   	_autograd_get_data_attrcall_functionr   s     rU   method_attr_dataTensorVariable.method_attr_data  s6    55HH--

-FB
'	(rW   c                 f    U R                   (       a  [        SSU  S3S/ S9  g [        R                  $ )NzTensor with grad_fn()r  z grad_fnz@Dynamo does not support tracing tensors with a grad_fn directly.r  )rq   r   r   r3   r   s     rU   method_attr_grad_fn"TensorVariable.method_attr_grad_fn  s8     /&tfH5^	 333rW   c                 \    SSK Jn  [        R                  " U5      R	                  X/0 5      $ )Nr   )_tensor_version)tensor_version_opr&  r   r  r  )rn   r{   r&  s      rU   method_attr__version#TensorVariable.method_attr__version  s*    755oFTT
 	
rW   c                    SSK Jn  SSKJn  U[        ;   a  [        S5      $  U" [        5      R                  X[        U5      /0 5      n[        XS5      (       + nU R                  (       a<  [        [        U R                  U5      R                  [        R                  5      5        [        U5      $ ! [         a    Sn Nff = f)Nr/   r   BuiltinVariableTF) r   builtinr,  all_tensor_attrsr4   rR   r  rP   AttributeErrorr   r"   r#   r   r!   r   )rn   r{   r   r   r,  varret_vals          rU   call_obj_hasattrTensorVariable.call_obj_hasattr  s     	&, ###D))	!'*88+D12BC
 %S::G ;;4;;-889M9MN  ((  	G	s   7B2 2C 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  [        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      R.                  ;   a2  [0        R2                  R5                  [        T R                  T5      SS9$ Uc   TS:w  a  S[6        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 againry   method_attr_)gradrb   	overloadsr   z9Getting an inplace view on a graph input is not supported)r   msgr8  rG   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$ )Nr/   r   r   )r{   r[   r   r{   r[   )r   r   r   r   r/  r   r   typesGetSetDescriptorTypecreate_getattr_proxyr   r   r#   )r   r   static_attrr[   r   rn   r{   s       rU   try_generic_attr_handling=TensorVariable.var_getattr.<locals>.try_generic_attr_handlingD  s    21.224>& $E,F,FF'<<T]]_dS;;*(U:dkk43P  )Be<<rW   )is_strict_mode_strict_mode_banned_opsr   #_strict_mode_conditional_banned_opsr   r8   r   rR   r   r   is_python_constantr"   r   r!   
TYPE_MATCHr#   rO   rL   opsatenr9  Taginplace_viewtagsr   r   DelayGraphBreakVariabler2   r   r   )rn   r{   r   handlerresultfnrA  s   ```    rU   var_getattrTensorVariable.var_getattr  sA   r""t33553*4&$8"6tf<^ _"4& )d d	 AACC:'v  .K  L  ;+D,<,<,>??$,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>%%rW   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                  " U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idr4   r   )rn   r{   r   r   r   id_values         rU   call_idTensorVariable.call_idf  s   {{>"4&)T	 {{{ii++"))2H2HI'+$
	+/0@0@%+H( (/A"4&)\	 	dkk,,\-B-BCD23&&x00)  	="4&)1	s   $ C) )
D3DDc                      U R                   S:  $ )Nr   )r_   r   s     rU   has_unpack_var_sequence&TensorVariable.has_unpack_var_sequence  s    yy1}rW   idxesc           	      V   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                  " 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 )Nr/   wrap_fx_proxy_clsr>   r`   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   ra  torch_functionr?   r   lenr`   r   rP   r6   r   r4   r   SymNodeVariablerF  evaluate_exprr   as_python_constantrangerY   r   from_tensor_varrg   r   r   )rn   r{   r^  ra  r?   size_lensize_varlength
dyn_lengthi	base_varsr   s               rU   unpack_var_sequence"TensorVariable.unpack_var_sequence  s    	/@??499~H''FB;Hh55558>>*H1}<<<}??YYq\F))"f7G7N7Nq7Q6RTVWJ :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52H!.+H&tree_map_fnr=   map_fnresttree_map_kwargsc                 ,    UR                  X/UQ0 5      $ r   )r  )rn   r{   rr  rs  rt  ru  s         rU   call_tree_mapTensorVariable.call_tree_map  s     ##Br::rW   c                     U R                   S L$ r   rp   rm   s    rU   r   TensorVariable.valid_size  s    zz%%rW   c                 B    U R                   c   S5       eU R                   $ )Nz%accessing None size in TensorVariablerz  rm   s    rU   r`   TensorVariable.size  s"    zz%N'NN%zzrW   c                 J    [         R                  R                  R                  $ r   )rL   rM   r   )_autograd_backward_strict_mode_banned_opsrm   s    rU   rD  &TensorVariable._strict_mode_banned_ops  s    }}##MMMrW   c                 J    [         R                  R                  R                  $ r   )rL   rM   r   5_autograd_backward_strict_mode_conditional_banned_opsrm   s    rU   rE  2TensorVariable._strict_mode_conditional_banned_ops  s    MM  VV	
rW   argsz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  [        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  a.  ['        US   [(        5      (       a  [*        R,                  " S5      $ US:X  a*  [        SSU SU< SU< S3SS/[.        R0                  QS	9  O5US:X  a/  SU;   a)  [        SSU SU< SU< S3SS/[.        R0                  QS	9   [!        U SU 35      n UR3                  5        VVs0 s H  u  pXR5                  5       _M     nnnU" U/UQ70 UD6nU(       a  U$  SSK Jn  UR<                  R>                  " S U/[A        U /UQU5      Q76 nU RC                  5       nU" UU5      nU RE                  UU[G        S! U 5       5      5        U$ s  snnf ! [6         a'  n[        SSU  SU SU SU 3SU S3/ US9   S nANS nAff = f! [8         a     Nf = f)"Nr/   )SourcelessBuilderVariableBuilder)can_dispatch_torch_functiondispatch_torch_functionz(Illegal method invocation in strict modecall_method r6  z/Dynamo currently does not support this method (z) invocation in strict mode.r  ry   __eq__r   F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 ``.rT  r   r   c              3   @   #    U  H  oR                  5       v   M     g 7fr   )r   )r   args     rU   r   -TensorVariable.call_method.<locals>.<genexpr>T  s     #DtMMOOts   )$r   r  r  rc  r  r  rC  rD  r   r/  r   r   listr   r#   r   rR   rL   rQ   rP   r8   r   r4   r   SUPPORTABLEr   realize	TypeErrorr0  r   r   create_proxyr+   r   r   any)rn   r{   r   r  rr   r  r  r  r  r@  is_base_tensor_methodfunc_varhandler_methodr   r   realized_kwargsrO  er   r[   r   s                        rU   r   TensorVariable.call_method  s%    	@Xr""t/K/K/M'MB&tfAdV1TF!F8D657 '**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--e44 9+!$wz&!<>=&22	 ZFf$4G!$wz&!<>5&22		$TWTF+;<N>Dlln"Mnda1iik>n"M'ETE_E!M  	+		&&
 }t}f5
 //1r5)&&#Dt#D D	
 I #N  7*4&$qaxH!##'&!,  		s<    K J #J?J J 
J>J99J>
KKc                 .    U R                   " S/UQ70 UD6$ r   _method_size_stridern   r{   r  rr   s       rU   method_sizeTensorVariable.method_sizeY  s     ''@@@@rW   c                 .    U R                   " S/UQ70 UD6$ )Nra   r  r  s       rU   method_strideTensorVariable.method_stride^  s     ''B4B6BBrW   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   optionsrG   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   )r6   r4   r   )r   r  ys      rU   make_const_size_variableDTensorVariable._method_size_stride.<locals>.make_const_size_variableh  s=    @AB1!((6g6BFM Bs   !3r`   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   r   rs     rU   r   5TensorVariable._method_size_stride.<locals>.<genexpr>  s     ,DVSVVV   )r(   r   r   r6   r4   r   rR   r   r`   r[   rk   r   r   r   r   r   )rn   r   r   r  RetVariabler  fakefake_rs           rU   r  "TensorVariable._method_size_stridec  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;??rW   c                 b   U R                  5       (       a)  [        R                  " [        U R                  5      5      $ U R
                  R                  R                  R                  S5      =nb?  UR                  5       n[        U5      (       d  [        R                  " [        U5      5      $ g r   )r   r4   r   r*   r`   r[   rk   r   r   numelr   r   )rn   r{   r  r  s       rU   method_numelTensorVariable.method_numel  s}    ??#**7499+=>> JJOO((,,_==DJZZ\F#F++'..s6{;;rW   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )r_   r4   r   r   s     rU   
method_dimTensorVariable.method_dim  s$    99 #**49955rW   c                 r    U R                   b*  [        R                  " U R                   R                  5      $ g r   )r\   r4   r   is_floating_pointr   s     rU   method_is_floating_point'TensorVariable.method_is_floating_point  s,     ::!#**4::+G+GHHrW   c                 2   [         R                  (       a,  [        SSS/ [        R                  Q[        R
                  QS9  U R                  R                  R                  R                  S5      =nb$  [        R                  " UR                  5       5      $ g )Nz0Encountered tensor.is_inference() during tracingr-  z&tensor.is_inference() is not supportedr  r   )r   "fake_tensor_disable_inference_moder   r   FUNDAMENTALINFERENCE_MODEr[   rk   r   r   r4   r   is_inference)rn   r{   r  s      rU   method_is_inference"TensorVariable.method_is_inference  s     44JD&22&55	 JJOO((,,_==DJ#**4+<+<+>??rW   c                 r    U R                   b*  [        R                  " U R                   R                  5      $ g r   )r\   r4   r   
is_complexr   s     rU   method_is_complex TensorVariable.method_is_complex  s*    ::!#**4::+@+@AArW   r   c                 R   Ub  UR                  5       O[        R                  nU R                  b"  [        R
                  " X0R                  ;   5      $ U R                  R                  R                  R                  S5      =nb#  [        R
                  " UR                  US95      $ g )Nr   r   )
rg  rL   contiguous_formatrd   r4   r   r[   rk   r   r   )rn   r{   r   memory_format_constr  s        rU   method_is_contiguous#TensorVariable.method_is_contiguous  s    
 ( ,,.(( 	
 )#**+>BTBT+TUUjjoo**..??dL#**""1D"E  rW   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                  " SUR                   35      $ [        R                  " ST R                  R                   SUR                   35      $ Ub  [        [        UR                  5       5      5      S:X  as  UR                  5       n[        R                  " [        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   )r\   )r   r   r   rn   s      rU   r   -TensorVariable.method_type.<locals>.<genexpr>  s#      9daTZZ1_9s   &	&cpuztorch..ztorch.tensortyper/   r   r  r   r   )r\   rP   r]   rL   nextr.   r   r   r4   r   rS   r$   rg  r   r   r   r  r+   )	rn   r{   r\   r  rr   
tensortypetensor_typetensor_type_constr   s	   `        rU   method_typeTensorVariable.method_type  sT    M

&4;;55 1779 J {{5('..
8K8K7L/MNN'..T[[--.a
0C0C/DE  D113459KK
  224K 0 7 7K8H I.(,A&A 		&&! '.?'@&I  rW   clsr?   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 )
Nr/   r>   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  )rP   TensorSubclassVariabler   rc  r?   rg  ri  r   side_effects
_track_objobjectr0   r   r   r  )rn   r{   r  r?   py_clsr1  s         rU   method_as_subclass!TensorVariable.method_as_subclass  s     c122szzD++-F.>>&**C II""--#1E .  J^fM#a01L"..		
rW   c                     [        U R                  [        R                  5      (       aH  U R                  R                  S:w  a  U R                  R                  OSn[
        R                  " U5      $ g )Nr  )rP   r]   rL   r   indexr4   r   )rn   r{   r  s      rU   method_get_device TensorVariable.method_get_device  sM    dkk5<<00)-)9)9U)BDKK%%E#**511rW   c                 V    [         R                  " U R                  R                  5      $ r   )r4   r   r\   itemsizer   s     rU   method_element_size"TensorVariable.method_element_size  s    &&tzz':':;;rW   )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   npr^   rL   stridedr  rg  r   r   r  r   r+   r  r   )rn   r{   r  tr[   s        rU   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5rW   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      $ )Nr/   r   tensor	sub_proxyrG   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 )Nrn  r  rG   c                 2   > T" TUR                  5       5      $ r   )item)rn  r  r{   r   s     rU   wrap:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrapO  s    $NN$ rW   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   r/   )r  )r   rL   fxProxyr2   r\   int8int16int32int64r   r   	enumerate)
r  r  r	  rn  val
sub_tensorrn   tolistr{   r   s
         rU   r  ,TensorVariable.method_tolist.<locals>.tolistN  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   rL   rQ   r  r  r   r  r   rk   r   r2   r   )rn   r{   r  outr  r   s   ``  @@rU   method_tolistTensorVariable.method_tolistK  s~    *!	5<< !	EHHNN !	sTRUY !	 !	F %%**?;VT]]_-$$R--rW   	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R                   (       a  [        UR                   U5      (       a  U(       a  [        SS	U 3S
S/S9  M  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   r  setrP   rY   rb   rq   r   r[   rk   addappend)rn   r  r  r  rO  
seen_nodesr1  rk   s           rU   _collect_backward_inputs'TensorVariable._collect_backward_inputsu  s     	2),
C#~..33D3D3D ??(%$E&STWSX$Y(l k#	 ) z#**>R'S'S(%$M&[\_[`$a)F !v# ) 99>>D-"t,c*E H rW   gradientretain_graphcreate_graphinputsc                 :   [         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(       aa  [        UR                  R                  UR                  R                  R                  5       5      nU R                  U5      nU(       d  [        $ 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R/                  XU
5      nSSKJn  UR5                  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R/                  UUU/0 5        MG     URE                  U5        ["        R$                  " U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 r6  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_unusedr$  r%  r/   )GradModeVariableF)initialized__getitem__)#r   trace_autograd_opsr   rb   rq   r   r   r   leaf_var_creation_orderinput_source_to_varvaluesr!  r3   rP   r   BaseListVariabler   r2   r   r  rL   autogradr8  r  ctx_managerr)  r   enterrH  inductoraccumulate_grad_defaultr  r   exit)rn   r{   r#  r$  r%  r&  auto_detectall_vars
input_varsprovided_varsgrad_kwargs
inputs_var	grad_argsautograd_grad_fn	grads_varr)  grad_mode_varaccumulate_grad_fnidx	input_vargrad_is                        rU   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 .-	  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$$R..rW   DataPtrVariablec                     [        U 5      $ r   )rH  r  s       rU   method_data_ptrTensorVariable.method_data_ptr"  s     t$$rW   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 r6  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       rU   method_itemTensorVariable.method_item*  sU     ||F$A$A--/Z&tfF4&&B<I
 rW   c           	      @   SSK Jn  [        US   [        5      (       a4  [        R
                  [        R                  R                  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      $ )Nr/   r   r   r  )r   r   rP   re  rL   selectr   r4   r   operatorgetitemr   r  r+   r  )rn   r{   r  rr   r   rP  r[   s          rU   method___getitem__!TensorVariable.method___getitem__@  s     	+d1g//
 ..55a8G  !!B		&&
 vT
2F;
 R''rW   c                      [         R                  R                  R                  5       n SR	                  [
        R                  " U 5      5      n[        R                  [        R                  " S5      U5        g )Nr-  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
                )rL   _guardsTracingContextextract_stackjoin	tracebackformat_listlogwarningtextwrapdedent)
user_stackuser_stack_formatteds     rU   rO  +TensorVariable._warn_capture_scalar_outputs^  sX     ]]11??A
!wwy'<'<Z'HIOO	 !	
rW   c                 T    U R                  US[        R                  " S5      /0 5      $ )Nr`   r   )r   r4   r   r   s     rU   method___len__TensorVariable.method___len__s  s(    F-=-D-DQ-G,H"MMrW   c                 D    [        U R                  U5      [        5       S9$ )Nmutation_type)r5   rp  r1   r   s     rU   method___iter__TensorVariable.method___iter__v  s#    #$$R(8H8J
 	
rW   rT   tensor1tensor2c                    UbN  [         R                  (       a9  SSKJn  UR	                  [
        R                  " XR                  5      XX4/0 5      $ g )Nr   )	polyfills)r   enable_dynamo_decompositionsr-  rq  inline_user_function_returnr2   r   addcmul_inplace)rn   r{   rn  ro  rF   rq  s         rU   method_addcmul_TensorVariable.method_addcmul_{  sL     !D!D$11%%b*C*CD/ 
 rW   keyc                 (   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        [.        $ ! , (       d  f       N= f! , (       d  f       N= f)Nr  F)allow_non_graph_faker   )r   r  rT  setitemr+   r   rL   rM   rN   +_disable_saved_tensors_hooks_during_tracingr   	shape_envignore_fresh_unbacked_symbolsr   r&   rk   r   r   r   use_graph_deduplicationtrack_nodes_for_deduplicationregion_trackeradd_node_mutationr3   )rn   r{   rw  rF   r[   r   s         rU   method___setitem__!TensorVariable.method___setitem__  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%%  NMs%   1AFE2"F2
F 	<F
Fc           	      .    [        SSU  SU SU 3S/ S9  g )Nz!Unsupported Tensor.resize_() callr  z	 resize_ r6  z=Dynamo currently does not support tracing `Tensor.resize_()`.r  r  r  s       rU   method_resize_TensorVariable.method_resize_  s+     	7"4&	$qAW		
rW   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz$Unsupported Tensor.resize_as_() callr  z resize_as_ r6  z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r  r  r  s       rU   method_resize_as_ TensorVariable.method_resize_as_  s+     	:"4&TF!F8DZ		
rW   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz(Unsupported Tensor.sparse_resize_() callr  z sparse_resize_ r6  zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r  r  r  s       rU   method_sparse_resize_$TensorVariable.method_sparse_resize_  s,     	>"4&(8axH^		
rW   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_ r6  zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r  r  r  s       rU   method_sparse_resize_and_clear_.TensorVariable.method_sparse_resize_and_clear_  s,     	H"4&(B4&&Rh		
rW   c           	      l    [        U5      S:  a%  [        SSU  SU SU 3S/ [        R                  QS9  g )Nr/   zUnsupported Tensor.set_() callr  z set_ r6  zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r  )rd  r   r   r  r  s       rU   method_set_TensorVariable.method_set_  sL     t9q= 8&tfF4&&BA6)556 rW   )alphaotherr  c                    Ub`  [         R                  (       aK  [        R                  " [        R
                  5      R                  XU/0 5      nU R                  USU/0 5      $ g Nadd_)r   rr  r   r  rL   mulr  r   )rn   r{   r  r  rO  s        rU   method_add_TensorVariable.method_add_  sX     !D!D;;EIIFTTENBF ##B"==rW   c                6   Ub  [         R                  (       a  [        R                  " [        R
                  5      R                  XU/0 5      n[        R                  " [        R                  5      R                  XU/0 5      nU R                  USU/0 5      $ g r  )	r   rr  r   r  rL   divr  r  r   )rn   r{   rn  ro  rF   rO  s         rU   method_addcdiv_TensorVariable.method_addcdiv_  s     !D!D;;EIIFTTg&F ;;EIIFTTUORF ##B"==rW   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  rL   eqr  r  r   )rn   r{   r  rO  s       rU   method___contains__"TensorVariable.method___contains__  sm     77AOOsR
 77		BPP"
 !!"fb"55rW   c           
      b  ^	^
 U Vs/ s H  oDR                  5       PM     snm	UR                  5        VVs0 s H  u  pVXVR                  5       _M     snnm
S[        S[        4U	U
4S jjnSUl        SSKJn  U" UUR                  R                  " SU/[        U /0 5      Q76 S9$ s  snf s  snnf )	Nr   rG   c                 (   > U R                   " T0 TD6$ r   )redistributer   args_as_valuekwargs_as_values    rU   redistribute_fn_with_prim_typesKTensorVariable.method_redistribute.<locals>.redistribute_fn_with_prim_types2  s    >>=DODDrW   prim_redistributer/   r   r  r<  )	rg  r   r   rS   r   r   r   r  r+   )rn   r{   r  rr   r   r   r   r  r   r  r  s            @@rU   method_redistribute"TensorVariable.method_redistribute'  s     :>>A--/>AGP12244P	Es 	Es 	E 	E 4G'0*))((/ #D62.
 	
 ?Ps
   B&B+c           
      P  ^^ S[         S[        4S jnUR                  S[        5      n[	        U[
        R                  5      (       a+  [
        R                  " [        5      R                  X/0 5      nUR                  S5      b  XSS'   U Vs/ s H
  od" U5      PM     snmUR                  5        VVs0 s H  u  pxXt" U5      _M     snnmS[        S[        4UU4S jjn	SU	l        SS	KJn
  U
" UUR                  R                  " S
U	/[!        U /0 5      Q76 S9$ s  snf s  snnf )NvtrG   c                 x    [        U [        R                  5      (       a  U R                  $ U R	                  5       $ r   )rP   r   UserDefinedObjectVariablerF   rg  )r  s    rU   extract_python_value<TensorVariable.method_to_local.<locals>.extract_python_valueN  s-    "iAABBxx((**rW   grad_placementsr   c                 (   > U R                   " T0 TD6$ r   )to_localr  s    rU   to_local_fn_with_prim_typesCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_typesa  s    ::}@@@rW   prim_to_localr/   r   r  r<  )r2   r   r   r3   rP   r   r  r,  r   r  r   rS   r   r   r   r  r+   )rn   r{   r  rr   r  grad_placements_vtr   r   r   r  r   r  r  s              @@rU   method_to_localTensorVariable.method_to_localC  s-   	+_ 	+ 	+ $ZZ(9;QR()*M*MNN!*!:!:5!A!O!O("" ::'(4(:$%:>?$Q-a0$?BH,,.Q.$!12155.Q	A3 	A3 	A 	A 0?#,*))((+ #D62.
 	
 @Qs   D5D"c                 0    U R                   " US/UQ70 UD6$ )Nregister_hook_method_register_hookr  s       rU   method_register_hook#TensorVariable.method_register_hookr  s!     ))"oOOOOrW   c                 0    U R                   " US/UQ70 UD6$ )N"register_post_accumulate_grad_hookr  r  s       rU   )method_register_post_accumulate_grad_hook8TensorVariable.method_register_post_accumulate_grad_hookz  s-     ))4
7;
?E
 	
rW   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_staterG   c           	      h   > [        U T5      nU" [        R                  " [        [        UTS95        g )N)rP  r  	hook_name)rR   	functoolspartialr   r    )r  r  r  r  r   s      rU   _register_hook_trampolineGTensorVariable._method_register_hook.<locals>._register_hook_trampoline  s8     %,FD$9M!!)))<%-&/	  rW   r/   r   Thas_backward_hookr  rk   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  rP   rL   r  Noderr   r/  r  r  )rk   r  r  kwargcollect_depsnodes_to_movevisiteds       rU   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*rW   rj  )#r   r   compiled_autograd_enabledr   add_backward_state_hookrL   rQ   BackwardStater   r   r   rk   r   r  r  userskeysr   AutogradFunctionVariabler   
call_applyr  r  r  r  replace_input_withrP   rY   r[   r   RemovableHandleVariablebaser1   r  r  )rn   r{   r   r  bw_state_proxyr  r   
self_proxytensor_nodeusers_to_replaceapply_hook_varrO  tensor_prime_nodeinsert_pointrk   userhandle_variabler  r  r  r  s     `              @@@@rU   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rW   c                     USLa  UR                  5       nU R                  5       R                  R                  S   R                  U:w  a  [        SSU  S3S/ S9  g U $ )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  )rg  r   rk   r   rb   r   )rn   r{   rb   s      rU   method_requires_grad_$TensorVariable.method_requires_grad_  sf     $)<<>M==?$$_5CC}TB&tfO<F KrW   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  rm   s    rU   method_share_memory_#TensorVariable.method_share_memory_  s2    ="4&7nI"..		
rW   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 )Nr/   r   c              3      #    U  H:  nUR                  5       =(       a    [        UR                  5       [        5      v   M<     g 7fr   )rF  rP   rg  r   )r   as     rU   r   ,TensorVariable.method_new.<locals>.<genexpr>4  s8      A $$&R:a6J6J6Lc+RRs   AA	new_empty)rd  rP   r6   allr   r  s       rU   
method_newTensorVariable.method_new*  s^     INz$q'<@@IN   
 ##BTBBrW   c                 ~    [        X R                  5       R                  R                  S   R	                  5       5      $ r   )UntypedStorageVariabler   rk   r   untyped_storager   s     rU   method_untyped_storage%TensorVariable.method_untyped_storage<  s4     &--/&&++O<LLN
 	
rW   c                 ~    U R                   (       d,  U R                  R                  R                  U5        SU l         g r   )ri   r[   rk   _rename)rn   r   s     rU   set_name_hintTensorVariable.set_name_hintC  s,      JJOO##D) $DrW   c                 T    U R                  5       R                  R                  S   S L$ r   )r   rk   r   rm   s    rU   is_python_hashable!TensorVariable.is_python_hashableI  s&     }}##((9EErW   c                 b    [        U R                  5       R                  R                  S   5      $ r   )hashr   rk   r   rm   s    rU   get_python_hashTensorVariable.get_python_hashO  s$    DMMO((--o>??rW   c                     [        U[        5      (       d  gU R                  5       R                  R                  S   nUR                  5       R                  R                  S   nX#L $ )NFr   )rP   r2   r   rk   r   )rn   r  r  bs       rU   is_python_equalTensorVariable.is_python_equalR  sR    %11MMO  %%o6NN!!&&7vrW   )ri   rp   rg   r]   r\   rq   rd   re   rc   rf   r^   r_   r[   rb   ra   r   )NF)F)NNNN)rG   NT)r{   r;   rG   r  )wrS   
__module____qualname____firstlineno____doc__r2   _nonvar_fieldsrL   rQ   r'   r  r  r\   r]   r^   r   rJ   r   r   r   rw   r   r   r   strr   r   r   r   staticmethoddictr   r   r   r   r   r   r4   r   r  r  r  r  r  r	   r  r   r#  r(  r3  rQ  rY  r\  r   r  rp  rw  r   propertyr`   rD  rE  r   r  r  r  r  method_nelementr  method_ndimensionr  r  r  r  r  r  r  r  r  r  r   r
   r!  rF  rJ  rP  rV  r  cacherO  rg  r5   rl  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  __static_attributes____classcell__ry   s   @rU   rY   rY      s   G 	  
	'	'!N&B B. )-)-%)$(#'/xx~~'/ {{	'/
 '/ '/ '/ '/ '/ '/ '/ '/ '/ S#X%'/ c3h$&'/  d{!'/" Tk#'/$ %'/& 
''/ '/T FJ ) 7;d{ 	 E3: E
,#, d
, 	,
 
,(;C ;%((.. T 4  /%,, /4S> / /bHB)HB14HB	HBT7#: 7 7$; RV@V 
%< SWAW 
%< SWAW 
)	D	 8$; 8 8)	D	 )	D	 )	D	 )	D	 
*A 
h 
(#: ( (
4)4	D	 4
'> 
? 
)))14)	)<Y5 YS Y_ Yv#11 #1o #1J*A d  JN7
)7
2:3-$2F7
	o	7
r;#; ,;  	;
 '; c?23; 
;&D & eCHo  Nc N
T#Y 

v#v v '	v
 -v 
vp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6!/26GK6	$'	(6v /32626,0s/#s/ ?+s/ /	s/
 /s/ )s/ 
/	"s/j%#% % "	%
 
%#  "	
 
,(#( ( "	(
 
(< __
  
&N!8 N_ N
"9 
>R 
 !#  	 Tz 
t$&#& & 	&
 
&B
#
 
 "	

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

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

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

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

 

8-
#-
 -
 "	-

 
-
^P#P P "	P
 
P
#
 
 "	

 

H)H14H<KH	HV TX):>:P	"	
h 	
#  "	
 
4	$
)
	!
# $ FD F@ @V   rW   rY   c                   h  ^  \ 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\
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\4S jrS\4S jrS\S\4S jrSrU =r $ )!re  iZ  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[   sym_numrG   c                 ,    [        U R                  5      $ r   )r   r   rm   s    rU   r   SymNodeVariable.debug_reprg  s    DLL!!rW   Nr{   r<   r  r2   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                  " U5      $ [        X#40 UD6nUR                  R                  S:w  a%  UR                  R                  R                  U5        U$ )Nr   rt   )r&   rk   r   r-   rP   sympyIntegerr   rJ   r4   r   re  rx   r   current_tracerrecord_tensor_or_symint_vt)r  r{   r[   r   r  r  s         rU   r   SymNodeVariable.createj  s     ?$UZZ4Gejjoo-::???3w>>>%**g.gsD9::&0%--&H&Hc'lgG#**733e88::==M)II$$??D
rW   rr   c                 L   > [         TU ]  " S0 UD6  Xl        X l        S U l        g Nru   )rv   rw   r[   r   _tensor_var)rn   r[   r   rr   ry   s       rU   rw   SymNodeVariable.__init__  s%    "6"
26rW   c                     [        U R                  [        5      (       a   U R                  R                  R                  $ [        U R                  5      $ r   )rP   r   r   rk   pytyper   rm   s    rU   r   SymNodeVariable.python_type  s8    dllH--<<$$+++%%rW   c                     gr   ru   rm   s    rU   is_symnode_likeSymNodeVariable.is_symnode_like  r   rW   c                     U R                   $ r   r   rm   s    rU   r   SymNodeVariable.as_proxy  r   rW   r\   c           	          U R                   cQ  [        R                  " U[        R                  5      R                  X/S[        R                  " X5      05      U l         U R                   $ )Nr\   )r+  r2   r   rL   scalar_tensorr  )rn   r{   r\   s      rU   	as_tensorSymNodeVariable.as_tensor  s[    #.44E'' mB/2G2G2R(ST  rW   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   rL   r  experimental_configno_data_dependent_graph_breakr   r   ANTI_PATTERNr  )rn   r9  r  s      rU   rf  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      $ )Nr/   r   r   )r   r   r   r  r+   )rn   r{   r   r  rr   r   s         rU   r   SymNodeVariable.call_method  sF     	+II"" #D=4=&9
 	
rW   c                     gr   ru   rm   s    rU   r  "SymNodeVariable.is_python_hashable  r   rW   c                 4    [        U R                  5       5      $ r   )r  rf  rm   s    rU   r	  SymNodeVariable.get_python_hash  s     D&&())rW   r  c                     [        U[        5      (       a!  U R                  5       UR                  5       :H  $ [        U[        5      =(       a!    U R                  5       UR	                  5       :H  $ r   )rP   re  rf  r2   rg  )rn   r  s     rU   r  SymNodeVariable.is_python_equal  s]    e_--%%'5+>+>+@@@ uo. C""$(@(@(BB	
rW   )r+  r[   r   r   )!rS   r  r  r  r  r2   r  r  r   classmethodr   r   rw   r   r   rJ   r1  r   rY   r7  r
   r   floatrf  r   r  r   r  r	  r  r  r  r  r  s   @rU   re  re  Z  s|    	 
	'	'N"C " 
 #	'  t	
  
 ,7c 7C 73 74 7&T & #  7       7;$]3	e	
#
 
 '	

 S/)*
 

$D * *

V 
 
 
rW   re  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  rG   c                 .    SSK Jn  U" S[        U US.UD6$ )Nr/   r`  rb  ru   )r   ra  r  )r{   r[   r  ra  s       rU   r   NumpyNdarrayVariable.create  s,     	/  
+
 	
 	
rW   r   c                 ^  ^ ^^^	^
 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                  " [        UT5      5      $ TS;   aI  [!        [        UT5      =n5      (       d&  [        R                  " [#        S U 5       5      5      $ U" 5       $ TS:X  aB  [!        UR$                  =n5      (       d  [        R                  " ['        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_wrapperr/   r   r   rG   c            	      n   > T" TTR                   R                  STTR                  5       T 40 5      5      $ )Nr  )r   r  r   )r   rP  rn   r{   r   s   rU   insert_into_graph;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  s;     		&&#%7$--/49PRT rW   )Trealimagr  )r_   r  )shapera   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r  r  s     rU   r   3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s     4GQSVVQr  r`   )r  flagsr\   z$Unsupported ndarray attribute accessr  r6  z3Dynamo currently does not support tracing `ndarray.r  r  __version__z&Unsupported ndarray.__version__ access)rN   rP  r   r   r   rk   r   tnpndarrayr2   r   r  r  r   r4   rR   r   r   r`   r   r   r   )rn   r{   r   rO  r   example_ndarrayrR  r[   r  rP  r   s   ```      @@rU   rQ   NumpyNdarrayVariable.var_getattr  s   
 	/*,,11/B++m4	? 	 	 ((II**"$'	E *00U;F ))#**7?D+IJJ((#$)G$GAHH'..u4GQ4G/GHH$&&V^#)=)=$=A>>'..s1v66$&&//>&tfAdV4QRVQWWYZ	 ]"@&tfAdV4QRVQWWYZ	 >%%rW   r  rr   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  rr   kwargs_renamer   r   s         rU   
patch_argsNumpyNdarrayVariable.patch_args(  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astyper/   r+  r\   r   Ozndarray.astype(object)r  r6  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__r`   r  __iter__)tostringtobytes__delattr__zUnsupported ndarray method callz	`ndarray.z&()` is not modelled in `torch._numpy`.r  )r   r   rN   rj  rg  r.  r,  rd  is_constant_matchrP   rP  r  r   r  rv   r   r   r  r+   r  r  r   )rn   r{   r   r  rr   r   rj  r,  	dtype_argis_object_stris_object_typer[   ry   s               rU   r    NumpyNdarrayVariable.call_method1  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5rW   c                 <    [         b  [         R                  $ [        $ r   )r  r]  r   rm   s    rU   r    NumpyNdarrayVariable.python_typee  s    >::OrW   ru   )rS   r  r  r  r  r  rL   r  r  r   r   r  r2   rQ  r   r  r   rg  r   r   r   r  r  r  s   @rU   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  rW   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$ )UnspecializedPythonVariableil  zG
This is a 1-element tensor represents unspecialized python float/int.
	raw_valueneed_unwrapNTr{  r|  r[   rr   rG   c                @   > [         TU ]  " U40 UD6  X l        X0l        g r   )rv   rw   r{  r|  )rn   r[   r{  r|  rr   ry   s        rU   rw   $UnspecializedPythonVariable.__init__w  s"     	)&)"&rW   tensor_variablec                 H    [        S0 [        UR                  5      DUUS.D6$ )Nr}  ru   )rz  r  __dict__)r  r  r{  r|  s       rU   from_tensor_variable0UnspecializedPythonVariable.from_tensor_variable  s/     + 
?++,
#
 	
rW   )r|  r{  r  )rS   r  r  r  r  rY   r  rL   r  r  rK  r   rJ   r   rw   rJ  r  r  r  r  s   @rU   rz  rz  l  s    
 	 
	&	&N )- 
'xx~~
' 3;%	
'
 
' 
' 

' 
' 
 !	
'
 3;%
 	

 
'
 
rW   rz  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[   rr   rG   Nc                 X   > UR                  SS5      n[        TU ]  " U40 UD6  X0l        g )Nr|  F)poprv   rw   r|  )rn   r[   rr   r|  ry   s       rU   rw   FakeItemVariable.__init__  s+    jj6)&)&rW   r  c                 >    [        S0 [        UR                  5      D6$ r*  )r  r  r  )r  r  s     rU   r  %FakeItemVariable.from_tensor_variable  s      A$'?'?"@AArW   )r|  )rS   r  r  r  r  rY   r  rL   r  r  r   rw   rJ  r  r  r  r  s   @rU   r  r    sl    9 			&	&N
'ehhnn ' ' '
 B,B	B BrW   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  rr   rG   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$ )Nr/   r>   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  )rc  r?   rF   __new__rL   rQ   rd  r   ri  r   r   r   r  r2   r   r  r  rw   r   r  r  r  r0   )	rn   r{   r  rr   r?   new_funcr1  data	init_funcs	            rU   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 	* 	
 
rW   c                     U R                   $ r   rT   rm   s    rU   rg  )TensorSubclassVariable.as_python_constant  r   rW   ru   N)rS   r  r  r  r   r2   r  r  r  r   rg  r  ru   rW   rU   r  r    sI    /#/ '/ S/)*	/
 
/bD rW   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S	S
\S\\   S\\\4   S\4
U 4S jjrSS jrSrU =r$ )r  i  r   from_tensorrr   rG   Nc                 >   > [         TU ]  " S0 UD6  Xl        X l        g r*  )rv   rw   r  r   )rn   r  r   rr   ry   s       rU   rw   UntypedStorageVariable.__init__  s!     	"6"&*rW   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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      $ )Nr`   z0 args and 0 kwargsz
 args and z kwargsr   )untyped_storage_sizer/   r   r  resize_z0 kwargsr   )r,   rd  r   r`   r   r4   r   r   external_utilsr  r   r   r   r  r  r   rL   rH  r4  resize_storage_bytes_rv   r   )	rn   r{   r   r  rr   rO  r  r   ry   s	           rU   r   "UntypedStorageVariable.call_method  sL    6>v#)4ykCK=@	 '',,.F#F++'..s6{;;A2$II**',))2246	  9Ta#BjS[M:QRII""		""88!!**,d1g.>.>.@A	 Kw"2T::rW   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )Nr  r   r  load_methodr   rn   codegens     rU   reconstruct"UntypedStorageVariable.reconstruct	  s-      !-.ArW   )r   r  r  r9   rG   N)rS   r  r  r  r2   r  rY   rL   UntypedStorager   rw   r  r  r  r   r  r  r  r  s   @rU   r  r    s    		'	'N
	+#	+ ++	+ 		+
 
	++;#+; +; ?#	+;
 S/)*+; 
+;Z rW   r  c                   B   ^  \ rS rSrS\S\SS4U 4S jjrS	S jrSrU =r	$ )
rH  i!	  r  rr   rG   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r*  )rv   rw   r  )rn   r  rr   ry   s      rU   rw   DataPtrVariable.__init__"	  s    
 	"6"&rW   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )Ndata_ptrr   r  r  s     rU   r  DataPtrVariable.reconstruct*	  s,      !J'ArW   )r  r  )
rS   r  r  r  rY   r   rw   r  r  r  r  s   @rU   rH  rH  !	  s.    '#' ' 
	' rW   rH  )r  r  loggingrT  ra  r]  r=  collections.abcr   r   
contextlibr   	itertoolsr   r   typingr   r	   r
   r   r$  torch._numpy_numpyr\  torch.fxrL   torch.randomtorch._dynamor   torch._library.opaque_objectr   torch._subclasses.meta_utilsr   %torch.fx.experimental.symbolic_shapesr   r   r   r   r   torch.utils._python_dispatchr   r-  r   r   r   _trace_wrapped_higher_order_opr   r   r   r   r   r   r   r  r   r    guardsr!   r"   r   r#   rN   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r  r0   r1   r2   constantr3   r4   listsr5   r6   script_objectr7   user_definedr8   numpyr  ModuleNotFoundErrortorch._dynamo.codegenr9   torch._dynamo.output_graphr:   torch._dynamo.symbolic_convertr;   r<   	functionsr=   rc  r?   	getLoggerrS   r_  gtltgeler  neis_is_notsupported_tensor_comparison_opssupported_const_comparison_opssupported_comparison_opsr  fromkeysr/  %supported_tensor_comparison_op_values$supported_const_comparison_op_valuesr  rJ   rV   r   
TensorBaser  rQ   r/  rY   re  r  rz  r  r  r  rH  ru   rW   rU   <module>r     sL  "       . "   9 9     + A 6  G 3 3 :  O 0     J I > 5 4 2
 /6
 0< ! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
& T  88&&//%,,2G2GG E_ EP6q
o q
h[> [|#
. #
LB~ B*35 3lA_ AHo aF  	Bs   .J JJ