
    rh             	          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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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;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB 	 ddlCZDe	rddlFmGZG ddlHmIZI  ej                  eK      ZLej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  dZUej                  ej                  ej                  ej                  dZVi eUeVZWeXj                  eUj                               Z[eXj                  eVj                               Z\d Z]ej                  j                  j                  ej                  j                  z  Zb G d de<      Zc G d de<      Zd G d dec      Ze G d  d!ec      Zf G d" d#ec      Zg G d$ d%eB      Zh G d& d'e<      Zi G d( d)e<      Zjy# eE$ r dZDY w 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graph_break_hints	variables)trace_wrapped)unimplemented_v2$UnknownPropertiesDuringBackwardTrace	UserErrorUserErrorType)call_hook_from_backward_state)GuardBuilderinstall_guard)
AttrSource)
fqnget_custom_getattrget_fake_valueget_real_valueguard_if_dynobject_has_getattributeproductproxy_args_kwargsset_example_valuetensortype_to_dtype   )AttributeMutationNewVariableTracker)ConstantVariable)SizeVariable)UserDefinedClassVariable)	PyCodegenInstructionTranslator)><z>=z<===!=isis not)r0   r1   r.   r/   c                    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
isinstancer3   Tensorgetattr__name__values    q/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodr@   u   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                  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   rD   nodetracerselfs    r?   r   zTensorVariable.get_real_value   s#     djjootzz/@/@AArA   N)_sizerJ   rM   rR   returnc                @   t        |   di | || _        || _        || _        || _        || _        || _        || _        || _	        || _
        || _        || _        |	| _        |
| _        || _        |#| j                  j                   j"                  dk(  }|| _        y )Nplaceholder )super__init__rD   rE   rF   rG   rH   rX   rJ   rK   rL   rM   rN   rO   rP   has_grad_fnrT   oprR   )rW   rD   rE   rF   rG   rH   rK   rN   rL   rO   rP   r_   rX   rJ   rM   rR   kwargs	__class__s                    r?   r^   zTensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".rA   c                 Z    t        | j                  j                  j                  d         S Nexample_value)reprrD   rT   metarV   s    r?   
debug_reprzTensorVariable.debug_repr   s     DJJOO((9::rA   c                     | j                   S NrD   rV   s    r?   as_proxyzTensorVariable.as_proxy       zzrA   c                     | j                   S rj   )rP   rV   s    r?   python_typezTensorVariable.python_type   s    rA   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)	rE   rF   rG   rH   rK   rN   rL   rO   rP   r_   FrX   rJ   rM   memory_format)rE   rF   rG   intrH   rK   rN   rL   rO   typegrad_fn	Exceptionr   r   tuplerI   r	   rJ   r5   _C
_functorchis_batchedtensor_prims_common_memory_formatsrM   )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)Nre   r#   wrap_fx_proxy)txrD   re   LGGetAttrVariable)sourcepy_type)#rD   rT   rg   r   r   __tensor_flatten__r;   rl   r9   r5   r:   builderr   r4   r%   buildsubguards_allowedNotImplementedErroroutputlocal_scopeglobal_scopeevalnamerv   r   r   r   r   
make_guardr   HASATTRr@   miscr   rt   )rW   r   r   fake_valattrs_ctxrD   re   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)rH   r&   createcall_methodrW   r   s     r?   method_attr_ndimzTensorVariable.method_attr_ndimL  s8    99 #**49955##Br266rA   c                 Z    | j                   t        j                  | j                         S y rj   )rE   r&   r   r   s     r?   method_attr_dtypez TensorVariable.method_attr_dtypeR  s&    ::!#**4::66 "rA   c                 Z    | j                   t        j                  | j                         S y rj   )rF   r&   r   r   s     r?   method_attr_devicez!TensorVariable.method_attr_deviceV  &    ;;"#**4;;77 #rA   c                 Z    | j                   t        j                  | j                         S y rj   )rG   r&   r   r   s     r?   method_attr_layoutz!TensorVariable.method_attr_layoutZ  r   rA   c                 t    | j                   ,t        j                  | j                   j                  dk(        S y )Ncuda)rF   r&   r   rt   r   s     r?   method_attr_is_cudaz"TensorVariable.method_attr_is_cuda^  s1    ;;"#**4;;+;+;v+EFF #rA   c                     | j                         rA| j                  D cg c]!  }t        j                  j	                  |      # }}t        |      S | j                  |dg i       S c c}w NrI   )
valid_sizerI   r   r&   r   r'   r   )rW   r   r   sizess       r?   method_attr_shapez TensorVariable.method_attr_shapeb  s\    ??CG99MaY//66q9MEM&&##BB77 Ns   &A&c                 Z    | j                   t        j                  | j                         S y rj   )rK   r&   r   r   s     r?   method_attr_requires_gradz(TensorVariable.method_attr_requires_gradi  s*    )#**4+=+=>> *rA   c                 Z    | j                   t        j                  | j                         S y rj   )rL   r&   r   r   s     r?   method_attr_is_quantizedz'TensorVariable.method_attr_is_quantizedm  s*    (#**4+<+<== )rA   c                 Z    | j                   t        j                  | j                         S y rj   )rO   r&   r   r   s     r?   method_attr_is_sparsez$TensorVariable.method_attr_is_sparseq  &    >>%#**4>>:: &rA   c                 Z    | j                   t        j                  | j                         S y rj   )rN   r&   r   r   s     r?   method_attr_is_nestedz$TensorVariable.method_attr_is_nestedu  r   rA   c                 *    t        dd|  ddg        y )Nz'Tensor.retain_grad() with AOTDispatchervar_getattr z retain_gradz8`Tensor.retain_grad()` does not work with AOTDispatcher.gb_typecontextexplanationhintsr   r   s     r?   method_attr_retain_gradz&TensorVariable.method_attr_retain_grady  s    ="4&5R		
rA   c                     t        j                  t        j                  j                  j
                        j                  || gi       S rj   )r   TorchInGraphFunctionVariabler5   rx   	_autograd_get_data_attrcall_functionr   s     r?   method_attr_datazTensorVariable.method_attr_data  s8    55HH--

-TFB
'	(rA   c                 l    | j                   rt        dd|  ddg        y t        j                  d       S )NzTensor with grad_fn()r   z grad_fnz@Dynamo does not support tracing tensors with a grad_fn directly.r   )r_   r   r   r&   r   s     r?   method_attr_grad_fnz"TensorVariable.method_attr_grad_fn  s;    /&tfH5^	 --d33rA   c                 \    ddl m} t        j                  |      j	                  || gi       S )Nr   )_tensor_version)tensor_version_opr   r   r   r   )rW   r   r   s      r?   method_attr__versionz#TensorVariable.method_attr__version  s,    755oFTT
 	
rA   c                 l   ddl m} ddlm} |dv rt	        d      S 	  |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   )BuiltinVariable)rI   rJ   TF) r   builtinr   r&   r;   r   r9   AttributeErrorr   r   r   r   r   r   )rW   r   r   r   r   varret_vals          r?   call_obj_hasattrzTensorVariable.call_obj_hasattr  s    %, %%#D))	!'*88T+D12BC
 %S/::G ;;4;;-889M9MN  ((  	G	s   5B% %B32B3c                      j                        rR j                         v rt        dd  d d dd dg       n! j                         v rt	        d	 d
      dk(  rt         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         rvt"        j*                  j,                  t        ||j)                         d         j.                  v r5t0        j2                  j5                  t         j                        d      S |dk7  r fd} |       }| j7                        }|t8        |S )NzStrict mode banned opr    zGetattr invocation 'z"' in strict mode is not supported.zRemove `zj` from the list of banned ops by setting `torch._dynamo.config._autograd_backward_strict_mode_banned_ops`.r   zUnknown property z] during speculating backward, dynamo will insert contiguous call ahead and speculate it againrb   method_attr_)gradrK   	overloadsr   z9Getting an inplace view on a graph input is not supported)r   msgr   c                  2   ddl m}  ddlm} t        j                  d       }|y t        |      t        j                  k7  ry |j                  j                               }j                   | |t        j                              S  | |      S )Nr#   r   r   )r   rD   r   r   rD   )r   r   r   r   all_tensor_attrsgetrt   typesGetSetDescriptorTypecreate_getattr_proxyrl   r   r   )r   r   static_attrrD   r   rW   r   s       r?   try_generic_attr_handlingz=TensorVariable.var_getattr.<locals>.try_generic_attr_handling  s    21.224>& $(B(BB'<<T]]_dS;;*(U:dkk43P  )Be<<rA   )is_strict_mode_strict_mode_banned_opsr   #_strict_mode_conditional_banned_opsr   r(   ro   r;   r   r   is_python_constantr   r   r   
TYPE_MATCHr   r8   r5   opsatenr   Taginplace_viewtagsr   r   DelayGraphBreakVariabler   r   )rW   r   r   handlerresultfnr   s   ```    r?   var_getattrzTensorVariable.var_getattr  s"   r"t3355 3*4&$8"6tf<^ _"4& )d d	 AACC:'v  .K  L  ;+D,<,<,>??$,tf 5t< ' 3 --/55&:S:S:U $//,*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S >   >dfn=2 /0F>))"d3F>%%rA   c                     | j                   st        dd|  dg        |j                  j                  |j                  j                  d}	 t        | j                   j                         |      }t        d	d|  d
g        t        | j                   j                  t        j                               t        |      }t        j                  |      S # t        $ r}t        dd|  dg |       Y d }~d }~ww xY w)Nz$Unsupported call_id() without sourcezcall_id z6call_id() not supported for sourceless TensorVariable.r   r   z#Error getting associated real valuezJDynamo encountered an error while trying to get the associated real value.r   r   r   r   from_excz'call_id() without associated real valuez>Dynamo could not find an associated real value for the tensor.)r   r   r   r   r   r   r   rv   r   r   r   ID_MATCHidr&   r   )rW   r   r   r   r   id_values         r?   call_idzTensorVariable.call_id  s    {{>"4&)T	 ii++"))2H2HI
	+/0@0@0BE+J( (/A"4&)\	 	dkk,,\-B-BCD23&&x00)  	="4&)1 	s   $C 	C= C88C=c                      | j                   dkD  S )Nr   )rH   r   s     r?   has_unpack_var_sequencez&TensorVariable.has_unpack_var_sequence2  s    yy1}rA   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_clsrI   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.
target_clsr   rD   )r   r  r   lenrI   r   r9   r'   itemsr&   r   SymNodeVariableevaluate_exprr   r>   rangert   rl   )	rW   r   idxesr  size_lensize_varlength
dyn_lengthis	            r?   unpack_var_sequencez"TensorVariable.unpack_var_sequence5  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 rj   rX   rV   s    r?   r   zTensorVariable.valid_sizeX  s    zz%%rA   c                 @    | j                   J d       | j                   S )Nz%accessing None size in TensorVariabler  rV   s    r?   rI   zTensorVariable.size[  s"    zz%N'NN%zzrA   c                 J    t         j                  j                  j                  S rj   )r5   r6   r   )_autograd_backward_strict_mode_banned_opsrV   s    r?   r   z&TensorVariable._strict_mode_banned_ops`  s    }}##MMMrA   c                 J    t         j                  j                  j                  S rj   )r5   r6   r   5_autograd_backward_strict_mode_conditional_banned_opsrV   s    r?   r   z2TensorVariable._strict_mode_conditional_banned_opsc  s    MM  VV	
rA   c                    ddl m}m} ddlm}m} | j                  |      r1|| j                         v rt        dd|  d| d| d| d| dg 	       t        j                  |d       }	|	d u}
 ||t        | gt        |      z         |      r|
r| j                  r.  ||t        t        | j                  d
      |            |	      }n*|j                  |t!        t"        j$                  |            } |||t        | gt        |      z         |      S 	 |dk(  r(t'        |d   t(              rt+        j,                  d      S |dk(  r+t        dd| d|d|dddgt.        j0                  	       n3|dk(  r.d|v r*t        dd| d|d|dddgt.        j0                  	       	 t!        | d|       }	  ||i |}|r|S 	 ddl m}  || |j8                  j:                  d |gt=        | g||             S # t2        $ r*}t        dd|  d| d| d| d| dg |       Y d }~fd }~ww xY w# t4        $ r Y yw xY w)!Nr#   )SourcelessBuilderVariableBuilder)can_dispatch_torch_functiondispatch_torch_functionz(Illegal method invocation in strict modecall_method r   z/Dynamo currently does not support this method (z) invocation in strict mode.r   rb   __eq__r   Frandom_zTensor.random_ opzTensor.(args=	, kwargs=)z This is currently not supported.z'Use the out-of-place version of this opuniform_fromz-Tensor.uniform_ op called with `from` keywordzAvoid using the `from` keyword.method_zUnhandled args for methodz6Dynamo encountered an error while calling the method ``.r   r   r   )r   r  r  torch_functionr  r   r   r   r   r   r   rw   listr   r   r   r;   r5   r:   r9   r(   r   r&   r   SUPPORTABLE	TypeErrorr   r   r   create_proxyr    )rW   r   r   argsra   r  r  r  r   r   is_base_tensor_methodfunc_varhandler_methodr   er   s                   r?   r   zTensorVariable.call_methodh  s    	@Xr"tt/K/K/M'MB&tfAdV1TF!F8D657 '**46 +4 7 (E4&4:2E,FO%{{?
:dkk;#GN -33Bd8ST*HeTFT$Z$78& 	 8
474L M--e44 9+!$wz&!<>=&22	 ZFf$4G!$wz&!<>5&22		$TWTF+;<N'88!M  	+"BII"" #D=4=&9
 	
   7*4&$qaxH!##'&!,   		s*   &H1 6G; ;	H. H))H.1	H=<H=c                 .     | j                   dg|i |S r   _method_size_striderW   r0  ra   s      r?   method_sizezTensorVariable.method_size  s    't''@@@@rA   c                 .     | j                   dg|i |S )NrJ   r6  r8  s      r?   method_stridezTensorVariable.method_stride  s    't''B4B6BBrA   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 rj   )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   /rI   re   c              3   2   K   | ]  }t        |        y wrj   rs   .0rs     r?   	<genexpr>z5TensorVariable._method_size_stride.<locals>.<genexpr>  s     ,DSV,D   )r   r&   r   r;   r   rI   rD   rT   rg   r   r   rw   rs   )rW   r   r   r@  RetVariablerE  fakefake_rs           r?   r7  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rA   c                 J   | j                         r(t        j                  t        | j                              S | j
                  j                  j                  j                  d      x}:|j                         }t        |      st        j                  t        |            S y y rd   )r   r&   r   r   rI   rD   rT   rg   r   numelr   rs   )rW   rI  rJ  s      r?   method_numelzTensorVariable.method_numel   s    ??#**7499+=>> JJOO((,,_==DJZZ\F#F+'..s6{;; , KrA   c                 Z    | j                   t        j                  | j                         S y rj   )rH   r&   r   rV   s    r?   
method_dimzTensorVariable.method_dim  s&    99 #**49955 !rA   c                 n    | j                   )t        j                  | j                   j                        S y rj   )rE   r&   r   is_floating_pointrV   s    r?   method_is_floating_pointz'TensorVariable.method_is_floating_point  s,    ::!#**4::+G+GHH "rA   c                 *   t         j                  r/t        dddg t        j                  t        j
                         | j                  j                  j                  j                  d      x}#t        j                  |j                               S y )Nz0Encountered tensor.is_inference() during tracingr   z&tensor.is_inference() is not supportedr   re   )r   "fake_tensor_disable_inference_moder   r   FUNDAMENTALINFERENCE_MODErD   rT   rg   r   r&   r   is_inference)rW   rI  s     r?   method_is_inferencez"TensorVariable.method_is_inference  s    44JD&22&55	 JJOO((,,_==DJ#**4+<+<+>?? KrA   c                 n    | j                   )t        j                  | j                   j                        S y rj   )rE   r&   r   
is_complexrV   s    r?   method_is_complexz TensorVariable.method_is_complex$  s,    ::!#**4::+@+@AA "rA   c                 N   ||j                         nt        j                  }| j                  !t	        j
                  || j                  v       S | j                  j                  j                  j                  d      x}%t	        j
                  |j                  |            S y )Nre   rq   )
as_python_constantr5   contiguous_formatrM   r&   r   rD   rT   rg   r   )rW   rr   rI  s      r?   method_is_contiguousz#TensorVariable.method_is_contiguous(  s     ( ,,.(( 	
 )#**=D<N<N+NOOjjoo**..??dL#**"""?  MrA   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rj   )rE   )rD  kvrW   s      r?   rF  z-TensorVariable.method_type.<locals>.<genexpr>;  s$      aTZZ1_s   !!cpuztorch..ztorch.tensortyper   r*   r#   r   non_blockingr   rt   )rE   r9   rF   r5   nextr"   r
  rt   r&   r   r<   r   r]  symbolic_convertr+   r   r   
current_txr   r/  r    )
rW   rE   rf  ra   
tensortypetensor_typetensor_type_constr+   r   r   s
   `         r?   method_typezTensorVariable.method_type5  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 rA   c                    t        |t              r|j                  rddlm} ddlm}  |j                         }|j                         }|j                  || ||j                        }|j                  j                  j                  t               |t               |S t        d|  d| dd	d
gt         j"                         y )Nr   r*   r#   TensorWithTFOverrideVariablemutation_type_clszHArgument of `as_subclass` must be a non-dispatcher-style tensor subclassz.as_subclass(r&  Currently not supportedz:Avoid this call or move it outside `torch.compile` regioner   )r9   TensorSubclassVariabler   rh  r+   r+  rp  ri  r]  from_tensor_varr   side_effects
_track_objobjectr$   r   r   r-  )rW   clsr+   rp  r   py_clsr   s          r?   method_as_subclassz!TensorVariable.method_as_subclass_  s    c12szz@D1&113B++-F.>>D&#**C II""--#1E .  J^fM#a01L"..		
rA   c                     t        | j                  t        j                        rF| j                  j                  dk7  r| j                  j                  nd}t        j                  |      S y )Nrd  )r9   rF   r5   rt   indexr&   r   )rW   r~  s     r?   method_get_devicez TensorVariable.method_get_devicex  sL    dkk5<<0)-)9)9U)BDKK%%E#**511 1rA   c                 T    t        j                  | j                  j                        S rj   )r&   r   rE   itemsizerV   s    r?   method_element_sizez"TensorVariable.method_element_size}  s    &&tzz':':;;rA   )forcec                @   t         j                  st        dd|  dddg       t        st        dd|  ddd	g       | 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() with trace_numpy=Falser!  z numpyzW`Tensor.numpy()` was called, but the `trace_numpy` configuration was manually disabled.zUSet `torch._dynamo.config.trace_numpy = True` to allow Dynamo to trace through NumPy.r   z&Tensor.numpy() without NumPy installedz_`Tensor.numpy()` was called, but the NumPy library is not available in the current environment.z5Ensure NumPy is installed in your Python environment.zcan't convert z4 layout tensor to numpy. Use Tensor.to_dense() firstr   r*   detachr   rd  view_as)r   trace_numpyr   nprG   r5   stridedr.  rh  r+   ri  r]  r   r   r/  rl   r    NumpyNdarrayVariabler   )rW   r  r+   r   trD   s         r?   method_numpyzTensorVariable.method_numpy  s1   !!?&tfF375	 @&tfF3? L ;;%--' -ab  	=-"--/ U--/  Xr26AII**=%!**,RTUE +BII**y+<dD\2+NE $**2u55rA   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d dddg       | 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patchrx  	fake_modeitem)r  	sub_proxyr   r   s     r?   wrapz:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrap  sU     ]]((//LL"8$  )!(  s   AA!z'Tensor.tolist() with non-integer tensorr!  z to_listzLDynamo currently does not support tracing `tolist()` on non-integer tensors.z[Ensure the input tensor to `tolist()` is an integer type (e.g., int8, int16, int32, int64).r   r   r#   )r  )	rE   r5   int8int16int32int64r   r   	enumerate)
tensorr  r  r  val
sub_tensorrW   tolistr   r   s
         r?   r  z,TensorVariable.method_tolist.<locals>.tolist  s    	 ||

	$  !E*4&9!9B	 zz|q FI..zz|q >G>OPFAsS)A,/PP &/v%6!Az zYq\:  Qs   #C&C,re   )
rh  r+   r   r   ri  rl   rT   rg   r%   r   )rW   r+   r  outr  r   r   s   `   @@@r?   method_tolistzTensorVariable.method_tolist  sc    <*-"--/&	P %%**?;VT]]_-$$R--rA   c           	      T    t        dd|  d| d| dg t        j                         y )Nz"Unsupported Tensor.backward() callr!  z
 backward r   z>Dynamo currently does not support tracing `Tensor.backward()`.r   )r   r   rU  r8  s      r?   method_backwardzTensorVariable.method_backward  s5    8"4&
4&&BX2%112		
rA   c                     t        |       S rj   )DataPtrVariabler8  s      r?   method_data_ptrzTensorVariable.method_data_ptr  s    t$$rA   c           	      x    t         j                  s*| j                          t        dd|  d| d| ddg       y y )Nz@Unsupported Tensor.item() call with capture_scalar_outputs=Falser!  z item r   zYDynamo does not support tracing `Tensor.item()` with config.capture_scalar_outputs=False.zSet `torch._dynamo.config.capture_scalar_outputs = True` or `export TORCHDYNAMO_CAPTURE_SCALAR_OUTPUTS=1` to include these operations in the captured graph.r   )r   capture_scalar_outputs_warn_capture_scalar_outputsr   r8  s      r?   method_itemzTensorVariable.method_item  sM    ,,--/Z&tfF4&&B<I
 -rA   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   )rh  r+   r   r   ri  r9   r  r5   selectr   r&   r   operatorgetitemr   r/  r    r,  )rW   r0  ra   r+   r   r   r   rD   s           r?   method___getitem__z!TensorVariable.method___getitem__  s    <*-"--/d1g/
 ..55a8G B !!B&		&&
 vT
2F;
 R''rA   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
                )r5   _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	 !	
rA   c                     ddl m}  |j                         }| j                  |dt	        j
                  d      gi       S )Nr   r*   rI   r   )rh  r+   ri  r   r&   r   )rW   r+   r   s      r?   method___len__zTensorVariable.method___len__'  s<    <-"--/F-=-D-DQ-G,H"MMrA   r=   c                    ddl m}  |j                         }|;ddlm} |j                  t        j                  ||j                        | |||gi       S y )Nr   r*   )	polyfills)	rh  r+   ri  r   r  inline_user_function_returnr%   r   addcmul_inplace)rW   tensor1tensor2r>   r+   r   r  s          r?   method_addcmul_zTensorVariable.method_addcmul_-  s\    <-"--/$11%%b)*C*CDw/  rA   c                 l   ddl m}  |j                         } |j                  j                  dt
        j                  gt        | ||gi        }t        j                  st        j                  r0|j                  j                  j                  |j                  d       t        j                  d       S )Nr   r*   r   r   )rh  r+   ri  r   r/  r  setitemr    r   use_graph_deduplicationtrack_nodes_for_deduplicationregion_trackeradd_node_mutationrT   r&   r   )rW   keyr>   r+   r   rD   s         r?   method___setitem__z!TensorVariable.method___setitem__:  s    <-"--/&		&&
 c5126
 ))V-Q-QII$$66uzz1E&&t,,rA   c           	      4    t        dd|  d| d| dg        y )Nz!Unsupported Tensor.resize_() callr!  z	 resize_ r   z=Dynamo currently does not support tracing `Tensor.resize_()`.r   r   r8  s      r?   method_resize_zTensorVariable.method_resize_I  s)    7"4&	$qAW		
rA   c           	      4    t        dd|  d| d| dg        y )Nz$Unsupported Tensor.resize_as_() callr!  z resize_as_ r   z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r   r   r8  s      r?   method_resize_as_z TensorVariable.method_resize_as_Q  s)    :"4&TF!F8DZ		
rA   c           	      4    t        dd|  d| d| dg        y )Nz(Unsupported Tensor.sparse_resize_() callr!  z sparse_resize_ r   zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r   r   r8  s      r?   method_sparse_resize_z$TensorVariable.method_sparse_resize_Y  s*    >"4&(8axH^		
rA   c           	      4    t        dd|  d| d| dg        y )Nz2Unsupported Tensor.sparse_resize_and_clear_() callr!  z sparse_resize_and_clear_ r   zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r   r   r8  s      r?   method_sparse_resize_and_clear_z.TensorVariable.method_sparse_resize_and_clear_a  s*    H"4&(B4&&Rh		
rA   c           	      r    t        |      dkD  r)t        dd|  d| d| dg t        j                         y y )Nr#   zUnsupported Tensor.set_() callr!  z set_ r   zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r   )r	  r   r   r-  r8  s      r?   method_set_zTensorVariable.method_set_i  sJ    t9q= 8&tfF4&&BA6)556 rA   )alphac                    |bddl m}  |j                         }t        j                  t
        j                        j                  |||gi       }| j                  |d|gi       S y Nr   r*   add_)	rh  r+   ri  r   r   r5   mulr   r   )rW   otherr  r+   r   r   s         r?   method_add_zTensorVariable.method_add_y  sf    @1&113B;;EIIFTTUENBF ##B"== rA   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  )
rh  r+   ri  r   r   r5   divr   r  r   )rW   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"== rA   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  )
rh  r+   ri  r   r   r5   eqr   anyr   )rW   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5rA   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 rj   )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DrA   prim_redistributer#   r   r   r   rh  r+   ri  r]  r
  r<   r   r   r   r/  r    )rW   r0  ra   r+   r   r   rb  rc  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 rj   )to_localr  s    r?   to_local_fn_with_prim_typeszCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_types  s    1::}@@@rA   prim_to_localr#   r   r   r   r  )rW   r0  ra   r+   r   r   rb  rc  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_hookr8  s      r?   method_register_hookz#TensorVariable.method_register_hook  s    )t))/KDKFKKrA   c                 .     | j                   dg|i |S )N"register_post_accumulate_grad_hookr  r8  s      r?   )method_register_post_accumulate_grad_hookz8TensorVariable.method_register_post_accumulate_grad_hook  s*    )t))0
37
;A
 	
rA   r   hookc           	      B  
 ddl m}  |j                         }| j                  st        j
                  st        dd|  d dg        |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 autogradr   r   z6Dynamo must be in compiled_autograd to register hooks.r   c                 l    t        |       } |t        j                  t        t        |             y )N)r   bw_state	hook_name)r;   	functoolspartialr   r   )r  r  r  r  r   s      r?   _register_hook_trampolinezGTensorVariable._method_register_hook.<locals>._register_hook_trampoline  s6     ' 5%%%8!)"+	 rA   r#   r   Thas_backward_hookr   )mutation_type)rh  r+   ri  r   r   compiled_autograd_enabledr   r   add_backward_state_hookr   r   rl   rT   rg   r/  r   RemovableHandleVariablebaseValueMutationNewrv  r  )rW   r   r  r+   r   bw_state_proxyr  r   
self_proxyhandle_variabler  s    `        @r?   r  z$TensorVariable._method_register_hook  s    	=-"--/{{$>>  !Z*4&$8 X	 )+		(I(I$(O%I~ /J8<JOO  !45 		&&#-0	  $;;#..99;
 			,,T4$OrA   c                     |dur|j                         }| j                         j                  j                  d   j                  |k7  rt        dd|  ddg        y | S )NTre   z(Unsupported Tensor.requires_grad_() callr!  z requires_grad_zaDynamo does not support changes to a Tensor's `requires_grad` through calling `requires_grad_()`.r   )r]  rl   rT   rg   rK   r   )rW   rK   s     r?   method_requires_grad_z$TensorVariable.method_requires_grad_"  sd    $)<<>M==?$$_5CC}TB&tfO<F KrA   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rj   )r9   r&   ro   rs   )rD  as     r?   rF  z,TensorVariable.method_new.<locals>.<genexpr>6  s0      OP
1./JAMMOs4JJs   35r   r*   	new_empty)r	  r9   r'   allrh  r+   r   ri  )rW   r0  ra   r+   s       r?   
method_newzTensorVariable.method_new1  st     INz$q'<@IN TX  A##0%002Kv  rA   c                     t        | | j                         j                  j                  d   j	                               S rd   )UntypedStorageVariablerl   rT   rg   untyped_storagerV   s    r?   method_untyped_storagez%TensorVariable.method_untyped_storage@  s4    %$--/&&++O<LLN
 	
rA   c                 v    | j                   s-| j                  j                  j                  |       d| _         y y )NT)rR   rD   rT   _rename)rW   r   s     r?   set_name_hintzTensorVariable.set_name_hintE  s.      JJOO##D) $D !rA   r   r+   rj   r0  zlist[VariableTracker]ra   zdict[str, VariableTracker]rY   r%   )NFT)Yr<   
__module____qualname____doc__r%   _nonvar_fieldsr   r5   fxProxyr^   rh   rl   ro   staticmethodr:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   propertyrI   r   r   r   r9  r;  r7  rM  method_nelementrO  method_ndimensionrR  rX  r[  r_  rm  r{  r  r  r  r  r  r  r  r  r  cacher  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   strr  r  r  r  r!  __classcell__rb   s   @r?   rC   rC      s   G 	  
	'	'!N&B. #&/xx~~&/& 
'&/P; 0%,, 0 0d@BD7788G8?>;;
(
	4
)8Yv!1F!
F&  N

g
 &	g

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

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

%# %rA   rC   c                        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.
    rD   sym_numc                 ,    t        | j                        S rj   )rf   r4  rV   s    r?   rh   zSymNodeVariable.debug_reprX  s    DLL!!rA   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 rd   )r   rT   rg   r!   r9   sympyIntegerrs   boolr&   r   r  )ry  r   rD   r4  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9rA   c                 N    t        |   di | || _        || _        d | _        y Nr\   )r]   r^   rD   r4  _tensor_var)rW   rD   r4  ra   rb   s       r?   r^   zSymNodeVariable.__init__i  s)    "6"
rA   c                     t        | j                  t              r | j                  j                  j                  S t        | j                        S rj   )r9   r4  r
   rT   pytypert   rV   s    r?   ro   zSymNodeVariable.python_typep  s5    dllH-<<$$+++%%rA   c                     | j                   S rj   rk   rV   s    r?   rl   zSymNodeVariable.as_proxyv  rm   rA   c           	          | j                   Qt        j                  |t        j                        j                  || gdt        j                  ||      i      | _         | j                   S )NrE   )r<  r%   r   r5   scalar_tensorr   )rW   r   rE   s      r?   	as_tensorzSymNodeVariable.as_tensory  s_    #.44E'' mB/2G2GE2R(ST  rA   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   r4  r   r5   r)  experimental_configno_data_dependent_graph_breakr   r   ANTI_PATTERNr0  )rW   output_graphr4  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    )rW   r   r   r0  ra   r   s         r?   r   zSymNodeVariable.call_method  sH     	+"BII"" #D=4=&9
 	
rA   rj   )rY   Nr#  )r<   r%  r&  r'  r%   r(  rh   classmethodr   r^   ro   rl   rB  r  r   r1  r2  s   @r?   r  r  K  s|     	 
	'	'N" : : & 
 &	

 -
 

rA   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 )	r  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  r\   )r   r  r  )r   rD   r>  r  s       r?   r   zNumpyNdarrayVariable.create  s*    .  
+
 	
 	
rA   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d  d d dg        ndv rt'        dd  d d dg        |t(        |S )Nr   )numpy_attr_wrapperr#   r   re   c            	      n     j                   j                  dj                          fi             S )Nr   )r   r/  rl   )r   rP  rW   r   r   s   r?   insert_into_graphz;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  s;     		&&#%7$--/49PRT rA   )Trealimagr   )rH   r  )shaperJ   c              3   2   K   | ]  }t        |        y wrj   rB  rC  s     r?   rF  z3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s     4GSV4GrG  rI   )r  flagsrE   z$Unsupported ndarray attribute accessr   r   z3Dynamo currently does not support tracing `ndarray.r*  r   )__version__z&Unsupported ndarray.__version__ access)r7   rP  r   r   rl   rT   rg   tnpndarrayr   r/  r  r   r&   r;   r   rw   rI   rs   r   r   )rW   r   r   r   re   example_ndarrayrR  rD   rE  rP  r   s   ```      @@r?   r   z NumpyNdarrayVariable.var_getattr  s   
 	/*,,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$&&//>&tfAdV4QRVQWWYZ	 _$@&tfAdV4QRVQWWYZ	 >%%rA   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
  r   )r   r0  ra   kwargs_renamerb  rc  s         r?   
patch_argszNumpyNdarrayVariable.patch_args  sR    6>&+e<M=C\\^LTQm''1-q0LFLV| Ms   Ac                 P   ddl m} | j                  |||      \  }}|dv rt        |   ||||      S |dv rt        dd|  d| d| d| d| d	g 
        |j                  j                  d ||      gt        | gt        |      z   |       }t        j                  ||      S )Nr   )numpy_method_wrapper)__len__rI   r  )tostringtobytes__delattr__zUnsupported ndarray method callr!  r   z	`ndarray.z&()` is not modelled in `torch._numpy`.r   r   )r7   rf  rd  r]   r   r   r   r/  r    r,  r  r   )rW   r   r   r0  ra   rf  rD   rb   s          r?   r   z NumpyNdarrayVariable.call_method  s     	1tT6:f007&r4v>>999&tfAdV1TF!F8D'v-ST	 '		&& &
 vT
2F;

 $**2u55rA   c                 "    t         j                  S rj   )r  r[  rV   s    r?   ro   z NumpyNdarrayVariable.python_type  s    zzrA   r"  r#  )r<   r%  r&  r'  r+  r   r   rd  r   ro   r1  r2  s   @r?   r  r    s_    
 
 
EN  6 &	6
 -6 
68rA   r  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rn  ro  rD   rY   c                B    t        |   |fi | || _        || _        y rj   )r]   r^   rn  ro  )rW   rD   rn  ro  ra   rb   s        r?   r^   z$UnspecializedPythonVariable.__init__*  s&     	)&)"&rA   c                 H    t        di t        |j                        ||dS )Nrp  r\   )rm  dict__dict__)ry  tensor_variablern  ro  s       r?   from_tensor_variablez0UnspecializedPythonVariable.from_tensor_variable1  s/     + 
?++,
#
 	
rA   r$  r<   r%  r&  r'  rC   r(  r5   r)  r*  r^   rL  rv  r1  r2  s   @r?   rm  rm    s_    
 	 
	&	&N 37D'XX^^'	' 
 
rA   rm  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.ro  rD   rY   Nc                 X    |j                  dd      }t        |   |fi | || _        y )Nro  F)popr]   r^   ro  )rW   rD   ra   ro  rb   s       r?   r^   zFakeItemVariable.__init__D  s-    jj6)&)&rA   c                 >    t        di t        |j                        S r;  )ry  rs  rt  )ry  ru  s     r?   rv  z%FakeItemVariable.from_tensor_variableI  s    A$'?'?"@AArA   rw  r2  s   @r?   ry  ry  ;  sS    9 			&	&N
'ehhnn '4 '
 B BrA   ry  c                   :    e Zd Zdddee   deeef   defdZd Zy)	rt  r   r+   r0  ra   rY   c           	      
   ddl m} | j                  j                  }|t        j
                  j                  u rt        |      dk(  rOt        |d   t              r<t        |      dk(  r.|d   }|j                  ||| j                  | j                        }n_t        d| j                   d| d| ddd	gt        j                  
       n+t        j                  ||      j!                  || g|z   |      }| j                  j"                  }|t        j
                  j"                  ur(t        j                  ||      j!                  |g|       |j$                  j&                  j)                  t+               t,               |S )Nr#   ro  r   zCCalling subclass default constructor with more than tensor argumentr$  r%  r&  rs  zFAvoid this constructor call or move it outside `torch.compile` regioner   rq  )r+  rp  r>   __new__r5   r:   r	  r9   rC   ru  r   r   r   r-  r%   r   r   r^   r   rv  rw  rx  r$   )	rW   r   r0  ra   rp  new_funcdatar   	init_funcs	            r?   r   z$TensorSubclassVariable.call_functionO  s`    	A::%%u||+++D	QtAw7K1$Aw 3BBdjj$++ !a#zzl&ixqI 92 +66		 "''H5CCTFTM6C
 JJ''	 ELL111!!"i0>>rC5&Q 			))Hc-A 	* 	
 
rA   c                     | j                   S rj   r=   rV   s    r?   r]  z)TensorSubclassVariable.as_python_constant  rm   rA   N)	r<   r%  r&  r,  r%   rs  r0  r   r]  r\   rA   r?   rt  rt  N  sB    2#2 ?#2 S/)*	2
 
2hrA   rt  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
d	Z xZS )r  re   from_tensorrY   Nc                 @    t        |   di | || _        || _        y r;  )r]   r^   r  re   )rW   r  re   ra   rb   s       r?   r^   zUntypedStorageVariable.__init__  s%     	"6"&*rA   r0  ra   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 )	NrI   r   )untyped_storage_sizer#   r   r   resize_r   )re   rI   r   r&   r   rs   external_utilsr  r   r   r   r/  r  rl   r	  r5   r   inductorresize_storage_bytes_r]   r   )	rW   r   r   r0  ra   r   r  r   rb   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::rA   c                 l     || j                          |j                  d       |j                  d       y )Nr  r   r  load_methodr   rW   codegens     r?   reconstructz"UntypedStorageVariable.reconstruct  s-      !-.ArA   r  r)   )r<   r%  r&  r%   r(  rC   r5   UntypedStorager^   r,  rs  r0  r   r  r1  r2  s   @r?   r  r    sz    		'	'N
	+#	+ ++	+
 
	+%; ?#	%;
 S/)*%; 
%;NrA   r  c                   0     e Zd Zdeddf fdZddZ xZS )r  r  rY   Nc                 2    t        |   di | || _        y r;  )r]   r^   r  )rW   r  ra   rb   s      r?   r^   zDataPtrVariable.__init__  s    
 	"6"&rA   c                 l     || j                          |j                  d       |j                  d       y )Ndata_ptrr   r  r  s     r?   r  zDataPtrVariable.reconstruct  s,      !J'ArA   r  )r<   r%  r&  rC   r^   r  r1  r2  s   @r?   r  r    s    '#' 
	'rA   r  )kr'  r  loggingr  r  r  r   r  typingr   r7  torch._numpy_numpyrZ  torch.fxr5   torch.randomtorch._dynamor   torch._subclasses.meta_utilsr   %torch.fx.experimental.symbolic_shapesr   r   r   r	   r
   torch.utils._python_dispatchr   r   r   r   r   _trace_wrapped_higher_order_opr   r   r   r   r   r   r  r   guardsr   r   r   r   r7   r   r   r   r   r   r   r   r    r!   r"   r  r$   r%   constantr&   listsr'   user_definedr(   numpyr  ModuleNotFoundErrortorch._dynamo.codegenr)   torch._dynamo.symbolic_convertr+   	getLoggerr<   r  gtltgeler  neis_is_notsupported_tensor_comparison_opssupported_const_comparison_opssupported_comparison_opsrs  fromkeysvalues%supported_tensor_comparison_op_values$supported_const_comparison_op_valuesr@   rx   
TensorBasert  r:   r   rC   r  r  rm  ry  rt  r  r  r\   rA   r?   <module>r     s  "              + 6  G 3 3 :  ; 0    8 &  2
 /D g! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
 88&&//%,,2G2GG B%_ B%J&R
o R
j|> |~
. 
8B~ B&65 6r;_ ;|o s3  	Bs   :H? ?I
	I
