
    sh              	           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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   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;  SSK<J=r=  SSK>J?r?   SSK@rA\
(       a  SSKCJDrD  \R                  " \F5      rG\R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  S.rP\R                  \R                  \R                  \R                  S.rQ0 \PE\QErR\SR                  \PR                  5       5      rV\SR                  \QR                  5       5      rWS rX " S S\;5      rY " S S\;5      rZ " S S\Y5      r[ " S S\Y5      r\ " S  S!\Y5      r] " S" S#\;5      r^ " S$ S%\;5      r_ " S& S'\;5      r`g! \B a    SrA GNTf = 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	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set_example_valuetensortype_to_dtype   )VariableTracker)ConstantVariable)SizeVariableInstructionTranslator)><z>=z<===!=isis not)r,   r-   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
isinstancer/   Tensorgetattr__name__values    r/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodr<   t   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                  " S5      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   rA   nodetracerselfs    r;   r   TensorVariable.get_real_value   s#     djjootzz/@/@AAr=   N)_sizerG   rJ   rO   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__rA   rB   rC   rD   rE   rV   rG   rH   rI   rJ   rK   rL   rM   has_grad_fnrQ   oprO   )rT   rA   rB   rC   rD   rE   rH   rK   rI   rL   rM   r]   rV   rG   rJ   rO   kwargs	__class__s                    r;   r\   TensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".r=   c                 Z    [        U R                  R                  R                  S   5      $ Nexample_value)reprrA   rQ   metarS   s    r;   
debug_reprTensorVariable.debug_repr   s     DJJOO((9::r=   c                     U R                   $ NrA   rS   s    r;   as_proxyTensorVariable.as_proxy       zzr=   c                     U R                   $ rj   )rM   rS   s    r;   python_typeTensorVariable.python_type   s    r=   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)	rB   rC   rD   rE   rH   rK   rI   rL   rM   r]   FrV   rG   rJ   memory_format)rB   rC   rD   intrE   rH   rK   rI   rL   typegrad_fn	Exceptionr   r   tuplerF   r	   rG   r1   _C
_functorchis_batchedtensor_prims_common_memory_formatsrJ   )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)Nrd   r"   wrap_fx_proxy)txrA   rd   LGGetAttrVariable)sourcepy_type)#rA   rQ   rf   r   r   __tensor_flatten__r7   rl   r5   r1   r6   builderr   r0   r#   buildsubguards_allowedNotImplementedErroroutputlocal_scopeglobal_scopeevalnamerx   r   r   r   r   
make_guardr   HASATTRr<   miscr   rv   )rT   r   r   fake_valattrs_ctxrA   rd   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)rE   r$   createcall_methodrT   r   s     r;   method_attr_ndimTensorVariable.method_attr_ndimD  s8    99 #**49955##Br266r=   c                 ^    U R                   b   [        R                  " U R                   5      $ g rj   )rB   r$   r   r   s     r;   method_attr_dtype TensorVariable.method_attr_dtypeJ  s&    ::!#**4::66 "r=   c                 ^    U R                   b   [        R                  " U R                   5      $ g rj   )rC   r$   r   r   s     r;   method_attr_device!TensorVariable.method_attr_deviceN  &    ;;"#**4;;77 #r=   c                 ^    U R                   b   [        R                  " U R                   5      $ g rj   )rD   r$   r   r   s     r;   method_attr_layout!TensorVariable.method_attr_layoutR  r   r=   c                 x    U R                   b-  [        R                  " U R                   R                  S:H  5      $ g )Ncuda)rC   r$   r   rv   r   s     r;   method_attr_is_cuda"TensorVariable.method_attr_is_cudaV  s1    ;;"#**4;;+;+;v+EFF #r=   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 NrF   )
valid_sizerF   r   r$   r   r%   r   )rT   r   r   sizess       r;   method_attr_shape TensorVariable.method_attr_shapeZ  s`    ??CG99M9aY//66q99EM&&##BB77 Ns   )A.c                 ^    U R                   b   [        R                  " U R                   5      $ g rj   )rH   r$   r   r   s     r;   method_attr_requires_grad(TensorVariable.method_attr_requires_grada  s*    )#**4+=+=>> *r=   c                 ^    U R                   b   [        R                  " U R                   5      $ g rj   )rI   r$   r   r   s     r;   method_attr_is_quantized'TensorVariable.method_attr_is_quantizede  s*    (#**4+<+<== )r=   c                 ^    U R                   b   [        R                  " U R                   5      $ g rj   )rL   r$   r   r   s     r;   method_attr_is_sparse$TensorVariable.method_attr_is_sparsei  &    >>%#**4>>:: &r=   c                 ^    U R                   b   [        R                  " U R                   5      $ g rj   )rK   r$   r   r   s     r;   method_attr_is_nested$TensorVariable.method_attr_is_nestedm  r   r=   c                     [        S5        g )Nz,retain_grad does not work with AOTDispatcherr   r   s     r;   method_attr_retain_grad&TensorVariable.method_attr_retain_gradq  s    DEr=   c                     [         R                  " [        R                  R                  R
                  5      R                  X/0 5      $ rj   )r   TorchInGraphFunctionVariabler1   rz   	_autograd_get_data_attrcall_functionr   s     r;   method_attr_dataTensorVariable.method_attr_datat  s6    55HH--

-FB
'	(r=   c                 h    U R                   (       a  [        S5        g [        R                  " S 5      $ )NzTensorVariable has a grad_fn)r]   r   r   r$   r   s     r;   method_attr_grad_fn"TensorVariable.method_attr_grad_fny  s%    89--d33r=   c                 \    SSK Jn  [        R                  " U5      R	                  X/0 5      $ )Nr   )_tensor_version)tensor_version_opr   r   r   r   )rT   r   r   s      r;   method_attr__version#TensorVariable.method_attr__version  s*    755oFTT
 	
r=   c                 ^   SSK Jn  SSKJn   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   )BuiltinVariableF) r   builtinr   r7   r   r$   r5   AttributeErrorr   r   r   r   r   r   )rT   r   r   r   r   varret_vals          r;   call_obj_hasattrTensorVariable.call_obj_hasattr  s    %,	!'*88+D12BC
 %S::G ;;4;;-889M9MN  ((  	G	s   7B B,+B,c                   ^ ^^ SSK Jn  T R                  T5      (       aG  TT R                  5       ;   a  [	        ST S35        O#TT R                  5       ;   a  [        ST S35      eTS:X  a  U" 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  [#        XfR+                  5       S   5      (       as  [$        R,                  R.                  [        XfR+                  5       S   5      R0                  ;   a1  [2        R4                  R7                  [!        T R                  T5      S9$ Uc  TS:w  a  UU U4S jnU" 5       nUc  T R9                  TT5      nUc  [:        eU$ )Nr"   )UserDefinedClassVariablezGetattr invocation z  in strict mode is not supportedzUnknown property z] during speculating backward, dynamo will insert contiguous call ahead and speculate it againr`   method_attr_)gradrH   	overloadsr   )r   r   c                  d  > SSK Jn   SSKJn   [        R
                  " [        R                  T5      n[        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$ ! [         a     g f = f)Nr"   r   r   )r   rA   r   r   rA   )r   r   r   r   inspectgetattr_staticr1   r6   r   rv   typesGetSetDescriptorTypecreate_getattr_proxyrl   r   r   )r   r   static_attrrA   r   rT   r   s       r;   try_generic_attr_handling=TensorVariable.var_getattr.<locals>.try_generic_attr_handling  s    21 ")"8"8t"LK $(B(BB'<<T]]_dS;;*(U:dkk43P  )Be<<% &   s   %B" "
B/.B/)r   r   is_strict_mode_strict_mode_banned_opsr   #_strict_mode_conditional_banned_opsr   rp   r7   r   r   is_python_constantr   r   r   
TYPE_MATCHr   r4   r1   opsatenr   Taginplace_viewtagsr   r   DelayGraphBreakVariabler   r   )rT   r   r   r   handlerresultfnr   s   ```     r;   var_getattrTensorVariable.var_getattr  s   .r""t3355)$/OP 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 >   >dfn=4 /0F>))"d3F>%%r=   c                    U R                   (       d  [        S5        UR                  R                  UR                  R                  S.n [        U R                   R                  5       U5      nWc  [        S5        [        U R                   R                  [        R                  5      5        [        U5      n[        R                  " U5      $ ! [         a  n[        SU 35         S nAN~S nAff = f)Nz3call_id not supported for sourceless TensorVariabler   z%error getting associated real value: z%call_id without associated real value)r   r   r   r   r   r   r   rx   r   r   r   ID_MATCHidr$   r   )rT   r   r   r   r   id_values         r;   call_idTensorVariable.call_id  s    {{OP ii++"))2H2HI	I+/0@0@0BE+J( (/ABdkk,,\-B-BCD23&&x00  	IA#GHH	Is   $C 
C2C--C2c                      U R                   S:  $ )Nr   )rE   r   s     r;   has_unpack_var_sequence&TensorVariable.has_unpack_var_sequence  s    yy1}r=   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_clsrF   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.
target_clsr   rA   )r   r  r   lenrF   r   r5   r%   itemsr$   r   SymNodeVariableevaluate_exprr   r:   rangerv   rl   )	rT   r   idxesr  size_lensize_varlength
dyn_lengthis	            r;   unpack_var_sequence"TensorVariable.unpack_var_sequence  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$ rj   rV   rS   s    r;   r   TensorVariable.valid_size*  s    zz%%r=   c                 B    U R                   c   S5       eU R                   $ )Nz%accessing None size in TensorVariabler%  rS   s    r;   rF   TensorVariable.size-  s"    zz%N'NN%zzr=   c                 J    [         R                  R                  R                  $ rj   )r1   r2   r   )_autograd_backward_strict_mode_banned_opsrS   s    r;   r   &TensorVariable._strict_mode_banned_ops2  s    }}##MMMr=   c                 J    [         R                  R                  R                  $ rj   )r1   r2   r   5_autograd_backward_strict_mode_conditional_banned_opsrS   s    r;   r   2TensorVariable._strict_mode_conditional_banned_ops5  s    MM  VV	
r=   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U S35        Sn	 [        R                  " [        R                  U5        Sn	U" U[        U /[        U5      -   5      U5      (       a  U	(       a  U R                   (       aQ  U" U[#        [#        U R                   S5      U5      5      " [        R                  " [        R                  U5      5      n
O*UR%                  U['        [        R                  U5      5      n
U" X[        U /[        U5      -   5      U5      $  US	:X  a8  [)        US
   [*        R,                  5      (       a  [*        R.                  " S5      $  ['        U SU 35      n U" U0 UD6nU(       a  U$  SSK Jn  U" UUR4                  R6                  " SU/[9        U /UQU5      Q76 5      $ ! [         a    Sn	 GNf = f! [0         a  n[        SU SU 35         S nANkS nAff = f! [         a     Nf = f)Nr"   )SourcelessBuilderVariableBuilder)can_dispatch_torch_functiondispatch_torch_functionzIllegal method invocation z in strict modeFTr`   __eq__r   method_zunhandled args for z: r   r   )r   r0  r1  torch_functionr2  r3  r   r   r   r   r   r1   r6   r   ry   listr   r   r   r7   r5   r   r   r$   	TypeErrorr   r   create_proxyr   )rT   r   r   argsr_   r0  r1  r2  r3  is_base_tensor_methodfunc_varhandler_methodr  er   s                  r;   r   TensorVariable.call_method:  s    	@Xr""t/K/K/M'M6tfOLM
 !&	*""5<<6$(!
 (E4&4:2E,FOO%{{*
:dkk;#GN((t<> -33Bd8ST*eTFT$Z$78& 	 8
47I4V4V W W--e44
	A$TWTF+;<NA'88!M 
 	+II"" #D=4=&9
 	
U  	*$)!	*J  A 3D6A3?@@A  		s<   'G% H  G8 %G54G58
HHH 
H-,H-c                 .    U R                   " S/UQ70 UD6$ r   _method_size_striderT   r:  r_   s      r;   method_sizeTensorVariable.method_size  s    ''@@@@r=   c                 .    U R                   " S/UQ70 UD6$ )NrG   rA  rC  s      r;   method_strideTensorVariable.method_stride  s    ''B4B6BBr=   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 rj   )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rF   rd   c              3   8   #    U  H  n[        U5      v   M     g 7frj   ru   .0rs     r;   	<genexpr>5TensorVariable._method_size_stride.<locals>.<genexpr>  s     ,DVSVVV   )r   r$   r   r7   r   rF   rA   rQ   rf   getr   ry   ru   )rT   r   r   rM  RetVariablerS  fakefake_rs           r;   rB  "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r=   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 rc   )r   r$   r   r   rF   rA   rQ   rf   rW  numelr   ru   )rT   rY  rZ  s      r;   method_numelTensorVariable.method_numel  s    ??#**7499+=>> JJOO((,,_==DJZZ\F#F++'..s6{;; , Kr=   c                 ^    U R                   b   [        R                  " U R                   5      $ g rj   )rE   r$   r   rS   s    r;   
method_dimTensorVariable.method_dim  s&    99 #**49955 !r=   c                 r    U R                   b*  [        R                  " U R                   R                  5      $ g rj   )rB   r$   r   is_floating_pointrS   s    r;   method_is_floating_point'TensorVariable.method_is_floating_point  s,    ::!#**4::+G+GHH "r=   c                     U R                   R                  R                  R                  S5      =nb$  [        R
                  " UR                  5       5      $ g rc   )rA   rQ   rf   rW  r$   r   is_inference)rT   rY  s     r;   method_is_inference"TensorVariable.method_is_inference  sF    JJOO((,,_==DJ#**4+<+<+>?? Kr=   c                 r    U R                   b*  [        R                  " U R                   R                  5      $ g rj   )rB   r$   r   
is_complexrS   s    r;   method_is_complex TensorVariable.method_is_complex  s,    ::!#**4::+@+@AA "r=   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 )Nrd   rs   )
as_python_constantr1   contiguous_formatrJ   r$   r   rA   rQ   rf   rW  )rT   rt   rY  s      r;   method_is_contiguous#TensorVariable.method_is_contiguous  s     ( ,,.(( 	
 )#**=<N<N+NOOjjoo**..??dL#**"""?  Mr=   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rj   )rB   )rR  kvrT   s      r;   rT  -TensorVariable.method_type.<locals>.<genexpr>  s#      9daTZZ1_9s   &	&cpuztorch..ztorch.tensortyper   r&   r"   r   non_blockingr   rv   )rB   r5   rC   r1   nextr!   r  rv   r$   r   r8   r   rp  symbolic_convertr'   r   r   
current_txr   r9  r   )
rT   rB   r{  r_   
tensortypetensor_typetensor_type_constr'   r   r   s
   `         r;   method_typeTensorVariable.method_type  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 r=   c           
      d   [        U[        5      (       a  UR                  (       a  SSKJn  SSKJn  UR                  " 5       nUR                  5       n[        R                  " UUR                  R                  [        [        UR                  S5      S5      5      nUR                  X@XV5      $ g g )Nr   r&   r"   TensorWithTFOverrideVariable__torch_function____func__)r5   TensorSubclassVariabler   r}  r'   r6  r  r~  rp  r#   r   r  r  r   from_tensor_var)rT   clsr'   r  r   py_clstorch_fns          r;   method_as_subclass!TensorVariable.method_as_subclass  s    c122szz@D&113B ++-F&,,))22:cjj2FGTH 0??& # 8B2r=   c                     [        U R                  [        R                  5      (       aH  U R                  R                  S:w  a  U R                  R                  OSn[
        R                  " U5      $ g )Nry  )r5   rC   r1   rv   indexr$   r   )rT   r  s     r;   method_get_device TensorVariable.method_get_device  sO    dkk5<<00)-)9)9U)BDKK%%E#**511 1r=   c                 V    [         R                  " U R                  R                  5      $ rj   )r$   r   rB   itemsizerS   s    r;   method_element_size"TensorVariable.method_element_size   s    &&tzz':':;;r=   )forcec                B   [         R                  (       d  [        S5        [        (       d  [        S5        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(). config.trace_numpy is Falsez&Tensor.numpy(). NumPy is not availablezcan't convert z1 layout tensor to numpy. Use Tensor.dense() firstr   r&   detachr   ry  view_as)r   trace_numpyr   nprD   r1   stridedr8  r}  r'   r~  rp  r   r   r9  rl   r   NumpyNdarrayVariabler   )rT   r  r'   r   trA   s         r;   method_numpyTensorVariable.method_numpy#  s    !!GHrBC;;%--' -^_  	="--/ U--//  Xr26AII**=%!**,RTUE II**y+<d\2+NE $**255r=   c                    ^^^ SSK Jn  SSKJm  UR                  " 5       mUUU4S jmU R                  5       R                  R                  S   nT" X 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5        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patchobject	fake_modeitem)r!  	sub_proxyr   r   s     r;   wrap:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrapD  sP     ]]((//LL"8$ )!(  s   A
A&z1Input tensor for tolist must be an integer tensorr   r"   )r  )	rB   r1   int8int16int32int64r   r   	enumerate)	tensorr  r  r!  val
sub_tensortolistr   r   s	         r;   r  ,TensorVariable.method_tolist.<locals>.tolistC  s    	 ||

	$  QRzz|q F..zz|q >G>OP>OFASA,/>OPP &/v%6%6MA zq\:%6  Qs   C C&rd   )
r}  r'   r   r   r~  rl   rQ   rf   r#   r   )rT   r'   r  outr  r   r   s       @@@r;   method_tolistTensorVariable.method_tolist=  s]    <*"--/	> %%**?;V]]_-$$R--r=   c                     [        S5        g )NzTensor.backwardr   rC  s      r;   method_backwardTensorVariable.method_backwardf  s    '(r=   c                     [        U 5      $ rj   )DataPtrVariablerC  s      r;   method_data_ptrTensorVariable.method_data_ptri  s    t$$r=   c                 f    [         R                  (       d  U R                  5         [        S5        g g )NzTensor.item)r   capture_scalar_outputs_warn_capture_scalar_outputsr   rC  s      r;   method_itemTensorVariable.method_iteml  s$    ,,--/-( -r=   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~  r5   r  r1   selectr   r$   r   operatorgetitemr   r9  r   r7  )rT   r:  r_   r'   r   r   r  rA   s           r;   method___getitem__!TensorVariable.method___getitem__q  s    <*"--/d1g//
 ..55a8G  !!B		&&
 vT
2F;
 R''r=   c                      [         R                  R                  R                  5       n SR	                  [
        R                  " U 5      5      n[        R                  [        R                  " S5      U5        g )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
                )r1   _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	 !	
r=   c                     SSK Jn  UR                  " 5       nU R                  US[        R
                  " S5      /0 5      $ )Nr   r&   rF   r   )r}  r'   r~  r   r$   r   )rT   r'   r   s      r;   method___len__TensorVariable.method___len__  s9    <"--/F-=-D-DQ-G,H"MMr=   r9   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)rT   tensor1tensor2r:   r'   r   r  s          r;   method_addcmul_TensorVariable.method_addcmul_  sS    <"--/$11%%b*C*CD/  r=   c                    ^ U4S jmSSK Jn  UR                  " 5       nUR                  R                  " S[
        R                  /[        XU/0 5      Q76   [        R                  " S 5      $ )Nc                   > [        U [        5      (       a-  U R                  [        R                  [        R
                  4;   $ [        U [        R                  5      (       a  [        U4S jU R                   5       5      $ g)Nc              3   4   >#    U  H  nT" U5      v   M     g 7frj   rZ   )rR  r  has_bool_keys     r;   rT  JTensorVariable.method___setitem__.<locals>.has_bool_key.<locals>.<genexpr>  s     B'$<--'s   F)
r5   r?   rB   r1   boolr  r   TupleVariableanyr  )rw  r  s    r;   r  7TensorVariable.method___setitem__.<locals>.has_bool_key  sW    !^,,ww5::uzz":::Ay6677B!''BBBr=   r   r&   r   )
r}  r'   r~  r   r9  r  setitemr   r$   r   )rT   keyr:   r'   r   r  s        @r;   method___setitem__!TensorVariable.method___setitem__  sb    	 	="--/
			
 5126	

  &&t,,r=   c                     [        S5        g )NzTensor.resize_r   rC  s      r;   method_resize_TensorVariable.method_resize_  s    &'r=   c                     [        S5        g )NzTensor.resize_as_r   rC  s      r;   method_resize_as_ TensorVariable.method_resize_as_  s    )*r=   c                     [        S5        g )NzTensor.sparse_resize_r   rC  s      r;   method_sparse_resize_$TensorVariable.method_sparse_resize_  s    -.r=   c                     [        S5        g )NzTensor.sparse_resize_and_clear_r   rC  s      r;   method_sparse_resize_and_clear_.TensorVariable.method_sparse_resize_and_clear_  s    78r=   c                 :    [        U5      S:  a  [        S5        g g )Nr"   z(Tensor.set_.source_Tensor_storage_offset)r  r   rC  s      r;   method_set_TensorVariable.method_set_  s    t9q= DE r=   )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   r1   mulr   r   )rT   otherr  r'   r   r  s         r;   method_add_TensorVariable.method_add_  sa    @&113B;;EIIFTTENBF ##B"== r=   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   r1   divr   r	  r   )rT   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"== r=   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   r1   eqr   r  r   )rT   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5r=   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$ rj   )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Dr=   prim_redistributer"   r   r   r   r}  r'   r~  rp  r  r8   r   r   r   r9  r   )rT   r:  r_   r'   r   r   rv  rw  r  r   r  r  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$ rj   )to_localr  s    r;   to_local_fn_with_prim_typesCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_types(  s    ::}@@@r=   prim_to_localr"   r   r   r   r  )rT   r:  r_   r'   r   r   rv  rw  r&  r   r  r  s             @@r;   method_to_localTensorVariable.method_to_local  s    <"--/ :>>A--/>AGP12244P	A 0?#,*))((+ #D62.
 	
 ?Pr"  c                 .    U R                   " S/UQ70 UD6$ )Nregister_hook_method_register_hookrC  s      r;   method_register_hook#TensorVariable.method_register_hook9  s    ))/KDKFKKr=   c                 .    U R                   " S/UQ70 UD6$ )N"register_post_accumulate_grad_hookr-  rC  s      r;   )method_register_post_accumulate_grad_hook8TensorVariable.method_register_post_accumulate_grad_hook<  s(    ))0
37
;A
 	
r=   r   hookc           	      <  ^^
 SSK Jn  UR                  " 5       nU R                  (       d  [        R
                  (       d  [        S5        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 autogradc           	      h   > [        U T5      nU" [        R                  " [        [        UTS95        g )N)r  bw_state	hook_name)r7   	functoolspartialr   r   )r  r8  r,  r9  r   s      r;   _register_hook_trampolineGTensorVariable._method_register_hook.<locals>._register_hook_trampoline_  s6     ' 5%%%8!)"+	 r=   r"   r   Thas_backward_hookr   )mutation_type)r}  r'   r~  r   r   compiled_autograd_enabledr   r   add_backward_state_hookr   r   rl   rQ   rf   r9  r   RemovableHandleVariablebaseValueMutationNewside_effectsr,  )rT   r   r5  r'   r   bw_state_proxyr<  r   
self_proxyhandle_variabler9  s    `        @r;   r.  $TensorVariable._method_register_hookA  s     	="--/{{$>>  R )+		(I(I$(O%I~ /J8<JOO  !45 		&&#-0	  $;;#..99;
 			,,T$Or=   c                     USLa  UR                  5       nU R                  5       R                  R                  S   R                  U:w  a  [        S5        g U $ )NTrd   zTensor.requires_grad_)rp  rl   rQ   rf   rH   r   )rT   rH   s     r;   method_requires_grad_$TensorVariable.method_requires_grad_  sK    $)<<>M==?$$_5CC}T12Kr=   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rj   )r5   r$   rp   ru   )rR  as     r;   rT  ,TensorVariable.method_new.<locals>.<genexpr>  s/      TXq
1./JAMMOs4JJTXs   ;=r   r&   	new_empty)r  r5   r%   allr}  r'   r   r~  )rT   r:  r_   r'   s       r;   
method_newTensorVariable.method_new  sw     INz$q'<@@IN TX   A##%002K  r=   c                 ~    [        X R                  5       R                  R                  S   R	                  5       5      $ rc   )UntypedStorageVariablerl   rQ   rf   untyped_storagerS   s    r;   method_untyped_storage%TensorVariable.method_untyped_storage  s2    %--/&&++O<LLN
 	
r=   c                     U R                   (       d-  U R                  R                  R                  U5        SU l         g g )NT)rO   rA   rQ   _rename)rT   r   s     r;   set_name_hintTensorVariable.set_name_hint  s.      JJOO##D) $D !r=   )rO   rV   rM   rC   rB   r]   rJ   rK   rI   rL   rD   rE   rA   rH   rG   r   r'   rj   r:  zlist[VariableTracker]r_   zdict[str, VariableTracker]rW   r#   )NFT)[r8   
__module____qualname____firstlineno____doc__r#   _nonvar_fieldsr   r1   fxProxyr\   rg   rl   rp   staticmethodr6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r   propertyrF   r   r   r   rD  rG  rB  r^  method_nelementra  method_ndimensionre  ri  rm  rr  r  r  r  r  r  r  r  r  r  r  r:  	lru_cacher  r  r  r  r  r  r  r   r  r  r  r  r   r)  r/  r3  strr.  rK  rS  rX  r\  __static_attributes____classcell__r`   s   @r;   r?   r?   ~   s   G 	  
	'	'!N&B. #&/xx~~&/& 
'&/ &/P; 0%,, 0 0d@BD7788G8?>;;F(
4
)*Un1$!
F&  N

E
 &	E

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

@# @_ @D

%# % %r=   r?   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  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.
rA   sym_numc                 ,    [        U R                  5      $ rj   )re   rr  rS   s    r;   rg   SymNodeVariable.debug_repr  s    DLL!!r=   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$ rc   )r   rQ   rf   r    r5   sympyIntegerru   r  r$   r   r  )r  r   rA   rr  rK  s        r;   r   SymNodeVariable.create  s    ?$UZZ4Gejjoo-::???3w>>>%**g.gsD9::&0%--&H&Hc'lgG#**733u999r=   c                 L   > [         TU ]  " S0 UD6  Xl        X l        S U l        g NrZ   )r[   r\   rA   rr  _tensor_var)rT   rA   rr  r_   r`   s       r;   r\   SymNodeVariable.__init__  s%    "6"
r=   c                     [        U R                  [        5      (       a   U R                  R                  R                  $ [        U R                  5      $ rj   )r5   rr  r
   rQ   pytyperv   rS   s    r;   rp   SymNodeVariable.python_type  s8    dllH--<<$$+++%%r=   c                     U R                   $ rj   rk   rS   s    r;   rl   SymNodeVariable.as_proxy  rn   r=   c           	          U R                   cQ  [        R                  " U[        R                  5      R                  X/S[        R                  " X5      05      U l         U R                   $ )NrB   )r{  r#   r   r1   scalar_tensorr   )rT   r   rB   s      r;   	as_tensorSymNodeVariable.as_tensor  s[    #.44E'' mB/2G2G2R(ST  r=   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   rr  r   r1   rf  experimental_configno_data_dependent_graph_breakr   r   ANTI_PATTERNrm  )rT   output_graphr>  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   r9  r   )rT   r   r   r:  r_   r   s         r;   r   SymNodeVariable.call_method  sF     	+II"" #D=4=&9
 	
r=   )r{  rA   rr  rj   rW   Nr_  )r8   ra  rb  rc  rd  r#   re  rg   classmethodr   r\   rp   rl   r  r  r   rn  ro  rp  s   @r;   r  r    s     	 
	'	'N" : : & 
 &	

 -
 

 
r=   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  rZ   )r   r  r  )r   rA   rK  r  s       r;   r   NumpyNdarrayVariable.create  s*    .  
+
 	
 	
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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T 35        OTS;   a  ['        S5        Uc  [(        eU$ )Nr   )numpy_attr_wrapperr"   r   rd   c            	      n   > T" TTR                   R                  STTR                  5       T 40 5      5      $ )Nr   )r   r9  rl   )r   r  rT   r   r   s   r;   insert_into_graph;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  s;     		&&#%7$--/49PRT r=   )Trealimagr   )rE   r  )shaperG   c              3   8   #    U  H  n[        U5      v   M     g 7frj   rP  rQ  s     r;   rT  3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>;  s     4GQSVVQrV  rF   )rC  flagsrB   zTODO: add support for ndarray.)__version__z delegate np.__version__ to NumPy)r3   r  r   r   rl   rQ   rf   tnpndarrayr   r9  r  r   r$   r7   r   ry   rF   ru   r   r   )rT   r   r   r  rd   example_ndarrayr  rA   rS  r  r   s   ```      @@r;   r   NumpyNdarrayVariable.var_getattr  sk   
 	/*,,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$&&//:4&AB_$<=>%%r=   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  rW  )r   r:  r_   kwargs_renamerv  rw  s         r;   
patch_argsNumpyNdarrayVariable.patch_argsI  sM    6>&+e<M=C\\^L^TQm''-q0^FL| Ms   Ac           	      ,  > SSK Jn  U R                  X#U5      u  p4US;   a  [        TU ]  XX45      $ US;   a  [        U S35        UR                  R                  " SU" U5      /[        U /[        U5      -   U5      Q76 n[        R                  X5      $ )Nr   )numpy_method_wrapper)__len__rF   r  )tostringtobytesz  is not modelled in torch._numpyr   )r3   r  r  r[   r   r   r   r9  r   r7  r  r   )rT   r   r   r:  r_   r  rA   r`   s          r;   r    NumpyNdarrayVariable.call_methodP  s     	1t6:007&r>>**TF"BCD		&& &
 vT
2F;

 $**255r=   c                 "    [         R                  $ rj   )r  r  rS   s    r;   rp    NumpyNdarrayVariable.python_typeg  s    zzr=   rZ   r^  r_  )r8   ra  rb  rc  rd  rh  r   r  r  r   rp   rn  ro  rp  s   @r;   r  r    sc    
 
 
;z  6 &	6
 -6 
6. r=   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$ )UnspecializedPythonVariableik  zG
This is a 1-element tensor represents unspecialized python float/int.
	raw_valueneed_unwrapNTr  r  rA   rW   c                @   > [         TU ]  " U40 UD6  X l        X0l        g rj   )r[   r\   r  r  )rT   rA   r  r  r_   r`   s        r;   r\   $UnspecializedPythonVariable.__init__v  s"     	)&)"&r=   c                 H    [        S0 [        UR                  5      DUUS.D6$ )Nr  rZ   )r  dict__dict__)r  tensor_variabler  r  s       r;   from_tensor_variable0UnspecializedPythonVariable.from_tensor_variable}  s/     + 
?++,
#
 	
r=   )r  r  r`  r8   ra  rb  rc  rd  r?   re  r1   rf  rg  r\   r  r  rn  ro  rp  s   @r;   r  r  k  sd    
 	 
	&	&N 37D'XX^^'	' ' 
 
r=   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  rA   rW   Nc                 X   > UR                  SS5      n[        TU ]  " U40 UD6  X0l        g )Nr  F)popr[   r\   r  )rT   rA   r_   r  r`   s       r;   r\   FakeItemVariable.__init__  s+    jj6)&)&r=   c                 >    [        S0 [        UR                  5      D6$ rz  )r  r  r  )r  r  s     r;   r  %FakeItemVariable.from_tensor_variable  s    A$'?'?"@AAr=   )r  r  rp  s   @r;   r  r    sS    9 			&	&N
'ehhnn '4 '
 B Br=   r  c                   b   ^  \ rS rSrSU 4S jjrSSS\\   S\\\4   S\4U 4S jjr	S	 r
S
rU =r$ )r  i  rW   c                 2   > Xl         [        TU ]  " U0 UD6  g rj   )r:   r[   r\   )rT   r:   r:  r_   r`   s       r;   r\   TensorSubclassVariable.__init__  s    
$)&)r=   r   r'   r:  r_   c                 @  > [        U5      S:X  a  [        US   [        5      (       ag  SSKJn  [        U R                  S5      n[        R                  " XR                  R                  U5      nUR                  XS   U R                  U5      $ [        TU ]5  XU5      $ )Nr"   r   r  r  )r  r5   r?   r6  r  r   r   r#   r   r:   r  r  r[   r   )rT   r   r:  r_   r  r   r  r`   s          r;   r   $TensorSubclassVariable.call_function  s     t9>ja.AAD-ABF&,,R1N1NPVWH/??GTZZ  w$Rv66r=   c                     U R                   $ rj   r9   rS   s    r;   rp  )TensorSubclassVariable.as_python_constant  rn   r=   r9   r  )r8   ra  rb  rc  r\   r7  r#   r  rm  r   rp  rn  ro  rp  s   @r;   r  r    sL    *7#7 ?#7 S/)*	7
 
7$ r=   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
 rSrU =r$ )rV  i  rd   from_tensorrW   Nc                 >   > [         TU ]  " S0 UD6  Xl        X l        g rz  )r[   r\   r  rd   )rT   r  rd   r_   r`   s       r;   r\   UntypedStorageVariable.__init__  s!     	"6"&*r=   r:  r_   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      $ )	NrF   r   )untyped_storage_sizer"   r   r   resize_r   )rd   rF   r   r$   r   ru   external_utilsr  r   r   r   r9  r  rl   r  r1   r   inductorresize_storage_bytes_r[   r   )	rT   r   r   r:  r_   r  r  r   r`   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::r=   c                 l    U" U R                   5        UR                  S5        UR                  S5        g )NrW  r   r  load_methodr   rT   codegens     r;   reconstruct"UntypedStorageVariable.reconstruct  s-      !-.Ar=   )rd   r  )r8   ra  rb  rc  r#   re  r?   r1   UntypedStorager\   r7  r  rm  r   r  rn  ro  rp  s   @r;   rV  rV    s    		'	'N
	+#	+ ++	+
 
	+%; ?#	%;
 S/)*%; 
%;N r=   rV  c                   :   ^  \ rS rSrS\SS4U 4S jjrS rSrU =r$ )r  i  r  rW   Nc                 2   > [         TU ]  " S0 UD6  Xl        g rz  )r[   r\   r  )rT   r  r_   r`   s      r;   r\   DataPtrVariable.__init__  s    
 	"6"&r=   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r=   )r  )	r8   ra  rb  rc  r?   r\   r  rn  ro  rp  s   @r;   r  r    s$    '#' 
	' r=   r  )ard  r:  r   loggingr  r  r  r   r  typingr   rv  torch._numpy_numpyr  torch.fxr1   torch.randomtorch._dynamor   torch._subclasses.meta_utilsr   %torch.fx.experimental.symbolic_shapesr   r   r   r	   r
   torch.utils._python_dispatchr   r   r   r   _trace_wrapped_higher_order_opr   r   r   r   r   r   r  r   guardsr   r   r   r   r3   r   r   r   r   r   r   r   r   r    r!   rC  r#   constantr$   listsr%   numpyr  ModuleNotFoundErrortorch._dynamo.symbolic_convertr'   	getLoggerr8   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?   r  r  r  r  r  rV  r  rZ   r=   r;   <module>r     s  "               + 6  G   :  ; 0    " & 
 D ! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
e%_ e%P!R
o R
jm> m`
. 
8B~ B&_ 6;_ ;|o O-  	Bs   4H HH