
    ȅi5             	          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  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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/J0r0  SSK1J2r2J3r3  SSK4J5r5  SSK6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArA  SSKBJCrCJDrDJErE  SSKFJGrG  SSKHJIrIJJrJ  SSKKJLrL   SSKMrN\(       a   SSKPJQrQ  SSKRJSrS  SSKTJUrUJVrV  SSKWJXrX  SSKYJZrZ  \R                  " \\5      r]\R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  S.rf\R                  \R                  \R                  \R                  S.rg0 \fE\gErh\iR                  \fR                  5       5      rl\iR                  \gR                  5       5      rmS\nS \o4S! jrp\R                  R                  R                  \R                  R                  -  ru " S" S#\E5      rv " S$ S%\E5      rw " S& S'\v5      rx " S( S)\v5      ry " S* S+\v5      rz " S, S-\L5      r{ " S. S/\E5      r| " S0 S1\E5      r}g! \O a    SrN GNf = f)2a  
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)Sequence)nullcontext)NoneType)AnyNoReturnOptional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$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raise_args_mismatchset_example_valuetensortype_to_dtype   )AttributeMutationNewValueMutationNewVariableTracker)ConstantVariable)ListIteratorVariableSizeVariable)UserDefinedClassVariable)	PyCodegen)OutputGraph)InstructionTranslatorInstructionTranslatorBase)UserFunctionVariableTensorWithTFOverrideVariable)><z>=z<===!=isis not)r=   r>   r;   r<   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
isinstancerB   Tensorgetattr__name__r?   s    X/home/james-whalen/.local/lib/python3.13/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodrO   }   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\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S, jr%SSS\#S-  4S- jr&SSS\#S-  4S. jr'SSS\#S-  4S/ jr(SSS\#S-  4S0 jr)SSS\*4S1 jr+SSS\4S2 jr,SSS\#S-  4S3 jr-SSS\4S4 jr.SSS%\S\#4S5 jr/SSS%\S\4S6 jr0SSS\4S7 jr1SSS\4S8 jr2 SSSS9\3\   S-  S\4\   4S: jjr5SSS;S<S=\S>\3\   S?\\\4   S\4S@ jr6S\4SA jr7\8S\\S4   4SB j5       r9S\4\   4SC jr:S\4\   4SD jr;SSS%\SE\3\   SSFS\4
SG jr<SSSE\S\S\S-  4SH jr=SSSE\S\S\S-  4SI jr> SS%\SJ\S-  S\S-  4SK jjr?SSS\S-  4SL jr@\@rASSS\S-  4SM jrB\BrCSSS\#S-  4SN jrDSSS\#S-  4SO jrESSS\#S-  4SP jrF SSSSQ\S-  S\#S-  4SR jjrG  SSSS\S-  ST\S\S\S-  4
SU jjrHSSSV\SSW4SX jrISSS\S-  4SY jrJSSS\4SZ jrKSSS[.SSS\\\-  SS]4S^ jjrLSSS\4S_ jrMSSSE\S\S\*4S` jrNSSSE\S\SSa4Sb jrOSSSE\S\SS4Sc jrPSSSE\S\S\4Sd jrQ\\RR                  SSe j5       5       rTSSS\4Sf jrUSSS\V4Sg jrWSSh.SSSi\Sj\S#\S-  S\S-  4
Sk jjrXSSSl\S#\S\4Sm jrYSSSE\S\S\*4Sn jrZSSSE\S\S\*4So jr[SSSE\S\S\*4Sp jr\SSSE\S\S\*4Sq jr]SSSE\S\SS4Sr jr^SSs.SSSt\Su\S-  S\S-  4Sv jjr_SSh.SSSiS SjS S#\S-  S\S-  4
Sw jjr`SSSx\S\4Sy jraSSSE\S\S\4Sz jrbSSSE\S\S\4S{ jrcSSSE\S\S\4S| jrdSSSE\S\S\4S} jreSSS%\S~\S\4S jrf SSSS
\\-  S\4S jjrgS\*4S jrhSSSE\S\S\S-  4S jri    SS jrjS%\SS4S jrkS\4S jrlS\4S jrmSt\nS\4S jroSrpU =rq$ )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_setr@   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"   rT   nodetracerselfs    rN   r"   TensorVariable.get_real_value   s#     djjootzz/@/@AArP   N)_sizerZ   r]   rb   has_grad_fnri   .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__rT   rU   rV   rW   rX   ri   rZ   r[   r\   r]   r^   r_   r`   rj   rd   oprb   )rg   rT   rU   rV   rW   rX   r[   r^   r\   r_   r`   rj   ri   rZ   r]   rb   rk   	__class__s                    rN   rp   TensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".rP   txr4   
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)
builderrw   rx   typerT   rd   metagetitemssetattr)	rg   rt   ru   rw   rx   ry   specialized_propskvs	            rN   synchronize_attributes%TensorVariable.synchronize_attributes   sn     	HdJ

,,00A1M+>}+M
 &++-DADQ .rP   c                 Z    [        U R                  R                  R                  S   5      $ Nry   )reprrT   rd   r|   rf   s    rN   
debug_reprTensorVariable.debug_repr   s     DJJOO((9::rP   c                     U R                   $ NrT   rf   s    rN   as_proxyTensorVariable.as_proxy       zzrP   c                     U R                   $ r   )r`   rf   s    rN   python_typeTensorVariable.python_type   s    rP   c                     gNTrn   rf   s    rN   	is_tensorTensorVariable.is_tensor       rP   r?   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)	rU   rV   rW   rX   r[   r^   r\   r_   r`   rj   Fc              3   \   #    U  H"  n[        U5      (       a  [        U5      OUv   M$     g 7fr   r   int.0ss     rN   	<genexpr>,TensorVariable.specialize.<locals>.<genexpr>  s$      #9EA+a..Aa/   *,ri   c              3   \   #    U  H"  n[        U5      (       a  [        U5      OUv   M$     g 7fr   r   r   s     rN   r   r     s*      # &A &a..Aa/%r   rZ   r]   c              3   T   >#    U  H  nTR                  US 9(       d  M  Uv   M     g7f)memory_formatN)r]   )r   xr?   s     rN   r   r     s+      /@***; A@s   (	()rU   rV   rW   r   rX   r[   r^   r\   r_   r{   grad_fn	Exceptionr   r   tuplerY   rZ   rE   _C
_functorchis_batchedtensor_prims_common_memory_formats)r?   propss   ` rN   
specializeTensorVariable.specialize   sp    [[llll

O"00!..u+
!
	)#(==#<E-  (8(?(?" #9># E'N6 1 "%(( # # 	# E'N $ELLN3E(Oxx""33E:: *.o&  */ /"00@@/ *o&
 C  	) $)E- 	)s   1E= =FFnamec                 \   U R                   R                  R                  S   nU R                  (       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,                  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5      (       a  SSKJn  U" XU[=        U5      S9$ [?        URA                  [B        RD                  5      5        [        R                  " XU5      $ ! [.         a  n["        UeS nAff = f)Nry   r*   wrap_fx_proxy)rt   rT   ry   LGGetAttrVariable)sourcepy_type)#rT   rd   r|   r   r   __tensor_flatten__rK   r   rI   rE   rJ   rz   r   rD   r-   buildsubguards_allowedNotImplementedErroroutputlocal_scopeglobal_scopeevalr   r   r$   r    r   rO   miscr   r{   r   
make_guardr   HASATTR)rg   rt   r   fake_valattrs_ctxrT   ry   r   scope_input_associated_real_valueexc
real_valueattr_sourcer   s                  rN   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@%+H( (/%%"#?@@%%:;;%%9@
 d3 "*---";Z8H  	k,,\-A-ABC$$R[AA7  	/%3.	/s   9 H 
H+H&&H+c                     U R                   b   [        R                  " U R                   5      $ U R                  US/ 0 5      $ )Ndim)rX   r.   createcall_methodrg   rt   s     rN   method_attr_ndimTensorVariable.method_attr_ndimi  s8    99 #**49955##Br266rP   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )rU   r.   r   r   s     rN   method_attr_dtype TensorVariable.method_attr_dtypeo  s$    ::!#**4::66rP   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )rV   r.   r   r   s     rN   method_attr_device!TensorVariable.method_attr_devicet  $    ;;"#**4;;77rP   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )rW   r.   r   r   s     rN   method_attr_layout!TensorVariable.method_attr_layouty  r   rP   c                 x    U R                   b-  [        R                  " U R                   R                  S:H  5      $ g )Ncuda)rV   r.   r   r{   r   s     rN   method_attr_is_cuda"TensorVariable.method_attr_is_cuda~  s1     ;;"#**4;;+;+;v+EFFrP   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 NrY   )
valid_sizerY   r   r.   r   r0   r   )rg   rt   r   sizess       rN   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   )r[   r.   r   r   s     rN   method_attr_requires_grad(TensorVariable.method_attr_requires_grad  s*     )#**4+=+=>>rP   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )r\   r.   r   r   s     rN   method_attr_is_quantized'TensorVariable.method_attr_is_quantized  s*     (#**4+<+<==rP   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )r_   r.   r   r   s     rN   method_attr_is_sparse$TensorVariable.method_attr_is_sparse  &     >>%#**4>>::rP   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )r^   r.   r   r   s     rN   method_attr_is_nested$TensorVariable.method_attr_is_nested  r   rP   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     rN   method_attr_retain_grad&TensorVariable.method_attr_retain_grad  s    ="4&5R		
rP   c                     [         R                  " [        R                  R                  R
                  5      R                  X/0 5      $ r   )r   TorchInGraphFunctionVariablerE   r   	_autograd_get_data_attrcall_functionr   s     rN   method_attr_dataTensorVariable.method_attr_data  s6    55HH--

-FB
'	(rP   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   )rj   r   r   r.   r   s     rN   method_attr_grad_fn"TensorVariable.method_attr_grad_fn  s=     /&tfH5^	 --d33rP   c                 \    SSK Jn  [        R                  " U5      R	                  X/0 5      $ )Nr   )_tensor_version)tensor_version_opr  r   r  r  )rg   rt   r  s      rN   method_attr__version#TensorVariable.method_attr__version  s*    755oFTT
 	
rP   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_attrsr.   rK   r  rI   AttributeErrorr   r   r   r   r   r   )rg   rt   r   r   r  varret_vals          rN   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 againrr   method_attr_)gradr[   	overloadsr   z9Getting an inplace view on a graph input is not supported)r   msgr!  r@   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   )rt   rT   r   rt   rT   )rz   r   r   r   r  r}   r{   typesGetSetDescriptorTypecreate_getattr_proxyr   r   r   )r   r   static_attrrT   r   rg   rt   s       rN   try_generic_attr_handling=TensorVariable.var_getattr.<locals>.try_generic_attr_handling"  s    21.224>& $E,F,FF'<<T]]_dS;;*(U:dkk43P  )Be<<rP   )is_strict_mode_strict_mode_banned_opsr   #_strict_mode_conditional_banned_opsr   r1   r   rK   r   r   is_python_constantr   r   r   
TYPE_MATCHr   rH   rE   opsatenr"  Taginplace_viewtagsr   r   DelayGraphBreakVariabler-   r   r   )rg   rt   r   handlerresultfnr*  s   ```    rN   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>%%rP   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idr.   r   )rg   rt   r   r   r   id_values         rN   call_idTensorVariable.call_idD  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   )rX   r   s     rN   has_unpack_var_sequence&TensorVariable.has_unpack_var_sequencei  s    yy1}rP   idxesc           	      L   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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_clsrY   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.ru   rt   rT   )rz   rJ  r   lenrY   r   rI   r0   r~   r.   r   SymNodeVariabler/  evaluate_exprr   as_python_constantranger{   r   )	rg   rt   rG  rJ  size_lensize_varlength
dyn_lengthis	            rN   unpack_var_sequence"TensorVariable.unpack_var_sequencel  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--/RSBTU
 	
 
s   3+F!tree_map_fnr6   map_fnresttree_map_kwargsc                 ,    UR                  X/UQ0 5      $ r   )r  )rg   rt   rX  rY  rZ  r[  s         rN   call_tree_mapTensorVariable.call_tree_map  s     ##Br::rP   c                     U R                   S L$ r   ri   rf   s    rN   r   TensorVariable.valid_size  s    zz%%rP   c                 B    U R                   c   S5       eU R                   $ )Nz%accessing None size in TensorVariabler`  rf   s    rN   rY   TensorVariable.size  s"    zz%N'NN%zzrP   c                 J    [         R                  R                  R                  $ r   )rE   rF   r   )_autograd_backward_strict_mode_banned_opsrf   s    rN   r-  &TensorVariable._strict_mode_banned_ops  s    }}##MMMrP   c                 J    [         R                  R                  R                  $ r   )rE   rF   r   5_autograd_backward_strict_mode_conditional_banned_opsrf   s    rN   r.  2TensorVariable._strict_mode_conditional_banned_ops  s    MM  VV	
rP   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" U/UQ7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   rr   __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   )rz   rl  rm  torch_functionrn  ro  r,  r-  r   r  r}   r   listr   r   r   rK   rE   rJ   rI   r1   r   r.   r   SUPPORTABLE	TypeErrorr  r   r   create_proxyr&   )rg   rt   r   rj  rk   rl  rm  rn  ro  r)  is_base_tensor_methodfunc_varhandler_methodr8  er   s                   rN   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'<T<V<!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rg   rt   rj  rk   s       rN   method_sizeTensorVariable.method_size  s     ''@@@@rP   c                 .    U R                   " S/UQ70 UD6$ )NrZ   r  r  s       rN   method_strideTensorVariable.method_stride  s     ''B4B6BBrP   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   optionsr@   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   )r0   r.   r   )r   r  ys      rN   make_const_size_variableDTensorVariable._method_size_stride.<locals>.make_const_size_variable&  s=    @AB1!((6g6BFM Bs   !3rY   ry   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   r   rs     rN   r   5TensorVariable._method_size_stride.<locals>.<genexpr>F  s     ,DVSVVV   )r#   r   r   r0   r.   r   rK   r   rY   rT   rd   r|   r}   r   r   r   )rg   r   r   r  RetVariabler  fakefake_rs           rN   r  "TensorVariable._method_size_stride!  s:    3	 	# 	, 	 )-$<L<S<S 	 6>#AV^ 1 1		AA={"1~%'..qv66 JJOO((,,_==DJ{ ,.'// 'u,DV,D'DEE 0  !,S1'//+223v;??rP   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   r.   r   r%   rY   rT   rd   r|   r}   numelr   r   )rg   rt   r  r  s       rN   method_numelTensorVariable.method_numelM  s}    ??#**7499+=>> JJOO((,,_==DJZZ\F#F++'..s6{;;rP   c                 ^    U R                   b   [        R                  " U R                   5      $ g r   )rX   r.   r   r   s     rN   
method_dimTensorVariable.method_dimZ  s$    99 #**49955rP   c                 r    U R                   b*  [        R                  " U R                   R                  5      $ g r   )rU   r.   r   is_floating_pointr   s     rN   method_is_floating_point'TensorVariable.method_is_floating_pointa  s,     ::!#**4::+G+GHHrP   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   ry   )r   "fake_tensor_disable_inference_moder   r   FUNDAMENTALINFERENCE_MODErT   rd   r|   r}   r.   r   is_inference)rg   rt   r  s      rN   method_is_inference"TensorVariable.method_is_inferenceh  s     44JD&22&55	 JJOO((,,_==DJ#**4+<+<+>??rP   c                 r    U R                   b*  [        R                  " U R                   R                  5      $ g r   )rU   r.   r   
is_complexr   s     rN   method_is_complex TensorVariable.method_is_complexy  s*    ::!#**4::+@+@AArP   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 )Nry   r   )
rO  rE   contiguous_formatr]   r.   r   rT   rd   r|   r}   )rg   rt   r   memory_format_constr  s        rN   method_is_contiguous#TensorVariable.method_is_contiguous~  s    
 ( ,,.(( 	
 )#**+>BTBT+TUUjjoo**..??dL#**""1D"E  rP   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   )rU   )r   r   r   rg   s      rN   r   -TensorVariable.method_type.<locals>.<genexpr>  s#      9daTZZ1_9s   &	&cpuztorch..ztorch.tensortyper*   r   r  r   r{   )rU   rI   rV   rE   nextr)   r~   r{   r.   r   rL   r   rO  rz   r   r   r~  r&   )	rg   rt   rU   r  rk   
tensortypetensor_typetensor_type_constr   s	   `        rN   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  rP   clsr8   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*   r7   mutation_type_clszHArgument of `as_subclass` must be a non-dispatcher-style tensor subclassz.as_subclass(ru  Currently not supportedz:Avoid this call or move it outside `torch.compile` regioner   )rI   TensorSubclassVariabler   rz  r8   rO  from_tensor_varr   side_effects
_track_objobjectr+   r   r   r|  )rg   rt   r  r8   py_clsr  s         rN   method_as_subclass!TensorVariable.method_as_subclass  s     c122szzD++-F.>>&**C II""--#1E .  J^fM#a01L"..		
rP   c                     [        U R                  [        R                  5      (       aH  U R                  R                  S:w  a  U R                  R                  OSn[
        R                  " U5      $ g )Nr  )rI   rV   rE   r{   indexr.   r   )rg   rt   r  s      rN   method_get_device TensorVariable.method_get_device  sM    dkk5<<00)-)9)9U)BDKK%%E#**511rP   c                 V    [         R                  " U R                  R                  5      $ r   )r.   r   rU   itemsizer   s     rN   method_element_size"TensorVariable.method_element_size  s    &&tzz':':;;rP   )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=Falserp  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   nprW   rE   stridedr}  rO  r   r   r~  r   r&   r  r   )rg   rt   r  trT   s        rN   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5rP   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_proxyr@   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 )NrU  r  r@   c                 2   > T" TUR                  5       5      $ r   )item)rU  r  rt   r   s     rN   wrap:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrap  s    $NN$ rP   z'Tensor.tolist() with non-integer tensorrp  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   rE   fxProxyr-   rU   int8int16int32int64r   r   	enumerate)
r  r  r  rU  val
sub_tensorrg   tolistrt   r   s
         rN   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   D5Dry   )rz   r   rE   rJ   r  r  r   r{  r   rd   r|   r-   r   )rg   rt   r  outr  r   s   ``  @@rN   method_tolistTensorVariable.method_tolist	  s~    *!	5<< !	EHHNN !	sTRUY !	 !	F %%**?;VT]]_-$$R--rP   c           	      N    [        SSU  SU SU 3S/ [        R                  QS9  g )Nz"Unsupported Tensor.backward() callrp  z
 backward r  z>Dynamo currently does not support tracing `Tensor.backward()`.r   )r   r   r  r  s       rN   method_backwardTensorVariable.method_backward3  s7     	8"4&
4&&BX2%112		
rP   DataPtrVariablec                     [        U 5      $ r   )r  r  s       rN   method_data_ptrTensorVariable.method_data_ptr@  s     t$$rP   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=Falserp  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   )	one_graphr   capture_scalar_outputs_warn_capture_scalar_outputsr   r  s       rN   method_itemTensorVariable.method_itemH  sU     ||F$A$A--/Z&tfF4&&B<I
 rP   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  )rz   r   rI   rM  rE   selectr   r.   r   operatorgetitemr   r~  r&   r{  )rg   rt   rj  rk   r   r9  rT   s          rN   method___getitem__!TensorVariable.method___getitem__^  s     	+d1g//
 ..55a8G  !!B		&&
 vT
2F;
 R''rP   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
                )rE   _guardsTracingContextextract_stackjoin	tracebackformat_listlogwarningtextwrapdedent)
user_stackuser_stack_formatteds     rN   r  +TensorVariable._warn_capture_scalar_outputs|  sX     ]]11??A
!wwy'<'<Z'HIOO	 !	
rP   c                 T    U R                  US[        R                  " S5      /0 5      $ )NrY   r   )r   r.   r   r   s     rN   method___len__TensorVariable.method___len__  s(    F-=-D-DQ-G,H"MMrP   c                 D    [        U R                  U5      [        5       S9$ )Nmutation_type)r/   rV  r,   r   s     rN   method___iter__TensorVariable.method___iter__  s#    #$$R(8H8J
 	
rP   rM   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  r'  inline_user_function_returnr-   r   addcmul_inplace)rg   rt   r$  r%  r?   r'  s         rN   method_addcmul_TensorVariable.method_addcmul_  sL     !D!D$11%%b*C*CD/ 
 rP   keyc                    UR                   R                  " S[        R                  /[	        XU/0 5      Q76 nUR                  5       (       Ga  [        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n[!        U["        R$                  R&                  5      (       a)  ["        R$                  R&                  R)                  U5      nU R+                  U[-        U5      5        [.        R0                  (       d  [.        R2                  (       a0  UR                   R4                  R7                  UR                  S5        [8        R:                  " S 5      $ ! , (       d  f       N= f! , (       d  f       N= f)Nr  F)allow_non_graph_faker   )r   r~  r
  setitemr&   r   rE   rF   rG   +_disable_saved_tensors_hooks_during_tracing	fake_mode	shape_envignore_fresh_unbacked_symbolsr   r!   rd   rI   r   lazyLazyVariableTrackerrealize_allr   r{   r   use_graph_deduplicationtrack_nodes_for_deduplicationregion_trackeradd_node_mutationr.   r   )rg   rt   r-  r?   rT   vts         rN   method___setitem__!TensorVariable.method___setitem__  sT    		&&
 5126
 ??" ##OOQ<<BLL$:$: &&DDF ]# uzz2EJ	# R B"inn@@AA^^77CCBG''DH5))V-Q-QII$$66uzz1E&&t,,# # RQs%   7AG(G(G(
G%	!G((
G6c           	      .    [        SSU  SU SU 3S/ S9  g )Nz!Unsupported Tensor.resize_() callrp  z	 resize_ r  z=Dynamo currently does not support tracing `Tensor.resize_()`.r   r  r  s       rN   method_resize_TensorVariable.method_resize_  s+     	7"4&	$qAW		
rP   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz$Unsupported Tensor.resize_as_() callrp  z resize_as_ r  z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r   r  r  s       rN   method_resize_as_ TensorVariable.method_resize_as_  s+     	:"4&TF!F8DZ		
rP   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz(Unsupported Tensor.sparse_resize_() callrp  z sparse_resize_ r  zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r   r  r  s       rN   method_sparse_resize_$TensorVariable.method_sparse_resize_  s,     	>"4&(8axH^		
rP   c           	      .    [        SSU  SU SU 3S/ S9  g )Nz2Unsupported Tensor.sparse_resize_and_clear_() callrp  z sparse_resize_and_clear_ r  zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r   r  r  s       rN   method_sparse_resize_and_clear_.TensorVariable.method_sparse_resize_and_clear_  s,     	H"4&(B4&&Rh		
rP   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_() callrp  z set_ r  zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r   )rL  r   r   r|  r  s       rN   method_set_TensorVariable.method_set_  sL     t9q= 8&tfF4&&BA6)556 rP   )alphaotherrN  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   r(  r   r  rE   mulr  r   )rg   rt   rO  rN  r8  s        rN   method_add_TensorVariable.method_add_$  sX     !D!D;;EIIFTTENBF ##B"==rP   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 rQ  )	r   r(  r   r  rE   divr  rS  r   )rg   rt   r$  r%  r?   r8  s         rN   method_addcdiv_TensorVariable.method_addcdiv_2  s     !D!D;;EIIFTTg&F ;;EIIFTTUORF ##B"==rP   argc                     [         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  rE   eqr  anyr   )rg   rt   rZ  r8  s       rN   method___contains__"TensorVariable.method___contains__D  sm     77AOOsR
 77		BPP"
 !!"fb"55rP   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   r@   c                 (   > U R                   " T0 TD6$ r   )redistributer   args_as_valuekwargs_as_values    rN   redistribute_fn_with_prim_typesKTensorVariable.method_redistribute.<locals>.redistribute_fn_with_prim_types^  s    >>=DODDrP   prim_redistributer*   r   r  r%  )	rO  r~   r   rL   rz   r   r   r~  r&   )rg   rt   rj  rk   r   r   r   rf  r   rd  re  s            @@rN   method_redistribute"TensorVariable.method_redistributeS  s     :>>A--/>AGP12244P	Es 	Es 	E 	E 4G'0*))((/ #D62.
 	
 ?Ps
   B&B+c           
      n  ^
^ UR                  S[        R                  " S 5      5      n[        U[        R
                  5      (       a+  [        R                  " [        5      R                  X/0 5      nUR                  S5      b  XCS'   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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grad_placementsr   r@   c                 (   > U R                   " T0 TD6$ r   )to_localrc  s    rN   to_local_fn_with_prim_typesCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_types  s    ::}@@@rP   prim_to_localr*   r   r  r%  )r}   r.   r   rI   r   UserDefinedObjectVariabler  r   r  rO  r~   r   rL   rz   r   r   r~  r&   )rg   rt   rj  rk   grad_placements_vtr   r   r   ro  r   rd  re  s             @@rN   method_to_localTensorVariable.method_to_localo  s*    $ZZ/66t<
 ()*M*MNN!*!:!:5!A!O!O("" ::'(4(:$%9=>A--/>AGP12244P	A3 	A3 	A 	A 0?#,*))((+ #D62.
 	
 ?Ps   D,<D1c                 0    U R                   " US/UQ70 UD6$ )Nregister_hook_method_register_hookr  s       rN   method_register_hook#TensorVariable.method_register_hook  s!     ))"oOOOOrP   c                 0    U R                   " US/UQ70 UD6$ )N"register_post_accumulate_grad_hookrx  r  s       rN   )method_register_post_accumulate_grad_hook8TensorVariable.method_register_post_accumulate_grad_hook  s-     ))4
7;
?E
 	
rP   hookc           	      d  ^^	 U R                   (       d  [        R                  (       d  [        SSU  ST 3S/ S9  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      $ [        R                   " [        R"                  R%                  5       S9nUR                  R&                  R)                  XUT5        U$ )Nz<Compilation of intermediate hooks requires compiled autogradr   r  z6Dynamo must be in compiled_autograd to register hooks.r   r  bw_stater@   c           	      h   > [        U T5      nU" [        R                  " [        [        UTS95        g )N)r9  r  	hook_name)rK   	functoolspartialr   r   )r  r  rw  r  r   s      rN   _register_hook_trampolineGTensorVariable._method_register_hook.<locals>._register_hook_trampoline  s8     !( 5%%%8!)"+	 rP   r*   r   Thas_backward_hookr  r   )r   r
   compiled_autograd_enabledr   r   add_backward_state_hookrE   rJ   BackwardStaterz   r   r   rd   r|   r~  r   RemovableHandleVariablebaser,   r  rw  )
rg   rt   r   r  bw_state_proxyr  r   
self_proxyhandle_variabler  s
     `      @rN   ry  $TensorVariable._method_register_hook  s    {{$>>  Z*4&$8 X	 )+		(I(I$(O%I~0A0O0O " /J8<JOO  !45 		&&#-0	  $;;#..99;
 			,,T$OrP   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 $ )NTry   z(Unsupported Tensor.requires_grad_() callrp  z requires_grad_zaDynamo does not support changes to a Tensor's `requires_grad` through calling `requires_grad_()`.r   )rO  r   rd   r|   r[   r   )rg   rt   r[   s      rN   method_requires_grad_$TensorVariable.method_requires_grad_  sf     $)<<>M==?$$_5CC}TB&tfO<F KrP   c                 F    [        SSU  S3SS/[        R                  QS9  g )Nz'Unsupported Tensor.share_memory_() callrp  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|  rf   s    rN   method_share_memory_#TensorVariable.method_share_memory_  s2    ="4&7nI"..		
rP   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   )r/  rI   rO  r   )r   as     rN   r   ,TensorVariable.method_new.<locals>.<genexpr>  s8      A $$&R:a6J6J6Lc+RRs   AA	new_empty)rL  rI   r0   allr   r  s       rN   
method_newTensorVariable.method_new  s^     INz$q'<@@IN   
 ##BTBBrP   c                 ~    [        X R                  5       R                  R                  S   R	                  5       5      $ r   )UntypedStorageVariabler   rd   r|   untyped_storager   s     rN   method_untyped_storage%TensorVariable.method_untyped_storage  s4     &--/&&++O<LLN
 	
rP   c                 ~    U R                   (       d,  U R                  R                  R                  U5        SU l         g r   )rb   rT   rd   _rename)rg   r   s     rN   set_name_hintTensorVariable.set_name_hint%  s,      JJOO##D) $DrP   c                 T    U R                  5       R                  R                  S   S L$ r   )r   rd   r|   rf   s    rN   is_python_hashable!TensorVariable.is_python_hashable+  s&     }}##((9EErP   c                 b    [        U R                  5       R                  R                  S   5      $ r   )hashr   rd   r|   rf   s    rN   get_python_hashTensorVariable.get_python_hash1  s$    DMMO((--o>??rP   c                     [        U[        5      (       d  gU R                  5       R                  R                  S   nUR                  5       R                  R                  S   nX#L $ )NFry   )rI   r-   r   rd   r|   )rg   rO  r  bs       rN   is_python_equalTensorVariable.is_python_equal4  sR    %11MMO  %%o6NN!!&&7vrP   )rb   ri   r`   rV   rU   rj   r]   r^   r\   r_   rW   rX   rT   r[   rZ   r   )NF)r@   NT)rt   r4   r@   r  )rrL   
__module____qualname____firstlineno____doc__r-   _nonvar_fieldsrE   rJ   r"   r  r  rU   rV   rW   r   rC   r{   r   r   rp   r   strr   r   r   r   staticmethoddictr   r   r   r   r   r   r.   r   r   r   r   r   r   r   r  r	  r  r  r  r:  rB  rE  r   r{  rV  r]  r   propertyrY   r-  r.  r   r  r  r  r  method_nelementr  method_ndimensionr  r  r  r  r  r  r  r  r  r  r  r   r  r  r  cacher  r  r/   r"  r+  r=  r@  rC  rF  rI  rL  rT  rX  r^  ri  rt  rz  r~  ry  r  r  r  r  r  r  r  r  r  __static_attributes____classcell__rr   s   @rN   rR   rR      s`   G 	  
	'	'!N&B B. )-)-%)$(#'/xx~~'/ {{	'/
 '/ '/ '/ '/ '/ '/ '/ '/ '/ S#X%'/ c3h$&'/  d{!'/" Tk#'/$ %'/& 
''/ '/T FJ ) 7;d{ 	 ;C ;%((.. T 4  /%,, /4S> / /bCB)CB14CB	CBJ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&
)&
2:3-$2F&
	o	&
P;#; ,;  	;
 '; c?23; 
;&D & eCHo  Nc N
T#Y 

g
#g
 g
 '	g

 -g
 
g
R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 (.T
#
 
 "	

 

%#% % "	%
 
%#  "	
 
,(#( ( "	(
 
(< __
  
&N!8 N_ N
"9 
>R 
 !#  	 Tz 
t$--#-- -- 	--
 
--^
#
 
 "	

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

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

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

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

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

 
'
RP#P P "	P
 
P
#
 
 "	

 

D)D14D<KD	DN TX):>:P	"	
h 	
#  "	
 
4	$
)
	!
# $ FD F@ @V   rP   rR   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 $ )!rM  i<  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.
rT   sym_numr@   c                 ,    [        U R                  5      $ r   )r   r  rf   s    rN   r   SymNodeVariable.debug_reprI  s    DLL!!rP   Nrt   r5   r  r-   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$ )Nry   rm   )r!   rd   r|   r(   rI   sympyIntegerr   rC   r.   r   rM  rq   r   current_tracerrecord_tensor_or_symint_vt)r  rt   rT   r  r  r  s         rN   r   SymNodeVariable.createL  s     ?$UZZ4Gejjoo-::???3w>>>%**g.gsD9::&0%--&H&Hc'lgG#**733e88::==M)II$$??D
rP   rk   c                 L   > [         TU ]  " S0 UD6  Xl        X l        S U l        g Nrn   )ro   rp   rT   r  _tensor_var)rg   rT   r  rk   rr   s       rN   rp   SymNodeVariable.__init__c  s%    "6"
26rP   c                     [        U R                  [        5      (       a   U R                  R                  R                  $ [        U R                  5      $ r   )rI   r  r   rd   pytyper{   rf   s    rN   r   SymNodeVariable.python_typej  s8    dllH--<<$$+++%%rP   c                     gr   rn   rf   s    rN   is_symnode_likeSymNodeVariable.is_symnode_likep  r   rP   c                     U R                   $ r   r   rf   s    rN   r   SymNodeVariable.as_proxys  r   rP   rU   c           	          U R                   cQ  [        R                  " U[        R                  5      R                  X/S[        R                  " X5      05      U l         U R                   $ )NrU   )r  r-   r   rE   scalar_tensorr  )rg   rt   rU   s      rN   	as_tensorSymNodeVariable.as_tensorv  s[    #.44E'' mB/2G2G2R(ST  rP   output_graphr3   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   rE   r  experimental_configno_data_dependent_graph_breakr   r   ANTI_PATTERNr  )rg   r  r  s      rN   rN  SymNodeVariable.evaluate_expr}  si    
	--* 	xx$$,,JJ**GAxP5 		s    
A?AA::A?r4   r   rj  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   )rz   r   r   r~  r&   )rg   rt   r   rj  rk   r   s         rN   r   SymNodeVariable.call_method  sF     	+II"" #D=4=&9
 	
rP   c                     gr   rn   rf   s    rN   r  "SymNodeVariable.is_python_hashable  r   rP   c                 4    [        U R                  5       5      $ r   )r  rN  rf   s    rN   r  SymNodeVariable.get_python_hash  s     D&&())rP   rO  c                     [        U[        5      (       a!  U R                  5       UR                  5       :H  $ [        U[        5      =(       a!    U R                  5       UR	                  5       :H  $ r   )rI   rM  rN  r-   rO  )rg   rO  s     rN   r  SymNodeVariable.is_python_equal  s]    e_--%%'5+>+>+@@@ uo. C""$(@(@(BB	
rP   )r  rT   r  r   )!rL   r  r  r  r  r-   r  r  r   classmethodr   r   rp   r{   r   rC   r  r   rR   r  r   r   floatrN  r   r  r   r  r  r  r  r  r  r  s   @rN   rM  rM  <  s|    	 
	'	'N"C " 
 #	'  t	
  
 ,7c 7C 73 74 7&T & #  7       7;$]3	e	
#
 
 '	

 S/)*
 

$D * *

V 
 
 
rP   rM  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.
rt   r4   rT   r  r@   c                 .    SSK Jn  U" S[        U US.UD6$ )Nr*   rI  rK  rn   )rz   rJ  r  )rt   rT   r  rJ  s       rN   r   NumpyNdarrayVariable.create  s,     	/  
+
 	
 	
rP   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   ry   r@   c            	      n   > T" TTR                   R                  STTR                  5       T 40 5      5      $ )Nr  )r   r~  r   )r   r  rg   rt   r   s   rN   insert_into_graph;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  s;     		&&#%7$--/49PRT rP   )Trealimagr  )rX   r  )shaperZ   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r  r  s     rN   r   3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s     4GQSVVQr  rY   )r  flagsrU   z$Unsupported ndarray attribute accessr   r  z3Dynamo currently does not support tracing `ndarray.ry  r   __version__z&Unsupported ndarray.__version__ access)rG   r  rz   r   r   rd   r|   tnpndarrayr-   r   r~  r  r   r.   rK   r   r   rY   r   r   r   )rg   rt   r   r8  ry   example_ndarrayr  rT   r  r  r   s   ```      @@rN   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	 >%%rP   rj  rk   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   rj  rk   kwargs_renamer   r   s         rN   
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  rU   r   Ozndarray.astype(object)rp  r  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__rY   r  __iter__)tostringtobytes__delattr__zUnsupported ndarray method callz	`ndarray.z&()` is not modelled in `torch._numpy`.r  )r   r   rG   r  r  r  r  rL  is_constant_matchrI   r9  r  r   r  ro   r   r   r~  r&   r{  r  r   )rg   rt   r   rj  rk   r   r  r  	dtype_argis_object_stris_object_typerT   rr   s               rN   r    NumpyNdarrayVariable.call_method  sy    	(0t6:80I& "7O	TQ G	%T1Vi6Q6QRU6VM96Q9<<6;Q  4*4&$qaxH9 ;-99:	 <<7&r>>999&tfAdV1TF!F8D'v-ST	 		&& &
 vT
2F;

 $**255rP   c                 <    [         b  [         R                  $ [        $ r   )r  r  r   rf   s    rN   r    NumpyNdarrayVariable.python_typeG  s    >::OrP   rn   )rL   r  r  r  r  r  rE   r  r  r   r   r  r-   r:  r   r  r   r  r   r{   r   r  r  r  s   @rN   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  rP   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$ )UnspecializedPythonVariableiN  zG
This is a 1-element tensor represents unspecialized python float/int.
	raw_valueneed_unwrapNTr!  r"  rT   rk   r@   c                @   > [         TU ]  " U40 UD6  X l        X0l        g r   )ro   rp   r!  r"  )rg   rT   r!  r"  rk   rr   s        rN   rp   $UnspecializedPythonVariable.__init__Y  s"     	)&)"&rP   tensor_variablec                 H    [        S0 [        UR                  5      DUUS.D6$ )Nr#  rn   )r   r  __dict__)r  r&  r!  r"  s       rN   from_tensor_variable0UnspecializedPythonVariable.from_tensor_variablee  s/     + 
?++,
#
 	
rP   )r"  r!  r  )rL   r  r  r  r  rR   r  rE   r  r  r  r   rC   r   rp   r  r)  r  r  r  s   @rN   r   r   N  s    
 	 
	&	&N )- 
'xx~~
' 3;%	
'
 
' 
' 

' 
' 
 !	
'
 3;%
 	

 
'
 
rP   r   c                      ^  \ rS rSrSrS1\R                  krS\R                  R                  S\
SS4U 4S jjr\S	\SS 4S
 j5       rSrU =r$ )FakeItemVariableit  zAn unspecialized python variable which prevents access to the underlying raw value.
This is needed if item is called on a FakeTensor.r"  rT   rk   r@   Nc                 X   > UR                  SS5      n[        TU ]  " U40 UD6  X0l        g )Nr"  F)popro   rp   r"  )rg   rT   rk   r"  rr   s       rN   rp   FakeItemVariable.__init__}  s+    jj6)&)&rP   r&  c                 >    [        S0 [        UR                  5      D6$ r  )r,  r  r(  )r  r&  s     rN   r)  %FakeItemVariable.from_tensor_variable  s      A$'?'?"@AArP   )r"  )rL   r  r  r  r  rR   r  rE   r  r  r   rp   r  r)  r  r  r  s   @rN   r,  r,  t  sl    9 			&	&N
'ehhnn ' ' '
 B,B	B BrP   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  rt   r4   rj  rk   r@   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*   r7   r   zCCalling subclass default constructor with more than tensor argumentrs  rt  ru  r  zFAvoid this constructor call or move it outside `torch.compile` regioner   r  )rz  r8   r?   __new__rE   rJ   rL  r   r  r   r   r   r|  r-   r   r  r{  rp   r   r  r  r  r+   )	rg   rt   rj  rk   r8   new_funcr  data	init_funcs	            rN   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 	* 	
 
rP   c                     U R                   $ r   rM   rf   s    rN   rO  )TensorSubclassVariable.as_python_constant  r   rP   rn   N)rL   r  r  r  r   r-   r  r  r  r{   rO  r  rn   rP   rN   r  r    sI    /#/ '/ S/)*	/
 
/bD rP   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  ry   from_tensorrk   r@   Nc                 >   > [         TU ]  " S0 UD6  Xl        X l        g r  )ro   rp   r<  ry   )rg   r<  ry   rk   rr   s       rN   rp   UntypedStorageVariable.__init__  s!     	"6"&*rP   rt   r4   r   rj  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      $ )NrY   z0 args and 0 kwargsz
 args and z kwargsr   )untyped_storage_sizer*   r   r  resize_z0 kwargsr   )r'   rL  ry   rY   r   r.   r   r   external_utilsr@  rz   r   r   r~  r<  r   rE   r1  inductorresize_storage_bytes_ro   r   )	rg   rt   r   rj  rk   r8  r@  r   rr   s	           rN   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::rP   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )Nr  r   r<  load_methodr   rg   codegens     rN   reconstruct"UntypedStorageVariable.reconstruct  s-      !-.ArP   )ry   r<  rJ  r2   r@   N)rL   r  r  r  r-   r  rR   rE   UntypedStorager   rp   r  r{  r  r   rK  r  r  r  s   @rN   r  r    s    		'	'N
	+#	+ ++	+ 		+
 
	++;#+; +; ?#	+;
 S/)*+; 
+;Z rP   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	$ )
r  i  r<  rk   r@   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r  )ro   rp   r<  )rg   r<  rk   rr   s      rN   rp   DataPtrVariable.__init__  s    
 	"6"&rP   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )Ndata_ptrr   rG  rI  s     rN   rK  DataPtrVariable.reconstruct  s,      !J'ArP   )r<  rM  )
rL   r  r  r  rR   r   rp   rK  r  r  r  s   @rN   r  r    s.    '#' ' 
	' rP   r  )~r  r  loggingr
  r  r  r&  collections.abcr   
contextlibr   r   typingr   r   r   r	   r  torch._numpy_numpyr  torch.fxrE   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   rB  r   guardsr   r   r   r   rG   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r  r+   r,   r-   constantr.   listsr/   r0   user_definedr1   numpyr  ModuleNotFoundErrortorch._dynamo.codegenr2   torch._dynamo.output_graphr3   torch._dynamo.symbolic_convertr4   r5   	functionsr6   rz  r8   	getLoggerrL   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  rC   rO   r   
TensorBaser(  rJ   r  rR   rM  r  r   r,  r  r  r  rn   rP   rN   <module>r|     sA  "       $ "  9 9     + 6  G 3 3 :  ; 0     J I & 5 2
 /6
 0< ! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
& T  88&&//%,,2G2GG k_ k\-q
o q
h[> [|#
. #
LB~ B*35 3lA_ AHo m=  	Bs   I8 8JJ