
    %Vjij             	       >   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lCZDn# eE$ r dZDY nw xY we	rddlFmGZG ddlHmIZI  ejJ        eK          ZLejM        ejN        ejO        ejP        ejQ        ejR        ejS        ejT        dZUejS        ejT        ejQ        ejR        dZVi eUeVZWeXY                    eUZ                                          Z[eXY                    eVZ                                          Z\d Z]ej^        j_        j`        eja        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<          ZjdS )*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)r1   r2   r/   r0   c                     t          |           ont          j        j                            |            oIt          | d          o9t          | j        t          j                  ot          | j        | j
        d           S )N__self__)callabletorch_dynamoutilsr   hasattr
isinstancer4   Tensorgetattr__name__values    X/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodrA   u   sr     	:#;;EBBB	:E:&&	: u~u|44	: ENEND9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djd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djd,Z djd-Z!d. Z"d/ Z#dkdjd0Z$d1 Z%e&d2             Z'd3 Z(d4 Z)	 	 	 	 	 	 dld:Z*d; Z+d< Z,dkd=Z-d> Z.e.Z/d? Z0e0Z1d@ Z2dA Z3dB Z4dkdCZ5dmdEZ6dF Z7dG Z8dH Z9dDdIdJZ:dK Z;dL Z<dM Z=dN Z>dO Z?ee@jA        dP                         ZBdQ ZCddRdSZDdT ZEdU ZFdV ZGdW ZHdX ZIdY ZJddZd[ZKddRd\ZLd] ZMd^ ZNd_ ZOd` ZPda ZQdbeRdcefddZSdndfZTdg ZUdh ZVdbeRfdiZW xZXS )o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   rE   nodetracerselfs    r@   r   zTensorVariable.get_real_value   s     djotz/@AAArB   N)_sizerK   rN   rS   returnc                :    t                      j        di | || _        || _        || _        || _        || _        || _        || _        || _	        || _
        || _        || _        |	| _        |
| _        || _        || j        j        j        dk    }|| _        d S )Nplaceholder )super__init__rE   rF   rG   rH   rI   rY   rK   rL   rM   rN   rO   rP   rQ   has_grad_fnrU   oprS   )rX   rE   rF   rG   rH   rI   rL   rO   rM   rP   rQ   r`   rY   rK   rN   rS   kwargs	__class__s                    r@   r_   zTensorVariable.__init__   s    ( 	""6"""

	
*(*""$&:?->L".rB   c                 J    t          | j        j        j        d                   S Nexample_value)reprrE   rU   metarW   s    r@   
debug_reprzTensorVariable.debug_repr   s    DJO(9:::rB   c                     | j         S NrE   rW   s    r@   as_proxyzTensorVariable.as_proxy   
    zrB   c                     | j         S rk   )rQ   rW   s    r@   python_typezTensorVariable.python_type   s
    rB   r?   c                      j          j         j        t           j                   j         j         j         j        t                     d	}	  j
        d u|d<   n# t          $ r d|d<   Y nw xY wt                     r>t                     s/t          d                                  D                       |d<   nt                     st          d                                  D                       |d<   t                                                     |d<   t"          j        j                                       rd |d<   n-t           fd	t"          j        j        D                       |d<   |S )
N)	rF   rG   rH   rI   rL   rO   rM   rP   rQ   r`   Fc                 N    g | ]"}t          |          rt          |          n|#S r]   r	   int.0ss     r@   
<listcomp>z-TensorVariable.specialize.<locals>.<listcomp>   -    GGGQ;q>>0QqGGGrB   rY   c                 N    g | ]"}t          |          rt          |          n|#S r]   rs   ru   s     r@   rx   z-TensorVariable.specialize.<locals>.<listcomp>   ry   rB   rK   rN   c                 @    g | ]}                     |           |S )memory_format)rN   )rv   xr?   s     r@   rx   z-TensorVariable.specialize.<locals>.<listcomp>  s@        ..Q.??  rB   )rF   rG   rH   rt   rI   rL   rO   rM   rP   typegrad_fn	Exceptionr   r   tuplerJ   rK   r6   _C
_functorchis_batchedtensor_prims_common_memory_formats)r?   propss   ` r@   
specializezTensorVariable.specialize   s    [ll
OO"0!.u++

 

	)#(=#<E-   	) 	) 	) $)E-   	)
  	(8(?(? 	"GG%**,,GGG E'NN "%(( 	 # HG%**,,GGG E'N
 $ELLNN33E(Ox"33E::  *.o&&).   !&!4!D  * *o& s   A A0/A0txr,   c                 >   | j         j        j        d         }| j        st	          |          r|                                \  }}t          |                                 |          }t          ||          }||v r0t          |t          j
                  sJ ddlm}  ||||          S t          |          st          j        ||          S | j        r| j                                        st"          |j        j        |j        j        d}		 t+          | j                                        |	          }
n# t.          $ r}t"          |d }~ww xY w|
t"          t1          |
          rt"          t3          |
          rt"          t          |
|          }t5          | j        |          }t7          |          r"ddlm}  || ||t=          |                    S t?          |                     tB          j"                             t          j        |||          S )Nrf   r#   wrap_fx_proxy)r   rE   rf   LGGetAttrVariable)sourcepy_type)#rE   rU   rh   r   r   __tensor_flatten__r<   rm   r:   r6   r;   builderr   r5   r%   buildsubguards_allowedNotImplementedErroroutputlocal_scopeglobal_scopeevalnamer   r   r   r   rA   miscr   r   r   
make_guardr   HASATTR)rX   r   r   fake_valattrs_ctxrE   rf   r   scope_input_associated_real_valueexc
real_valueattr_sourcer   s                  r@   dynamic_getattrzTensorVariable.dynamic_getattr
  sJ   :?'8 { 	@<XFF 	@"5577KE4DMMOOT22E#Hd33Mu}}!->>>>>222222$}%}UUUU m,, @&,R??? 	& = = ? ? 	&%% i+")2HII	/ ,00@0@0B0BE+J+J(( 	/ 	/ 	/%3.	/ (/%%"#?@@ 	&%%:;; 	&%%94@@
 d33 "*-- 	------"?d;Z8H8H    	k,,\-ABBCCC$R[AAAs   'D8 8
EE

Ec                 r    | j         t          j        | j                   S |                     |dg i           S )Ndim)rI   r&   createcall_methodrX   r   s     r@   method_attr_ndimzTensorVariable.method_attr_ndimM  s7    9 #*49555##Br2666rB   c                 F    | j         t          j        | j                   S d S rk   )rF   r&   r   r   s     r@   method_attr_dtypez TensorVariable.method_attr_dtypeS  s%    :!#*4:666 "!rB   c                 F    | j         t          j        | j                   S d S rk   )rG   r&   r   r   s     r@   method_attr_devicez!TensorVariable.method_attr_deviceW  %    ;"#*4;777 #"rB   c                 F    | j         t          j        | j                   S d S rk   )rH   r&   r   r   s     r@   method_attr_layoutz!TensorVariable.method_attr_layout[  r   rB   c                 X    | j         "t          j        | j         j        dk              S d S )Ncuda)rG   r&   r   r   r   s     r@   method_attr_is_cudaz"TensorVariable.method_attr_is_cuda_  s-    ;"#*4;+;v+EFFF #"rB   c                     |                                  r d | j        D             }t          |          S |                     |dg i           S )Nc                 L    g | ]!}t           j                            |          "S r]   )r   r&   r   rv   r~   s     r@   rx   z4TensorVariable.method_attr_shape.<locals>.<listcomp>e  s)    MMMaY/66q99MMMrB   rJ   )
valid_sizerJ   r(   r   )rX   r   sizess      r@   method_attr_shapez TensorVariable.method_attr_shapec  sQ    ?? 	8MM49MMME&&&##BB777rB   c                 F    | j         t          j        | j                   S d S rk   )rL   r&   r   r   s     r@   method_attr_requires_gradz(TensorVariable.method_attr_requires_gradj  s'    )#*4+=>>> *)rB   c                 F    | j         t          j        | j                   S d S rk   )rM   r&   r   r   s     r@   method_attr_is_quantizedz'TensorVariable.method_attr_is_quantizedn  s'    (#*4+<=== )(rB   c                 F    | j         t          j        | j                   S d S rk   )rP   r&   r   r   s     r@   method_attr_is_sparsez$TensorVariable.method_attr_is_sparser  %    >%#*4>::: &%rB   c                 F    | j         t          j        | j                   S d S rk   )rO   r&   r   r   s     r@   method_attr_is_nestedz$TensorVariable.method_attr_is_nestedv  r   rB   c                 4    t          dd|  ddg            d S )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_gradz  s:    =54555R		
 	
 	
 	
 	
 	
rB   c                 ~    t          j        t          j        j        j                                      || gi           S rk   )r   TorchInGraphFunctionVariabler6   r   	_autograd_get_data_attrcall_functionr   s     r@   method_attr_datazTensorVariable.method_attr_data  s5    5H-
 

-TFB
'
'	(rB   c                 j    | j         rt          dd|  ddg            d S 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  sX     	4/5t555^	      -d333rB   c                 b    ddl m} t          j        |                              || gi           S )Nr   )_tensor_version)tensor_version_opr   r   r   r   )rX   r   r   s      r@   method_attr__versionz#TensorVariable.method_attr__version  s@    7777775oFFTT
 
 	
rB   c                    ddl m} ddlm} |dv rt	          d          S 	  |t
                                        || t	          |          gi           }t          ||           }n# t          $ r d}Y nw xY w| j	        r?t          t          | j	        |                              t          j                             t	          |          S )Nr#   r   BuiltinVariable)rJ   rK   TF) r   builtinr   r&   r<   r   r:   AttributeErrorr   r   r   r   r   r   )rX   r   r   r   r   varret_vals          r@   call_obj_hasattrzTensorVariable.call_obj_hasattr  s   %%%%%%,,,,,, %%%#D)))	!/'**88T+D112B C
 %S/:::GG 	 	 	GGG	 ; 	4;--889MNN    (((s   AA' 'A65A6c                                                     rb                                 v r#t          dd  d d dd dg           n)                                 v rt	          d	 d
          dk    r!t                                                     S t           d d           }| |          nd }|~ j        rw j        	                                r^dvr|
                                sFt                               t          j                             t           j                  |_         j        t!          t"          j        j                  rt          t"          j        j                  }t!          |d          rt!          ||                                d                   rrt"          j        j        t          ||                                d                   j        v r4t0          j                            t           j                  d          S |dk    r fd} |            }|                               }|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 againrc   method_attr_)gradrL   	overloadsr   z9Getting an inplace view on a graph input is not supported)r   msgr   c                  R   ddl m}  ddlm} t                              d           }|d S t          |          t          j        k    rd S |	                    
                                          }j        ! | |t          j                            S  | |          S )Nr#   r   r   )r   rE   r   r   rE   )r   r   r   r   all_tensor_attrsgetr   typesGetSetDescriptorTypecreate_getattr_proxyrm   r   r   )r   r   static_attrrE   r   rX   r   s       r@   try_generic_attr_handlingz=TensorVariable.var_getattr.<locals>.try_generic_attr_handling  s    222222111111.224>>&4 $$(BBB4'<<T]]__dSS;*(=U:dk43P3P    )=Be<<<<rB   )is_strict_mode_strict_mode_banned_opsr   #_strict_mode_conditional_banned_opsr   r)   rp   r<   r   r   is_python_constantr   r   r   
TYPE_MATCHr   r9   r6   opsatenr   Taginplace_viewtagsr   r   DelayGraphBreakVariabler   r   )rX   r   r   handlerresultfnr   s   ```    r@   var_getattrzTensorVariable.var_getattr  s   r"" 	t335555 38488$88 _t _ _ _d4 d d d	     AACCCC: L  L  L  L   ;+D,<,<,>,>???$ 5t 5 5t<< ' 3  --//  555&:S:S:U:U5 $//,*ABBCCC&t{D99FM ;"wuy~t'D'D"..BK((	Bq 122	 I*gb",,..:K.L.L.QQQ !~==%dk488S >    >dfnn= = = = = = =2 /.00F>))"d33F>%%rB   c                    | j         st          dd|  dg            |j        j        |j        j        d}	 t          | j                                         |          }n.# t          $ r!}t          dd|  dg |           Y d }~nd }~ww xY w|t          d	d|  d
g            t          | j         	                    t          j                             t          |          }t          j        |          S )Nz$Unsupported call_id() without sourcezcall_id z6call_id() not supported for sourceless TensorVariable.r   r   z#Error getting associated real valuezJDynamo encountered an error while trying to get the associated real value.r   r   r   r   from_excz'call_id() without associated real valuez>Dynamo could not find an associated real value for the tensor.)r   r   r   r   r   r   r   r   r   r   r   ID_MATCHidr&   r   )rX   r   r   r   r   id_values         r@   call_idzTensorVariable.call_id  sS   { 	>)4))T	    i+")2HII
	+/0@0@0B0BE+J+J(( 	 	 	=)4))1        	 (/A)4))\	    	dk,,\-BCCDDD233&x000s   'A   
B*BBc                     | j         dk    S )Nr   )rI   r   s     r@   has_unpack_var_sequencez&TensorVariable.has_unpack_var_sequence3  s    y1}rB   c                     ddl m                                  rt           j                  }nC                     dg i           }t          |t                    sJ t          |j                  }|dk    s
J d                                             r j        d         }n                     dt          j
        d          gi           }t          |t          t          f          sJ t          |t                    r|                    j                  }n|j        }|t          |          }n1t          |          |k    sJ d| dt          |           d             fd	|D             S )
Nr#   wrap_fx_proxy_clsrJ   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.c                 v    g | ]5} t                                                    |                    6S )
target_clsr   rE   )r   rm   )rv   irX   r   r  s     r@   rx   z6TensorVariable.unpack_var_sequence.<locals>.<listcomp>T  sO     
 
 
 d$--//RSBTUUU
 
 
rB   )r   r  r   lenrJ   r   r:   r(   itemsr&   r   SymNodeVariableevaluate_exprr   r?   range)rX   r   idxessize_lensize_varlength
dyn_lengthr  s   ``     @r@   unpack_var_sequencez"TensorVariable.unpack_var_sequence6  s   ......?? 	+49~~HH''FB;;Hh555558>**H1}}}<}}}?? 
	*Yq\FF))"f7G7Nq7Q7Q6RTVWWJ j?<L*MNNNNN*o66 *#11")<<#)=&MMEEu::'''`F``#e**``` (''
 
 
 
 
 

 
 
 	
rB   c                     | j         d uS rk   rY   rW   s    r@   r   zTensorVariable.valid_sizeY  s    z%%rB   c                 2    | j         
J d            | j         S )Nz%accessing None size in TensorVariabler"  rW   s    r@   rJ   zTensorVariable.size\  s!    z%%'N%%%zrB   c                 .    t           j        j        j        S rk   )r6   r7   r   )_autograd_backward_strict_mode_banned_opsrW   s    r@   r   z&TensorVariable._strict_mode_banned_opsa  s    }#MMrB   c                 .    t           j        j        j        S rk   )r6   r7   r   5_autograd_backward_strict_mode_conditional_banned_opsrW   s    r@   r   z2TensorVariable._strict_mode_conditional_banned_opsd  s    M V	
rB   argslist[VariableTracker]rb   dict[str, VariableTracker]r%   c                     ddl m}m} ddlm}m} |                     |          r9||                                 v r#t          dd|  d| d| d| d| dg 	           t          
                    |d           }	|	d u}
 ||t          | gt          |          z             |          r|
r| j        r7  ||t          t          | j        d
          |                    |	          }n.|                    |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.          j        	           n4|dk    r.d|v r*t          dd| d|d|dddgt.          j        	           	 t!          | d|           }	  ||i |}|r|S nK# t2          $ r.}t          dd|  d| d| d| d| dg |           Y d }~nd }~ww xY w# t4          $ r Y nw xY wddl m}  || |j        j        d |gt=          | g||          R            S )!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   rc   __eq__r   Frandom_zTensor.random_ opzTensor.(args=	, kwargs=)z This is currently not supported.z'Use the out-of-place version of this opuniform_fromz-Tensor.uniform_ op called with `from` keywordzAvoid using the `from` keyword.method_zUnhandled args for methodz6Dynamo encountered an error while calling the method ``.r  r   r   )r   r,  r-  torch_functionr.  r/  r   r   r   r   r   r   listr   r   r   r<   r6   r;   r:   r)   r   r&   r   SUPPORTABLE	TypeErrorr   r   r   create_proxyr    )rX   r   r   r(  rb   r,  r-  r.  r/  r   is_base_tensor_methodfunc_varhandler_methodr  er   s                   r@   r   zTensorVariable.call_methodi  s    	@???????XXXXXXXXr"" 	tt/K/K/M/M'M'MBDtDDdDDTDDFDD77 7 7    '**466 +4 7 ('E4&4::2E,F,FOO	%	 { U??
:dk;#G#GNN   -33Bd8S8STT**HeTFT$ZZ$788&  	 8
474L M M-e444 9+<$<<<<&<<<>=&2	     ZFf$4$4G<$<<<<&<<<>5&2	   	$T+;T+;+;<<N'888 "!M"    7H4HH$HHHHHH!,#'!, !, !,          	 	 	D	" 	+*****}"BI" #D=4=&99  
 
 	
s*   H; 3H   
H8
$H33H8;
IIc                 $     | j         dg|R i |S )NrJ   _method_size_striderX   r(  rb   s      r@   method_sizezTensorVariable.method_size  s%    't'@@@@@@@rB   c                 $     | j         dg|R i |S )NrK   rD  rF  s      r@   method_stridezTensorVariable.method_stride  s%    't'B4BBB6BBBrB   c                    t          |          }d }|dk    r|nt          j        }|dk    rt          | |          }n$|dk    r|                                 r| j        }nd }|'| ||          S t          j        ||                   S | j        j        j        	                    d          x}|K t          ||                      }t          |          s" |t          d |D                                 S d S  t          ||          |          }t          |          s#t          j        t          |                    S d S d S )Nc                 6    t          fd| D             fi S )Nc                 4    g | ]}t          j        |fi S r]   )r&   r   )rv   yoptionss     r@   rx   zXTensorVariable._method_size_stride.<locals>.make_const_size_variable.<locals>.<listcomp>  s-    BBB1!(66g66BBBrB   r'   )r~   rN  s    `r@   make_const_size_variablezDTensorVariable._method_size_stride.<locals>.make_const_size_variable  s9    BBBBBBB FM  rB   rJ   rf   c              3   4   K   | ]}t          |          V  d S rk   rt   rv   rs     r@   	<genexpr>z5TensorVariable._method_size_stride.<locals>.<genexpr>  s(      ,D,DSVV,D,D,D,D,D,DrB   )r   r&   r   r<   r   rJ   rE   rU   rh   r   r   r   rt   )rX   r   r   rO  RetVariablerS  fakefake_rs           r@   rE  z"TensorVariable._method_size_stride  s   3	 	 	 )-$$<L<S 	 6>>d##AAV^^ 1 1^	AAA={"{1~~%'.qv666 JO(,,_===DJ{,t,,..'// F ';u,D,DV,D,D,D'D'DEEEF F
 -t,,S11'// @+23v;;??? KJ@ @rB   c                 R   |                                  r&t          j        t          | j                            S | j        j        j                            d          x}D|	                                }t          |          s#t          j        t          |                    S d S d S re   )r   r&   r   r   rJ   rE   rU   rh   r   numelr   rt   )rX   rV  rW  s      r@   method_numelzTensorVariable.method_numel  s    ?? 	?#*749+=+=>>> JO(,,_===DJZZ\\F#F++ <'.s6{{;;; KJ< <rB   c                 F    | j         t          j        | j                   S d S rk   )rI   r&   r   rW   s    r@   
method_dimzTensorVariable.method_dim  s%    9 #*49555 ! rB   c                 P    | j         t          j        | j         j                  S d S rk   )rF   r&   r   is_floating_pointrW   s    r@   method_is_floating_pointz'TensorVariable.method_is_floating_point  s(    :!#*4:+GHHH "!rB   c                    t           j        r+t          dddg t          j        t          j                   | j        j        j        	                    d          x}&t          j        |                                          S d S )Nz0Encountered tensor.is_inference() during tracingr   z&tensor.is_inference() is not supportedr   rf   )r   "fake_tensor_disable_inference_moder   r   FUNDAMENTALINFERENCE_MODErE   rU   rh   r   r&   r   is_inference)rX   rV  s     r@   method_is_inferencez"TensorVariable.method_is_inference  s    4 		JD&2&5	    JO(,,_===DJ#*4+<+<+>+>??? KJrB   c                 P    | j         t          j        | j         j                  S d S rk   )rF   r&   r   
is_complexrW   s    r@   method_is_complexz TensorVariable.method_is_complex%  s(    :!#*4:+@AAA "!rB   c                 *   ||                                 nt          j        }| j        t	          j        || j        v           S | j        j        j        	                    d          x}(t	          j        |                    |                    S d S )Nrf   r|   )
as_python_constantr6   contiguous_formatrN   r&   r   rE   rU   rh   r   )rX   r}   rV  s      r@   method_is_contiguousz#TensorVariable.method_is_contiguous)  s     ( ,,...( 	
 )#*=D<N+NOOOjo*..???dL#*"""??   MLrB   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          |                                                    dk    r|                                }t          j	        t          |                    }ddlm} dd	lm}  |j                    }	|rd
|i|} ||	 |	j        j        ddgt)           |g|          R            S d S d S )Nc              3   4   K   | ]\  }}j         |v |V  d S rk   )rF   )rv   kvrX   s      r@   rT  z-TensorVariable.method_type.<locals>.<genexpr><  s6        aTZ1______ rB   cpuztorch..ztorch.tensortyper   r+   r#   r   non_blockingr   r   )rF   r:   rG   r6   nextr"   r  r   r&   r   r=   r   rj  symbolic_convertr,   r   r   
current_txr   r>  r    )
rX   rF   rs  rb   
tensortypetensor_typetensor_type_constr,   r   r   s
   `         r@   method_typezTensorVariable.method_type6  s   M
&4;55 '     1799    J {5(('./M
8K/M/MNNN'.ET[-EE
0CEE   D113344559KKK
  2244K 0 7K8H8H I I@@@@@@......1&133B B(,A&A =&	&! '.?'@&II    # KKrB   c                    t          |t                    r|j        rddlm} ddlm}  |j                    }|                                }|	                    || ||j                  }|j
        j                            t                      |t                     |S t          d|  d| dd	d
gt           j                   d S )Nr   r+   r#   TensorWithTFOverrideVariablemutation_type_clszHArgument of `as_subclass` must be a non-dispatcher-style tensor subclassz.as_subclass(r5  Currently not supportedz:Avoid this call or move it outside `torch.compile` regioner   )r:   TensorSubclassVariabler   ru  r,   r:  r}  rv  rj  from_tensor_varr   side_effects
_track_objobjectr$   r   r   r<  )rX   clsr,   r}  r   py_clsr   s          r@   method_as_subclassz!TensorVariable.method_as_subclass`  s	   c122 	sz 	@@@@@@DDDDDD1&133B++--F.>>D&#* C I"--#1E .    J^00#0001L".		
 	
 	
 	
 	
 	
rB   c                     t          | j        t          j                  r2| j        j        dk    r| j        j        nd}t          j        |          S d S )Nrq  )r:   rG   r6   r   indexr&   r   )rX   r  s     r@   method_get_devicez TensorVariable.method_get_devicey  sQ    dk5<00 	2)-)9U)B)BDK%%E#*5111	2 	2rB   c                 >    t          j        | j        j                  S rk   )r&   r   rF   itemsizerW   s    r@   method_element_sizez"TensorVariable.method_element_size~  s    &tz':;;;rB   )forcec                H   t           j        st          dd|  dddg           t          st          dd|  ddd	g           | j        t
          j        k    rt          d
| j         d          ddlm	}  |j
                    }|r]|                                rI|                     |dg i           }|j                            dd|                                fi           }n$ |j        j        ddgt!          | | gi           R  }t"                              ||          S )Nz%Tensor.numpy() with trace_numpy=Falser0  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   rq  view_as)r   trace_numpyr   nprH   r6   stridedr=  ru  r,   rv  rj  r   r   r>  rm   r    NumpyNdarrayVariabler   )rX   r  r,   r   trE   s         r@   method_numpyzTensorVariable.method_numpy  s   ! 
	?3t33375	 	 	 	  		@3t333? L    ;%-''bbbb   	=<<<<<-"-//  	U--// 	  Xr266AI**=%!**,,RTUUEE +BI*y+<dD\2+N+N  E $**2u555rB   c                      ddl m} ddlm  |j                     fd                                 j        j        d         } |                                           }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           |                                 dk    r |           S |                                 d	k    rfd
t          |           D             S fdt          |           D             S )Nc                     t           j        j                            j        dd          5   |                                          cd d d            S # 1 swxY w Y   d S )Nallow_scalar_outputsT)unittestmockpatchr  	fake_modeitem)r  	sub_proxyr   r   s     r@   wrapz:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrap  s     ](//L"8$    )=!((                  s   AAAz'Tensor.tolist() with non-integer tensorr0  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#   c                 :    g | ]\  }} ||                   S r]   r]   )rv   r  valr  r  s      r@   rx   z@TensorVariable.method_tolist.<locals>.tolist.<locals>.<listcomp>  s-    PPPFAsS)A,//PPPrB   c                 <    g | ]\  }} ||                    S ))r  r]   )rv   r  
sub_tensorr  tolists      r@   rx   z@TensorVariable.method_tolist.<locals>.tolist.<locals>.<listcomp>  s@       !Az zYq\:::  rB   )	rF   r6   int8int16int32int64r   r   	enumerate)tensorr  r  rX   r  r   r   s    `@r@   r  z,TensorVariable.method_tolist.<locals>.tolist  s   	 	 	 	 	 	 |
	$   !E94999!9B	 	 	 	 zz||q  tFI...zz||q  PPPPPi>O>OPPPP    %.v%6%6   rB   rf   )
ru  r,   r   r   rv  rm   rU   rh   r%   r   )rX   r,   r  outr  r   r   s   `   @@@r@   method_tolistzTensorVariable.method_tolist  s    <<<<<<******-"-//&	 &	 &	 &	 &	 &	 &	 &	P %*?;fVT]]__--$R---rB   c           	      V    t          dd|  d| d| dg t          j                   d S )Nz"Unsupported Tensor.backward() callr0  z
 backward r   z>Dynamo currently does not support tracing `Tensor.backward()`.r   )r   r   rb  rF  s      r@   method_backwardzTensorVariable.method_backward  sP    8B4BB4BB&BBX2%12		
 	
 	
 	
 	
 	
rB   c                      t          |           S rk   )DataPtrVariablerF  s      r@   method_data_ptrzTensorVariable.method_data_ptr  s    t$$$rB   c           	          t           j        s3|                                  t          dd|  d| d| ddg           d S d S )Nz@Unsupported Tensor.item() call with capture_scalar_outputs=Falser0  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   rF  s      r@   method_itemzTensorVariable.method_item  sx    , 	--///ZBtBB4BB&BB<I
 
 
 
 
 
	 	rB   c           	      l   ddl m} ddlm}  |j                    }t          |d         t                    r4t          j        t          j
                            d          |d         g}}nt          j        } |j        j        d|gt!          | gt#          |          z   |          R  } |||          S )Nr   r+   r#   r   r   r   )ru  r,   r   r   rv  r:   r  r6   selectr   r&   r   operatorgetitemr   r>  r    r;  )rX   r(  rb   r,   r   r   r  rE   s           r@   method___getitem__z!TensorVariable.method___getitem__  s    <<<<<<******-"-//d1g// 	"
 .55a88G BB !B&	&
 vT

2F;;
 
 
 }R'''rB   c                      t           j        j                                        } d                    t          j        |                     }t                              t          j
        d          |           d S )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
                )r6   _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  sp     ]1??AA
!wwy'<Z'H'HIIO	  !	
 	
 	
 	
 	
rB   c                     ddl m}  |j                    }|                     |dt	          j        d          gi           S )Nr   r+   rJ   r   )ru  r,   rv  r   r&   r   )rX   r,   r   s      r@   method___len__zTensorVariable.method___len__(  sN    <<<<<<-"-//F-=-DQ-G-G,H"MMMrB   r>   c                    ddl m}  |j                    }|9ddlm} |                    t          j        ||j                  | |||gi           S d S )Nr   r+   )	polyfills)	ru  r,   rv  r   r  inline_user_function_returnr%   r   addcmul_inplace)rX   tensor1tensor2r?   r,   r   r  s          r@   method_addcmul_zTensorVariable.method_addcmul_.  s    <<<<<<-"-//$$$$$$11%b)*CDDw/   rB   c                 x   ddl m}  |j                    } |j        j        dt
          j        gt          | ||gi           R  }t          |t                    rt          j        j                                        5  t          |j        |d           d d d            n# 1 swxY w Y   | j        j        j                            d          }ddlm}m} t          |t,          j        j                  r$t,          j        j                            |          } |t5          |          || ||                    }	|	                                D ]\  }
}t9          | |
|           t:          j        st:          j        r%|j        j         !                    |j        d	           tE          j#        d           S )
Nr   r+   r   F)allow_non_graph_fakerf   r#   )get_specialized_propsinfer_subclass_typer   )$ru  r,   rv  r   r>  r  setitemr    r:   rD   r6   r7   r8   +_disable_saved_tensors_hooks_during_tracingr   rU   rE   rh   r   r   r  r  r   lazyLazyVariableTrackerrealize_allr   r  setattrr   use_graph_deduplicationtrack_nodes_for_deduplicationregion_trackeradd_node_mutationr&   r   )rX   keyr?   r,   r   rE   rf   r  r  specialized_propsro  rp  s               r@   method___setitem__z!TensorVariable.method___setitem__;  s   <<<<<<-"-//&	&
 c51266
 
 
 e^,, 	$ $PPRR K Kuz2EJJJJK K K K K K K K K K K K K K K !JO044_EEMKKKKKKKK%!CDD N!:FFuMM 5 5UR0C0CM0R0R! ! *//11 $ $1a####) 	FV-Q 	FI$66uz1EEE&t,,,s   >B""B&)B&c           	      >    t          dd|  d| d| dg            d S )Nz!Unsupported Tensor.resize_() callr0  z	 resize_ r   z=Dynamo currently does not support tracing `Tensor.resize_()`.r   r   rF  s      r@   method_resize_zTensorVariable.method_resize_b  sG    7A4AA$AAAAW		
 	
 	
 	
 	
 	
rB   c           	      >    t          dd|  d| d| dg            d S )Nz$Unsupported Tensor.resize_as_() callr0  z resize_as_ r   z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r   r   rF  s      r@   method_resize_as_z TensorVariable.method_resize_as_j  sG    :D4DDTDDFDDZ		
 	
 	
 	
 	
 	
rB   c           	      >    t          dd|  d| d| dg            d S )Nz(Unsupported Tensor.sparse_resize_() callr0  z sparse_resize_ r   zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r   r   rF  s      r@   method_sparse_resize_z$TensorVariable.method_sparse_resize_r  sG    >H4HHHHHH^		
 	
 	
 	
 	
 	
rB   c           	      >    t          dd|  d| d| dg            d S )Nz2Unsupported Tensor.sparse_resize_and_clear_() callr0  z sparse_resize_and_clear_ r   zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r   r   rF  s      r@   method_sparse_resize_and_clear_z.TensorVariable.method_sparse_resize_and_clear_z  sG    HR4RR4RR&RRh		
 	
 	
 	
 	
 	
rB   c           	          t          |          dk    r*t          dd|  d| d| dg t          j                   d S d S )Nr#   zUnsupported Tensor.set_() callr0  z set_ r   zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r   )r  r   r   r<  rF  s      r@   method_set_zTensorVariable.method_set_  sk    t99q== 8BtBB4BB&BBA6)56      =rB   )alphac                    |cddl m}  |j                    }t          j        t
          j                                      |||gi           }|                     |d|gi           S d S Nr   r+   add_)	ru  r,   rv  r   r   r6   mulr   r   )rX   otherr  r,   r   r  s         r@   method_add_zTensorVariable.method_add_  s~    @@@@@@1&133B;EIFFTTUENB F ##B"=== rB   c                :   ddl m}  |j                    }|t          j        t
          j                                      |||gi           }t          j        t
          j                                      |||gi           }| 	                    |d|gi           S d S r  )
ru  r,   rv  r   r   r6   divr   r  r   )rX   r  r  r?   r,   r   r  s          r@   method_addcdiv_zTensorVariable.method_addcdiv_  s    <<<<<<-"-//;EIFFTTWg& F ;EIFFTTVUOR F ##B"=== rB   c                 .   ddl m}  |j                    }t          j        t
          j                                      || |gi           }t          j        t
          j                                      ||gi           }|	                    |dg i           S )Nr   r+   r  )
ru  r,   rv  r   r   r6   eqr   anyr   )rX   argr,   r   r  s        r@   method___contains__z"TensorVariable.method___contains__  s    <<<<<<-"-// 7AAOOsR
 
 7	BBPP"
 
 !!"fb"555rB   c           
         ddl m}  |j                    }d |D             d |                                D             fd}d|_        ddlm}  || |j        j        d	|gt          | gi           R  
          S )Nr   r+   c                 6    g | ]}|                                 S r]   rj  r   s     r@   rx   z6TensorVariable.method_redistribute.<locals>.<listcomp>  $    >>>A--//>>>rB   c                 >    i | ]\  }}||                                 S r]   r  rv   ro  rp  s      r@   
<dictcomp>z6TensorVariable.method_redistribute.<locals>.<dictcomp>  *    PPPA1a2244PPPrB   c                      | j         i S rk   )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DDrB   prim_redistributer#   r   r   r   
ru  r,   rv  r  r=   r   r   r   r>  r    )	rX   r(  rb   r,   r   r  r   r  r  s	          @@r@   method_redistributez"TensorVariable.method_redistribute  s    <<<<<<-"-// ?>>>>PPPPP	E 	E 	E 	E 	E 	E 4G'0******}(")(/ #D62..  
 
 
 	
rB   c           
         ddl m}  |j                    }d |D             d |                                D             fd}d|_        ddlm}  || |j        j        d	|gt          | gi           R  
          S )Nr   r+   c                 6    g | ]}|                                 S r]   r  r   s     r@   rx   z2TensorVariable.method_to_local.<locals>.<listcomp>  r  rB   c                 >    i | ]\  }}||                                 S r]   r  r  s      r@   r  z2TensorVariable.method_to_local.<locals>.<dictcomp>  r  rB   c                      | j         i S rk   )to_localr
  s    r@   to_local_fn_with_prim_typeszCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_types  s    1:}@@@@rB   prim_to_localr#   r   r   r   r  )	rX   r(  rb   r,   r   r  r   r  r  s	          @@r@   method_to_localzTensorVariable.method_to_local  s    <<<<<<-"-// ?>>>>PPPPP	A 	A 	A 	A 	A 	A 0?#,******}(")(+ #D62..  
 
 
 	
rB   c                 $     | j         dg|R i |S )Nregister_hook_method_register_hookrF  s      r@   method_register_hookz#TensorVariable.method_register_hook  s%    )t)/KDKKKFKKKrB   c                 $     | j         dg|R i |S )N"register_post_accumulate_grad_hookr  rF  s      r@   )method_register_post_accumulate_grad_hookz8TensorVariable.method_register_post_accumulate_grad_hook  s6    )t)0
37
 
 
;A
 
 	
rB   r   hookc           	        
 ddl m}  |j                    }| j        st          j        st          dd|  d dg            |j                            |          \  
}
fd}d	d
l	m
} |                                 }d|j        j        d<    |||j                            d|||fi                     S t          j        t          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                 ~    t          |           } |t          j        t          t          |                     d S )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  sN     ' 5 5%%8!)"+	     trB   r#   r   Thas_backward_hookr   )mutation_type)ru  r,   rv  r   r   compiled_autograd_enabledr   r   add_backward_state_hookr   r   rm   rU   rh   r>  r   RemovableHandleVariablebaseValueMutationNewr  r  )rX   r   r!  r,   r   bw_state_proxyr(  r   
self_proxyhandle_variabler%  s    `        @r@   r  z$TensorVariable._method_register_hook  sl    	=<<<<<-"-//{ 6	$>   !Z8488$88 X	    )+	(I(I$(O(O%I~      /.....J8<JO !45 =	&&#-0	    $;#.99;;
 
 
 		,,T4$OOOrB   Tc                     |dur|                                 }|                                 j        j        d         j        |k    rt          dd|  ddg            d S | S )NTrf   z(Unsupported Tensor.requires_grad_() callr0  z requires_grad_zaDynamo does not support changes to a Tensor's `requires_grad` through calling `requires_grad_()`.r   )rj  rm   rU   rh   rL   r   )rX   rL   s     r@   method_requires_grad_z$TensorVariable.method_requires_grad_;  s    $$)<<>>M==??$_5C}TTB<t<<<F      KrB   c                    t          |          dk    rt          |d         t                    s,t          |          dk    rDt          d |D                       r-ddlm} |                      |j                    d||          S d S d S )Nr#   r   c              3   z   K   | ]6}t          |t                    o|                                t          k    V  7d S rk   )r:   r&   rp   rt   )rv   as     r@   rT  z,TensorVariable.method_new.<locals>.<genexpr>O  sP        OP
1.//JAMMOOs4J     rB   r   r+   	new_empty)r  r:   r(   allru  r,   r   rv  )rX   r(  rb   r,   s       r@   
method_newzTensorVariable.method_newJ  s     IINNz$q'<@@NIINN  TX     
 A@@@@@##0%022Kv   NNNrB   c                     t          | |                                 j        j        d                                                   S re   )UntypedStorageVariablerm   rU   rh   untyped_storagerW   s    r@   method_untyped_storagez%TensorVariable.method_untyped_storageY  s8    %$--//&+O<LLNN
 
 	
rB   c                 d    | j         s(| j        j                            |           d| _         d S d S )NT)rS   rE   rU   _rename)rX   r   s     r@   set_name_hintzTensorVariable.set_name_hint^  s=      	%JO##D))) $D	% 	%rB   r   r,   rk   r(  r)  rb   r*  rZ   r%   )NFT)Yr=   
__module____qualname____doc__r%   _nonvar_fieldsr   r6   fxProxyr_   ri   rm   rp   staticmethodr;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   propertyrJ   r   r   r   rG  rI  rE  rZ  method_nelementr\  method_ndimensionr_  re  rh  rl  rz  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  r4  r:  r>  rA  __classcell__rc   s   @r@   rD   rD      s       GG 	  
	'!N&B B B. #&/ &/ &/x~&/& 
'&/ &/ &/ &/ &/ &/P; ; ;     0%, 0 0 0 \0dAB AB AB ABF7 7 77 7 78 8 88 8 8G G G8 8 8? ? ?> > >; ; ;; ; ;
 
 
( ( (
	4 	4 	4
 
 
) ) ) )8Y Y Y Yv!1 !1 !1F  !
 !
 !
 !
 !
F& & &   XN N N
 
 

g
 &	g

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

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

%# % % % % % % % %rB   rD   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.
    rE   sym_numc                 *    t          | j                  S rk   )rg   rT  rW   s    r@   ri   zSymNodeVariable.debug_reprq  s    DL!!!rB   Nc                    |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 re   )r   rU   rh   r!   r:   sympyIntegerrt   boolr&   r   r  )r  r   rE   rT  rN  s        r@   r   zSymNodeVariable.createt  s    ?$UZ44Gejo--:??3w>>>>%*g...gsD9:: 	4&0%-&H&HUc'lllgG#*7333ug99999rB   rZ   c                 d     t                      j        di | || _        || _        d | _        d S Nr]   )r^   r_   rE   rT  _tensor_var)rX   rE   rT  rb   rc   s       r@   r_   zSymNodeVariable.__init__  s<    ""6"""
rB   c                     t          | j        t                    r| j        j        j        S t          | j                  S rk   )r:   rT  r
   rU   pytyper   rW   s    r@   rp   zSymNodeVariable.python_type  s4    dlH-- 	&<$++%%%rB   c                     | j         S rk   rl   rW   s    r@   rm   zSymNodeVariable.as_proxy  rn   rB   c           	          | j         Ot          j        |t          j                                      || gdt          j        ||          i          | _         | j         S )NrF   )r\  r%   r   r6   scalar_tensorr   )rX   r   rF   s      r@   	as_tensorzSymNodeVariable.as_tensor  s[    #.4E'   mB/2GE2R2R(STT  rB   c                     	 t          | j                  S # t          $ rM}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   rT  r   r6   rI  experimental_configno_data_dependent_graph_breakr   r   ANTI_PATTERNrP  )rX   output_graphrB  s      r@   r  zSymNodeVariable.evaluate_expr  s}    
	---* 	 	 	x$,J *PAPP5   		s    
A-AA((A-r(  r)  rb   r*  r%   c           
      l    ddl m}  || |j        j        d|gt	          | g||          R            S )Nr#   r   r   )r   r   r   r>  r    )rX   r   r   r(  rb   r   s         r@   r   zSymNodeVariable.call_method  sf     	+*****}"BI" #D=4=&99  
 
 	
rB   rk   )rZ   NrC  )r=   rE  rF  rG  r%   rH  ri   classmethodr   r_   rp   rm   rb  r  r   rQ  rR  s   @r@   r  r  d  s         	 
	'N" " " : : : [:           & & &          
 &	

 -
 

 
 
 
 
 
 
 
rB   r  c                   l     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.
    r   r,   c                 0    ddl m}  |dt          | |d|S )Nr#   r  r  r]   )r   r  r  )r   rE   rN  r  s       r@   r   zNumpyNdarrayVariable.create  sF    ......   
+
 
 	
 
 	
rB   c                 t   	
 ddl m	 ddlm
 d }                                 j        j        d         }t          j        |          }	 
fd}dv rNj	        
                    d	                                 fi           }t                              |          }nd	v r"t          j        t          |                    S d
v rTt          t          |          x}          s+t          j        t!          d |D                                 S  |            S dk    rAt          |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   rf   c            	      z     j                             d                                 fi                     S )Nr   )r   r>  rm   )r   rp  rX   r   r   s   r@   insert_into_graphz;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  sG     =	&&#%7$--//49PRT   rB   )Trealimagr   )rI   r  )shaperK   c              3   4   K   | ]}t          |          V  d S rk   rQ  rR  s     r@   rT  z3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s(      4G4GSVV4G4G4G4G4G4GrB   rJ   )r.  flagsrF   z$Unsupported ndarray attribute accessr   r   z3Dynamo currently does not support tracing `ndarray.r9  r   )__version__z&Unsupported ndarray.__version__ access)r8   rp  r   r   rm   rU   rh   tnpndarrayr   r>  r  r   r&   r<   r   r   rJ   rt   r   r   )rX   r   r   r  rf   example_ndarrayrr  rE   rS  rp  r   s   ```      @@r@   r  z NumpyNdarrayVariable.var_getattr  s^   
 	/.....******,1/B+m44	 	 	 	 	 	 	 	 	 (((I**"$'	 E *00U;;FF )))#*7?D+I+IJJJ(((#$)G)G$GAHH I'.u4G4GQ4G4G4G/G/GHHH$$&&&V^^#)=$=A>> 7'.s1vv666$$&&&///>4t44d44ZRVZZZ	     _$$@4t44d44ZRVZZZ	    >%%rB   c                 b    | dk    r%dddfd|                                 D             }||fS )Nclipminmax)a_mina_maxc                 D    i | ]\  }}                     ||          |S r]   )r   )rv   ro  rp  kwargs_renames      r@   r  z3NumpyNdarrayVariable.patch_args.<locals>.<dictcomp>  s/    LLLTQm''1--qLLLrB   )r  )r   r(  rb   r  s      @r@   
patch_argszNumpyNdarrayVariable.patch_args  sD    6>>&+e<<MLLLLV\\^^LLLFV|rB   r(  r)  rb   r*  rZ   r%   c                    ddl m} ddlm} |                     |||          \  }}|dk    rddlm} d }d|v r	|d         }nt          |          dk    r|d         }t          |t                    o
|j
        d	k    }	t          ||          o|j        t          u }
|	s|
r' |d
d|  d| d| d| dg t          j                   |dv r$t                                          ||||          S |dv r |dd|  d| d| d| d| dg             |j        j        d ||          gt'          | gt)          |          z   |          R  }t*                              ||          S )Nr   r   )numpy_method_wrapperastyper#   r   rF   r   Ozndarray.astype(object)r0  r   z`ndarray.astype('O')` or `ndarray.astype(object)` is not supported by torch.compile, as there is no equivalent to object type in torch.Tensor. This will be executed eagerly.r   )__len__rJ   r  )tostringtobytes__delattr__zUnsupported ndarray method callz	`ndarray.z&()` is not modelled in `torch._numpy`.r   )r   r   r8   r  r  r   r   r  r:   r&   r?   r  r  r   rb  r^   r   r   r>  r    r;  r  r   )rX   r   r   r(  rb   r   r  r   	dtype_argis_object_stris_object_typerE   rc   s               r@   r   z NumpyNdarrayVariable.call_method  s%    	+*****000000tT6::f8000000I&  "7O		TQ G	9&677RIOs<R  9o66Q9<6;Q   
 
  4H4HH$HHHHHH9 ;-9:	 	 	 	 00077&&r4v>>>9999DtDDdDDTDDFDDTTTT	    '	&  &&
 vT

2F;;
 
 

 $**2u555rB   c                     t           j        S rk   )r  r{  rW   s    r@   rp   z NumpyNdarrayVariable.python_typeN  s
    zrB   rB  rC  )r=   rE  rF  rG  rK  r   r  r  r   rp   rQ  rR  s   @r@   r  r    s         
 
 
 
 \
E E E EN   \46 &	46
 -46 
46 46 46 46 46 46l      rB   r  c                   v     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r  r  rE   rZ   c                X     t                      j        |fi | || _        || _        d S rk   )r^   r_   r  r  )rX   rE   r  r  rb   rc   s        r@   r_   z$UnspecializedPythonVariable.__init__]  s9     	))&)))"&rB   c                 H    t          di t          |j                  ||dS )Nr  r]   )r  dict__dict__)r  tensor_variabler  r  s       r@   from_tensor_variablez0UnspecializedPythonVariable.from_tensor_variabled  sC     + 
 
?+,,
#
 
 
 
 	
rB   rD  r=   rE  rF  rG  rD   rH  r6   rI  rJ  r_   rl  r  rQ  rR  s   @r@   r  r  R  s         
 	 
	&N 37D' ' 'X^'	' ' ' ' ' ' 
 
 
 [
 
 
 
 
rB   r  c                   j     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.r  rE   rZ   Nc                 v    |                     dd          } t                      j        |fi | || _        d S )Nr  F)popr^   r_   r  )rX   rE   rb   r  rc   s       r@   r_   zFakeItemVariable.__init__w  sC    jj66))&)))&rB   c                 >    t          di t          |j                  S r[  )r  r  r  )r  r  s     r@   r  z%FakeItemVariable.from_tensor_variable|  s!    AA$'?"@"@AAArB   r  rR  s   @r@   r  r  n  s        9 9 			&N
'ehn '4 ' ' ' ' ' '
 B B [B B B B BrB   r  c                   H    e Zd Zdddee         deeef         defdZd ZdS )	r  r   r,   r(  rb   rZ   c           	         ddl m} | j        j        }|t          j        j        u rt          |          dk    rYt          |d         t                    r>t          |          dk    r+|d         }|	                    ||| j        | j
                  }n]t          d| j         d| d| ddd	gt          j        
           n.t          j        ||                              || g|z   |          }| j        j        }|t          j        j        ur+t          j        ||                              ||g|           |j        j                            t+                      |t,                     |S )Nr#   r|  r   zCCalling subclass default constructor with more than tensor argumentr3  r4  r5  r  zFAvoid this constructor call or move it outside `torch.compile` regioner   r~  )r:  r}  r?   __new__r6   r;   r  r:   rD   r  r   r   r   r<  r%   r   r   r_   r   r  r  r  r$   )	rX   r   r(  rb   r}  new_funcdatar   	init_funcs	            r@   r   z$TensorSubclassVariable.call_function  s    	A@@@@@:%u|+++D		QtAw77 KK1$$Aw 3BBdj$+  !a#zIIIIIII 92 +6		 	 	 	 	 "'H55CCTFTM6 C
 J'	 EL111!"i00>>rC5&QQQ 		))HHc-A 	* 	
 	
 	
 
rB   c                     | j         S rk   r>   rW   s    r@   rj  z)TensorSubclassVariable.as_python_constant  rn   rB   N)	r=   rE  rF  r;  r%   r  rP  r   rj  r]   rB   r@   r  r    sm        2#2 ?#2 S/)*	2
 
2 2 2 2h    rB   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dZ xZS )r<  rf   from_tensorrZ   Nc                 V     t                      j        di | || _        || _        d S r[  )r^   r_   r  rf   )rX   r  rf   rb   rc   s       r@   r_   zUntypedStorageVariable.__init__  s8     	""6"""&*rB   r(  rb   c           	         |dk    r|rJ |rJ | j                                         }t          |          s!t          j        t          |                    S ddlm} ddlm	}  |||j
                            d|| j                                        fi                     S |dk    r{t          |          dk    rh|rJ |j
                            dt          j        j        j        | j                                        |d                                         fi            | S t'                                          ||||          S )	NrJ   r   )untyped_storage_sizer#   r   r   resize_r   )rf   rJ   r   r&   r   rt   external_utilsr  r   r   r   r>  r  rm   r  r6   r   inductorresize_storage_bytes_r^   r   )	rX   r   r   r(  rb   r  r  r   rc   s	           r@   r   z"UntypedStorageVariable.call_method  sh    6>>OO8:',,..F#F++ '.s6{{;;;AAAAAA222222$}I**',)22446	    9Ta:I""	"8!**,,d1g.>.>.@.@A	   Kww""2tT6:::rB   codegenr*   c                 z     || j                    |                    d           |                    d           d S )Nr=  r   r  load_methodr   rX   r  s     r@   reconstructz"UntypedStorageVariable.reconstruct  sD     !!!-...ArB   r  r*   )r=   rE  rF  r%   rH  rD   r6   UntypedStorager_   r;  r  rP  r   r  rQ  rR  s   @r@   r<  r<    s        		'N
	+#	+ +	+
 
	+ 	+ 	+ 	+ 	+ 	+%; ?#	%;
 S/)*%; 
%; %; %; %; %; %;N       rB   r<  c                   0     e Zd Zdeddf fdZddZ xZS )	r  r  rZ   Nc                 H     t                      j        di | || _        d S r[  )r^   r_   r  )rX   r  rb   rc   s      r@   r_   zDataPtrVariable.__init__  s0    
 	""6"""&rB   r  r*   c                 z     || j                    |                    d           |                    d           d S )Ndata_ptrr   r  r  s     r@   r  zDataPtrVariable.reconstruct  sC     !!!J'''ArB   r  )r=   rE  rF  rD   r_   r  rQ  rR  s   @r@   r  r    sc        '#' 
	' ' ' ' ' '       rB   r  )krG  r&  loggingr  r  r  r   r  typingr   rW  torch._numpy_numpyrz  torch.fxr6   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   r8   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_opsr  fromkeysvalues%supported_tensor_comparison_op_values$supported_const_comparison_op_valuesrA   r   
TensorBaser  r;   r   rD   r  r  r  r  r  r<  r  r]   rB   r@   <module>r     si   "                                      + + + + + + 6 6 6 6 6 6              G F F F F F 3 3 3 3 3 3 3 3 3 3 : : : : : :            ; : : : : : 0 0 0 0 0 0 0 0                              8 7 7 7 7 7 7 7 & & & & & &       2 2 2 2 2 2   	BBB  E//////DDDDDD g!! 
	
+
+
+
+
,o	# 	#  ,o
+
+	" " %$  )-#**,,) ) % (,}}"))++( ( $
   8&/%,2GG [% [% [% [% [%_ [% [% [%|&R
 R
 R
 R
 R
o R
 R
 R
jV V V V V> V V Vr
 
 
 
 
. 
 
 
8B B B B B~ B B B&6 6 6 6 65 6 6 6r; ; ; ; ;_ ; ; ;|    o     s   :B? ?C	C	