
    7h             	          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rSSK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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#J$r$J%r%J&r&J'r'  SSK(J)r)  SSK*J+r+J,r,  SSK-J.r.  SSK/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9  SSK:J;r;J<r<  SSK=J>r>  SSK?J@r@  SSKAJBrB   SSKCrD\	(       a  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 r]\R                  R                  R                  \R                  R                  -  rb " S S\<5      rc " S S\<5      rd " S S\c5      re " S  S!\c5      rf " S" S#\c5      rg " S$ S%\B5      rh " S& S'\<5      ri " S( S)\<5      rjg! \E a    SrD GNf = f)*a  
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)TYPE_CHECKING)compiled_autograd)is_sparse_any)guard_scalarGuardOnDataDependentSymNodehas_free_symbolsis_symbolicSymTypes)is_traceable_wrapper_subclass   )configgraph_break_hints	variables)trace_wrapped)unimplemented_v2$UnknownPropertiesDuringBackwardTrace	UserErrorUserErrorType)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set_example_valuetensortype_to_dtype   )AttributeMutationNewVariableTracker)ConstantVariable)SizeVariable)UserDefinedClassVariable)	PyCodegenInstructionTranslator)><z>=z<===!=isis not)r0   r1   r.   r/   c                 N   [        U 5      =(       a    [        R                  R                  R	                  U 5      (       + =(       a_    [        U S5      =(       aL    [        U R                  [        R                  5      =(       a!    [        U R                  U R                  S 5      $ )N__self__)callabletorch_dynamoutilsr   hasattr
isinstancer3   Tensorgetattr__name__values    X/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodr@   u   sq     	:##;;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SSSSS.S\R                  R                  SS4U 4S jjjrS rS rS r\S\R                   4S j5       rSdS jrS rS rS rS  rS! rS" rS# rS$ rS% rS& rS' rS( rS) rS* r SdS+ jr!SdS, jr"S- r#S. r$SeSdS/ jjr%S0 r&\'S1 5       r(S2 r)S3 r*      SfS4 jr+S5 r,S6 r-SeS7 jr.S8 r/\/r0S9 r1\1r2S: r3S; r4S< r5SeS= jr6SgS? jr7S@ r8SA r9SB r:S>SC.SD jr;SE r<SF r=SG r>SH r?SI r@\\AR                  SJ 5       5       rCSK rDSSL.SM jrESN rFSO rGSP rHSQ rISR rJSS rKSST.SU jrLSSL.SV jrMSW rNSX rOSY rPSZ rQS[ rRS\\SS]\4S^ jrTShS_ jrUS` rVSa rWS\\S4Sb jrXScrYU =rZ$ )i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_setc                 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   rE   nodetracerselfs    r?   r   TensorVariable.get_real_value   s#     djjootzz/@/@AArA   N)_sizerK   rN   rS   returnc                &  > [         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__rE   rF   rG   rH   rI   rZ   rK   rL   rM   rN   rO   rP   rQ   has_grad_fnrU   oprS   )rX   rE   rF   rG   rH   rI   rL   rO   rM   rP   rQ   ra   rZ   rK   rN   rS   kwargs	__class__s                    r?   r`   TensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".rA   c                 Z    [        U R                  R                  R                  S   5      $ Nexample_value)reprrE   rU   metarW   s    r?   
debug_reprTensorVariable.debug_repr   s     DJJOO((9::rA   c                     U R                   $ NrE   rW   s    r?   as_proxyTensorVariable.as_proxy       zzrA   c                     U R                   $ rn   )rQ   rW   s    r?   python_typeTensorVariable.python_type   s    rA   r>   c                    U R                   U R                  U R                  [        U R                  5      U R
                  U R                  U R                  U R                  [        U 5      S.	n U R                  S LUS'   [        U 5      (       aZ  [        U 5      (       dJ  [        U R                  5        Vs/ s H   n[!        U5      (       a  [        U5      OUPM"     sn5      US'   U$ [        U 5      (       d  [        U R                  5        Vs/ s H   n[!        U5      (       a  [        U5      OUPM"     sn5      US'   [        U R#                  5       5      US'   [$        R&                  R(                  R+                  U 5      (       a  S US'   U$ [        [$        R,                  R.                   Vs/ s H  nU R1                  US9(       d  M  UPM     sn5      US'   U$ ! [         a	    SUS'    GNtf = fs  snf s  snf s  snf )N)	rF   rG   rH   rI   rL   rO   rM   rP   rQ   ra   FrZ   rK   rN   memory_format)rF   rG   rH   intrI   rL   rO   rM   rP   typegrad_fn	Exceptionr   r   tuplerJ   r	   rK   r5   _C
_functorchis_batchedtensor_prims_common_memory_formatsrN   )r>   propssxs       r?   
specializeTensorVariable.specialize   s    [[llll

O"00!..u+

	)#(==#<E-  (8(?(?":?**,G,Q;q>>Qq0,GE'N8 3 "%(( # ;@**,G,Q;q>>Qq0,GE'N
 $ELLN3E(Oxx""33E:: *.o&  */ "'!4!4!D!D!DA ..Q.? !D*o& E  	) $)E- 	) H Hs*   0G# 8'G9'G>5HH#G65G6c                 d   U R                   R                  R                  S   nU R                  (       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      (       d  [        R                  " X5      $ U R                  (       a  U R                  R!                  5       (       d  ["        eUR$                  R&                  UR$                  R(                  S.n	 [+        U R                  R-                  5       U	5      n
U
c  ["        e[1        U
5      (       a  ["        e[3        U
5      (       a  ["        e[        X5      n[5        U R                  U5      n[7        UR9                  [:        R<                  5      5        [?        U5      (       a  SSK J!n  U" XU[E        U5      S9$ [        R                  " XU5      $ ! [.         a  n["        UeS nAff = f)Nrh   r#   wrap_fx_proxy)txrE   rh   LGGetAttrVariable)sourcepy_type)#rE   rU   rj   r   r   __tensor_flatten__r;   rp   r9   r5   r:   builderr   r4   r%   buildsubguards_allowedNotImplementedErroroutputlocal_scopeglobal_scopeevalnamer|   r   r   r   r   
make_guardr   HASATTRr@   miscr   rz   )rX   r   r   fake_valattrs_ctxrE   rh   r   scope_input_associated_real_valueexc
real_valueattr_sourcer   s                  r?   dynamic_getattrTensorVariable.dynamic_getattr
  s   ::??''8 {{<XFF"557KEDMMOT2E#H3M}!->>>>2$}UU m,,&,,R?? = = ? ?%% ii++"))2H2HI	/ ,00@0@0BE+J( (/%%"#?@@%%:;;%%9@
 d3k,,\-A-ABC "*---";Z8H  $$R[AA5  	/%3.	/s   9$H 
H/#H**H/c                     U R                   b   [        R                  " U R                   5      $ U R                  US/ 0 5      $ )Ndim)rI   r&   createcall_methodrX   r   s     r?   method_attr_ndimTensorVariable.method_attr_ndimL  s8    99 #**49955##Br266rA   c                 ^    U R                   b   [        R                  " U R                   5      $ g rn   )rF   r&   r   r   s     r?   method_attr_dtype TensorVariable.method_attr_dtypeR  s&    ::!#**4::66 "rA   c                 ^    U R                   b   [        R                  " U R                   5      $ g rn   )rG   r&   r   r   s     r?   method_attr_device!TensorVariable.method_attr_deviceV  &    ;;"#**4;;77 #rA   c                 ^    U R                   b   [        R                  " U R                   5      $ g rn   )rH   r&   r   r   s     r?   method_attr_layout!TensorVariable.method_attr_layoutZ  r   rA   c                 x    U R                   b-  [        R                  " U R                   R                  S:H  5      $ g )Ncuda)rG   r&   r   rz   r   s     r?   method_attr_is_cuda"TensorVariable.method_attr_is_cuda^  s1    ;;"#**4;;+;+;v+EFF #rA   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 NrJ   )
valid_sizerJ   r   r&   r   r'   r   )rX   r   r   sizess       r?   method_attr_shape TensorVariable.method_attr_shapeb  s`    ??CG99M9aY//66q99EM&&##BB77 Ns   )A.c                 ^    U R                   b   [        R                  " U R                   5      $ g rn   )rL   r&   r   r   s     r?   method_attr_requires_grad(TensorVariable.method_attr_requires_gradi  s*    )#**4+=+=>> *rA   c                 ^    U R                   b   [        R                  " U R                   5      $ g rn   )rM   r&   r   r   s     r?   method_attr_is_quantized'TensorVariable.method_attr_is_quantizedm  s*    (#**4+<+<== )rA   c                 ^    U R                   b   [        R                  " U R                   5      $ g rn   )rP   r&   r   r   s     r?   method_attr_is_sparse$TensorVariable.method_attr_is_sparseq  &    >>%#**4>>:: &rA   c                 ^    U R                   b   [        R                  " U R                   5      $ g rn   )rO   r&   r   r   s     r?   method_attr_is_nested$TensorVariable.method_attr_is_nestedu  r   rA   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     r?   method_attr_retain_grad&TensorVariable.method_attr_retain_grady  s    ="4&5R		
rA   c                     [         R                  " [        R                  R                  R
                  5      R                  X/0 5      $ rn   )r   TorchInGraphFunctionVariabler5   r~   	_autograd_get_data_attrcall_functionr   s     r?   method_attr_dataTensorVariable.method_attr_data  s6    55HH--

-FB
'	(rA   c                 r    U R                   (       a  [        SSU  S3S/ S9  g [        R                  " S 5      $ )NzTensor with grad_fn()r   z grad_fnz@Dynamo does not support tracing tensors with a grad_fn directly.r   )ra   r   r   r&   r   s     r?   method_attr_grad_fn"TensorVariable.method_attr_grad_fn  s;    /&tfH5^	 --d33rA   c                 \    SSK Jn  [        R                  " U5      R	                  X/0 5      $ )Nr   )_tensor_version)tensor_version_opr   r   r   r   )rX   r   r   s      r?   method_attr__version#TensorVariable.method_attr__version  s*    755oFTT
 	
rA   c                    SSK Jn  SSKJn  US;   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   )BuiltinVariable)rJ   rK   TF) r   builtinr   r&   r;   r   r9   AttributeErrorr   r   r   r   r   r   )rX   r   r   r   r   varret_vals          r?   call_obj_hasattrTensorVariable.call_obj_hasattr  s    %, %%#D))	!'*88+D12BC
 %S::G ;;4;;-889M9MN  ((  	G	s   7B. .B=<B=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  UU U4S jnU" 5       nUc  T R7                  TT5      nUc  [8        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 againrd   method_attr_)gradrL   	overloadsr   z9Getting an inplace view on a graph input is not supported)r   msgr   c                  ,  > SSK Jn   SSKJn  [        R                  TS 5      nUc  g [        U5      [        R                  :w  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   rE   r   r   rE   )r   r   r   r   all_tensor_attrsgetrz   typesGetSetDescriptorTypecreate_getattr_proxyrp   r   r   )r   r   static_attrrE   r   rX   r   s       r?   try_generic_attr_handling=TensorVariable.var_getattr.<locals>.try_generic_attr_handling  s    21.224>& $(B(BB'<<T]]_dS;;*(U:dkk43P  )Be<<rA   )is_strict_mode_strict_mode_banned_opsr   #_strict_mode_conditional_banned_opsr   r(   rt   r;   r   r   is_python_constantr   r   r   
TYPE_MATCHr   r8   r5   opsatenr   Taginplace_viewtagsr   r   DelayGraphBreakVariabler   r   )rX   r   r   handlerresultfnr  s   ```    r?   var_getattrTensorVariable.var_getattr  s0   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=2 /0F>))"d3F>%%rA   c           	         U R                   (       d  [        SSU  3S/ S9  UR                  R                  UR                  R                  S.n [        U R                   R                  5       U5      nW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idr&   r   )rX   r   r   r   r   id_values         r?   call_idTensorVariable.call_id  s    {{>"4&)T	 ii++"))2H2HI
	+/0@0@0BE+J( (/A"4&)\	 	dkk,,\-B-BCD23&&x00)  	="4&)1	s   $C 
C<"C77C<c                      U R                   S:  $ )Nr   )rI   r   s     r?   has_unpack_var_sequence&TensorVariable.has_unpack_var_sequence2  s    yy1}rA   c           	      &   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[        [        45      (       d   e[        U[        5      (       a  UR                  UR                  5      nOUR                  nUc  [        U5      nO&[        U5      U:X  d   SU S[        U5       S35       eU Vs/ s H$  nU" [!        U 5      XR#                  5       U   S	9PM&     sn$ s  snf )
Nr#   wrap_fx_proxy_clsrJ   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.
target_clsr   rE   )r   r!  r   lenrJ   r   r9   r'   itemsr&   r   SymNodeVariableevaluate_exprr   r>   rangerz   rp   )	rX   r   idxesr!  size_lensize_varlength
dyn_lengthis	            r?   unpack_var_sequence"TensorVariable.unpack_var_sequence5  sl   .??499~H''FB;Hh55558>>*H1}<<<}??YYq\F))"f7G7N7Nq7Q6RTVWJ j?<L*MNNNN*o66#11"))<#))=&MEu:' +F83I#e*U_`'
 
 d--/RSBTU
 	
 
s    +Fc                     U R                   S L$ rn   rZ   rW   s    r?   r   TensorVariable.valid_sizeX  s    zz%%rA   c                 B    U R                   c   S5       eU R                   $ )Nz%accessing None size in TensorVariabler2  rW   s    r?   rJ   TensorVariable.size[  s"    zz%N'NN%zzrA   c                 J    [         R                  R                  R                  $ rn   )r5   r6   r   )_autograd_backward_strict_mode_banned_opsrW   s    r?   r  &TensorVariable._strict_mode_banned_ops`  s    }}##MMMrA   c                 J    [         R                  R                  R                  $ rn   )r5   r6   r   5_autograd_backward_strict_mode_conditional_banned_opsrW   s    r?   r  2TensorVariable._strict_mode_conditional_banned_opsc  s    MM  VV	
rA   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" U0 UD6nU(       a  U$  SSK Jn  U" UUR8                  R:                  " S U/[=        U /UQU5      Q76 5      $ ! [2         a'  n[        SSU  SU SU SU 3SU S3/ US9   S nANdS nAff = f! [4         a     Nxf = f)!Nr#   )SourcelessBuilderVariableBuilder)can_dispatch_torch_functiondispatch_torch_functionz(Illegal method invocation in strict modecall_method r   z/Dynamo currently does not support this method (z) invocation in strict mode.r   rd   __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 ``.r  r   r   )r   r=  r>  torch_functionr?  r@  r  r  r   r   r   r}   listr   r   r   r;   r5   r:   r9   r(   r   r&   r   SUPPORTABLE	TypeErrorr   r   r   create_proxyr    )rX   r   r   argsrc   r=  r>  r?  r@  r  is_base_tensor_methodfunc_varhandler_methodr  er   s                   r?   r   TensorVariable.call_methodh  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'88!M  	+II"" #D=4=&9
 	
   7*4&$qaxH!##'&!,  		s*    I H 
I$II
IIc                 .    U R                   " S/UQ70 UD6$ r   _method_size_striderX   rP  rc   s      r?   method_sizeTensorVariable.method_size  s    ''@@@@rA   c                 .    U R                   " S/UQ70 UD6$ )NrK   rW  rY  s      r?   method_strideTensorVariable.method_stride  s    ''B4B6BBrA   c                 r   [        U5      nS 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c9  [        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 g )Nc           
      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 rn   )r'   r&   r   )r   optionsys      r?   make_const_size_variableDTensorVariable._method_size_stride.<locals>.make_const_size_variable  s=    @AB1!((6g6BFM Bs   !3rJ   rh   c              3   8   #    U  H  n[        U5      v   M     g 7frn   ry   .0rs     r?   	<genexpr>5TensorVariable._method_size_stride.<locals>.<genexpr>  s     ,DVSVVV   )r   r&   r   r;   r   rJ   rE   rU   rj   r   r   r}   ry   )rX   r   r   rc  RetVariableri  fakefake_rs           r?   rX  "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;?? 0 KrA   c                 d   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 g rg   )r   r&   r   r   rJ   rE   rU   rj   r   numelr   ry   )rX   rn  ro  s      r?   method_numelTensorVariable.method_numel   s    ??#**7499+=>> JJOO((,,_==DJZZ\F#F++'..s6{;; , KrA   c                 ^    U R                   b   [        R                  " U R                   5      $ g rn   )rI   r&   r   rW   s    r?   
method_dimTensorVariable.method_dim  s&    99 #**49955 !rA   c                 r    U R                   b*  [        R                  " U R                   R                  5      $ g rn   )rF   r&   r   is_floating_pointrW   s    r?   method_is_floating_point'TensorVariable.method_is_floating_point  s,    ::!#**4::+G+GHH "rA   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   rh   )r   "fake_tensor_disable_inference_moder   r   FUNDAMENTALINFERENCE_MODErE   rU   rj   r   r&   r   is_inference)rX   rn  s     r?   method_is_inference"TensorVariable.method_is_inference  s    44JD&22&55	 JJOO((,,_==DJ#**4+<+<+>?? KrA   c                 r    U R                   b*  [        R                  " U R                   R                  5      $ g rn   )rF   r&   r   
is_complexrW   s    r?   method_is_complex TensorVariable.method_is_complex$  s,    ::!#**4::+@+@AA "rA   c                 R   Ub  UR                  5       O[        R                  nU R                  b"  [        R
                  " XR                  ;   5      $ U R                  R                  R                  R                  S5      =nb#  [        R
                  " UR                  US95      $ g )Nrh   rw   )
as_python_constantr5   contiguous_formatrN   r&   r   rE   rU   rj   r   )rX   rx   rn  s      r?   method_is_contiguous#TensorVariable.method_is_contiguous(  s     ( ,,.(( 	
 )#**=<N<N+NOOjjoo**..??dL#**"""?  MrA   Fc           
        ^  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  a  UR                  5       n[        R                  " [        U5      5      nSSKJn  SS	KJn  UR"                  " 5       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 g )Nc              3   P   >#    U  H  u  pTR                   U;   d  M  Uv   M     g 7frn   )rF   )rh  kvrX   s      r?   rj  -TensorVariable.method_type.<locals>.<genexpr>;  s#      9daTZZ1_9s   &	&cpuztorch..ztorch.tensortyper   r*   r#   r   non_blockingr   rz   )rF   r9   rG   r5   nextr"   r%  rz   r&   r   r<   r   r  symbolic_convertr+   r   r   
current_txr   rO  r    )
rX   rF   r  rc   
tensortypetensor_typetensor_type_constr+   r   r   s
   `         r?   method_typeTensorVariable.method_type5  si   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@.&113B(,A&A 		&&! '.?'@&I ! L rA   c                    [        U[        5      (       a  UR                  (       a|  SSKJn  SSKJn  UR                  " 5       nUR                  5       nUR                  X@XQR                  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*   r#   TensorWithTFOverrideVariablemutation_type_clszHArgument of `as_subclass` must be a non-dispatcher-style tensor subclassz.as_subclass(rF  Currently not supportedz:Avoid this call or move it outside `torch.compile` regioner   )r9   TensorSubclassVariabler   r  r+   rK  r  r  r  from_tensor_varr   side_effects
_track_objobjectr$   r   r   rM  )rX   clsr+   r  r   py_clsr   s          r?   method_as_subclass!TensorVariable.method_as_subclass_  s    c122szz@D&113B++-F.>>&**C II""--#1E .  J^fM#a01L"..		
rA   c                     [        U R                  [        R                  5      (       aH  U R                  R                  S:w  a  U R                  R                  OSn[
        R                  " U5      $ g )Nr  )r9   rG   r5   rz   indexr&   r   )rX   r  s     r?   method_get_device TensorVariable.method_get_devicex  sO    dkk5<<00)-)9)9U)BDKK%%E#**511 1rA   c                 V    [         R                  " U R                  R                  5      $ rn   )r&   r   rF   itemsizerW   s    r?   method_element_size"TensorVariable.method_element_size}  s    &&tzz':':;;rA   )forcec                Z   [         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SSKJ	n  UR                  " 5       n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%                  X55      $ )Nz%Tensor.numpy() with trace_numpy=FalserA  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() firstr   r*   detachr   r  view_as)r   trace_numpyr   nprH   r5   stridedrN  r  r+   r  r  r   r   rO  rp   r    NumpyNdarrayVariabler   )rX   r  r+   r   trE   s         r?   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5rA   c                    ^ ^^^ SSK Jn  SSKJm  UR                  " 5       mU UUU4S jmT R                  5       R                  R                  S   nT" UT R                  5       5      n[        R                  " TU5      $ )Nr   r*   r#   r   c           	        > UU	4S 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 )Nc                    > [         R                  R                  R                  TR                  SS5         T" TUR                  5       5      sS S S 5        $ ! , (       d  f       g = f)Nallow_scalar_outputsT)unittestmockpatchr  	fake_modeitem)r.  	sub_proxyr   r   s     r?   wrap:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrap  sP     ]]((//LL"8$ )!(  s   A
A&z'Tensor.tolist() with non-integer tensorrA  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  )	rF   r5   int8int16int32int64r   r   	enumerate)
tensorr  r  r.  val
sub_tensorrX   tolistr   r   s
         r?   r  ,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   $C&C,rh   )
r  r+   r   r   r  rp   rU   rj   r%   r   )rX   r+   r  outr  r   r   s   `   @@@r?   method_tolistTensorVariable.method_tolist  se    <*"--/&	 &	P %%**?;VT]]_-$$R--rA   c           	      N    [        SSU  SU SU 3S/ [        R                  QS9  g )Nz"Unsupported Tensor.backward() callrA  z
 backward r   z>Dynamo currently does not support tracing `Tensor.backward()`.r   )r   r   r~  rY  s      r?   method_backwardTensorVariable.method_backward  s5    8"4&
4&&BX2%112		
rA   c                     [        U 5      $ rn   )DataPtrVariablerY  s      r?   method_data_ptrTensorVariable.method_data_ptr  s    t$$rA   c           	      |    [         R                  (       d'  U R                  5         [        SSU  SU SU 3SS/S9  g g )Nz@Unsupported Tensor.item() call with capture_scalar_outputs=FalserA  z item r   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   )r   capture_scalar_outputs_warn_capture_scalar_outputsr   rY  s      r?   method_itemTensorVariable.method_item  sM    ,,--/Z&tfF4&&B<I
 -rA   c           	      n   SSK Jn  SSKJn  UR                  " 5       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" XW5      $ )Nr   r*   r#   r   r   r   )r  r+   r   r   r  r9   r&  r5   selectr   r&   r   operatorgetitemr   rO  r    rL  )rX   rP  rc   r+   r   r   r  rE   s           r?   method___getitem__!TensorVariable.method___getitem__  s    <*"--/d1g//
 ..55a8G  !!B		&&
 vT
2F;
 R''rA   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
                )r5   _guardsTracingContextextract_stackjoin	tracebackformat_listlogwarningtextwrapdedent)
user_stackuser_stack_formatteds     r?   r  +TensorVariable._warn_capture_scalar_outputs  sX     ]]11??A
!wwy'<'<Z'HIOO	 !	
rA   c                     SSK Jn  UR                  " 5       nU R                  US[        R
                  " S5      /0 5      $ )Nr   r*   rJ   r   )r  r+   r  r   r&   r   )rX   r+   r   s      r?   method___len__TensorVariable.method___len__'  s9    <"--/F-=-D-DQ-G,H"MMrA   r=   c                    SSK Jn  UR                  " 5       nUb9  SSKJn  UR                  [        R                  " XVR                  5      XX#/0 5      $ g )Nr   r*   )	polyfills)	r  r+   r  r   r  inline_user_function_returnr%   r   addcmul_inplace)rX   tensor1tensor2r>   r+   r   r  s          r?   method_addcmul_TensorVariable.method_addcmul_-  sS    <"--/$11%%b*C*CD/  rA   c                    SSK Jn  UR                  " 5       nUR                  R                  " S[
        R                  /[        XU/0 5      Q76 n[        R                  (       d  [        R                  (       a0  UR                  R                  R                  UR                  S5        [        R                  " S 5      $ )Nr   r*   r   r   )r  r+   r  r   rO  r  setitemr    r   use_graph_deduplicationtrack_nodes_for_deduplicationregion_trackeradd_node_mutationrU   r&   r   )rX   keyr>   r+   r   rE   s         r?   method___setitem__!TensorVariable.method___setitem__:  s    <"--/		&&
 5126
 ))V-Q-QII$$66uzz1E&&t,,rA   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz!Unsupported Tensor.resize_() callrA  z	 resize_ r   z=Dynamo currently does not support tracing `Tensor.resize_()`.r   r   rY  s      r?   method_resize_TensorVariable.method_resize_I  s)    7"4&	$qAW		
rA   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz$Unsupported Tensor.resize_as_() callrA  z resize_as_ r   z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r   r   rY  s      r?   method_resize_as_ TensorVariable.method_resize_as_Q  s)    :"4&TF!F8DZ		
rA   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz(Unsupported Tensor.sparse_resize_() callrA  z sparse_resize_ r   zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r   r   rY  s      r?   method_sparse_resize_$TensorVariable.method_sparse_resize_Y  s*    >"4&(8axH^		
rA   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz2Unsupported Tensor.sparse_resize_and_clear_() callrA  z sparse_resize_and_clear_ r   zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r   r   rY  s      r?   method_sparse_resize_and_clear_.TensorVariable.method_sparse_resize_and_clear_a  s*    H"4&(B4&&Rh		
rA   c           	      n    [        U5      S:  a&  [        SSU  SU SU 3S/ [        R                  QS9  g g )Nr#   zUnsupported Tensor.set_() callrA  z set_ r   zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r   )r$  r   r   rM  rY  s      r?   method_set_TensorVariable.method_set_i  sJ    t9q= 8&tfF4&&BA6)556 rA   )alphac                    Ubb  SSK Jn  UR                  " 5       n[        R                  " [
        R                  5      R                  XAU/0 5      nU R                  USU/0 5      $ g Nr   r*   add_)	r  r+   r  r   r   r5   mulr   r   )rX   otherr  r+   r   r  s         r?   method_add_TensorVariable.method_add_y  sa    @&113B;;EIIFTTENBF ##B"== rA   c                :   SSK Jn  UR                  " 5       nUb  [        R                  " [
        R                  5      R                  XQU/0 5      n[        R                  " [
        R                  5      R                  XVU/0 5      nU R                  USU/0 5      $ g r  )
r  r+   r  r   r   r5   divr   r  r   )rX   r  r   r>   r+   r   r  s          r?   method_addcdiv_TensorVariable.method_addcdiv_  s    <"--/;;EIIFTTg&F ;;EIIFTTUORF ##B"== rA   c                 .   SSK Jn  UR                  " 5       n[        R                  " [
        R                  5      R                  X0U/0 5      n[        R                  " [
        R                  5      R                  X4/0 5      nUR                  US/ 0 5      $ )Nr   r*   r  )
r  r+   r  r   r   r5   eqr   anyr   )rX   argr+   r   r  s        r?   method___contains__"TensorVariable.method___contains__  s~    <"--/ 77AOOsR
 77		BPP"
 !!"fb"55rA   c           
      t  ^
^ SSK Jn  UR                  " 5       nU Vs/ s H  oUR                  5       PM     snm
UR	                  5        VVs0 s H  u  pgXgR                  5       _M     snnmU
U4S 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   r*   c                 (   > U R                   " T0 TD6$ rn   )redistributer   args_as_valuekwargs_as_values    r?   redistribute_fn_with_prim_typesKTensorVariable.method_redistribute.<locals>.redistribute_fn_with_prim_types  s    >>=DODDrA   prim_redistributer#   r   r   r   r  r+   r  r  r%  r<   r   r   r   rO  r    )rX   rP  rc   r+   r   r   r  r  r3  r   r1  r2  s             @@r?   method_redistribute"TensorVariable.method_redistribute  s    <"--/ :>>A--/>AGP12244P	E 4G'0*))((/ #D62.
 	
 ?P   B/B4c           
      t  ^
^ SSK Jn  UR                  " 5       nU Vs/ s H  oUR                  5       PM     snm
UR	                  5        VVs0 s H  u  pgXgR                  5       _M     snnmU
U4S 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   r*   c                 (   > U R                   " T0 TD6$ rn   )to_localr0  s    r?   to_local_fn_with_prim_typesCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_types  s    ::}@@@rA   prim_to_localr#   r   r   r   r6  )rX   rP  rc   r+   r   r   r  r  r=  r   r1  r2  s             @@r?   method_to_localTensorVariable.method_to_local  s    <"--/ :>>A--/>AGP12244P	A 0?#,*))((+ #D62.
 	
 ?Pr9  c                 .    U R                   " S/UQ70 UD6$ )Nregister_hook_method_register_hookrY  s      r?   method_register_hook#TensorVariable.method_register_hook  s    ))/KDKFKKrA   c                 .    U R                   " S/UQ70 UD6$ )N"register_post_accumulate_grad_hookrD  rY  s      r?   )method_register_post_accumulate_grad_hook8TensorVariable.method_register_post_accumulate_grad_hook  s(    ))0
37
;A
 	
rA   r   hookc           	      J  ^^
 SSK Jn  UR                  " 5       nU R                  (       d  [        R
                  (       d  [        SSU  ST 3S/ S9  UR                  R                  U5      u  m
nU
U4S jnS	S
K	J
n  U R                  5       nSUR                  R                  S'   U" UUR                  R                  SUX40 5      5      $ [        R                   " [        R"                  R%                  5       S9n	UR                  R&                  R)                  XU	T5        U	$ )Nr   r*   z<Compilation of intermediate hooks requires compiled autogradr   r   z6Dynamo must be in compiled_autograd to register hooks.r   c           	      h   > [        U T5      nU" [        R                  " [        [        UTS95        g )N)r  bw_state	hook_name)r;   	functoolspartialr   r   )r  rO  rC  rP  r   s      r?   _register_hook_trampolineGTensorVariable._method_register_hook.<locals>._register_hook_trampoline  s6     ' 5%%%8!)"+	 rA   r#   r   Thas_backward_hookr   )mutation_type)r  r+   r  r   r   compiled_autograd_enabledr   r   add_backward_state_hookr   r   rp   rU   rj   rO  r   RemovableHandleVariablebaseValueMutationNewr  rC  )rX   r   rL  r+   r   bw_state_proxyrS  r   
self_proxyhandle_variablerP  s    `        @r?   rE  $TensorVariable._method_register_hook  s    	="--/{{$>>  !Z*4&$8 X	 )+		(I(I$(O%I~ /J8<JOO  !45 		&&#-0	  $;;#..99;
 			,,T$OrA   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 $ )NTrh   z(Unsupported Tensor.requires_grad_() callrA  z requires_grad_zaDynamo does not support changes to a Tensor's `requires_grad` through calling `requires_grad_()`.r   )r  rp   rU   rj   rL   r   )rX   rL   s     r?   method_requires_grad_$TensorVariable.method_requires_grad_"  sd    $)<<>M==?$$_5CC}TB&tfO<F KrA   c                     [        U5      S:X  a  [        US   [        5      (       d&  [        U5      S:  a@  [        S U 5       5      (       a(  SSKJn  U R                  UR                  " 5       SX5      $ g g )Nr#   r   c              3   ~   #    U  H3  n[        U[        5      =(       a    UR                  5       [        :H  v   M5     g 7frn   )r9   r&   rt   ry   )rh  as     r?   rj  ,TensorVariable.method_new.<locals>.<genexpr>6  s/      TXq
1./JAMMOs4JJTXs   ;=r   r*   	new_empty)r$  r9   r'   allr  r+   r   r  )rX   rP  rc   r+   s       r?   
method_newTensorVariable.method_new1  sw     INz$q'<@@IN TX   A##%002K  rA   c                 ~    [        X R                  5       R                  R                  S   R	                  5       5      $ rg   )UntypedStorageVariablerp   rU   rj   untyped_storagerW   s    r?   method_untyped_storage%TensorVariable.method_untyped_storage@  s2    %--/&&++O<LLN
 	
rA   c                     U R                   (       d-  U R                  R                  R                  U5        SU l         g g )NT)rS   rE   rU   _rename)rX   r   s     r?   set_name_hintTensorVariable.set_name_hintE  s.      JJOO##D) $D !rA   )rS   rZ   rQ   rG   rF   ra   rN   rO   rM   rP   rH   rI   rE   rL   rK   r   r+   rn   rP  zlist[VariableTracker]rc   zdict[str, VariableTracker]r[   r%   )NFT)[r<   
__module____qualname____firstlineno____doc__r%   _nonvar_fieldsr   r5   fxProxyr`   rk   rp   rt   staticmethodr:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r/  r   propertyrJ   r  r  r   rZ  r]  rX  rs  method_nelementrv  method_ndimensionrz  r  r  r  r  r  r  r  r  r  r  r  r  r  rQ  cacher  r  r  r
  r  r  r  r  r  r!  r%  r+  r7  r@  rF  rJ  strrE  ra  ri  rn  rr  __static_attributes____classcell__rd   s   @r?   rC   rC      s   G 	  
	'	'!N&B. #&/xx~~&/& 
'&/ &/P; 0%,, 0 0d@BD7788G8?>;;
(
	4
)8Yv!1F!
F&  N

g
 &	g

 -g
 
g
RAC'@R< #O6 #I@B(T
22
< %* )6V0.d
%(6 __
  
&N :> -



  +/ > :> >6"
4
4L

C# C_ CJ

%# % %rA   rC   c                      ^  \ rS rSrSrSS1\R                  krS r\SS j5       r	SU 4S jjr
S rS	 rS
 rSS jr      SS jrSrU =r$ )r&  iK  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.
rE   sym_numc                 ,    [        U R                  5      $ rn   )ri   r  rW   s    r?   rk   SymNodeVariable.debug_reprX  s    DLL!!rA   c                    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$ rg   )r   rU   rj   r!   r9   sympyIntegerry   boolr&   r   r&  )r  r   rE   r  ra  s        r?   r   SymNodeVariable.create[  s    ?$UZZ4Gejjoo-::???3w>>>%**g.gsD9::&0%--&H&Hc'lgG#**733u999rA   c                 L   > [         TU ]  " S0 UD6  Xl        X l        S U l        g Nr^   )r_   r`   rE   r  _tensor_var)rX   rE   r  rc   rd   s       r?   r`   SymNodeVariable.__init__i  s%    "6"
rA   c                     [        U R                  [        5      (       a   U R                  R                  R                  $ [        U R                  5      $ rn   )r9   r  r
   rU   pytyperz   rW   s    r?   rt   SymNodeVariable.python_typep  s8    dllH--<<$$+++%%rA   c                     U R                   $ rn   ro   rW   s    r?   rp   SymNodeVariable.as_proxyv  rr   rA   c           	          U R                   cQ  [        R                  " U[        R                  5      R                  X/S[        R                  " X5      05      U l         U R                   $ )NrF   )r  r%   r   r5   scalar_tensorr   )rX   r   rF   s      r?   	as_tensorSymNodeVariable.as_tensory  s[    #.44E'' mB/2G2G2R(ST  rA   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   r5   r|  experimental_configno_data_dependent_graph_breakr   r   ANTI_PATTERNr  )rX   output_graphrT  s      r?   r'  SymNodeVariable.evaluate_expr  si    
	--* 	xx$$,,JJ**GAxP5 		s    
A?AA::A?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   rO  r    )rX   r   r   rP  rc   r   s         r?   r   SymNodeVariable.call_method  sF     	+II"" #D=4=&9
 	
rA   )r  rE   r  rn   )r[   Nru  )r<   rw  rx  ry  rz  r%   r{  rk   classmethodr   r`   rt   rp   r  r'  r   r  r  r  s   @r?   r&  r&  K  s     	 
	'	'N" : : & 
 &	

 -
 

 
rA   r&  c                   p   ^  \ rS rSrSr\S	S j5       rS	S jr\S 5       r      S
U 4S jjr	S 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.
c                 .    SSK Jn  U" S[        U US.UD6$ )Nr#   r   r"  r^   )r   r!  r  )r   rE   ra  r!  s       r?   r   NumpyNdarrayVariable.create  s*    .  
+
 	
 	
rA   c                 N  ^ ^^^	^
 SSK Jm	  SSKJm
  S nT R	                  5       R
                  R                  S   n[        R                  " U5      nUU	U UU
4S 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;   a  ['        SST  ST 3ST S3/ S9  Uc  [(        eU$ )Nr   )numpy_attr_wrapperr#   r   rh   c            	      n   > T" TTR                   R                  STTR                  5       T 40 5      5      $ )Nr   )r   rO  rp   )r   r  rX   r   r   s   r?   insert_into_graph;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  s;     		&&#%7$--/49PRT rA   )Trealimagr   )rI   r  )shaperK   c              3   8   #    U  H  n[        U5      v   M     g 7frn   rf  rg  s     r?   rj  3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s     4GQSVVQrl  rJ   )rZ  flagsrF   z$Unsupported ndarray attribute accessr   r   z3Dynamo currently does not support tracing `ndarray.rJ  r   )__version__z&Unsupported ndarray.__version__ access)r7   r  r   r   rp   rU   rj   tnpndarrayr   rO  r  r   r&   r;   r   r}   rJ   ry   r   r   )rX   r   r   r  rh   example_ndarrayr  rE   ri  r  r   s   ```      @@r?   r   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	 >%%rA   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   rP  rc   kwargs_renamer  r  s         r?   
patch_argsNumpyNdarrayVariable.patch_args  sM    6>&+e<M=C\\^L^TQm''-q0^FL| Ms   Ac                 H  > SSK Jn  U R                  X#U5      u  p4US;   a  [        TU ]  XX45      $ US;   a  [        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   )numpy_method_wrapper)__len__rJ   r  )tostringtobytes__delattr__zUnsupported ndarray method callrA  r   z	`ndarray.z&()` is not modelled in `torch._numpy`.r   r   )r7   r  r  r_   r   r   r   rO  r    rL  r  r   )rX   r   r   rP  rc   r  rE   rd   s          r?   r    NumpyNdarrayVariable.call_method  s     	1t6:007&r>>999&tfAdV1TF!F8D'v-ST	 		&& &
 vT
2F;

 $**255rA   c                 "    [         R                  $ rn   )r  r  rW   s    r?   rt    NumpyNdarrayVariable.python_type  s    zzrA   r^   rt  ru  )r<   rw  rx  ry  rz  r~  r   r  r  r   rt   r  r  r  s   @r?   r  r    sd    
 
 
EN  6 &	6
 -6 
68 rA   r  c                      ^  \ rS rSrSrSS1\R                  krSSS.S\R                  R                  S	S4U 4S
 jjjr
\SS 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  rE   r[   c                @   > [         TU ]  " U40 UD6  X l        X0l        g rn   )r_   r`   r  r  )rX   rE   r  r  rc   rd   s        r?   r`   $UnspecializedPythonVariable.__init__*  s"     	)&)"&rA   c                 H    [        S0 [        UR                  5      DUUS.D6$ )Nr  r^   )r  dict__dict__)r  tensor_variabler  r  s       r?   from_tensor_variable0UnspecializedPythonVariable.from_tensor_variable1  s/     + 
?++,
#
 	
rA   )r  r  rv  r<   rw  rx  ry  rz  rC   r{  r5   r|  r}  r`   r  r  r  r  r  s   @r?   r  r    sd    
 	 
	&	&N 37D'XX^^'	' ' 
 
rA   r  c                      ^  \ rS rSrSrS1\R                  krS\R                  R                  SS4U 4S jjr
\S 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  rE   r[   Nc                 X   > UR                  SS5      n[        TU ]  " U40 UD6  X0l        g )Nr  F)popr_   r`   r  )rX   rE   rc   r  rd   s       r?   r`   FakeItemVariable.__init__D  s+    jj6)&)&rA   c                 >    [        S0 [        UR                  5      D6$ r  )r  r  r  )r  r  s     r?   r  %FakeItemVariable.from_tensor_variableI  s    A$'?'?"@AArA   )r  r  r  s   @r?   r  r  ;  sS    9 			&	&N
'ehhnn '4 '
 B BrA   r  c                   D    \ rS rSrSSS\\   S\\\4   S\4S jrS r	S	r
g
)r  iN  r   r+   rP  rc   r[   c           	         SSK Jn  U R                  R                  nU[        R
                  R                  L a  [        U5      S:X  aT  [        US   [        5      (       a<  [        U5      S:X  a-  US   nUR                  XU R                  U R                  5      nO[[        SU R                   SU SU S3SS	/[        R                  QS
9  O*[        R                  " X5      R!                  X/U-   U5      nU R                  R"                  nU[        R
                  R"                  La(  [        R                  " X5      R!                  UW/U5        UR$                  R&                  R)                  [+        5       W[,        S9  U$ )Nr#   r  r   zCCalling subclass default constructor with more than tensor argumentrD  rE  rF  r  zFAvoid this constructor call or move it outside `torch.compile` regioner   r  )rK  r  r>   __new__r5   r:   r$  r9   rC   r  r   r   r   rM  r%   r   r   r`   r   r  r  r  r$   )	rX   r   rP  rc   r  new_funcdatar   	init_funcs	            r?   r   $TensorSubclassVariable.call_functionO  s[    	A::%%u||+++D	QtAw77K1$Aw 3BBdjj$++ !a#zzl&ixqI 92 +66		 "''5CCFTM6C
 JJ''	 ELL111!!"0>>rC5&Q 			))Hc-A 	* 	
 
rA   c                     U R                   $ rn   r=   rW   s    r?   r  )TensorSubclassVariable.as_python_constant  rr   rA   r^   N)r<   rw  rx  ry  rL  r%   r  r  r   r  r  r^   rA   r?   r  r  N  sB    2#2 ?#2 S/)*	2
 
2hrA   r  c                      ^  \ rS rSrS1\R
                  krS\S\R                  SS4U 4S jjr	S\
\   S\\\4   S\4U 4S	 jjrSS
 jrSrU =r$ )rl  i  rh   from_tensorr[   Nc                 >   > [         TU ]  " S0 UD6  Xl        X l        g r  )r_   r`   r  rh   )rX   r  rh   rc   rd   s       r?   r`   UntypedStorageVariable.__init__  s!     	"6"&*rA   rP  rc   c           	        > US:X  a  U(       a   eU(       a   e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  av  U(       a   eUR                  R                  S[        R                   R"                  R$                  U R                  R                  5       US   R                  5       40 5        U $ [&        TU ]Q  XX45      $ )	NrJ   r   )untyped_storage_sizer#   r   r   resize_r   )rh   rJ   r   r&   r   ry   external_utilsr  r   r   r   rO  r  rp   r$  r5   r	  inductorresize_storage_bytes_r_   r   )	rX   r   r   rP  rc   r  r  r   rd   s	           r?   r   "UntypedStorageVariable.call_method  s    6>O8:'',,.F#F++'..s6{;;A2$II**',))2246	  9Ta:II""		""88!!**,d1g.>.>.@A	 Kw"2T::rA   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )Nrm  r   r  load_methodr   rX   codegens     r?   reconstruct"UntypedStorageVariable.reconstruct  s-      !-.ArA   )rh   r  r  r)   )r<   rw  rx  ry  r%   r{  rC   r5   UntypedStorager`   rL  r  r  r   r  r  r  r  s   @r?   rl  rl    s    		'	'N
	+#	+ ++	+
 
	+%; ?#	%;
 S/)*%; 
%;N rA   rl  c                   >   ^  \ rS rSrS\SS4U 4S jjrSS jrSrU =r$ )	r  i  r  r[   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r  )r_   r`   r  )rX   r  rc   rd   s      r?   r`   DataPtrVariable.__init__  s    
 	"6"&rA   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )Ndata_ptrr   r  r  s     r?   r  DataPtrVariable.reconstruct  s,      !J'ArA   )r  r  )	r<   rw  rx  ry  rC   r`   r  r  r  r  s   @r?   r  r    s$    '#' 
	' rA   r  )krz  rQ  loggingr  r  r  r   r  typingr   r  torch._numpy_numpyr  torch.fxr5   torch.randomtorch._dynamor   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   guardsr   r   r   r   r7   r   r   r   r   r   r   r   r    r!   r"   rZ  r$   r%   constantr&   listsr'   user_definedr(   numpyr  ModuleNotFoundErrortorch._dynamo.codegenr)   torch._dynamo.symbolic_convertr+   	getLoggerr<   r  gtltgeler(  neis_is_notsupported_tensor_comparison_opssupported_const_comparison_opssupported_comparison_opsr  fromkeysvalues%supported_tensor_comparison_op_values$supported_const_comparison_op_valuesr@   r~   
TensorBaser  r:   r   rC   r&  r  r  r  r  rl  r  r^   rA   r?   <module>r*     s  "              + 6  G 3 3 :  ; 0    8 &  2
 /D ! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
 88&&//%,,2G2GG B%_ B%J&R
o R
j|> |~
. 
8B~ B&65 6r;_ ;|o s3  	Bs   :I II