
    Vh              	          d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlZddlmZ ddlZddlZddlmZ ddlmZ ddlmZmZmZmZmZ ddlmZ dd	lmZm Z  dd
l!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? 	 ddl@ZAe
rddlCmDZD  ej                  eF      ZGej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  dZPej                  ej                  ej                  ej                  dZQi ePeQZReSj                  ePj                               ZVeSj                  eQj                               ZWd ZX G d de;      ZY G d de;      ZZ G d deY      Z[ G d deY      Z\ G d  d!eY      Z] G d" d#e;      Z^ G d$ d%e;      Z_ G d& d'e;      Z`y# eB$ r dZAY Nw xY w)(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                    t        |       xr t        j                  j                  j	                  |        xrU t        | d      xrG t        | j                  t        j                        xr! t        | j                  | j                  d       S )N__self__)callabletorch_dynamoutilsr   hasattr
isinstancer/   Tensorgetattr__name__values    N/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodr<   t   sq     	:##;;EBB	:E:&	: u~~u||4	: ENNENND9    c                       e Zd ZdZdddddddd	d
ddddddhej
                  Zd Zddddddej                  j                  ddf fdZ
d Zd Zd Zedej                  fd       ZdbdZd Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Zd% Zd& Zd' Zd( Zd) Zdbd*Z dbd+Z!d, Z"d- Z#dcdbd.Z$d/ Z%e&d0        Z'd1 Z(d2 Z)	 	 	 	 	 	 ddd3Z*d4 Z+d5 Z,dcd6Z-d7 Z.e.Z/d8 Z0e0Z1d9 Z2d: Z3d; Z4dcd<Z5ded>Z6d? Z7d@ Z8dA Z9d=dBdCZ:dD Z;dE Z<dF Z=dG Z>dH Z?e e@j                  d      dI               ZBdJ ZCddKdLZDdM ZEdN ZFdO ZGdP ZHdQ ZIdR ZJddSdTZKddKdUZLdV ZMdW ZNdX ZOdY ZPdZ ZQd[eRd\efd]ZSdfd^ZTd_ ZUd` ZVd[eRfdaZW xZXS )gTensorVariablez=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    t        | j                  j                  | j                  j                        S )z
        Get the actual value represented by this variable if computation is run
        using the user-provided inputs.
        NOTE: this runs actual tensor computation and may be
        slow and memory-intensive.
        )r   r@   nodetracerselfs    r;   r   zTensorVariable.get_real_value   s#     djjootzz/@/@AAr=   N)_sizerF   rI   rN   returnc                @   t        |   di | || _        || _        || _        || _        || _        || _        || _        || _	        || _
        || _        || _        |	| _        |
| _        || _        |#| j                  j                   j"                  dk(  }|| _        y )Nplaceholder )super__init__r@   rA   rB   rC   rD   rT   rF   rG   rH   rI   rJ   rK   rL   has_grad_fnrP   oprN   )rS   r@   rA   rB   rC   rD   rG   rJ   rH   rK   rL   r[   rT   rF   rI   rN   kwargs	__class__s                    r;   rZ   zTensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".r=   c                 Z    t        | j                  j                  j                  d         S Nexample_value)reprr@   rP   metarR   s    r;   
debug_reprzTensorVariable.debug_repr   s     DJJOO((9::r=   c                     | j                   S Nr@   rR   s    r;   as_proxyzTensorVariable.as_proxy       zzr=   c                     | j                   S rf   )rL   rR   s    r;   python_typezTensorVariable.python_type   s    r=   r:   c                    | j                   | j                  | j                  t        | j                        | j
                  | j                  | j                  | j                  t        |       d	}	 | j                  d u|d<   t        |       rMt        |       sBt        | j                         D cg c]  }t!        |      rt        |      n| c}      |d<   |S t        |       st        | j                         D cg c]  }t!        |      rt        |      n| c}      |d<   t        | j#                               |d<   t$        j&                  j(                  j+                  |       rd |d<   |S t        t$        j,                  j.                  D cg c]  }| j1                  |      r| c}      |d<   |S # t        $ r	 d|d<   Y Hw xY wc c}w c c}w c c}w )N)	rA   rB   rC   rD   rG   rJ   rH   rK   rL   r[   FrT   rF   rI   memory_format)rA   rB   rC   intrD   rG   rJ   rH   rK   typegrad_fn	Exceptionr   r   tuplerE   r	   rF   r1   _C
_functorchis_batchedtensor_prims_common_memory_formatsrI   )r:   propssxs       r;   
specializezTensorVariable.specialize   s    [[llll

O"00!..u+

	)#(==#<E-  (8(?":?**,GQ;q>Qq0GE'N8 3 "%( # ;@**,GQ;q>Qq0GE'N
 $ELLN3E(Oxx""33E: *.o&  */ "'!4!4!D!D ..Q.? *o& E  	) $)E- 	) H Hs$   0F8 .G;GG8G
	G
c                    | j                   j                  j                  d   }| j                  st	        |      r|j                         \  }}t        | j                         |      }t        ||      }||v r-t        |t        j                        sJ ddlm}  ||||      S t        |      st        j                  ||      S | j                  r| j                  j!                         st"        |j$                  j&                  |j$                  j(                  d}		 t+        | j                  j-                         |	      }
|
t"        t1        |
      rt"        t3        |
      rt"        t        |
|      }t5        | j                  |      }t7        |j9                  t:        j<                               t?        |      rddl m!}  || ||tE        |            S t        j                  |||      S # t.        $ r}t"        |d }~ww xY w)Nra   r"   wrap_fx_proxy)txr@   ra   LGGetAttrVariable)sourcepy_type)#r@   rP   rc   r   r   __tensor_flatten__r7   rh   r5   r1   r6   builderr   r0   r#   buildsubguards_allowedNotImplementedErroroutputlocal_scopeglobal_scopeevalnamerr   r   r   r   r   
make_guardr   HASATTRr<   miscr   rp   )rS   r   r   fake_valattrs_ctxr@   ra   r   scope_input_associated_real_valueexc
real_valueattr_sourcer   s                  r;   dynamic_getattrzTensorVariable.dynamic_getattr  s   ::??''8 {{<XF"557KE4DMMOT2E#Hd3Mu}!->>>2$%}UU m,&,,R?? = = ?%% ii++"))2H2HI	/ ,00@0@0BE+J( (/%%"#?@%%:;%%94@
 d3k,,\-A-ABC "*--"d;Z8H  $$R[AA5  	/%3.	/s    $G5 5	H
>HH
c                     | j                   t        j                  | j                         S | j                  |dg i       S )Ndim)rD   r$   createcall_methodrS   r   s     r;   method_attr_ndimzTensorVariable.method_attr_ndimD  s8    99 #**49955##Br266r=   c                 Z    | j                   t        j                  | j                         S y rf   )rA   r$   r   r   s     r;   method_attr_dtypez TensorVariable.method_attr_dtypeJ  s&    ::!#**4::66 "r=   c                 Z    | j                   t        j                  | j                         S y rf   )rB   r$   r   r   s     r;   method_attr_devicez!TensorVariable.method_attr_deviceN  &    ;;"#**4;;77 #r=   c                 Z    | j                   t        j                  | j                         S y rf   )rC   r$   r   r   s     r;   method_attr_layoutz!TensorVariable.method_attr_layoutR  r   r=   c                 t    | j                   ,t        j                  | j                   j                  dk(        S y )Ncuda)rB   r$   r   rp   r   s     r;   method_attr_is_cudaz"TensorVariable.method_attr_is_cudaV  s1    ;;"#**4;;+;+;v+EFF #r=   c                     | j                         rA| j                  D cg c]!  }t        j                  j	                  |      # }}t        |      S | j                  |dg i       S c c}w NrE   )
valid_sizerE   r   r$   r   r%   r   )rS   r   r{   sizess       r;   method_attr_shapez TensorVariable.method_attr_shapeZ  s\    ??CG99MaY//66q9MEM&&##BB77 Ns   &A&c                 Z    | j                   t        j                  | j                         S y rf   )rG   r$   r   r   s     r;   method_attr_requires_gradz(TensorVariable.method_attr_requires_grada  s*    )#**4+=+=>> *r=   c                 Z    | j                   t        j                  | j                         S y rf   )rH   r$   r   r   s     r;   method_attr_is_quantizedz'TensorVariable.method_attr_is_quantizede  s*    (#**4+<+<== )r=   c                 Z    | j                   t        j                  | j                         S y rf   )rK   r$   r   r   s     r;   method_attr_is_sparsez$TensorVariable.method_attr_is_sparsei  &    >>%#**4>>:: &r=   c                 Z    | j                   t        j                  | j                         S y rf   )rJ   r$   r   r   s     r;   method_attr_is_nestedz$TensorVariable.method_attr_is_nestedm  r   r=   c                     t        d       y )Nz,retain_grad does not work with AOTDispatcherr   r   s     r;   method_attr_retain_gradz&TensorVariable.method_attr_retain_gradq  s    DEr=   c                     t        j                  t        j                  j                  j
                        j                  || gi       S rf   )r   TorchInGraphFunctionVariabler1   rt   	_autograd_get_data_attrcall_functionr   s     r;   method_attr_datazTensorVariable.method_attr_datat  s8    55HH--

-TFB
'	(r=   c                 \    | j                   rt        d       y t        j                  d       S )NzTensorVariable has a grad_fn)r[   r   r   r$   r   s     r;   method_attr_grad_fnz"TensorVariable.method_attr_grad_fny  s%    89--d33r=   c                 \    ddl m} t        j                  |      j	                  || gi       S )Nr   )_tensor_version)tensor_version_opr   r   r   r   )rS   r   r   s      r;   method_attr__versionz#TensorVariable.method_attr__version  s,    755oFTT
 	
r=   c                 N   ddl m} ddlm} 	  |t              j                  || t        |      gi       }t        ||       }| j                  r<t        t        | j                  |      j                  t        j                               t        |      S # t        $ r d}Y `w xY w)Nr"   r   )BuiltinVariableF) r   builtinr   r7   r   r$   r5   AttributeErrorr   r   r   r   r   r   )rS   r   r   r   r   varret_vals          r;   call_obj_hasattrzTensorVariable.call_obj_hasattr  s    %,	!'*88T+D12BC
 %S/::G ;;4;;-889M9MN  ((  	G	s   5B B$#B$c                 r    ddl m}  j                        rC j                         v rt	        d d       n! j                         v rt        d d      dk(  r | j                               S t         d d       }| |      nd }|} j                  rq j                  j                         rWd	vr|j                         sCt         j                  t        j                               t!         j                        |_	         j                  t#        t$        j&                  j(                        rt        t$        j&                  j(                        }t#        |d
      rt#        ||j+                         d         rut$        j,                  j.                  t        ||j+                         d         j0                  v r4t2        j4                  j7                  t!         j                              S |dk7  r fd} |       }| j9                        }|t:        |S )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_)gradrG   	overloadsr   )r   r   c                  h   ddl m}  ddlm} 	 t	        j
                  t        j                        }t        |      t        j                  k7  ry |j                  j                               }j                   | |t        j                              S  | |      S # t        $ r Y y w xY w)Nr"   r~   r   )r   r@   r   r   r@   )r   r   r   r   inspectgetattr_staticr1   r6   r   rp   typesGetSetDescriptorTypecreate_getattr_proxyrh   r   r   )r   r   static_attrr@   r   rS   r   s       r;   try_generic_attr_handlingz=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% %	B10B1)r   r   is_strict_mode_strict_mode_banned_opsr   #_strict_mode_conditional_banned_opsr   rk   r7   r   r   is_python_constantr   r   r   
TYPE_MATCHr   r4   r1   opsatenr   Taginplace_viewtagsr   r   DelayGraphBreakVariabler   r   )rS   r   r   r   handlerresultfnr   s   ```     r;   var_getattrz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 $//,*A*ABC&t{{D9FM ;;"wuyy~~t'D.BK(Bq 12II**gb",,.:K.L.Q.QQ !~~==%dkk48 >   >dfn=4 /0F>))"d3F>%%r=   c                    | j                   st        d       |j                  j                  |j                  j                  d}	 t        | j                   j                         |      }t        d       t        | j                   j                  t        j                               t        |      }t        j                  |      S # t        $ r}t        d|        Y d }~{d }~ww xY w)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   rr   r   r   r   ID_MATCHidr$   r   )rS   r   r   r   r   id_values         r;   call_idz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	 		C*C%%C*c                      | j                   dkD  S )Nr   )rD   r   s     r;   has_unpack_var_sequencez&TensorVariable.has_unpack_var_sequence  s    yy1}r=   c           	         ddl m} | j                         rt        | j                        }n;| j                  |dg i       }t        |t              sJ t        |j                        }|dk7  sJ d       | j                         r| j                  d   }nx| j                  |dt        j                  d      gi       }t        |t        t        f      sJ t        |t              r|j                  |j                        }n|j                  }|t        |      }n%t        |      |k(  sJ d| dt        |       d       |D cg c]'  } |t!        |       || j#                         |   	      ) c}S c c}w )
Nr"   wrap_fx_proxy_clsrE   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.
target_clsr   r@   )r   r   r   lenrE   r   r5   r%   itemsr$   r   SymNodeVariableevaluate_exprr   r:   rangerp   rh   )	rS   r   idxesr   size_lensize_varlength
dyn_lengthis	            r;   unpack_var_sequencez"TensorVariable.unpack_var_sequence  sZ   .??499~H''FB;Hh5558>>*H1}<<<}??YYq\F))"f7G7N7Nq7Q6RTVWJ j?<L*MNNN*o6#11"))<#))=&MEu:' +F83I#e*U_`'
 
 d$--/RSBTU
 	
 
s   ,E2c                     | j                   d uS rf   rT   rR   s    r;   r   zTensorVariable.valid_size*  s    zz%%r=   c                 @    | j                   J d       | j                   S )Nz%accessing None size in TensorVariabler	  rR   s    r;   rE   zTensorVariable.size-  s"    zz%N'NN%zzr=   c                 J    t         j                  j                  j                  S rf   )r1   r2   r   )_autograd_backward_strict_mode_banned_opsrR   s    r;   r   z&TensorVariable._strict_mode_banned_ops2  s    }}##MMMr=   c                 J    t         j                  j                  j                  S rf   )r1   r2   r   5_autograd_backward_strict_mode_conditional_banned_opsrR   s    r;   r   z2TensorVariable._strict_mode_conditional_banned_ops5  s    MM  VV	
r=   c           
         ddl m}m} ddlm}m} | j                  |      r!|| j                         v rt        d| d       d}		 t        j                  t        j                  |       d}	 ||t        | gt        |      z         |      r|	r| j                   rP  ||t#        t#        | j                   d      |            t        j                  t        j                  |            }
n*|j%                  |t'        t        j                  |            }
 |||
t        | gt        |      z         |      S 	 |d	k(  r2t)        |d
   t*        j,                        rt+        j.                  d      S 	 t'        | d|       }	  ||i |}|r|S 	 ddl m}  || |j4                  j6                  d|gt9        | g||             S # t        $ r d}	Y ew xY w# t0        $ r}t        d| d|        Y d }~id }~ww xY w# t        $ r Y |w xY w)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   r  r  torch_functionr  r  r   r   r   r   r   r1   r6   r   rs   listr   r   r   r7   r5   r   r   r$   	TypeErrorr   r   create_proxyr   )rS   r   r   argsr]   r  r  r  r  is_base_tensor_methodfunc_varhandler_methodr   er   s                  r;   r   zTensorVariable.call_method:  s    	@Xr"tt/K/K/M'M6tfOLM
 !&	*""5<<6$(!
 (E4&4:2E,FO%{{?
:dkk;#GN((t<> -33Bd8ST*HeTFT$Z$78& 	 8
47I4V4V W--e44
	A$TWTF+;<NA'88!M 
 	+"BII"" #D=4=&9
 	
U  	*$)!	*J  A 3D6A3?@@A  		s<   &G .G< >G GG	G9G44G9<	HHc                 .     | j                   dg|i |S r   _method_size_striderS   r  r]   s      r;   method_sizezTensorVariable.method_size  s    't''@@@@r=   c                 .     | j                   dg|i |S )NrF   r   r"  s      r;   method_stridezTensorVariable.method_stride  s    't''B4B6BBr=   c                 J   t        |      }d }|dk(  r|nt        j                  }|dk7  rt        | |      }n$|dk(  r| j	                         r| j
                  }nd }|"| ||      S t        j                  ||         S | j                  j                  j                  j                  d      x}s|5 t        ||             }t        |      s |t        d |D                    S y  t        ||      |      }t        |      st        j                  t        |            S y y )Nc           
      h    t        | D cg c]  }t        j                  |fi | c}fi |S c c}w rf   )r%   r$   r   )r{   optionsys      r;   make_const_size_variablezDTensorVariable._method_size_stride.<locals>.make_const_size_variable  s9    @AB1!((6g6BFM Bs   /rE   ra   c              3   2   K   | ]  }t        |        y wrf   ro   .0rs     r;   	<genexpr>z5TensorVariable._method_size_stride.<locals>.<genexpr>  s     ,DSV,D   )r   r$   r   r7   r   rE   r@   rP   rc   getr   rs   ro   )rS   r   r   r*  RetVariabler/  fakefake_rs           r;   r!  z"TensorVariable._method_size_stride  s%   3	 )-$<L<S<S 	 6>d#AV^ 1		AA={"1~%'..qv66 JJOO((,,_==DJ{,t,.'/ 'u,DV,D'DEE 0
 -t,S1'/+223v;?? 0 Kr=   c                 J   | j                         r(t        j                  t        | j                              S | j
                  j                  j                  j                  d      x}:|j                         }t        |      st        j                  t        |            S y y r`   )r   r$   r   r   rE   r@   rP   rc   r2  numelr   ro   )rS   r4  r5  s      r;   method_numelzTensorVariable.method_numel  s    ??#**7499+=>> JJOO((,,_==DJZZ\F#F+'..s6{;; , Kr=   c                 Z    | j                   t        j                  | j                         S y rf   )rD   r$   r   rR   s    r;   
method_dimzTensorVariable.method_dim  s&    99 #**49955 !r=   c                 n    | j                   )t        j                  | j                   j                        S y rf   )rA   r$   r   is_floating_pointrR   s    r;   method_is_floating_pointz'TensorVariable.method_is_floating_point  s,    ::!#**4::+G+GHH "r=   c                     | j                   j                  j                  j                  d      x}#t	        j
                  |j                               S y r`   )r@   rP   rc   r2  r$   r   is_inference)rS   r4  s     r;   method_is_inferencez"TensorVariable.method_is_inference  sF    JJOO((,,_==DJ#**4+<+<+>?? Kr=   c                 n    | j                   )t        j                  | j                   j                        S y rf   )rA   r$   r   
is_complexrR   s    r;   method_is_complexz TensorVariable.method_is_complex  s,    ::!#**4::+@+@AA "r=   c                 N   ||j                         nt        j                  }| j                  !t	        j
                  || j                  v       S | j                  j                  j                  j                  d      x}%t	        j
                  |j                  |            S y )Nra   rm   )
as_python_constantr1   contiguous_formatrI   r$   r   r@   rP   rc   r2  )rS   rn   r4  s      r;   method_is_contiguousz#TensorVariable.method_is_contiguous  s     ( ,,.(( 	
 )#**=D<N<N+NOOjjoo**..??dL#**"""?  Mr=   Fc           
          |ʉ j                   t         j                  t        j                        rt	         fdt        j                         D              } j                  j                  dk(  r"t        j                  d|j                         S t        j                  d j                  j                   d|j                         S |t        t        |j                                     dk(  r|j                         }t        j                  t        |            }ddlm} dd	lm}  |j"                         }	|rd
|i|} ||	 |	j$                  j&                  ddgt)         |g|             S y y )Nc              3   F   K   | ]  \  }}j                   |v s|  y wrf   )rA   )r.  kvrS   s      r;   r0  z-TensorVariable.method_type.<locals>.<genexpr>  s$      aTZZ1_s   !!cpuztorch..ztorch.tensortyper   r&   r"   r~   non_blockingr   rp   )rA   r5   rB   r1   nextr!   r   rp   r$   r   r8   r   rE  symbolic_convertr'   r   r   
current_txr   r  r   )
rS   rA   rN  r]   
tensortypetensor_typetensor_type_constr'   r   r   s
   `         r;   method_typezTensorVariable.method_type  sk   M

&4;;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13B(,A&A &		&&! '.?'@&I ! L r=   c           
      R   t        |t              r|j                  rddlm} ddlm}  |j                         }|j                         }t        j                  ||j                  j                  t        t        |j                  d      d            }|j                  || ||      S y y )Nr   r&   r"   TensorWithTFOverrideVariable__torch_function____func__)r5   TensorSubclassVariabler   rP  r'   r  rX  rQ  rE  r#   r   rY  rZ  r   from_tensor_var)rS   clsr'   rX  r   py_clstorch_fns          r;   method_as_subclassz!TensorVariable.method_as_subclass  s    c12szz@D1&113B ++-F&,,))22:cjj2FGTH 0??D&( # 8B2r=   c                     t        | j                  t        j                        rF| j                  j                  dk7  r| j                  j                  nd}t        j                  |      S y )NrL  )r5   rB   r1   rp   indexr$   r   )rS   rc  s     r;   method_get_devicez TensorVariable.method_get_device  sL    dkk5<<0)-)9)9U)BDKK%%E#**511 1r=   c                 T    t        j                  | j                  j                        S rf   )r$   r   rA   itemsizerR   s    r;   method_element_sizez"TensorVariable.method_element_size   s    &&tzz':':;;r=   )forcec                   t         j                  st        d       t        st        d       | j                  t
        j                  k7  rt        d| j                   d      ddlm	}  |j                         }|rR|j                         rB| j                  |dg i       }|j                  j                  dd	|j                         fi       }n* |j                  j                  dd
gt!        | | gi        }t"        j%                  ||      S )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   rL  view_as)r   trace_numpyr   nprC   r1   stridedr  rP  r'   rQ  rE  r   r   r  rh   r   NumpyNdarrayVariabler   )rS   rh  r'   r   tr@   s         r;   method_numpyzTensorVariable.method_numpy#  s    !!GHBC;;%--' -^_  	=-"--/ U--/  Xr26AII**=%!**,RTUE +BII**y+<dD\2+NE $**2u55r=   c                     ddl m} ddlm  |j                         fd| j                         j                  j                  d   } || j                               }t        j                  |      S )Nr   r&   r"   r~   c           	         fd}| j                   t        j                  t        j                  t        j                  t        j
                  fvrt        d       | j                         dk(  r	 || |      S | j                         dk(  r(t        |       D cg c]  \  }} ||||          c}}S t        |       D cg c]  \  }} |||          c}}S c c}}w c c}}w )Nc                     t         j                  j                  j                  j                  dd      5   |j                               cd d d        S # 1 sw Y   y xY w)Nallow_scalar_outputsT)unittestmockpatchobject	fake_modeitem)r  	sub_proxyr   r   s     r;   wrapz:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrapD  sU     ]]((//LL"8$  )!(  s   AA!z1Input tensor for tolist must be an integer tensorr   r"   )r|  )	rA   r1   int8int16int32int64r   r   	enumerate)	tensorr|  r}  r  val
sub_tensortolistr   r   s	         r;   r  z,TensorVariable.method_tolist.<locals>.tolistC  s    	 ||

	$  QRzz|q FI..zz|q >G>OPFAsS)A,/PP &/v%6!Az zYq\:  Qs   CC#ra   )
rP  r'   r   r   rQ  rh   rP   rc   r#   r   )rS   r'   r  outr  r   r   s       @@@r;   method_tolistzTensorVariable.method_tolist=  sb    <*-"--/	> %%**?;VT]]_-$$R--r=   c                     t        d       y )NzTensor.backwardr   r"  s      r;   method_backwardzTensorVariable.method_backwardf  s    '(r=   c                     t        |       S rf   )DataPtrVariabler"  s      r;   method_data_ptrzTensorVariable.method_data_ptri  s    t$$r=   c                 \    t         j                  s| j                          t        d       y y )NzTensor.item)r   capture_scalar_outputs_warn_capture_scalar_outputsr   r"  s      r;   method_itemzTensorVariable.method_iteml  s$    ,,--/-( -r=   c           	      h   ddl m} ddlm}  |j                         }t        |d   t              r5t        j                  t        j                  j                  d      |d   g}}nt        j                  } |j                  j                  d|gt!        | gt#        |      z   |       } |||      S )Nr   r&   r"   r~   r   r   )rP  r'   r   r   rQ  r5   r   r1   selectr   r$   r   operatorgetitemr   r  r   r  )rS   r  r]   r'   r   r   r   r@   s           r;   method___getitem__z!TensorVariable.method___getitem__q  s    <*-"--/d1g/
 ..55a8G B !!B&		&&
 vT
2F;
 R''r=   c                      t         j                  j                  j                         } dj	                  t        j                  |             }t        j                  t        j                  d      |       y )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  z+TensorVariable._warn_capture_scalar_outputs  sX     ]]11??A
!wwy'<'<Z'HIOO	 !	
r=   c                     ddl m}  |j                         }| j                  |dt	        j
                  d      gi       S )Nr   r&   rE   r   )rP  r'   rQ  r   r$   r   )rS   r'   r   s      r;   method___len__zTensorVariable.method___len__  s<    <-"--/F-=-D-DQ-G,H"MMr=   r9   c                    ddl m}  |j                         }|;ddlm} |j                  t        j                  ||j                        | |||gi       S y )Nr   r&   )	polyfills)	rP  r'   rQ  r   r  inline_user_function_returnr#   r   addcmul_inplace)rS   tensor1tensor2r:   r'   r   r  s          r;   method_addcmul_zTensorVariable.method_addcmul_  s\    <-"--/$11%%b)*C*CDw/  r=   c                     fdddl m}  |j                         } |j                  j                  dt
        j                  gt        | ||gi         t        j                  d       S )Nc                     t        | t              r,| j                  t        j                  t        j
                  fv S t        | t        j                        rt        fd| j                  D              S y)Nc              3   .   K   | ]  } |        y wrf   rX   )r.  r{  has_bool_keys     r;   r0  zJTensorVariable.method___setitem__.<locals>.has_bool_key.<locals>.<genexpr>  s     B$<-Bs   F)
r5   r?   rA   r1   boolr~  r   TupleVariableanyr   )rK  r  s    r;   r  z7TensorVariable.method___setitem__.<locals>.has_bool_key  sQ    !^,ww5::uzz":::Ay667B!''BBBr=   r   r&   r   )
rP  r'   rQ  r   r  r  setitemr   r$   r   )rS   keyr:   r'   r   r  s        @r;   method___setitem__z!TensorVariable.method___setitem__  si    	 	=-"--/			
 c5126	

  &&t,,r=   c                     t        d       y )NzTensor.resize_r   r"  s      r;   method_resize_zTensorVariable.method_resize_  s    &'r=   c                     t        d       y )NzTensor.resize_as_r   r"  s      r;   method_resize_as_z TensorVariable.method_resize_as_  s    )*r=   c                     t        d       y )NzTensor.sparse_resize_r   r"  s      r;   method_sparse_resize_z$TensorVariable.method_sparse_resize_  s    -.r=   c                     t        d       y )NzTensor.sparse_resize_and_clear_r   r"  s      r;   method_sparse_resize_and_clear_z.TensorVariable.method_sparse_resize_and_clear_  s    78r=   c                 8    t        |      dkD  rt        d       y y )Nr"   z(Tensor.set_.source_Tensor_storage_offset)r   r   r"  s      r;   method_set_zTensorVariable.method_set_  s    t9q= DE r=   )alphac                    |bddl m}  |j                         }t        j                  t
        j                        j                  |||gi       }| j                  |d|gi       S y Nr   r&   add_)	rP  r'   rQ  r   r   r1   mulr   r   )rS   otherr  r'   r   r   s         r;   method_add_zTensorVariable.method_add_  sf    @1&113B;;EIIFTTUENBF ##B"== r=   c                8   ddl m}  |j                         }|t        j                  t
        j                        j                  |||gi       }t        j                  t
        j                        j                  |||gi       }| j                  |d|gi       S y r  )
rP  r'   rQ  r   r   r1   divr   r  r   )rS   r  r  r:   r'   r   r   s          r;   method_addcdiv_zTensorVariable.method_addcdiv_  s    <-"--/;;EIIFTTWg&F ;;EIIFTTVUORF ##B"== r=   c                 .   ddl m}  |j                         }t        j                  t
        j                        j                  || |gi       }t        j                  t
        j                        j                  ||gi       }|j                  |dg i       S )Nr   r&   r{  )
rP  r'   rQ  r   r   r1   eqr   r  r   )rS   argr'   r   r   s        r;   method___contains__z"TensorVariable.method___contains__  s    <-"--/ 77AOOsR
 77		BPP"
 !!"fb"55r=   c           
      r  
 ddl m}  |j                         }|D cg c]  }|j                          c}
|j	                         D ci c]  \  }}||j                          c}}
fd}d|_        ddlm}	  |	| |j                  j                  d|gt        | gi              S c c}w c c}}w )	Nr   r&   c                 (     | j                   i S rf   )redistributer{   args_as_valuekwargs_as_values    r;   redistribute_fn_with_prim_typeszKTensorVariable.method_redistribute.<locals>.redistribute_fn_with_prim_types  s    !1>>=DODDr=   prim_redistributer"   r~   r   r   rP  r'   rQ  rE  r   r8   r   r   r   r  r   )rS   r  r]   r'   r   r{   rJ  rK  r  r   r  r  s             @@r;   method_redistributez"TensorVariable.method_redistribute  s    <-"--/ :>>A--/>AGPA1a2244P	E 4G'0*("))((/ #D62.
 	
 ?P   B.B3c           
      r  
 ddl m}  |j                         }|D cg c]  }|j                          c}
|j	                         D ci c]  \  }}||j                          c}}
fd}d|_        ddlm}	  |	| |j                  j                  d|gt        | gi              S c c}w c c}}w )	Nr   r&   c                 (     | j                   i S rf   )to_localr  s    r;   to_local_fn_with_prim_typeszCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_types(  s    1::}@@@r=   prim_to_localr"   r~   r   r   r  )rS   r  r]   r'   r   r{   rJ  rK  r  r   r  r  s             @@r;   method_to_localzTensorVariable.method_to_local  s    <-"--/ :>>A--/>AGPA1a2244P	A 0?#,*("))((+ #D62.
 	
 ?Pr  c                 .     | j                   dg|i |S )Nregister_hook_method_register_hookr"  s      r;   method_register_hookz#TensorVariable.method_register_hook9  s    )t))/KDKFKKr=   c                 .     | j                   dg|i |S )N"register_post_accumulate_grad_hookr  r"  s      r;   )method_register_post_accumulate_grad_hookz8TensorVariable.method_register_post_accumulate_grad_hook<  s*    )t))0
37
;A
 	
r=   r   hookc           	      .  
 ddl m}  |j                         }| j                  st        j
                  st        d       |j                  j                  |      \  
}
fd}ddl	m
} | j                         }d|j                  j                  d<    |||j                  j                  d	|||fi             S t        j                   t        j"                  j%                         
      }	|j                  j&                  j)                  | ||	       |	S )Nr   r&   z<Compilation of intermediate hooks requires compiled autogradc                 l    t        |       } |t        j                  t        t        |             y )N)r   bw_state	hook_name)r7   	functoolspartialr   r   )r  r  r  r  r   s      r;   _register_hook_trampolinezGTensorVariable._method_register_hook.<locals>._register_hook_trampoline_  s6     ' 5%%%8!)"+	 r=   r"   r~   Thas_backward_hookr   )mutation_type)rP  r'   rQ  r   r   compiled_autograd_enabledr   r   add_backward_state_hookr   r   rh   rP   rc   r  r   RemovableHandleVariablebaseValueMutationNewside_effectsr  )rS   r   r  r'   r   bw_state_proxyr  r   
self_proxyhandle_variabler  s    `        @r;   r  z$TensorVariable._method_register_hookA  s     	=-"--/{{$>>  R )+		(I(I$(O%I~ /J8<JOO  !45 		&&#-0	  $;;#..99;
 			,,T4$Or=   c                     |dur|j                         }| j                         j                  j                  d   j                  |k7  rt        d       y | S )NTra   zTensor.requires_grad_)rE  rh   rP   rc   rG   r   )rS   rG   s     r;   method_requires_grad_z$TensorVariable.method_requires_grad_  sK    $)<<>M==?$$_5CC}T12Kr=   c                     t        |      dk(  rt        |d   t              s t        |      dk\  r<t        d |D              r)ddlm} | j                   |j                         d||      S y y )Nr"   r   c              3   n   K   | ]-  }t        |t              xr |j                         t        k(   / y wrf   )r5   r$   rk   ro   )r.  as     r;   r0  z,TensorVariable.method_new.<locals>.<genexpr>  s0      OP
1./JAMMOs4JJs   35r   r&   	new_empty)r   r5   r%   allrP  r'   r   rQ  )rS   r  r]   r'   s       r;   
method_newzTensorVariable.method_new  st     INz$q'<@IN TX  A##0%002Kv  r=   c                     t        | | j                         j                  j                  d   j	                               S r`   )UntypedStorageVariablerh   rP   rc   untyped_storagerR   s    r;   method_untyped_storagez%TensorVariable.method_untyped_storage  s4    %$--/&&++O<LLN
 	
r=   c                 v    | j                   s-| j                  j                  j                  |       d| _         y y )NT)rN   r@   rP   _rename)rS   r   s     r;   set_name_hintzTensorVariable.set_name_hint  s.      JJOO##D) $D !r=   r   r'   rf   r  zlist[VariableTracker]r]   zdict[str, VariableTracker]rU   r#   )NFT)Yr8   
__module____qualname____doc__r#   _nonvar_fieldsr   r1   fxProxyrZ   rd   rh   rk   staticmethodr6   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   propertyrE   r   r   r   r#  r%  r!  r8  method_nelementr:  method_ndimensionr=  r@  rC  rG  rU  r`  rd  rg  rq  r  r  r  r  r  r  	lru_cacher  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  strr  r  r  r  r	  __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 Y
  
&N :> -&(+/9F +/ > :> >6"
4
4L

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

%# %r=   r?   c                        e Zd ZdZddhej
                  Zd Zedd       Zd fdZ	d Z
d Zd	 Zdd
Z	 	 	 	 	 	 ddZ xZS )r   z
    Represents a symbolic scalar, either int, float or bool.  This is most commonly used to
    handle symbolic size computation, e.g., tensor.size(0), but it is also used to
    handle logic like float_tensor.item() or unspecialized float inputs.
    r@   sym_numc                 ,    t        | j                        S rf   )rb   r  rR   s    r;   rd   zSymNodeVariable.debug_repr  s    DLL!!r=   c                    |t        |j                  |      }d|j                  j                  v r|j                  j                  d   |k(  sJ t        |j                  |       t	        |t
        j                  t        t        f      r<t	        |t
        j                        rt        |      n|}t        j                  |      S t        ||fi |S r`   )r   rP   rc   r    r5   sympyIntegerro   r  r$   r   r   )r]  r   r@   r  r(  s        r;   r   zSymNodeVariable.create  s    ?$UZZ4Gejjoo-::???3w>>>%**g.gsD9:&0%--&Hc'lgG#**733ug999r=   c                 N    t        |   di | || _        || _        d | _        y NrX   )rY   rZ   r@   r  _tensor_var)rS   r@   r  r]   r^   s       r;   rZ   zSymNodeVariable.__init__  s)    "6"
r=   c                     t        | j                  t              r | j                  j                  j                  S t        | j                        S rf   )r5   r  r
   rP   pytyperp   rR   s    r;   rk   zSymNodeVariable.python_type  s5    dllH-<<$$+++%%r=   c                     | j                   S rf   rg   rR   s    r;   rh   zSymNodeVariable.as_proxy  ri   r=   c           	          | j                   Qt        j                  |t        j                        j                  || gdt        j                  ||      i      | _         | j                   S )NrA   )r#  r#   r   r1   scalar_tensorr   )rS   r   rA   s      r;   	as_tensorzSymNodeVariable.as_tensor  s_    #.44E'' mB/2G2GE2R(ST  r=   c                     	 t        | j                        S # t        $ r\}t        j                  j
                  j                  j                  r t        t        j                  dt        |       d      d }~ww xY w)Nz5Consider annotating your code using torch._check*(). constrain_as_size_example)	case_name)r   r  r   r1   r  experimental_configno_data_dependent_graph_breakr   r   ANTI_PATTERNr  )rS   output_graphr  s      r;   r   zSymNodeVariable.evaluate_expr  si    
	--* 	xx$$,,JJ**GAxP5 		s    	A<AA77A<c           
      r    ddl m}  || |j                  j                  d|gt	        | g||             S )Nr"   r~   r   )r   r   r   r  r   )rS   r   r   r  r]   r   s         r;   r   zSymNodeVariable.call_method  sH     	+"BII"" #D=4=&9
 	
r=   rf   rU   Nr  )r8   r  r  r  r#   r  rd   classmethodr   rZ   rk   rh   r)  r   r   r  r  s   @r;   r   r     s|     	 
	'	'N" : : & 
 &	

 -
 

r=   r   c                   `     e Zd ZdZedd       ZddZed        Z	 	 	 	 	 	 d fdZd Z	 xZ
S )	ro  z}
    Represents a np.ndarray, but backed by torch Tensor via torch._numpy.ndarray.
    Use this for Tensor.numpy() call.
    c                 .    ddl m}  |dt        | |d|S )Nr"   r   r   rX   )r   r   ro  )r   r@   r(  r   s       r;   r   zNumpyNdarrayVariable.create  s*    .  
+
 	
 	
r=   c                    	
 ddl m	 ddlm
 d } j	                         j
                  j                  d   }t        j                  |      }	 
fd}dv rEj                  j                  d	 j	                         fi       }t        j                  |      }n͉d	v rt        j                  t        |            S d
v rCt        t        |      x}      s%t        j                  t!        d |D                    S  |       S dk(  r<t        |j"                  x}      st        j                  t%        |            S  |       S dv rt'        d        ndv rt'        d       |t(        |S )Nr   )numpy_attr_wrapperr"   r~   ra   c            	      n     j                   j                  dj                          fi             S )Nr   )r   r  rh   )r   r8  rS   r   r   s   r;   insert_into_graphz;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  s;     		&&#%7$--/49PRT r=   )Trealimagr   )rD   rf  )shaperF   c              3   2   K   | ]  }t        |        y wrf   r,  r-  s     r;   r0  z3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>;  s     4GSV4Gr1  rE   )r  flagsrA   zTODO: add support for ndarray.)__version__z delegate np.__version__ to NumPy)r3   r8  r   r   rh   rP   rc   tnpndarrayr   r  ro  r   r$   r7   r   rs   rE   ro   r   r   )rS   r   r   r   ra   example_ndarrayr:  r@   r/  r8  r   s   ```      @@r;   r   z NumpyNdarrayVariable.var_getattr  se   
 	/*,,11/B++m4	 	 ((II**"$'	E *00U;F ))#**7?D+IJJ((#$)G$GAH'..u4GQ4G/GHH$&&V^#)=)=$=A>'..s1v66$&&//:4&AB_$<=>%%r=   c                     | dk(  r8ddd}|j                         D ci c]  \  }}|j                  ||      | }}}||fS c c}}w )Nclipminmax)a_mina_max)r   r2  )r   r  r]   kwargs_renamerJ  rK  s         r;   
patch_argszNumpyNdarrayVariable.patch_argsI  sR    6>&+e<M=C\\^LTQm''1-q0LFLV| Ms   Ac           	      .   ddl m} | j                  |||      \  }}|dv rt        |   ||||      S |dv rt        | d        |j                  j                  d ||      gt        | gt        |      z   |       }t        j                  ||      S )Nr   )numpy_method_wrapper)__len__rE   r  )tostringtobytesz  is not modelled in torch._numpyr   )r3   rN  rL  rY   r   r   r   r  r   r  ro  r   )rS   r   r   r  r]   rN  r@   r^   s          r;   r   z NumpyNdarrayVariable.call_methodP  s     	1tT6:f007&r4v>>**TF"BCD&		&& &
 vT
2F;

 $**2u55r=   c                 "    t         j                  S rf   )rm  rC  rR   s    r;   rk   z NumpyNdarrayVariable.python_typeg  s    zzr=   r
  r  )r8   r  r  r  r  r   r   rL  r   rk   r  r  s   @r;   ro  ro    s^    
 
 
;z  6 &	6
 -6 
6.r=   ro  c                        e Zd ZdZddhej
                  Zddddej                  j                  ddf fd	Z	e
dd
       Z xZS )UnspecializedPythonVariablezO
    This is a 1-element tensor represents unspecialized python float/int.
    	raw_valueneed_unwrapNTrU  rV  r@   rU   c                B    t        |   |fi | || _        || _        y rf   )rY   rZ   rU  rV  )rS   r@   rU  rV  r]   r^   s        r;   rZ   z$UnspecializedPythonVariable.__init__v  s&     	)&)"&r=   c                 H    t        di t        |j                        ||dS )NrW  rX   )rT  dict__dict__)r]  tensor_variablerU  rV  s       r;   from_tensor_variablez0UnspecializedPythonVariable.from_tensor_variable}  s/     + 
?++,
#
 	
r=   r  r8   r  r  r  r?   r  r1   r  r  rZ   r4  r]  r  r  s   @r;   rT  rT  k  s_    
 	 
	&	&N 37D'XX^^'	' 
 
r=   rT  c                        e Zd ZdZdhej
                  Zdej                  j                  ddf fdZ	e
d        Z xZS )FakeItemVariablezAn unspecialized python variable which prevents access to the underlying raw value.
    This is needed if item is called on a FakeTensor.rV  r@   rU   Nc                 X    |j                  dd      }t        |   |fi | || _        y )NrV  F)poprY   rZ   rV  )rS   r@   r]   rV  r^   s       r;   rZ   zFakeItemVariable.__init__  s-    jj6)&)&r=   c                 >    t        di t        |j                        S r"  )r`  rZ  r[  )r]  r\  s     r;   r]  z%FakeItemVariable.from_tensor_variable  s    A$'?'?"@AAr=   r^  r  s   @r;   r`  r`    sS    9 			&	&N
'ehhnn '4 '
 B Br=   r`  c                   R     e Zd Zd	 fdZdddee   deeef   def fdZd Z	 xZ
S )
r[  rU   c                 2    || _         t        |   |i | y rf   )r:   rY   rZ   )rS   r:   r  r]   r^   s       r;   rZ   zTensorSubclassVariable.__init__  s    
$)&)r=   r   r'   r  r]   c                 8   t        |      dk(  r{t        |d   t              rhddlm} t        | j                  d      }t        j                  || j                  j                  |      }|j                  ||d   | j                  |      S t        | 5  |||      S )Nr"   r   rW  rY  )r   r5   r?   r  rX  r   r   r#   r   r:   rY  r\  rY   r   )rS   r   r  r]   rX  r   r_  r^   s          r;   r   z$TensorSubclassVariable.call_function  s     t9>ja.AD-ABF&,,R1N1NPVWH/??DGTZZ  w$Rv66r=   c                     | j                   S rf   r9   rR   s    r;   rE  z)TensorSubclassVariable.as_python_constant  ri   r=   r3  )r8   r  r  rZ   r  r#   rZ  r  r   rE  r  r  s   @r;   r[  r[    sG    *7#7 ?#7 S/)*	7
 
7$r=   r[  c                        e Zd Zdhej                  Zdedej                  ddf fdZde	e   de
eef   def fdZd	 Z xZS )
r  ra   from_tensorrU   Nc                 @    t        |   di | || _        || _        y r"  )rY   rZ   ri  ra   )rS   ri  ra   r]   r^   s       r;   rZ   zUntypedStorageVariable.__init__  s%     	"6"&*r=   r  r]   c           	      d   |dk(  r|rJ |rJ | j                   j                         }t        |      st        j                  t        |            S ddlm} ddlm	}  |||j                  j                  d|| j                  j                         fi             S |dk(  rt        |      dk(  rq|rJ |j                  j                  dt        j                   j"                  j$                  | j                  j                         |d   j                         fi        | S t&        | Q  ||||      S )	NrE   r   )untyped_storage_sizer"   r~   r   resize_r   )ra   rE   r   r$   r   ro   external_utilsrl  r   r   r   r  ri  rh   r   r1   r   inductorresize_storage_bytes_rY   r   )	rS   r   r   r  r]   r   rl  r   r^   s	           r;   r   z"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"2tT6::r=   c                 l     || j                          |j                  d       |j                  d       y )Nr  r   ri  load_methodr   rS   codegens     r;   reconstructz"UntypedStorageVariable.reconstruct  s-      !-.Ar=   )r8   r  r  r#   r  r?   r1   UntypedStoragerZ   r  rZ  r  r   rv  r  r  s   @r;   r  r    sz    		'	'N
	+#	+ ++	+
 
	+%; ?#	%;
 S/)*%; 
%;Nr=   r  c                   .     e Zd Zdeddf fdZd Z xZS )r  ri  rU   Nc                 2    t        |   di | || _        y r"  )rY   rZ   ri  )rS   ri  r]   r^   s      r;   rZ   zDataPtrVariable.__init__  s    
 	"6"&r=   c                 l     || j                          |j                  d       |j                  d       y )Ndata_ptrr   rr  rt  s     r;   rv  zDataPtrVariable.reconstruct  s,      !J'Ar=   )r8   r  r  r?   rZ   rv  r  r  s   @r;   r  r    s    '#' 
	'r=   r  )ar  r  r   loggingr  r  r  r   rv  typingr   r  torch._numpy_numpyrB  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   rn  r   guardsr   r   r   r   r3   r   r   r   r   r   r   r   r   r    r!   r  r#   constantr$   listsr%   numpyrm  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_opsrZ  fromkeysvalues%supported_tensor_comparison_op_values$supported_const_comparison_op_valuesr<   r?   r   ro  rT  r`  r[  r  r  rX   r=   r;   <module>r     s  "               + 6  G   :  ; 0    " & 
 D g! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
e%_ e%P!R
o R
jm> m`
. 
8B~ B&_ 6;_ ;|o O-  	Bs   4G< <HH