
    qi             	          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mZ ddl	m
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l0m1Z1 d
dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@mAZA ddlBmCZC ddlDmEZEmFZF ddlGmHZH 	 ddlIZJerddlLmMZM ddlNmOZO ddlPmQZQ  ej                  eS      ZTej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  dZ]ej                  ej                  ej                  ej                  dZ^i e]e^Z_e`j                  e]j                               Zce`j                  e^j                               Zdd Zeej                  j                  j                  ej                  j                  z  Zj G d deA      Zk G d d eA      Zl G d! d"ek      Zm G d# d$ek      Zn G d% d&ek      Zo G d' d(eH      Zp G d) d*eA      Zq G d+ d,eA      Zry# eK$ r dZJY 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)Sequence)nullcontext)TYPE_CHECKING)compiled_autograd)is_sparse_any)guard_scalarGuardOnDataDependentSymNodehas_free_symbolsis_symbolicSymTypes)is_traceable_wrapper_subclass   )configgraph_break_hints	variables)trace_wrapped)unimplemented$UnknownPropertiesDuringBackwardTrace	UserErrorUserErrorType)call_hook_from_backward_state)GuardBuilderinstall_guard)
AttrSource)fqnget_custom_getattrget_fake_valueget_real_valueguard_if_dynobject_has_getattributeproductproxy_args_kwargsraise_args_mismatchset_example_valuetensortype_to_dtype   )AttributeMutationNewValueMutationNewVariableTracker)ConstantVariable)ListIteratorVariableSizeVariable)UserDefinedClassVariable)	PyCodegenInstructionTranslator)UserFunctionVariable)><z>=z<===!=isis not)r6   r7   r4   r5   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
isinstancer9   Tensorgetattr__name__values    d/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodrF   y   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
dmdZd Zd Zd ZdefdZedej$                  fd       Zdnd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"dnd,Z#dnd-Z$d. Z%d/ Z&dmdnd0Z'	 	 	 	 dod2Z(d3 Z)e*d4        Z+d5 Z,d6 Z-d7e.e   d8d9dd1fd:Z/d; Z0d< Z1dmd=Z2d> Z3e3Z4d? Z5e5Z6d@ Z7dA Z8dB Z9dmdCZ:dpdEZ;dF Z<dG Z=dH Z>dDdIdJZ?dK Z@dL ZAdM ZBdN ZCdO ZDeeEj                  dP               ZGdQ ZHdR ZIddSdTZJdU ZKdV ZLdW ZMdX ZNdY ZOdZ ZPdd[d\ZQddSd]ZRd^ ZSd_ ZTd` ZUda ZVdb ZWdceXddefdeZYdqdfZZdg Z[dh Z\dceXfdiZ]dj Z^dk Z_dl Z` xZaS )r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   rJ   nodetracerselfs    rE   r   zTensorVariable.get_real_value   s#     djjootzz/@/@AArG   N)_sizerP   rS   rX   returnc                @   t        |   di | || _        || _        || _        || _        || _        || _        || _        || _	        || _
        || _        || _        |	| _        |
| _        || _        |#| j                  j                   j"                  dk(  }|| _        y )Nplaceholder )super__init__rJ   rK   rL   rM   rN   r^   rP   rQ   rR   rS   rT   rU   rV   has_grad_fnrZ   oprX   )r]   rJ   rK   rL   rM   rN   rQ   rT   rR   rU   rV   re   r^   rP   rS   rX   kwargs	__class__s                    rE   rd   zTensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".rG   c                     ddl m}m} |t        |       }| j                  j
                  j                  j                  d      } |||| ||            }|j                         D ]  \  }}t        | ||        y )Nr&   )get_specialized_propsinfer_subclass_typeexample_value)
builderrj   rk   typerJ   rZ   metagetitemssetattr)	r]   tx
target_clsrj   rk   rl   specialized_propskvs	            rE   synchronize_attributesz%TensorVariable.synchronize_attributes   sv    GdJ

,,00A1M+>}+M
 &++- 	 DAqD!Q	 rG   c                 Z    t        | j                  j                  j                  d         S Nrl   )reprrJ   rZ   ro   r\   s    rE   
debug_reprzTensorVariable.debug_repr   s     DJJOO((9::rG   c                     | j                   S NrJ   r\   s    rE   as_proxyzTensorVariable.as_proxy       zzrG   c                     | j                   S r~   )rV   r\   s    rE   python_typezTensorVariable.python_type   s    rG   c                      yNTrb   r\   s    rE   	is_tensorzTensorVariable.is_tensor       rG   rD   c                      j                    j                   j                  t         j                         j
                   j                   j                   j                  t               d	}	  j                  d u|d<   t               r0t               s%t        d  j                         D              |d<   |S t               st        d  j                         D              |d<   t         j!                               |d<   t"        j$                  j&                  j)                         rd |d<   |S t         fd	t"        j*                  j,                  D              |d<   |S # t        $ r d|d<   Y w xY w)
N)	rK   rL   rM   rN   rQ   rT   rR   rU   rV   re   Fc              3   L   K   | ]  }t        |      rt        |      n|  y wr~   r   int.0ss     rE   	<genexpr>z,TensorVariable.specialize.<locals>.<genexpr>   s$      #45+a.Aa/#   "$r^   c              3   L   K   | ]  }t        |      rt        |      n|  y wr~   r   r   s     rE   r   z,TensorVariable.specialize.<locals>.<genexpr>
  s)      #  &a.Aa/#r   rP   rS   c              3   F   K   | ]  }j                  |       r|  yw)memory_formatN)rS   )r   xrD   s     rE   r   z,TensorVariable.specialize.<locals>.<genexpr>  s*      /***; /s   !)rK   rL   rM   r   rN   rQ   rT   rR   rU   rn   grad_fn	Exceptionr   r
   tuplerO   rP   r;   _C
_functorchis_batchedtensor_prims_common_memory_formats)rD   propss   ` rE   
specializezTensorVariable.specialize   sd    [[llll

O"00!..u+

	)#(==#<E-  (8(?" #9># E'N6 1 "%( # # 	# E'N $ELLN3E(Oxx""33E: *.o&  */ /"00@@/ *o&
 C  	) $)E- 	)s   1E( (E98E9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        |      rddlm}  || ||t=        |            S t?        |jA                  tB        jD                               t        j                  |||      S # t.        $ r}t"        |d }~ww xY w)Nrl   r&   wrap_fx_proxy)rs   rJ   rl   LGGetAttrVariable)sourcepy_type)#rJ   rZ   ro   r   r   __tensor_flatten__rA   r   r?   r;   r@   rm   r   r:   r)   buildsubguards_allowedNotImplementedErroroutputlocal_scopeglobal_scopeevalnamer   r    r   r   rF   miscr   rn   r   
make_guardr   HASATTR)r]   rs   r   fake_valattrs_ctxrJ   rl   r   scope_input_associated_real_valueexc
real_valueattr_sourcer   s                  rE   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@%+H( (/%%"#?@%%:;%%94@
 d3 "*--"d;Z8H  	k,,\-A-ABC$$R[AA7  	/%3.	/s     G1 1	H:HHc                     | j                   t        j                  | j                         S | j                  |dg i       S )Ndim)rN   r*   createcall_methodr]   rs   s     rE   method_attr_ndimzTensorVariable.method_attr_ndim`  s8    99 #**49955##Br266rG   c                 Z    | j                   t        j                  | j                         S y r~   )rK   r*   r   r   s     rE   method_attr_dtypez TensorVariable.method_attr_dtypef  s&    ::!#**4::66 "rG   c                 Z    | j                   t        j                  | j                         S y r~   )rL   r*   r   r   s     rE   method_attr_devicez!TensorVariable.method_attr_devicej  &    ;;"#**4;;77 #rG   c                 Z    | j                   t        j                  | j                         S y r~   )rM   r*   r   r   s     rE   method_attr_layoutz!TensorVariable.method_attr_layoutn  r   rG   c                 t    | j                   ,t        j                  | j                   j                  dk(        S y )Ncuda)rL   r*   r   rn   r   s     rE   method_attr_is_cudaz"TensorVariable.method_attr_is_cudar  s1    ;;"#**4;;+;+;v+EFF #rG   c                     | j                         rA| j                  D cg c]!  }t        j                  j	                  |      # }}t        |      S | j                  |dg i       S c c}w NrO   )
valid_sizerO   r   r*   r   r,   r   )r]   rs   r   sizess       rE   method_attr_shapez TensorVariable.method_attr_shapev  s\    ??CG99MaY//66q9MEM&&##BB77 Ns   &A&c                 Z    | j                   t        j                  | j                         S y r~   )rQ   r*   r   r   s     rE   method_attr_requires_gradz(TensorVariable.method_attr_requires_grad}  s*    )#**4+=+=>> *rG   c                 Z    | j                   t        j                  | j                         S y r~   )rR   r*   r   r   s     rE   method_attr_is_quantizedz'TensorVariable.method_attr_is_quantized  s*    (#**4+<+<== )rG   c                 Z    | j                   t        j                  | j                         S y r~   )rU   r*   r   r   s     rE   method_attr_is_sparsez$TensorVariable.method_attr_is_sparse  &    >>%#**4>>:: &rG   c                 Z    | j                   t        j                  | j                         S y r~   )rT   r*   r   r   s     rE   method_attr_is_nestedz$TensorVariable.method_attr_is_nested  r   rG   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     rE   method_attr_retain_gradz&TensorVariable.method_attr_retain_grad  s    ="4&5R		
rG   c                     t        j                  t        j                  j                  j
                        j                  || gi       S r~   )r   TorchInGraphFunctionVariabler;   r   	_autograd_get_data_attrcall_functionr   s     rE   method_attr_datazTensorVariable.method_attr_data  s8    55HH--

-TFB
'	(rG   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   )re   r   r   r*   r   s     rE   method_attr_grad_fnz"TensorVariable.method_attr_grad_fn  s;    /&tfH5^	 --d33rG   c                 \    ddl m} t        j                  |      j	                  || gi       S )Nr   )_tensor_version)tensor_version_opr   r   r   r   )r]   rs   r   s      rE   method_attr__versionz#TensorVariable.method_attr__version  s,    755oFTT
 	
rG   c                 t   ddl m} ddlm} |t        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   BuiltinVariableTF) r   builtinr   all_tensor_attrsr*   rA   r   r?   AttributeErrorr   r   r   r   r   r   )r]   rs   r   r   r   varret_vals          rE   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) )B76B7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 againrh   method_attr_)gradrQ   	overloadsr   z9Getting an inplace view on a graph input is not supported)r   msgr   c                  0   ddl m}  ddlm} t        j                  d       }|y t        |      t        j                  ury |j                  j                               }j                   | |t        j                              S  | |      S )Nr&   r   r   )rs   rJ   r   rs   rJ   )rm   r   r   r   r   rp   rn   typesGetSetDescriptorTypecreate_getattr_proxyr   r   r   )r   r   static_attrrJ   r   r]   rs   s       rE   try_generic_attr_handlingz=TensorVariable.var_getattr.<locals>.try_generic_attr_handling  s    21.224>& $E,F,FF'<<T]]_dS;;*(U:dkk43P  )Be<<rG   )is_strict_mode_strict_mode_banned_opsr   #_strict_mode_conditional_banned_opsr   r-   r   rA   r   r   is_python_constantr   r   r   
TYPE_MATCHr   r>   r;   opsatenr   Taginplace_viewtagsr   r   DelayGraphBreakVariabler   r   )r]   rs   r   handlerresultfnr  s   ```    rE   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>%%rG   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   r   r   r   r   ID_MATCHidr*   r   )r]   rs   r   r   r   id_values         rE   call_idzTensorVariable.call_id#  s    {{>"4&)T	 ii++"))2H2HI
	+/0@0@%+H( (/A"4&)\	 	dkk,,\-B-BCD23&&x00)  	="4&)1 	s    C 	C9C44C9c                      | j                   dkD  S )Nr   )rN   r   s     rE   has_unpack_var_sequencez&TensorVariable.has_unpack_var_sequenceF  s    yy1}rG   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   }n| j                  |dt        j                  d      gi       }t        |t              s|j                         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_clsrO   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.rt   rs   rJ   )rm   r#  r   lenrO   r   r?   r,   rq   r*   r   SymNodeVariabler  evaluate_exprr   as_python_constantrangern   r   )	r]   rs   idxesr#  size_lensize_varlength
dyn_lengthis	            rE   unpack_var_sequencez"TensorVariable.unpack_var_sequenceI  si   .??499~H''FB;Hh5558>>*H1}<<<}??YYq\F))"f7G7N7Nq7Q6RTVWJ :70023 *o6#11"))<#668=&MEu:' +F83I#e*U_`'
 
 d$--/RSBTU
 	
 
s   ,F r)   c                 .    |j                  || g|i       S r~   )r   )r]   rs   tree_map_fnmap_fnresttree_map_kwargss         rE   call_tree_mapzTensorVariable.call_tree_mapo  s     ##Br::rG   c                     | j                   d uS r~   r^   r\   s    rE   r   zTensorVariable.valid_sizey  s    zz%%rG   c                 @    | j                   J d       | j                   S )Nz%accessing None size in TensorVariabler8  r\   s    rE   rO   zTensorVariable.size|  s"    zz%N'NN%zzrG   c                 J    t         j                  j                  j                  S r~   )r;   r<   r   )_autograd_backward_strict_mode_banned_opsr\   s    rE   r
  z&TensorVariable._strict_mode_banned_ops  s    }}##MMMrG   c                 J    t         j                  j                  j                  S r~   )r;   r<   r   5_autograd_backward_strict_mode_conditional_banned_opsr\   s    rE   r  z2TensorVariable._strict_mode_conditional_banned_ops  s    MM  VV	
rG   argsrg   dict[str, VariableTracker]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   rh   __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   )rm   rA  rB  torch_functionrC  rD  r	  r
  r   r   rp   r   listr   r   r   rA   r;   r@   r?   r-   r   r*   r   SUPPORTABLE	TypeErrorr   r   r   create_proxyr"   )r]   rs   r   r>  rg   rA  rB  rC  rD  r  is_base_tensor_methodfunc_varhandler_methodr  er   s                   rE   r   zTensorVariable.call_method  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r]   r>  rg   s      rE   method_sizezTensorVariable.method_size  s    't''@@@@rG   c                 .     | j                   dg|i |S )NrP   rY  r[  s      rE   method_stridezTensorVariable.method_stride  s    't''B4B6BBrG   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 r~   )r,   r*   r   )r   optionsys      rE   make_const_size_variablezDTensorVariable._method_size_stride.<locals>.make_const_size_variable  s9    @AB1!((6g6BFM Bs   /rO   rl   c              3   2   K   | ]  }t        |        y wr~   r   r   rs     rE   r   z5TensorVariable._method_size_stride.<locals>.<genexpr>  s     ,DSV,D   )r   r*   r   rA   r   rO   rJ   rZ   ro   rp   r
   r   r   )r]   r   r   rc  RetVariablerg  fakefake_rs           rE   rZ  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rG   c                 J   | j                         r(t        j                  t        | j                              S | j
                  j                  j                  j                  d      x}:|j                         }t        |      st        j                  t        |            S y y rz   )r   r*   r   r!   rO   rJ   rZ   ro   rp   numelr
   r   )r]   rj  rk  s      rE   method_numelzTensorVariable.method_numel!  s    ??#**7499+=>> JJOO((,,_==DJZZ\F#F+'..s6{;; , KrG   c                 Z    | j                   t        j                  | j                         S y r~   )rN   r*   r   r\   s    rE   
method_dimzTensorVariable.method_dim-  s&    99 #**49955 !rG   c                 n    | j                   )t        j                  | j                   j                        S y r~   )rK   r*   r   is_floating_pointr\   s    rE   method_is_floating_pointz'TensorVariable.method_is_floating_point3  s,    ::!#**4::+G+GHH "rG   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   rl   )r   "fake_tensor_disable_inference_moder   r   FUNDAMENTALINFERENCE_MODErJ   rZ   ro   rp   r*   r   is_inference)r]   rj  s     rE   method_is_inferencez"TensorVariable.method_is_inference7  s    44JD&22&55	 JJOO((,,_==DJ#**4+<+<+>?? KrG   c                 n    | j                   )t        j                  | j                   j                        S y r~   )rK   r*   r   
is_complexr\   s    rE   method_is_complexz TensorVariable.method_is_complexE  s,    ::!#**4::+@+@AA "rG   c                 N   ||j                         nt        j                  }| j                  !t	        j
                  || j                  v       S | j                  j                  j                  j                  d      x}%t	        j
                  |j                  |            S y )Nrl   r   )
r(  r;   contiguous_formatrS   r*   r   rJ   rZ   ro   rp   )r]   r   rj  s      rE   method_is_contiguousz#TensorVariable.method_is_contiguousI  s     ( ,,.(( 	
 )#**=D<N<N+NOOjjoo**..??dL#**"""?  MrG   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r~   )rK   )r   rv   rw   r]   s      rE   r   z-TensorVariable.method_type.<locals>.<genexpr>\  s$      aTZZ1_s   !!cpuztorch..ztorch.tensortyper   r/   r&   r   non_blockingr   rn   )rK   r?   rL   r;   nextr%   rq   rn   r*   r   rB   r   r(  symbolic_convertr0   rm   r   
current_txr   rS  r"   )
r]   rK   r  rg   
tensortypetensor_typetensor_type_constr0   r   rs   s
   `         rE   method_typezTensorVariable.method_typeV  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 rG   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(rJ  Currently not supportedz:Avoid this call or move it outside `torch.compile` regioner   )r?   TensorSubclassVariabler   r  r0   rO  r  r  r(  from_tensor_varr   side_effects
_track_objobjectr'   r   r   rQ  )r]   clsr0   r  rs   py_clsr   s          rE   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"..		
rG   c                     t        | j                  t        j                        rF| j                  j                  dk7  r| j                  j                  nd}t        j                  |      S y )Nr  )r?   rL   r;   rn   indexr*   r   )r]   r  s     rE   method_get_devicez TensorVariable.method_get_device  sL    dkk5<<0)-)9)9U)BDKK%%E#**511 1rG   c                 T    t        j                  | j                  j                        S r~   )r*   r   rK   itemsizer\   s    rE   method_element_sizez"TensorVariable.method_element_size  s    &&tzz':':;;rG   )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=FalserE  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   r  view_as)r   trace_numpyr   nprM   r;   stridedrR  r  r0   r  r(  r   r   rS  r   r"   NumpyNdarrayVariabler   )r]   r  r0   rs   trJ   s         rE   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5rG   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                 2     |j                               S r~   )item)r/  	sub_proxyrs   r   s     rE   wrapz:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrap  s    $NN$ rG   z'Tensor.tolist() with non-integer tensorrE  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  )	rK   r;   int8int16int32int64r   r   	enumerate)
tensorr  r  r/  val
sub_tensorr]   tolistrs   r   s
         rE   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,rl   )
r  r0   rm   r   r  r   rZ   ro   r)   r   )r]   r0   r  outr  rs   r   s   `   @@@rE   method_tolistzTensorVariable.method_tolist  sc    <*-"--/!	F %%**?;VT]]_-$$R--rG   c           	      T    t        dd|  d| d| dg t        j                         y )Nz"Unsupported Tensor.backward() callrE  z
 backward r   z>Dynamo currently does not support tracing `Tensor.backward()`.r   )r   r   rv  r[  s      rE   method_backwardzTensorVariable.method_backward  s5    8"4&
4&&BX2%112		
rG   c                     t        |       S r~   )DataPtrVariabler[  s      rE   method_data_ptrzTensorVariable.method_data_ptr  s    t$$rG   c           	          ddl m}  |j                         }|j                  s;t        j
                  s*| j                          t        dd|  d| d| ddg	       y y y )
Nr   r/   z@Unsupported Tensor.item() call with capture_scalar_outputs=FalserE  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  r0   r  	one_graphr   capture_scalar_outputs_warn_capture_scalar_outputsr   )r]   r>  rg   r0   rs   s        rE   method_itemzTensorVariable.method_item  sj    <-"--/||F$A$A--/Z&tfF4&&B<I
 %B|rG   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   )r  r0   rm   r   r  r?   r&  r;   selectr   r*   r   operatorgetitemr   rS  r"   rP  )r]   r>  rg   r0   r   rs   r  rJ   s           rE   method___getitem__z!TensorVariable.method___getitem__  s    <*-"--/d1g/
 ..55a8G B !!B&		&&
 vT
2F;
 R''rG   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
                )r;   _guardsTracingContextextract_stackjoin	tracebackformat_listlogwarningtextwrapdedent)
user_stackuser_stack_formatteds     rE   r  z+TensorVariable._warn_capture_scalar_outputs2  sX     ]]11??A
!wwy'<'<Z'HIOO	 !	
rG   c                     ddl m}  |j                         }| j                  |dt	        j
                  d      gi       S )Nr   r/   rO   r   )r  r0   r  r   r*   r   r]   r0   rs   s      rE   method___len__zTensorVariable.method___len__G  s<    <-"--/F-=-D-DQ-G,H"MMrG   c                 x    ddl m}  |j                         }t        | j	                  |      t                     S )Nr   r/   mutation_type)r  r0   r  r+   r0  r(   r  s      rE   method___iter__zTensorVariable.method___iter__M  s7    <-"--/#$$R(8H8J
 	
rG   rC   c                    ddl m}  |j                         }|;ddlm} |j                  t        j                  ||j                        | |||gi       S y )Nr   r/   )	polyfills)	r  r0   r  r   r  inline_user_function_returnr)   r   addcmul_inplace)r]   tensor1tensor2rD   r0   rs   r  s          rE   method_addcmul_zTensorVariable.method_addcmul_U  s\    <-"--/$11%%b)*C*CDw/  rG   c                    ddl m}  |j                         } |j                  j                  dt
        j                  gt        | ||gi        }|j                         rt        j                  j                  j                         5  |j                  r:|j                  j                  r$|j                  j                  j                         n	t!               5  t#        |j$                  |d       d d d        d d d        |}t'        |t(        j*                  j,                        r)t(        j*                  j,                  j/                  |      }| j1                  |t3        |             t4        j6                  st4        j8                  r0|j                  j:                  j=                  |j$                  d       t?        j@                  d       S # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r/   r   F)allow_non_graph_faker   )!r  r0   r  r   rS  r  setitemr"   r   r;   r<   r=   +_disable_saved_tensors_hooks_during_tracing	fake_mode	shape_envignore_fresh_unbacked_symbolsr   r   rZ   r?   r   lazyLazyVariableTrackerrealize_allrx   rn   r   use_graph_deduplicationtrack_nodes_for_deduplicationregion_trackeradd_node_mutationr*   r   )r]   keyrD   r0   rs   rJ   vts          rE   method___setitem__z!TensorVariable.method___setitem__b  ss   <-"--/&		&&
 c5126
 ??" ##OOQK <<BLL$:$: &&DDF ]	K uzz2EJK K B"inn@@A^^77CCBG''DH5))V-Q-QII$$66uzz1E&&t,,#K K K Ks%   
AGG4GG	GG(c           	      4    t        dd|  d| d| dg        y )Nz!Unsupported Tensor.resize_() callrE  z	 resize_ r   z=Dynamo currently does not support tracing `Tensor.resize_()`.r   r   r[  s      rE   method_resize_zTensorVariable.method_resize_  s)    7"4&	$qAW		
rG   c           	      4    t        dd|  d| d| dg        y )Nz$Unsupported Tensor.resize_as_() callrE  z resize_as_ r   z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r   r   r[  s      rE   method_resize_as_z TensorVariable.method_resize_as_  s)    :"4&TF!F8DZ		
rG   c           	      4    t        dd|  d| d| dg        y )Nz(Unsupported Tensor.sparse_resize_() callrE  z sparse_resize_ r   zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r   r   r[  s      rE   method_sparse_resize_z$TensorVariable.method_sparse_resize_  s*    >"4&(8axH^		
rG   c           	      4    t        dd|  d| d| dg        y )Nz2Unsupported Tensor.sparse_resize_and_clear_() callrE  z sparse_resize_and_clear_ r   zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r   r   r[  s      rE   method_sparse_resize_and_clear_z.TensorVariable.method_sparse_resize_and_clear_  s*    H"4&(B4&&Rh		
rG   c           	      r    t        |      dkD  r)t        dd|  d| d| dg t        j                         y y )Nr&   zUnsupported Tensor.set_() callrE  z set_ r   zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r   )r%  r   r   rQ  r[  s      rE   method_set_zTensorVariable.method_set_  sJ    t9q= 8&tfF4&&BA6)556 rG   )alphac                    |bddl m}  |j                         }t        j                  t
        j                        j                  |||gi       }| j                  |d|gi       S y Nr   r/   add_)	r  r0   r  r   r   r;   mulr   r   )r]   otherr  r0   rs   r  s         rE   method_add_zTensorVariable.method_add_  sf    @1&113B;;EIIFTTUENBF ##B"== rG   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  )
r  r0   r  r   r   r;   divr   r  r   )r]   r  r  rD   r0   rs   r  s          rE   method_addcdiv_zTensorVariable.method_addcdiv_  s    <-"--/;;EIIFTTWg&F ;;EIIFTTVUORF ##B"== rG   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  )
r  r0   r  r   r   r;   eqr   anyr   )r]   argr0   rs   r  s        rE   method___contains__z"TensorVariable.method___contains__  s    <-"--/ 77AOOsR
 77		BPP"
 !!"fb"55rG   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 r~   )redistributer   args_as_valuekwargs_as_values    rE   redistribute_fn_with_prim_typeszKTensorVariable.method_redistribute.<locals>.redistribute_fn_with_prim_types  s    !1>>=DODDrG   prim_redistributer&   r   r   r  )r  r0   r  r(  rq   rB   rm   r   r   rS  r"   )r]   r>  rg   r0   rs   r   rv   rw   r  r   r  r  s             @@rE   method_redistributez"TensorVariable.method_redistribute  s    <-"--/ :>>A--/>AGPA1a2244P	E 4G'0*("))((/ #D62.
 	
 ?Ps   B.B3c           
      r   ddl m}  |j                         }|j                  dt	        j
                  d             }t        |t        j                        r+t        j                  t              j                  ||gi       }|j                  d      ||d<   |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/   grad_placementsc                 (     | j                   i S r~   )to_localr  s    rE   to_local_fn_with_prim_typeszCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_types  s    1::}@@@rG   prim_to_localr&   r   r   r  )r  r0   r  rp   r*   r   r?   r   UserDefinedObjectVariabler   r   r   r(  rq   rB   rm   r   r   rS  r"   )r]   r>  rg   r0   rs   grad_placements_vtr   rv   rw   r  r   r  r  s              @@rE   method_to_localzTensorVariable.method_to_local  s*   <-"--/ $ZZ/66t<
 ()*M*MN!*!:!:5!A!O!O'("" ::'(4(:F$%9=>A--/>AGPA1a2244P	A 0?#,*("))((+ #D62.
 	
 ?Ps   D.D3c                 .     | j                   dg|i |S )Nregister_hook_method_register_hookr[  s      rE   method_register_hookz#TensorVariable.method_register_hook(  s    )t))/KDKFKKrG   c                 .     | j                   dg|i |S )N"register_post_accumulate_grad_hookr$  r[  s      rE   )method_register_post_accumulate_grad_hookz8TensorVariable.method_register_post_accumulate_grad_hook+  s*    )t))0
37
;A
 	
rG   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)rA   	functoolspartialr   r   )r  r-  r#  r.  r   s      rE   _register_hook_trampolinezGTensorVariable._method_register_hook.<locals>._register_hook_trampolineQ  s6     ' 5%%%8!)"+	 rG   r&   r   Thas_backward_hookr   r  )r  r0   r  r   r   compiled_autograd_enabledr   r   add_backward_state_hookrm   r   r   rZ   ro   rS  r   RemovableHandleVariablebaser(   r  r#  )r]   r   r*  r0   rs   bw_state_proxyr1  r   
self_proxyhandle_variabler.  s    `        @rE   r%  z$TensorVariable._method_register_hook0  s    	=-"--/{{$>>  Z*4&$8 X	 )+		(I(I$(O%I~ /J8<JOO  !45 		&&#-0	  $;;#..99;
 			,,T4$OrG   c                     |dur|j                         }| j                         j                  j                  d   j                  |k7  rt        dd|  ddg        y | S )NTrl   z(Unsupported Tensor.requires_grad_() callrE  z requires_grad_zaDynamo does not support changes to a Tensor's `requires_grad` through calling `requires_grad_()`.r   )r(  r   rZ   ro   rQ   r   )r]   rQ   s     rE   method_requires_grad_z$TensorVariable.method_requires_grad_u  sd    $)<<>M==?$$_5CC}TB&tfO<F KrG   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   |   K   | ]4  }|j                         xr t        |j                         t               6 y wr~   )r  r?   r(  r   )r   as     rE   r   z,TensorVariable.method_new.<locals>.<genexpr>  s9       $$&R:a6J6J6Lc+RRs   :<r   r/   	new_empty)r%  r?   r,   allr  r0   r   r  )r]   r>  rg   r0   s       rE   
method_newzTensorVariable.method_new  st     INz$q'<@IN  
 A##0%002Kv  rG   c                     t        | | j                         j                  j                  d   j	                               S rz   )UntypedStorageVariabler   rZ   ro   untyped_storager\   s    rE   method_untyped_storagez%TensorVariable.method_untyped_storage  s4    %$--/&&++O<LLN
 	
rG   c                 v    | j                   s-| j                  j                  j                  |       d| _         y y r   )rX   rJ   rZ   _rename)r]   r   s     rE   set_name_hintzTensorVariable.set_name_hint  s.      JJOO##D) $D !rG   c                 T    | j                         j                  j                  d   d uS rz   r   rZ   ro   r\   s    rE   is_python_hashablez!TensorVariable.is_python_hashable  s&     }}##((9EErG   c                 b    t        | j                         j                  j                  d         S rz   )hashr   rZ   ro   r\   s    rE   get_python_hashzTensorVariable.get_python_hash  s$    DMMO((--o>??rG   c                     | j                         j                  j                  d   }|j                         j                  j                  d   }||u S rz   rJ  )r]   r  r>  bs       rE   is_python_equalzTensorVariable.is_python_equal  sD    MMO  %%o6NN!!&&7AvrG   r~   rs   r0   )r2  r1   r_   r)   )NFT)brB   
__module____qualname____doc__r)   _nonvar_fieldsr   r;   fxProxyrd   rx   r|   r   r   boolr   staticmethodr@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r0  r6  r   propertyrO   r
  r  r   r   r\  r^  rZ  rn  method_nelementrp  method_ndimensionrs  ry  r|  r  r  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&  r)  strr%  r;  rA  rE  rH  rK  rN  rQ  __classcell__rh   s   @rE   rI   rI      s   G 	  
	'	'!N&B. #&/xx~~&/& 
'&/P ;4  /%,, / /bABF7788G8?>;;
(
	4
)8Yv!1F$
L; ,; 
;&  N

g
 '	g

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

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

%# %
F@rG   rI   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efd	Zd
 Zd ZddZ	 	 	 	 	 	 ddZd Zd Z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.
    rJ   sym_numc                 ,    t        | j                        S r~   )r{   rd  r\   s    rE   r|   zSymNodeVariable.debug_repr  s    DLL!!rG   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 |}|j                  j                  dk7  r%|j                  j                  j                  |       |S )Nrl   ra   )r   rZ   ro   r$   r?   sympyIntegerr   rZ  r*   r   r&  rf   r   current_tracerrecord_tensor_or_symint_vt)r  rs   rJ   rd  ra  r  s         rE   r   zSymNodeVariable.create  s    ?$UZZ4Gejjoo-::???3w>>>%**g.gsD9:&0%--&Hc'lgG#**733eW88::==M)II$$??D
rG   r_   c                 N    t        |   di | || _        || _        d | _        y Nrb   )rc   rd   rJ   rd  _tensor_var)r]   rJ   rd  rg   rh   s       rE   rd   zSymNodeVariable.__init__  s)    "6"
rG   c                     t        | j                  t              r | j                  j                  j                  S t        | j                        S r~   )r?   rd  r   rZ   pytypern   r\   s    rE   r   zSymNodeVariable.python_type  s5    dllH-<<$$+++%%rG   c                      yr   rb   r\   s    rE   is_symnode_likezSymNodeVariable.is_symnode_like  r   rG   c                     | j                   S r~   r   r\   s    rE   r   zSymNodeVariable.as_proxy  r   rG   c           	          | j                   Qt        j                  |t        j                        j                  || gdt        j                  ||      i      | _         | j                   S )NrK   )rm  r)   r   r;   scalar_tensorr   )r]   rs   rK   s      rE   	as_tensorzSymNodeVariable.as_tensor  s_    #.44E'' mB/2G2GE2R(ST  rG   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   rd  r	   r;   rX  experimental_configno_data_dependent_graph_breakr   r   ANTI_PATTERNr`  )r]   output_graphrW  s      rE   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   )rm   r   r   rS  r"   )r]   rs   r   r>  rg   r   s         rE   r   zSymNodeVariable.call_method  sH     	+"BII"" #D=4=&9
 	
rG   c                      yr   rb   r\   s    rE   rK  z"SymNodeVariable.is_python_hashable  r   rG   c                 4    t        | j                               S r~   )rM  r'  r\   s    rE   rN  zSymNodeVariable.get_python_hash
  s     D&&())rG   c                     t        |t              r!| j                         |j                         k(  S | j                         |j                         k(  S r~   )r?   r&  r'  r(  )r]   r  s     rE   rQ  zSymNodeVariable.is_python_equal  sF    e_-%%'5+>+>+@@@!!#u'?'?'AAArG   r~   )r_   Nr>  zlist[VariableTracker]rg   r?  r_   r)   )rB   rT  rU  rV  r)   rW  r|   classmethodr   rd   r   rZ  rq  r   ru  r'  r   rK  rN  rQ  ra  rb  s   @rE   r&  r&    s     	 
	'	'N"    &  
 &	

 -
 

$*
BrG   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$  rb   )rm   r#  r  )rs   rJ   ra  r#  s       rE   r   zNumpyNdarrayVariable.create  s*    .  
+
 	
 	
rG   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k(  rt'        dd  d d dg        |t(        |S )Nr   )numpy_attr_wrapperr&   r   rl   c            	      n     j                   j                  dj                          fi             S )Nr   )r   rS  r   )r   r  r]   rs   r   s   rE   insert_into_graphz;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph4  s;     		&&#%7$--/49PRT rG   )Trealimagr   )rN   r  )shaperP   c              3   2   K   | ]  }t        |        y wr~   re  rf  s     rE   r   z3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>V  s     4GSV4Grh  rO   )r6  flagsrK   z$Unsupported ndarray attribute accessr   r   z3Dynamo currently does not support tracing `ndarray.rN  r   __version__z&Unsupported ndarray.__version__ access)r=   r  rm   r   r   rZ   ro   tnpndarrayr   rS  r  r   r*   rA   r
   r   rO   r   r   r   )r]   rs   r   r  rl   example_ndarrayr  rJ   rg  r  r   s   ```      @@rE   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	 >%%rG   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)rq   rp   )r   r>  rg   kwargs_renamerv   rw   s         rE   
patch_argszNumpyNdarrayVariable.patch_argsn  sR    6>&+e<M=C\\^LTQm''1-q0LFLV| Ms   Ac                 p   ddl m} ddlm} | j	                  |||      \  }}|dk(  rddlm} d }d|v r|d   }nt        |      dkD  r|d   }|d uxr |j                  d	      }	t        ||      xr |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   |       }t(        j+                  ||      S )Nr   r   )numpy_method_wrapperastyper&   r   rK   r   Ozndarray.astype(object)rE  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__rO   r  __iter__)tostringtobytes__delattr__zUnsupported ndarray method callz	`ndarray.z&()` is not modelled in `torch._numpy`.r   )r   r   r=   r  r  r   r   r%  is_constant_matchr?   r  r  r   rv  rc   r   r   rS  r"   rP  r  r   )r]   rs   r   r>  rg   r   r  r   	dtype_argis_object_stris_object_typerJ   rh   s               rE   r   z NumpyNdarrayVariable.call_methodu  s    	(0tT6:f80I& "7O	TQ G	%T1Vi6Q6QRU6VM9o6Q9<<6;Q  4*4&$qaxH9 ;-99:	 <<7&r4v>>999&tfAdV1TF!F8D'v-ST	 '		&& &
 vT
2F;

 $**2u55rG   c                 "    t         j                  S r~   )r  r  r\   s    rE   r   z NumpyNdarrayVariable.python_type  s    zzrG   rR  r  )rB   rT  rU  rV  r[  r   r  r  r   r   ra  rb  s   @rE   r  r    s`    
 
 
EN  26 &	26
 -26 
26hrG   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r  r  rJ   r_   c                B    t        |   |fi | || _        || _        y r~   )rc   rd   r  r  )r]   rJ   r  r  rg   rh   s        rE   rd   z$UnspecializedPythonVariable.__init__  s&     	)&)"&rG   c                 H    t        di t        |j                        ||dS )Nr  rb   )r  dict__dict__)r  tensor_variabler  r  s       rE   from_tensor_variablez0UnspecializedPythonVariable.from_tensor_variable  s/     + 
?++,
#
 	
rG   rS  rB   rT  rU  rV  rI   rW  r;   rX  rY  rd   r  r  ra  rb  s   @rE   r  r    s_    
 	 
	&	&N 37D'XX^^'	' 
 
rG   r  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.r  rJ   r_   Nc                 X    |j                  dd      }t        |   |fi | || _        y )Nr  F)poprc   rd   r  )r]   rJ   rg   r  rh   s       rE   rd   zFakeItemVariable.__init__  s-    jj6)&)&rG   c                 >    t        di t        |j                        S rl  )r  r  r  )r  r  s     rE   r  z%FakeItemVariable.from_tensor_variable  s    A$'?'?"@AArG   r  rb  s   @rE   r  r    sS    9 			&	&N
'ehhnn '4 '
 B BrG   r  c                   :    e Zd Zdddee   deeef   defdZd Zy)	r  rs   r0   r>  rg   r_   c           	      
   ddl m} | j                  j                  }|t        j
                  j                  u rt        |      dk(  rO|d   j                         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&   r  r   zCCalling subclass default constructor with more than tensor argumentrH  rI  rJ  r  zFAvoid this constructor call or move it outside `torch.compile` regioner   r  )rO  r  rD   __new__r;   r@   r%  r   r  r   r   r   rQ  r)   r   r   rd   r   r  r  r  r'   )	r]   rs   r>  rg   r  new_funcdatar   	init_funcs	            rE   r   z$TensorSubclassVariable.call_function  s`    	A::%%u||+++4yA~$q'"3"3"5#f+:J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 	* 	
 
rG   c                     | j                   S r~   rC   r\   s    rE   r(  z)TensorSubclassVariable.as_python_constant  r   rG   N)	rB   rT  rU  rP  r)   r  r`  r   r(  rb   rG   rE   r  r    sB    .#. ?#. S/)*	.
 
.`rG   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 )rC  rl   from_tensorr_   Nc                 @    t        |   di | || _        || _        y rl  )rc   rd   r  rl   )r]   r  rl   rg   rh   s       rE   rd   zUntypedStorageVariable.__init__  s%     	"6"&*rG   r>  rg   c           
         |dk(  r|s|r&t        ||dt        |       dt        |       d       | 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(  rt        |      dk(  r|rt        ||dt        |       d       |j                  j                  d	t         j"                  j$                  j&                  | j                  j                         |d   j                         fi        | S t(        | U  ||||      S )NrO   z0 args and 0 kwargsz
 args and z kwargsr   )untyped_storage_sizer&   r   r   resize_z0 kwargsr   )r#   r%  rl   rO   r
   r*   r   r   external_utilsr  rm   r   r   rS  r  r   r;   r  inductorresize_storage_bytes_rc   r   )	r]   rs   r   r>  rg   r  r  r   rh   s	           rE   r   z"UntypedStorageVariable.call_method"  sO    6>v#)4ykCK=@	 '',,.F#F+'..s6{;;A2$II**',))2246	  9Ta#BjS[M:QRII""		""88!!**,d1g.>.>.@A	 Kw"2tT6::rG   c                 l     || j                          |j                  d       |j                  d       y )NrD  r   r  load_methodr   r]   codegens     rE   reconstructz"UntypedStorageVariable.reconstructO  s-      !-.ArG   r  r.   )rB   rT  rU  r)   rW  rI   r;   UntypedStoragerd   rP  r  r`  r   r  ra  rb  s   @rE   rC  rC    sz    		'	'N
	+#	+ ++	+
 
	++; ?#	+;
 S/)*+; 
+;ZrG   rC  c                   0     e Zd Zdeddf fdZddZ xZS )r  r  r_   Nc                 2    t        |   di | || _        y rl  )rc   rd   r  )r]   r  rg   rh   s      rE   rd   zDataPtrVariable.__init__V  s    
 	"6"&rG   c                 l     || j                          |j                  d       |j                  d       y )Ndata_ptrr   r  r  s     rE   r  zDataPtrVariable.reconstruct^  s,      !J'ArG   r  )rB   rT  rU  rI   rd   r  ra  rb  s   @rE   r  r  U  s    '#' 
	'rG   r  )srV  r/  loggingr  r  r  r  collections.abcr   
contextlibr   typingr   rg  torch._numpy_numpyr  torch.fxr;   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   r=   r   r   r   r   r   r    r!   r"   r#   r$   r%   r6  r'   r(   r)   constantr*   listsr+   r,   user_definedr-   numpyr  ModuleNotFoundErrortorch._dynamo.codegenr.   torch._dynamo.symbolic_convertr0   	functionsr1   	getLoggerrB   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_valuesrF   r   
TensorBaser  r@   r   rI   r&  r  r  r  r  rC  r  rb   rG   rE   <module>r     s&  "       $ "       + 6  G 3 3 :  ; 0     J I & 5 2
 /D/ g! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
 88&&//%,,2G2GG `_ `F)fBo fBRT> Tn
. 
8B~ B&25 2jA_ AHo O8  	Bs   I II