
    ^jV             	          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m	Z	 ddl
mZ ddlmZ ddlmZ ddlmZmZmZmZ ddlZddlmZ ddlZddlZddlmZmZ dd	lmZ dd
lm 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/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ddlOmPZPmQZQmRZR ddlSmTZT ddlUmVZVmWZW ddlXmYZY ddlZm[Z[ 	 ddl\Z]erddl_m`Z` ddlambZb ddlcmdZd dd lemfZf dd!lgmhZh  ej                  ej      Zkej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  d"Ztej                  ej                  ej                  ej                  d#Zui eteuZvewj                  etj                               Zzewj                  euj                               Z{d$e|d%e}fd&Z~ej                  j                   j                  ej                  j                  z  Zd'eRd%e}fd(Zd;d$ej                  d)ed%efd*Z G d+ d,eR      Z G d- d.eR      Z G d/ d0e      Z G d1 d2e      Z G d3 d4e      Z G d5 d6e[      Z G d7 d8eR      Z G d9 d:eR      Zy# e^$ r dZ]Y 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)IterableSequence)nullcontext)chain)NoneType)AnyNoReturnOptionalTYPE_CHECKING)	sym_floatsym_int)compiled_autograd)is_opaque_reference_type)
OpaqueBase)is_sparse_any)guard_scalarGuardOnDataDependentSymNodehas_free_symbolsis_symbolicSymTypes)is_traceable_wrapper_subclass   )configgraph_break_hints	variables)trace_wrapped)ObservedAttributeErrorraise_observed_exceptionTorchRuntimeErrorunimplemented$UnknownPropertiesDuringBackwardTrace	UserErrorUserErrorType)call_hook_from_backward_state)GuardBuilderinstall_guard)
AttrSource)cmp_name_to_op_mapping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)TorchScriptObjectVariable)UserDefinedClassVariable)	PyCodegen)OutputGraph)InstructionTranslatorBase)UserFunctionVariableTensorWithTFOverrideVariable)><z>=z<===!=isis not)rH   rI   rF   rG   valuereturnc                 0   t        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__)boolcallabletorch_dynamoutilsr.   hasattr
isinstancerM   Tensorgetattr__name__rJ   s    i/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/tensor.pyis_bound_tensor_methodrZ      sy     	:##;;EBB	:E:&	: u~~u||4	: ENNENND9     vtc                     | j                         ryt        | t              xr% t        | j                  t        t
        t        f      S )u   True if vt can be the other operand of a SymNode arithmetic op
    (add/sub). Accepts SymNode-like values plus float ConstantVariable —
    arithmetic with float promotes to SymFloat, unlike bitwise ops.T)is_symnode_likerT   r9   rJ   floatintrN   )r\   s    rY   _is_sym_arith_operandra      s;     
 b*+X
288eSRVEW0XXr[   	type_namec                    t         j                  j                  j                  |       rt         j                  j                  j	                  |       }t         j                  j                  j                  |       }t         j                  j                  j                  |       }d| d| dt        |       dS t         j                  j                  j                  |       rdt         j                  j                  j	                  |       }t         j                  j                  j                  |       }d| dt        |       dS t         j                  j                  j                  |       rdt         j                  j                  j	                  |       }t         j                  j                  j                  |       }d| dt        |       dS | dt        | j                         d| j                   dS )	NzBatchedTensor(lvl=z, bdim=z, value=)zGradTrackingTensor(lvl=zFunctionalTensor(lvl=z(shape=z, dtype=)rP   _C
_functorchis_batchedtensormaybe_get_levelmaybe_get_bdimget_unwrapped_tensor_debug_repris_gradtrackingtensoris_functionaltensortupleshapedtype)rJ   rb   levelbdim	unwrappeds        rY   rk   rk      s   xx++E2##33E:xx""11%8HH''55e<	'h/A)/L.M	

 xx007##33E:HH''55e<	(x8J98U7VVWXXxx..u5##33E:HH''55e<	&ugX6H6S5TTUVV[ekk 238EKK=JJr[   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efdZdej                  fdZ
ddddddej                  j                  dej                  dej                  dej                  ded	eded
ededededeedf   dz  deedf   dz  dedz  dedz  deddf" fdZ	 ddddedz  ddfdZdedz  fdZddd edz  d!eddfd"Zdefd#Zdddefd$Zdej                  j                  fd%Zdefd&Zdefd'Zdddefd(Zddd)ed*edefd+Ze d,ej                  de!eef   fd-       Z"ddd.edefd/Z#dddefd0Z$dddedz  fd1Z%dddedz  fd2Z&dddedz  fd3Z'ddde(dz  fd4Z)dddefd5Z*ddde(dz  fd6Z+ddde(dz  fd7Z,ddde(dz  fd8Z-ddde(dz  fd9Z.ddde/fd:Z0dddedz  fd;Z1dddefd<Z2ddde(dz  fd=Z3dddefd>Z4ddd.ede(fd?Z5ddd.edefd@Z6	 ddddAe7e   dz  de8e   fdBZ9dddCdDdEedFe8e   dGe!eef   defdHZ:defdIZ;e<deedf   fdJ       Z=de8e   fdKZ>de8e   fdLZ?dddMedefdNZ@ddd.edOe8e   ddPdef
dQZAdddOedededz  fdRZBdddOedededz  fdSZC	 dd.edTedz  dedz  fdUZDdddedz  fdVZEeEZFdddedz  fdWZGeGZHddde(dz  fdXZIddde(dz  fdYZJddde(dz  fdZZK	 dddd[edz  de(dz  fd\ZL	 	 ddddedz  d^edededz  f
d_ZMddd`eddafdbZNdddedz  fdcZOdddefddZPd]dedddfeez  ddgfdhZQdddefdiZR	 ddjeSe   dkede8e   dz  fdlZT	 	 	 	 ddddmedz  dnedz  doedz  dpedz  dedz  fdqZUdddOededdrfdsZVdddOededdrfdtZWddduedefdvZXdddOededdfdwZYdddefdxZZdddefdyZ[dddefdzZ\dddefd{Z]dddefd|Z^dddefd}Z_dddefd~Z`dddefdZadddefdZbdddefdZcdddefdZddddOededefdZee efj                  dd              ZhdddefdZidddefdZjdddefdZkdddefdZldddddeded,edz  dedz  f
dZmdddMed,edefdZndddOedede/fdZodddOedede/fdZpdddOedede/fdZqdddOedede/fdZrdddOededdfdZsddddd)ededz  dedz  fdZtdddddd dd d,edz  dedz  f
dZudddedefdZvdddedefdZwdddOededefdZxdddOededefdZyddd.ededefdZz	 dddd	eez  defdZ{ddZ|de/fdZ}dddOedededz  fdZ~dd dddOedededz  f
dZ	 	 	 	 ddZd.eddfdZ	 dddd)ededefdZ	 dddd)ededefdZ	 dddd)ededefdZ	 dddd)ededefdZ	 dddd)ededefdZ	 dddd)ededefdZ	 dddd)ededefdZ	 dddd)ededefdZ	 dddd)ededefdZ	 dddd)ededefdZdddeeef   fdZ	 dddd)ededefdZd)edefdZ xZS )TensorVariablez=A torch.Tensor input or an intermediate value in the FX graphproxyrp   devicelayoutndimsizestriderequires_gradis_quantizedis_contiguous	is_nested	is_sparse
class_typespecialized_value_is_name_setrK   c                    t        | j                        |j                  v r0d|j                  t        | j                           j                   dS | j                  r| j                  j                  |      S t        d|  d      )Nz__graph_out[]zPython codegen for z failed with unknown source.)idrv   graph_outputsindexsourcereconstruct_pycodeRuntimeErrorselfcodegens     rY   r   z!TensorVariable.reconstruct_pycode   ss    djj>W222!'"7"74::"G"M"M!NaPP[[;;11'::!4TF:VWXXr[   c                 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,   rv   nodetracerr   s    rY   r,   zTensorVariable.get_real_value   s#     djjootzz/@/@AAr[   N)_sizer{   r~   r   has_grad_fnr   .kwargsc                @   t        |   di | || _        || _        || _        || _        || _        || _        || _        || _	        || _
        || _        || _        |	| _        |
| _        || _        |#| j                  j                   j"                  dk(  }|| _        y )Nplaceholder )super__init__rv   rp   rw   rx   ry   r   r{   r|   r}   r~   r   r   r   r   r   opr   )r   rv   rp   rw   rx   ry   r|   r   r}   r   r   r   r   r{   r~   r   r   	__class__s                    rY   r   zTensorVariable.__init__   s    ( 	"6"

	
*(*""$&::??-->L".r[   txr@   
target_clsc                     ddl m}m} |t        |       }| j                  j
                  j                  j                  d      } |||| ||            }|j                         D ]  \  }}t        | ||        y )Nr4   )get_specialized_propsinfer_subclass_typeexample_value)
builderr   r   typerv   r   metagetitemssetattr)	r   r   r   r   r   r   specialized_propskvs	            rY   synchronize_attributesz%TensorVariable.synchronize_attributes  sy     	HdJ

,,00A1M+>}+M
 &++- 	 DAqD!Q	 r[   c                     | j                   j                  j                  j                  d      }||j                  S dS )zFGet the current version of self's fake tensor, or None if unavailable.r   N)rv   r   r   r   _version)r   	self_fakes     rY   _get_fake_versionz TensorVariable._get_fake_version  s6    JJOO((,,_=	%.%:y!!DDr[   version_beforehas_tensor_argc                     | j                         }|8|5||kD  r/|r| j                  |       |j                  j                  |       yyyy)z
        Sync attributes if self was mutated by an inplace operation.

        See Note [Inplace ops and VariableTracker metadata]
        N)r   r   output&check_input_mutation_on_current_stream)r   r   r   r   version_afters        rY   _sync_if_inplace_mutationz(TensorVariable._sync_if_inplace_mutation  sX     ..0&).++B/II<<R@	 / * 'r[   c                 x    t        | j                  j                  j                  d   | j	                               S Nr   )rk   rv   r   r   python_type_namer   s    rY   
debug_reprzTensorVariable.debug_repr,  s0    !JJOO  143H3H3J
 	
r[   c                 d    t        dd| j                          dg t        j                         y )Nzrepr() on tensorz
repr() on zRTensor repr requires actual runtime values which are not available during tracing.gb_typecontextexplanationhints)r    r   r   SUPPORTABLEr   r   s     rY   	repr_implzTensorVariable.repr_impl1  s5    & !6!6!8 9:,2%112	
r[   c                     | j                   S Nrv   r   s    rY   as_proxyzTensorVariable.as_proxy:      zzr[   c                     | j                   S r   )r   r   s    rY   python_typezTensorVariable.python_type=  s    r[   c                      yNTr   r   s    rY   	is_tensorzTensorVariable.is_tensor@      r[   c                 Z   ddl m} | j                  |dg i       }t        |t              r&t        |j
                  t        j                        r|S t        ||      r)t        j                  |t        |j                              S t        j                  ||j                         dk7        S )Nr4   r8   itemr   )constantr9   call_methodrT   SymNodeVariablesym_numrP   SymBoolr7   buildrN   rJ   creater   )r   r   r9   r   s       rY   	bool_implzTensorVariable.bool_implC  s    .FB3dO,LL%--2
 Kd,-"((T$**-=>>%%b$--/Q*>??r[   otherr   c                 &   ddl m} t        |t        t        t
        f      st	        j                  t              S t        |   }|j                  j                  d|| j                         |j                         fi       } |t        |       ||      S )zETensor tp_richcompare: element-wise comparison producing an FX proxy.r4   wrap_fx_proxy_clscall_function)r   r   rT   r   r9   ru   r   NotImplementedr(   r   create_proxyr   r   )r   r   r   r   r   op_fnrv   s          rY   richcompare_implzTensorVariable.richcompare_implP  sx     	/%/3C^!TU#**>::&r*		&&UT]]_enn6F$G
 !dR77r[   rJ   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)	rp   rw   rx   ry   r|   r   r}   r   r   r   Fc              3   L   K   | ]  }t        |      rt        |      n|  y wr   r   r`   .0ss     rY   	<genexpr>z,TensorVariable.specialize.<locals>.<genexpr>v  s$      #45+a.Aa/#   "$r   c              3   L   K   | ]  }t        |      rt        |      n|  y wr   r   r   s     rY   r   z,TensorVariable.specialize.<locals>.<genexpr>  s)      #  &a.Aa/#r   r{   r~   c              3   F   K   | ]  }j                  |       r|  yw)memory_formatN)r~   )r   xrJ   s     rY   r   z,TensorVariable.specialize.<locals>.<genexpr>  s*      /***; /s   !)rp   rw   rx   r`   ry   r|   r   r}   r   r   grad_fn	Exceptionr   r   rn   rz   r{   rP   re   rf   rg   _prims_common_memory_formats)rJ   propss   ` rY   
specializezTensorVariable.specializea  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namec           
      d   | j                   j                  j                  d   }| j                  sbt	        |      rV|j                         \  }}t        | j                         |      }t        ||      }||v rHt        |t        j                  t        f      st        dt        |             ddlm}  ||||      S t!        t        |            rVt        j"                  j$                  j'                  |j(                  j*                  |      }	t-        j.                  ||	|      S t        |t        j"                  j$                  j0                        rt-        j.                  |||      S t3        |      st5        j6                  ||      S | j                  r| j                  j9                         st:        |j(                  j<                  |j(                  j>                  d}
	 tA        | j                  jB                  |
      }|t:        tG        |      rt:        tI        |      rt:        	 t        ||      }tQ        | j                  |      }tS              rddl*m+}  || ||t        |            S tY        | j                  j[                  t]        j^                  t`        jb                  |                   t5        j6                  |||      S # tD        $ r}t:        |d }~ww xY w# tJ        $ r0 tM        tJ        |dt        |      jN                   d	| dg
       Y w xY w)Nr   z#Expected Tensor or OpaqueBase, got r4   wrap_fx_proxy)r   rv   r   )r   )LG'z' object has no attribute 'argsGetAttrVariable)r   py_typeattr)2rv   r   r   r   r   __tensor_flatten__rV   r   rT   rP   rU   r   AssertionErrorr   r   r   r   _libraryfake_class_registrymaybe_to_fake_objr   	fake_moder<   r   FakeScriptObjectrO   r7   r   subguards_allowedNotImplementedErrorlocal_scopeglobal_scopeevalr   r   r.   r*   AttributeErrorr   rW   r'   rZ   miscr   r&   
make_guard	functoolspartialr%   HASATTR)r   r   r   fake_valattrs_ctxrv   r   r   fake_script_objscope_input_associated_real_valueexc
real_valueattr_sourcer   s                   rY   dynamic_getattrzTensorVariable.dynamic_getattr  s    ::??''8 {{<XF"557KE4DMMOT2E#Hd3Mu}!-%,,
1KL(=d=>Q=RS  3$%}UU)$}*=>"'.."D"D"V"VII''# 177SUVV22CC 177}QSTT m,&,,R?? = = ?%% ii++"))2H2HI	/ ,00@0@%+H( (/%%"#?@%%:;%%		 !=tDJ !d3 "*--"d;Z8H  	KK""9#4#4\5I5IPT#UV	
 $$R[AAM  	/%3.	/  	$9:CCDD_`d_eefg	s*   - K 8K6 	K3'K..K366L/.L/c                     | j                    t        j                  || j                         S | j                  |dg i       S )Ndim)ry   r7   r   r   r   s     rY   method_attr_ndimzTensorVariable.method_attr_ndim  s:    99 "((TYY77##Br266r[   c                 \    | j                    t        j                  || j                         S y r   )rp   r7   r   r   s     rY   method_attr_dtypez TensorVariable.method_attr_dtype  s(     ::!"((TZZ88r[   c                 \    | j                    t        j                  || j                         S y r   )rw   r7   r   r   s     rY   method_attr_devicez!TensorVariable.method_attr_device  (     ;;""((T[[99r[   c                 \    | j                    t        j                  || j                         S y r   )rx   r7   r   r   s     rY   method_attr_layoutz!TensorVariable.method_attr_layout  r'  r[   c                 v    | j                   -t        j                  || j                   j                  dk(        S y )Ncuda)rw   r7   r   r   r   s     rY   method_attr_is_cudaz"TensorVariable.method_attr_is_cuda  s3     ;;""((T[[-=-=-GHHr[   c                     | j                         r8| j                  D cg c]  }t        j                  ||       }}t	        |      S | j                  |dg i       S c c}w Nrz   )
valid_sizerz   r7   r   r;   r   )r   r   r   sizess       rY   method_attr_shapez TensorVariable.method_attr_shape  s`    ??6:ii,12%%b!,,E ,  &&##BB77,s   Ac                 \    | j                    t        j                  || j                         S y r   )r|   r7   r   r   s     rY   method_attr_requires_gradz(TensorVariable.method_attr_requires_grad  s,     )"((T-?-?@@r[   c                 \    | j                    t        j                  || j                         S y r   )r}   r7   r   r   s     rY   method_attr_is_quantizedz'TensorVariable.method_attr_is_quantized"  s,     ("((T->->??r[   c                 \    | j                    t        j                  || j                         S y r   )r   r7   r   r   s     rY   method_attr_is_sparsez$TensorVariable.method_attr_is_sparse)  (     >>%"((T^^<<r[   c                 \    | j                    t        j                  || j                         S y r   )r   r7   r   r   s     rY   method_attr_is_nestedz$TensorVariable.method_attr_is_nested0  r8  r[   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.r   r    r   s     rY   method_attr_retain_gradz&TensorVariable.method_attr_retain_grad7  s    ="4&5R		
r[   c                    |j                   j                  j                  | d      r&|j                   j                  j                  | d      S t	        | j
                  t              r!| j                  st        j                  d       S y )Ngrad)
r   side_effectshas_pending_mutation_of_attr	load_attrrT   mutation_typer5   r   r9   r   r   s     rY   method_attr_gradzTensorVariable.method_attr_grad?  si     99!!>>tVL99))33D&AAt))+?@$$#**400r[   c                     t        j                  t        j                  j                  j
                        j                  || gi       S r   )r   TorchInGraphFunctionVariablerP   re   	_autograd_get_data_attrr   r   s     rY   method_attr_datazTensorVariable.method_attr_dataL  s8    55HH--

-TFB
'	(r[   c                     | j                   rt        dd|  ddg        y t        j                  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   r9   r   r   s     rY   method_attr_grad_fnz"TensorVariable.method_attr_grad_fnQ  sC     /&tfH5^	 --44T::r[   c                 \    ddl m} t        j                  |      j	                  || gi       S )Nr   )_tensor_version)tensor_version_oprN  r   rG  r   )r   r   rN  s      rY   method_attr__versionz#TensorVariable.method_attr__version^  s,    755oFTT
 	
r[   c                    ddl m} |t        v rt        j                  d      S 	 t        j                  |t              j                  || t        j                  ||      gi       }t        ||       }| j                  rGt        | j                  j                  t        j                   t"        j$                  |                   t        j                  ||      S # t        t        f$ r d}Y |w xY w)Nr4   r   TFr  ) r   all_tensor_attrsr9   r   r7   r   rV   r   rT   r  r   r   r&   r  r  r  r%   r  )r   r   r   r   varret_vals         rY   call_obj_hasattrzTensorVariable.call_obj_hasattre  s     	& ###**400	!''G4BBT?00T:;RC
 %S/::G ;;&&%%l&:&:F $$R11  67 	G	s   AC C0/C0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                   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         j0                  v r5t2        j4                  j7                  t!         j                        d      S |dk7  rdt
        d z  f fd} |       }| j9                        }|t:        |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 againr   method_attr_)r@  r|   	overloadsr   z9Getting an inplace view on a graph input is not supported)r   msgr@  rK   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 )Nr4   r   r   )r   rv   r   r   rv   )r   r   r  r   rS  r   r   typesGetSetDescriptorTypecreate_getattr_proxyr   r   r'   )r   r   static_attrrv   r   r   r   s       rY   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<<r[   )is_strict_mode_strict_mode_banned_opsr    #_strict_mode_conditional_banned_opsr!   r7   r   r   rV   r   r  is_python_constantr&   r  r%   
TYPE_MATCHr'   rS   rP   opsatenrZ  Taginplace_viewtagsr   r  DelayGraphBreakVariabler  r  )r   r   r   handlerresultfnrb  s   ```    rY   var_getattrzTensorVariable.var_getattr  s8    r"t33553*4&$8"6tf<^ _"4& )d d	 AACC:'v  .K  L  ;"((T-=-=-?@@$,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=/E =2 /0F>))"d3F>%%r[   idxesc           	      p   ddl m} ddlm} | j	                         rt        | j                        }nP| j                  |dg i       }t        |t              st        dt        |             t        |j                        }|dk(  rt        d      | j	                         r| j                  d   }n| j                  |dt        j                  |d      gi       }t        |t              s'|j!                         st        dt        |             t        |t              r|j#                  |j$                        }n|j'                         }|t)        |      }n)t        |      |k7  rt        d	| d
t        |       d      t        | |      rd|D 	cg c]"  }	 |t*        || j-                         |	         $ }
}	|
D cg c]+  } |j.                  ||| j0                  | j2                        - c}S |D 	cg c]'  }	 |t        |       || j-                         |	         ) c}	S c c}	w c c}w c c}	w )Nr4   r   rB   rz   zExpected SizeVariable, got r   zCan't unpack scalar tensors.z1Expected SymNodeVariable or python constant, got zCan't unpack a tensor of z rows into a tuple of z
 elements.r   r   rv   )r   r   torch_functionrC   r/  lenrz   r   rT   r;   r  r   r   r7   r   r   rf  evaluate_exprr   as_python_constantrangeru   r   from_tensor_varr   r   )r   r   rr  r   rC   size_lensize_varlength
dyn_lengthi	base_varsr   s               rY   unpack_var_sequencez"TensorVariable.unpack_var_sequence  s%    	/@??499~H''FB;Hh5$'B4>BR%STT8>>*Hq= !?@@??YYq\F))F_222q9:BJ :7002$GZHXGYZ  *o6#11"))<#668=&ME5zV#$/x7McRWj\Ycd 
 d89
 	  "-"DMMOA<NI  #	  =,<<4??DKK  
 d$--/RSBTU
 	

s   'H)0H.:,H3tree_map_fnrA   map_fnresttree_map_kwargsc                 .    |j                  || g|i       S r   )r   )r   r   r  r  r  r  s         rY   call_tree_mapzTensorVariable.call_tree_map"  s     ##Br::r[   c                     | j                   d uS r   )r   r   s    rY   r/  zTensorVariable.valid_size,  s    zz%%r[   c                 H    | j                   t        d      | j                   S )Nz%accessing None size in TensorVariable)r   r  r   s    rY   rz   zTensorVariable.size/  s"    :: !HIIzzr[   c                 J    t         j                  j                  j                  S r   )rP   rQ   r   )_autograd_backward_strict_mode_banned_opsr   s    rY   rd  z&TensorVariable._strict_mode_banned_ops5  s    }}##MMMr[   c                 J    t         j                  j                  j                  S r   )rP   rQ   r   5_autograd_backward_strict_mode_conditional_banned_opsr   s    rY   re  z2TensorVariable._strict_mode_conditional_banned_ops8  s    MM  VV	
r[   keyc           
         ddl m}m} ddlm}m} | j                  |      r'd| j                         v rt        dd|  d| dg 	       i }t        j                  dd       }|} ||| |f|      rq| j                  r.  ||t        t        | j                  d
      d            |      }	n*|j                  |t        j                  j                         }	 |||	| |f|      S | j#                  ||      S )Nr4   SourcelessBuilderVariableBuildercan_dispatch_torch_functiondispatch_torch_function__getitem__z-Illegal __getitem__ invocation in strict modezmp_subscript_impl rX  zHDynamo currently does not support __getitem__ invocation in strict mode.r   r   )r   r  r  ru  r  r  rc  rd  r    rS  r   r   r'   r   rP   rU   r  method___getitem__)
r   r   r  r  r  r  r  empty_kwargsra  func_vars
             rY   mp_subscript_implz TensorVariable.mp_subscript_impl=  s     	@Xr"}8T8T8V'VG,TF!C59- 46&**=$?"'Bs\(
 {{?z$++{C]S 
 -33B8P8PQ*2x$lSS&&r3//r[   r   z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 	       |d
k(  rt        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(  rm|s|r)t"        j&                  j(                  j+                  d      ddlm} ddl m}  |||j2                  j5                  d|| j7                         fi             S |dk(  r+t        dd| d|d|dddgt8        j:                  	       n3|dk(  r.d|v r*t        d d| d|d|ddd!gt8        j:                  	       	 t!        | d"|       }	 |j=                         D ci c]  \  }}||j?                          }}} ||g|i |}|r|S 	 | jD                  jF                  jH                  j                  d'      }|tK        |      n| jL                  }tO        ||      s<t        d(d|  d| d| d| d)| d*|jP                   d+g t8        j:                  	       ddl m} 	  |j2                  j4                  d,|gtS        | g||       }dd0lm+} |jX                  rd|jX                  jZ                  rN||v rJt]        d1 t_        ||ja                               D              r |jX                  jZ                  jb                  ntd        }| jg                         } |       5   ||      }d d d        | ji                  ||t]        d2 |D                     S c c}}w # t@        $ r+}t        d#d|  d| d| d| d$| d%g |&       Y d }~d }~ww xY w# tB        $ r Y w xY w# tT        $ r;}t        d-d|  d| d| d| d.| d/g t8        j:                  |&       Y d }~Vd }~ww xY w# 1 sw Y   xY w)3Nr4   r  r  z(Illegal method invocation in strict modecall_method rX  z/Dynamo currently does not support this method (z) invocation in strict mode.r   __deepcopy__z#Attempted to copy.deepcopy a tensorzcopy.deepcopy(rd   z3Dynamo does not support copy.deepcopy() on tensors.zAAvoid calling copy.deepcopy() on tensors inside compiled regions.r   waitz2`wait` and `wait_tensor` do not take any argumentsr   )wait_tensorr   r   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   from_excr   zUnhandled tensor methodzTensor method `z` is not defined on z9 and does not have an explicit handler in TensorVariable.r   z/Unsupported argument type in tensor method callzFDynamo could not create a proxy for an argument in the call to Tensor.zX(). This usually means an unsupported type was passed as an argument to a tensor method.)"methods_consuming_unbacked_scalarsc              3   ^   K   | ]%  }t        |t              xr |j                  d k(   ' yw)r   N)rT   ru   ry   )r   r   s     rY   r   z-TensorVariable.call_method.<locals>.<genexpr>  s/       1n-=!&&A+=s   +-c              3   <   K   | ]  }|j                           y wr   r   )r   args     rY   r   z-TensorVariable.call_method.<locals>.<genexpr>  s     #DCMMO#Ds   )5r   r  r  ru  r  r  rc  rd  r    rS  r   rn   listr   r'   r   rV   rP   rU   rQ   r  InternalTorchDynamoError)torch.distributed._functional_collectivesr  r   r   r   r   r   r   r   realize	TypeErrorr  rv   r   r   r   r   rS   rW   r0   r  r  r	  	shape_envanyr   valuesignore_fresh_unbacked_symbolsr   r   r   )r   r   r   r   r   r  r  r  r  ra  is_base_tensor_methodr  r  r   handler_methodr   r   realized_kwargsro  er   
check_typerv   r  ctxr   s                             rY   r   zTensorVariable.call_method_  s#    	@Xr"tt/K/K/M'MB&tfAdV1TF!F8D657 >!=(a0QW	 '**46 +4 7 (E4&4:2E,FO%{{?
:dkk;#GN -33Bd8ST*HeTFT$Z$78& 	 6>vmm''@@H  N. 		&&#[4==?2Db  9+!$wz&!<>=&22	 ZFf$4G!$wz&!<>5&22		$TWTF+;<N>Dlln"Mda1aiik>"M"M'ETE_E!M  

,,00A#0#<D$// 	 z4(1&tfAdV1TF!F8D-dV3G&&' (-- 7)556 	+	*BII** #D=4=&9E6 	> ||&&:: tV]]_5 	 LL""@@  	 //1U 	."2u-F	.&&#Dt#D D	
 e #N  7*4&$qaxH!##'&!,   		X # 		I&tfAdV1TF!F8D!F #56 7)556 		J	. 	.s`   P O( 'O"O( -+P/ +
Q6"O( (	P1 PP	P,+P,/	Q380Q..Q36Q?c                 .     | j                   dg|i |S r.  _method_size_strider   r   r   r   s       rY   method_sizezTensorVariable.method_size  s!     (t''@@@@r[   c                 .     | j                   dg|i |S )Nr{   r  r  s       rY   method_stridezTensorVariable.method_stride   s!     (t''B4B6BBr[   r!  c                 |   t        |      }dt        t           dt        dt        f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}r|5 t        ||             }t        |      s |t        d |D                    S y  t        ||      |      }t        |      st	        j
                  t        |            S y )Nr   optionsrK   c           
      h    t        | D cg c]  }t        j                  |fi | c}fi |S c c}w r   )r;   r9   r   )r   r  ys      rY   make_const_size_variablezDTensorVariable._method_size_stride.<locals>.make_const_size_variable*  s9    @AB1!((6g6BFM Bs   /rz   r   c              3   2   K   | ]  }t        |        y wr   r`   r   rs     rY   r   z5TensorVariable._method_size_stride.<locals>.<genexpr>J  s     ,DSV,D   )r-   r   r   r;   r9   r   rV   r/  rz   rv   r   r   r   r   rn   r`   )r   r   r!  r  RetVariabler  fakefake_rs           rY   r  z"TensorVariable._method_size_stride%  s8    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
  -t,S1'/+223v;??r[   c                 L   | j                         r)t        j                  |t        | j                              S | j
                  j                  j                  j                  d      x}:|j                         }t        |      st        j                  |t        |            S y r   )r/  r7   r   r/   rz   rv   r   r   r   numelr   r`   )r   r   r  r  s       rY   method_numelzTensorVariable.method_numelQ  s{    ??"((WTYY-?@@ JJOO((,,_==DJZZ\F#F+&,,RV==r[   c                 \    | j                    t        j                  || j                         S y r   )ry   r7   r   r   s     rY   
method_dimzTensorVariable.method_dim^  s&    99 "((TYY77r[   c                 p    | j                   *t        j                  || j                   j                        S y r   )rp   r7   r   is_floating_pointr   s     rY   method_is_floating_pointz'TensorVariable.method_is_floating_pointe  s.     ::!"((TZZ-I-IJJr[   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 tracingrR  z&tensor.is_inference() is not supportedr   r   )r   "fake_tensor_disable_inference_moder    r   FUNDAMENTALINFERENCE_MODErv   r   r   r   r7   r   is_inferencer   r   r  s      rY   method_is_inferencez"TensorVariable.method_is_inferencel  s     44JD&22&55	 JJOO((,,_==DJ"((T->->-@AAr[   c                 p    | j                   *t        j                  || j                   j                        S y r   )rp   r7   r   
is_complexr   s     rY   method_is_complexz TensorVariable.method_is_complex}  s.     ::!"((TZZ-B-BCCr[   r   c                 R   ||j                         nt        j                  }| j                  "t	        j
                  ||| j                  v       S | j                  j                  j                  j                  d      x}&t	        j
                  ||j                  |            S y )Nr   r   )
rx  rP   contiguous_formatr~   r7   r   rv   r   r   r   )r   r   r   memory_format_constr  s        rY   method_is_contiguousz#TensorVariable.method_is_contiguous  s     ( ,,.(( 	
 )"((-@DDVDV-VWWjjoo**..??dL"((D&&5H&I  r[   Fnon_blockingc           
          |̉ 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(  rn|j                         }t        j                  |t        |            }ddlm} |rd|i|} || |j                  j                   d	d
gt#         |g|             S y )Nc              3   F   K   | ]  \  }}j                   |v s|  y wr   )rp   )r   r   r   r   s      rY   r   z-TensorVariable.method_type.<locals>.<genexpr>  s$      aTZZ1_s   !!cpuztorch..ztorch.tensortyper4   r   r  r   r   )rp   rT   rw   rP   nextr3   r   r   r7   r   rW   r)   rx  r   r   r   r   r0   )	r   r   rp   r  r   
tensortypetensor_typetensor_type_constr   s	   `        rY   method_typezTensorVariable.method_type  sY    M

&4;;5 1779 J {{5(&,,R6*:M:M9N1OPP&,,&!1!1 2!J4G4G3HI  D113459KK
  224K / 5 5b#k:J K.(,A&A &		&&! '.?'@&I  r[   clsrC   c                 ^   t        |t              rw|j                  rkddlm} |j                         } |j                  || ||j                        }|j                  j                  j                  t               |t               |S t        d|  d| dddgt        j                  	       y )
Nr4   rB   mutation_type_clszHArgument of `as_subclass` must be a non-dispatcher-style tensor subclassz.as_subclass(rd   Currently not supportedz:Avoid this call or move it outside `torch.compile` regioner   )rT   TensorSubclassVariabler   ru  rC   rx  rz  r   rA  
_track_objobjectr5   r    r   r   )r   r   r  rC   py_clsrT  s         rY   method_as_subclassz!TensorVariable.method_as_subclass  s     c12szzD++-F>.>>D&#**C II""--#1E .  J^fM#a01L"..		
r[   c                     t        | j                  t        j                        rG| j                  j                  dk7  r| j                  j                  nd}t        j                  ||      S y )Nr  )rT   rw   rP   r   r   r7   r   )r   r   r   s      rY   method_get_devicez TensorVariable.method_get_device  sN     dkk5<<0)-)9)9U)BDKK%%E"((U33r[   c                 V    t        j                  || j                  j                        S r   )r7   r   rp   itemsizer   s     rY   method_element_sizez"TensorVariable.method_element_size  s    $$R)<)<==r[   )forcer   NumpyNdarrayVariablec                   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      |rR|j                         rB| j                  |dg i       }|j                  j                  dd|j                         fi       }n* |j                  j                  ddgt        | | gi        }t        j                  ||      S )Nz%Tensor.numpy() with trace_numpy=Falser  z numpyzW`Tensor.numpy()` was called, but the `trace_numpy` configuration was manually disabled.zUSet `torch._dynamo.config.trace_numpy = True` to allow Dynamo to trace through NumPy.r   z&Tensor.numpy() without NumPy installedz_`Tensor.numpy()` was called, but the NumPy library is not available in the current environment.z5Ensure NumPy is installed in your Python environment.zcan't convert z4 layout tensor to numpy. Use Tensor.to_dense() firstdetachr   r  view_as)r   trace_numpyr    nprx   rP   stridedr  rx  r   r   r   r   r0   r  r   )r   r   r   trv   s        rY   method_numpyzTensorVariable.method_numpy  s    !!?&tfF375	 @&tfF3? L ;;%--' -ab  U--/  Xr26AII**=%!**,RTUE +BII**y+<dD\2+NE $**2u55r[   c                 L    ddl m dt        j                  dt        j                  j
                  dt        t        t           z  f fd j                         j                  j                  d   } | j                               }t        j                  |      S )Nr4   r   tensor	sub_proxyrK   c           	      2   dt         dt        j                  j                  dt        f	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 )Nr  r  rK   c                 2     |j                               S r   )r   )r  r  r   r   s     rY   wrapz:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrap  s    $NN$ r[   z'Tensor.tolist() with non-integer tensorr  z to_listzLDynamo currently does not support tracing `tolist()` on non-integer tensors.z[Ensure the input tensor to `tolist()` is an integer type (e.g., int8, int16, int32, int64).r   r   r4   )r  )r   rP   fxProxyr7   rp   int8int16int32int64r    r!  	enumerate)
r  r  r  r  val
sub_tensorr   tolistr   r   s
         rY   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   
D2Dr   )r   r   rP   rU   r  r  r   r  r   r   r   r7   r   )r   r   r  outr  r   s   ``  @@rY   method_tolistzTensorVariable.method_tolist  s~    *!	5<< !	EHHNN !	sTRUY !	 !	F %%**?;VT]]_-$$R--r[   	vars_itererror_on_non_leafc                    ddl m} g }t               }|D ]  }t        |t              s|j
                  s!|j                  r|s0t        dd| ddg       D|r6|j                   rt        |j                   |      rt        dd	| d
dg       ||j                  j                  }||vs|j                  |       |j                  |        |S )a  
        Collect unique leaf tensors from vars_iter for backward.

        Only collects leaf tensors (no grad_fn). Non-leaf tensors are skipped
        (or error if error_on_non_leaf=True) because when auto-detecting inputs,
        we must not stop gradients at non-leafs - they are intermediates, and the
        real leaf tensors (parameters) are further up the autograd graph.

        Deduplicates by proxy.node.
        Returns list of unique leaf tensor variables.
        r   )SyntheticLocalSourcezbackward() with non-leaf tensorz-backward(inputs=[...]) with non-leaf tensor: zBbackward(inputs=[...]) with non-leaf tensors is not yet supported.zIOnly pass leaf tensors (parameters, graph inputs) to backward(inputs=...)r   z'backward() with in-graph created tensorz5backward(inputs=[...]) with in-graph created tensor: z^backward(inputs=[...]) with tensors created inside the compiled function is not yet supported.zSOnly pass tensors that are inputs to the compiled function or captured from outside)r   r  setrT   ru   r|   r   r    rv   r   addappend)r   r  r  r  ro  
seen_nodesrT  r   s           rY   _collect_backward_inputsz'TensorVariable._collect_backward_inputs=  s     	2),
 '	+C#~.33D3D ??(%$E&STWSX$Y(l k#	 '

j=Q&R! I"WX[W\ ]%B r 99>>D:-"t,c*O'	+R r[   gradientretain_graphcreate_graphinputsc                    t         j                  st        dd|  d| d| d| d| 
ddg       | j                  s| j                  st        d      |d	u }|rjt        |j                  j                  |j                  j                  j                               }| j                  |      }|st        j                  d	      S t        |t        j                         r|j"                  }	nAt        |t        j$                        r$t'        |j"                  j                               }	n|g}	| j                  |	d
      }|st        ddddg       dt)        j*                  ||      i}
|||
d<   |||
d<   t)        j*                  ||      }| |g}||j-                  |       t)        j*                  |t.        j0                  j2                        }|j5                  |||
      }ddlm} |j                  |dd
      }|j;                  |       t)        j*                  |t.        j<                  j>                  j@                  jB                        }|tE        d      tG        |      D ]C  \  }}|jI                  |dt)        j*                  ||      gi       }|j5                  |||gi        E |jK                  |       t        j                  d	      S )a  
        Trace tensor.backward() by rewriting as autograd.grad() + accumulate_grad.

        Implementation:
        1. Collect leaf tensors to compute gradients for
        2. Call autograd.grad(loss, inputs) to compute gradients
        3. For each leaf tensor, call accumulate_grad to update .grad

        Non-leaf tensor handling:
        - Auto-detect (inputs=None): Non-leaf tensors are silently skipped.
          This matches eager where only leaves get .grad.
        - User-provided (inputs=[...]): Errors if any non-leaf tensor is found.
          While eager backward(inputs=[non_leaf]) works, Dynamo cannot trace it
          because the backward rewrite accesses .grad, and Dynamo creates
          a generic GetAttrVariable for .grad on non-leaf tensors (instead of a
          TensorVariable), which cannot be used in tensor operations.

        TODO: Support non-leaf tensors by fixing .grad access on non-leaf in Dynamo.
        z"Unsupported Tensor.backward() callr  z
 backward rX  z]Dynamo currently does not support tracing `Tensor.backward()` when trace_autograd_ops is off.z)Set torch._dynamo.trace_autograd_ops=Truer   z8tensor does not require grad and does not have a grad_fnNT)r  zbackward() with empty inputsz8backward(inputs=[...]) resulted in no valid leaf tensorsz?backward(inputs=[...]) requires at least one valid leaf tensor.zOEnsure at least one tensor in inputs is a leaf (requires_grad=True, no grad_fn)allow_unusedr&  r'  r4   )GradModeVariableF)initializedzinput_vars must not be Noner  )&r   trace_autograd_opsr    r|   r   r   r   r   leaf_var_creation_orderinput_source_to_varr  r$  r9   r   rT   r   BaseListVariabler   ConstDictVariabler  r7   r   r"  rP   autogradr@  r   ctx_managerr+  enterrh  inductoraccumulate_grad_defaultr  r  r   exit)r   r   r%  r&  r'  r(  auto_detectall_vars
input_varsprovided_varsgrad_kwargs
inputs_var	grad_argsautograd_grad_fn	grads_varr+  grad_mode_varaccumulate_grad_fnidx	input_vargrad_is                        rY   method_backwardzTensorVariable.method_backwardz  s   6 ((<&tfJxj,qQ]P^^_`f_gh{BC	 !!$*:*:#J  n 		11		--446H 66x@J (..t44&)"<"<= &FI$?$?@ $V\\%8%8%: ;!'66 7 J  :V ai	 &'<'<R'MN#*6K'#*6K'$**2z:
:&	X&*00U^^5H5HI$222y+N	 	2(//Et/LB,22		""33;;
  !>??'
3 	JNC**MO$9$9"c$B#CRF ,,R)V1DbI		J 	2&&t,,r[   DataPtrVariablec                     t        |       S r   rH  r  s       rY   method_data_ptrzTensorVariable.method_data_ptr  s     t$$r[   c                     t        | d      S )Nconst_data_ptr)method_namerJ  r  s       rY   method_const_data_ptrz$TensorVariable.method_const_data_ptr  s     t1ABBr[   streamc                 P   ddl m} t        ||      s&t        d|j	                         j
                         |j                  j                  dt        j                  j                   j                  | j                         |j                  fi        t        j                  d       S )Nr4   )StreamVariablez/record_stream() expects a Stream argument, got r   )streamsrR  rT   r   r   rW   r   r   rP   rh  record_streamr   user_object_indexr9   r   )r   r   rP  rR  s       rY   method_record_streamz#TensorVariable.method_record_stream  s    
 	,&.1A&BTBTBVB_B_A`a  			II++]]_f667		
  &&t,,r[   c           	          |j                   s9t        j                  s)| j                          t	        dd|  d| d| ddg       y )Nz@Unsupported Tensor.item() call with capture_scalar_outputs=Falser  z item rX  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   )	one_graphr   capture_scalar_outputs_warn_capture_scalar_outputsr    r  s       rY   method_itemzTensorVariable.method_item  sU     ||F$A$A--/Z&tfF4&&B<I
 r[   c           	      @   | j                   | j                   j                  si| j                   j                  sS| j                  |dg i       }ddlm}  |||j                  j                  dt        |j                         fi             S t        t        |dg       y )Nr   r4   r   r   r]  zEonly integer tensors of a single element can be converted to an indexr   )rp   r  r  r   r   r   r   r   r   r   r   r  r   r   r   r   s       rY   nb_index_implzTensorVariable.nb_index_impl*  s     ::!

,,TZZ5J5J##BB7D. ii,,#]]_&	  	!W	
r[   c           	         | j                   )| j                   j                  rt        t        |dg       | j	                  |dg i       }ddlm}  |||j                  j                  dt        |j                         fi             S )Nz:value cannot be converted to type int64_t without overflowr   r   r4   r   r   r]  )rp   r  r   r   r   r   r   r   r   r   r   r]  s       rY   nb_int_implzTensorVariable.nb_int_implH  s     ::!djj&;&;$RS FB3*))(("	
 	
r[   c                 $    | j                  |      S r   r`  r   s     rY   method___int__zTensorVariable.method___int__d  s    ##r[   c           	         | j                   )| j                   j                  rt        t        |dg       | j	                  |dg i       }ddlm}  |||j                  j                  dt        |j                         fi             S )Nz9value cannot be converted to type double without overflowr   r   r4   r   r   r]  )rp   r  r   r   r   r   r   r   r   r   r   r]  s       rY   nb_float_implzTensorVariable.nb_float_implg  s     ::!djj&;&;$QR
 FB3*))(("	
 	
r[   c                 $    | j                  |      S r   re  r   s     rY   method___float__zTensorVariable.method___float__  s    !!"%%r[   c           	          ddl m}  |||j                  j                  dt        j
                  | j                         fi             S Nr4   r   r   )r   r   r   r   operatornegr   r   r   r   s      rY   nb_negative_implzTensorVariable.nb_negative_impl  B     	+II"""	
 	
r[   c                 $    | j                  |      S r   rn  r   s     rY   method___neg__zTensorVariable.method___neg__      $$R((r[   c           	          ddl m}  |||j                  j                  dt        j
                  | j                         fi             S rj  )r   r   r   r   rk  posr   rm  s      rY   nb_positive_implzTensorVariable.nb_positive_impl  ro  r[   c                 $    | j                  |      S r   rv  r   s     rY   method___pos__zTensorVariable.method___pos__  rs  r[   c           	          ddl m}  |||j                  j                  dt        j
                  | j                         fi             S rj  )r   r   r   r   rk  absr   rm  s      rY   nb_absolute_implzTensorVariable.nb_absolute_impl  ro  r[   c                 $    | j                  |      S r   r|  r   s     rY   method___abs__zTensorVariable.method___abs__  rs  r[   c           	      (   ddl m} t        |d   t              r,t        j
                  t        j                  |d      |d   g}}nt        j                  } |j                  j                  d|gt        | gt        |      z   |       } |||      S )Nr4   r   r   r   )r   r   rT   r   rP   selectr7   r   rk  getitemr   r   r0   r  )r   r   r   r   r   rp  rv   s          rY   r  z!TensorVariable.method___getitem__  s     	+d1g/
 #))"a0G B !!B&		&&
 vT
2F;
 R''r[   c                      t         j                  j                  j                         } dj	                  t        j                  |             }t        j                  t        j                  d      |       y )NrR  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
                )rP   _guardsTracingContextextract_stackjoin	tracebackformat_listlogwarningtextwrapdedent)
user_stackuser_stack_formatteds     rY   rZ  z+TensorVariable._warn_capture_scalar_outputs  sX     ]]11??A
!wwy'<'<Z'HIOO	 !	
r[   c                 $    | j                  |      S r   )	sq_lengthr   s     rY   method___len__zTensorVariable.method___len__  s    ~~b!!r[   c                 T    | j                  |dt        j                  |d      gi       S )z9Sequence length for tensors (size along first dimension).rz   r   )r   r7   r   r   s     rY   r  zTensorVariable.sq_length  s)    F_-B-B2q-I,JBOOr[   c                 J    t        | j                  |      t                     S )NrD  )r:   r  r6   r   s     rY   tp_iter_implzTensorVariable.tp_iter_impl  s#    #$$R(8H8J
 	
r[   c                 $    | j                  |      S r   )r  r   s     rY   method___iter__zTensorVariable.method___iter__  s      $$r[   rX   tensor1tensor2c                8   |t         j                  rddlm} t	        j
                  t        j                        }t	        j
                  |j                        }|j                  |||gi       }|j                  |||| gi       }	| j                  |d|	gi       S y Nr   )inductor_primscopy_)r   enable_dynamo_decompositionstorch._inductorr  r   rG  rP   mulfmar   r   )
r   r   r  r  rJ   r  mul_varfma_varr/   ro  s
             rY   method_addcmul_zTensorVariable.method_addcmul_  s     !D!D6<<UYYGG<<^=O=OPG++B'0BBGG**2/ErJF##B&2>>r[   c                     |j                   j                  dt        j                  gt	        | ||gi        }| j                         }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        | j!                  |||j#                                t$        j&                  st$        j(                  r0|j                   j*                  j-                  |j                  d       t/        j0                  d       S # 1 sw Y   xY w# 1 sw Y   xY w)Nr   F)allow_non_graph_faker   )r   r   rk  setitemr0   r   rP   rQ   rR   +_disable_saved_tensors_hooks_during_tracingr	  r  r  r   r+   r   r   r   r   use_graph_deduplicationtrack_nodes_for_deduplicationregion_trackeradd_node_mutationr9   r   )r   r   r  rJ   rv   r   s         rY   method___setitem__z!TensorVariable.method___setitem__  s7    '		&&
 c5126
 //1 MMKKM	G || 6 6 LL""@@B		G 5::rF	G 	G 	&&r>5??;LM))V-Q-QII$$66uzz1E&&t,,	G 	G 	G 	Gs%   2AE>E2E>2E;	7E>>Fc           	      4    t        dd|  d| d| dg        y )Nz!Unsupported Tensor.resize_() callr  z	 resize_ rX  z=Dynamo currently does not support tracing `Tensor.resize_()`.r   r=  r  s       rY   method_resize_zTensorVariable.method_resize_1  s+     	7"4&	$qAW		
r[   c           	      4    t        dd|  d| d| dg        y )Nz$Unsupported Tensor.resize_as_() callr  z resize_as_ rX  z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r   r=  r  s       rY   method_resize_as_z TensorVariable.method_resize_as_>  s+     	:"4&TF!F8DZ		
r[   c           	      4    t        dd|  d| d| dg        y )Nz(Unsupported Tensor.sparse_resize_() callr  z sparse_resize_ rX  zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r   r=  r  s       rY   method_sparse_resize_z$TensorVariable.method_sparse_resize_K  s,     	>"4&(8axH^		
r[   c           	      4    t        dd|  d| d| dg        y )Nz2Unsupported Tensor.sparse_resize_and_clear_() callr  z sparse_resize_and_clear_ rX  zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r   r=  r  s       rY   method_sparse_resize_and_clear_z.TensorVariable.method_sparse_resize_and_clear_X  s,     	H"4&(B4&&Rh		
r[   c           	      p    t        |      dkD  r(t        dd|  d| d| dg t        j                         y )Nr4   zUnsupported Tensor.set_() callr  z set_ rX  zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r   )rv  r    r   r   r  s       rY   method_set_zTensorVariable.method_set_e  sL     t9q= 8&tfF4&&BA6)556 r[   )alphar  c                    |pt        |t              r`t        j                  rPddlm} t        j                  |j                        }|j                  |||| gi       }| j                  |d|gi       S y r  )rT   ru   r   r  r  r  r   rG  r  r   r   )r   r   r   r  r  r  ro  s          rY   method_add_zTensorVariable.method_add_{  sm     5.1336<<^=O=OPG**2ud/CRHF##B&2>>r[   c                4   |t         j                  rt        j                  t        j
                        j                  |||gi       }ddlm} t        j                  |j                        }|j                  |||| gi       }| j                  |d|gi       S y r  )r   r  r   rG  rP   divr   r  r  r  r   )	r   r   r  r  rJ   ro  r  r  
fma_results	            rY   method_addcdiv_zTensorVariable.method_addcdiv_  s     !D!D;;EIIFTTWg&F 7<<^=O=OPG ..rFE43H"MJ##B*rBBr[   r   c                     t        j                  t        j                        j	                  || |gi       }t        j                  t        j
                        j	                  ||gi       }|j                  |dg i       S )Nr   )r   rG  rP   eqr   r  r   )r   r   r   ro  s       rY   sq_containszTensorVariable.sq_contains  sq     77AOOtb
 77		BPP"
 !!"fb"55r[   r  c                 &    | j                  ||      S r   )r  )r   r   r  s      rY   method___contains__z"TensorVariable.method___contains__  s     C((r[   c                 0     | j                   |dg|i |S )Nregister_hook_method_register_hookr  s       rY   method_register_hookz#TensorVariable.method_register_hook  s#     *t))"oOOOOr[   c                 0     | j                   |dg|i |S )N"register_post_accumulate_grad_hookr  r  s       rY   )method_register_post_accumulate_grad_hookz8TensorVariable.method_register_post_accumulate_grad_hook  s/     *t))4
7;
?E
 	
r[   hookc                    | j                   sEt        j                  r|j                  j	                  |      \  }dt
        j                  dt        j                  dd ffd}ddlm	} | j                         }d|j                  j                  d<    |||j                  j                  d	|||fi             S dd
lm} | j                         }	|	j                   }
	 |j#                  d       5   |||| gi dd d dd	      \  \  }}}}d d d        |j                  j,                  j.                  j1                         }|j                  j3                  dt
        j4                  j7                  |j8                              |
j                  ddi       }ddlm} |	|gt?        jA                               }|
j                  d	|tC        |      i       }|	j                  j                  d   |j                  j                  d<   || _"        | jG                  |       tI        jJ                  tH        jL                  jO                               S tI        jJ                  tH        jL                  jO                               }|j                  jP                  jS                  | ||       |S # 1 sw Y   xY w# t
        j$                  j&                  j(                  $ r t+        dddg        Y w xY w)Nr  bw_staterK   c                 l    t        |       } |t        j                  t        t        |             y )N)rp  r  	hook_name)rV   r  r  r   r$   )r  r  r  r  r   s      rY   _register_hook_trampolinezGTensorVariable._method_register_hook.<locals>._register_hook_trampoline  s8     %,FD$9M!!)))<%-&/	  r[   r4   r   Thas_backward_hookr   )speculate_subgraphc                 "    | j                         S r   r  )r   s    rY   <lambda>z6TensorVariable._method_register_hook.<locals>.<lambda>  s    !++- r[   r  automatic_with_forced_inputs)source_targetenable_gradset_subgraph_inputsrestore_side_effectsz(register_hook with stride-dependent codez0Hook accesses grad metadata (e.g. is_contiguous)z}register_hook callbacks that branch on gradient metadata are not supported because grad properties are unknown at trace time.r   	hook_bodyget_attrr   r   )register_hook_opr   r  )*r   r   compiled_autograd_enabledr   add_backward_state_hookrP   rU   BackwardStater   r   r   r   r   r   higher_order_opsr  r   strict_translation_moderQ   r  r!   r    tracing_contextmodule_contextcopy_graphstateinstall_subgraphr  GraphModule
nn_modules%torch._higher_order_ops.register_hookr  r  keysrn   rv   r   r   RemovableHandleVariablebaser6   rA  r  )r   r   r   r  bw_state_proxyr  r   
self_proxyr  tensor_proxytarget_tracerbody_r_
hook_graphhook_freevarshook_nn_modules	hook_noder  p_argshooked_proxyhandle_variabler  s     `                  @rY   r  z$TensorVariable._method_register_hook  s    {{ !::,.II,M,Md,S)	> !LL 4E4S4S  " 3!]]_
<@
$$%89$II**'1#^4	   ===?L(//M
//0GH =O'&*$(,J-1
>:KVQ], !ii77FFVVXO		22$$_%?%?LI &22:y"bQIN"IK]5G5G5I0JKF(55 f	L 7C6G6G6L6L7L""?3 &DJ''+44'nn==?  $;;#..99;
 			,,T4$Og  ==$$II FN!<  s*    J> 2J1J> 1J;6J> >6K87K8c                 J   |dur|j                         }| j                         j                  }|j                  d   }|j                  |k7  r'| j
                  rt        dd|  ddg        |j                  j                  rt        dd|  dd	d
dg       t        j                  j                  j                         }t        j                  j                  j                  d       	 |j                  j                  dt        j                  j                  j                  di        |j                  j!                  dd| j                         fi        |j                  j                  dt        j                  j                  j                  |fi        t        j                  j                  j                  |       |j#                  |       || _        |r|j                  j$                  j'                  |        | j
                  si|j                  j(                  j+                  |       rD|j                  j(                  j-                  | dt.        j0                  j3                  d              | S # t        j                  j                  j                  |       w xY w)NTr   z(Unsupported Tensor.requires_grad_() callr  z requires_grad_zaDynamo does not support changes to a Tensor's `requires_grad` through calling `requires_grad_()`.r   z.requires_grad_() intermediate leaked as outputzAn intermediate tensor with requires_grad_() called on it (or a tensor derived from it) is returned from the compiled region. Graph breaking here to preserve partial acceleration.z8Call .detach() before returning if you only need values.zConsume the gradient inside the compiled function (call backward() and use .grad), or move requires_grad_() outside torch.compile.r   Tr   requires_grad_r@  )rx  r   r   r   r|   r   r    speculation_loggraph_break_on_requires_grad_rP   re   rf   !get_inplace_requires_grad_allowed!set_inplace_requires_grad_allowedr   create_noder   r  r.  r"  rA  is_attribute_mutation
store_attrr   r9   r   )r   r   r|   r   r   
prev_states         rY   method_requires_grad_z$TensorVariable.method_requires_grad_;  s2   
 $)<<>M}}##		/2&&-7 {{F*4&@!J !!??L*4&@!$
 SJ0 ,,NNPJHHAA$GR		%%#HH''II	 		&&!$]]_&	 		%%#HH''IIM	 ##EEjQ((7!.D		1188>
 {{ryy'='='S'S( II**55fi&@&@&G&G&M  ##EEjQs   *B.I7 7+J"c                     ddl m} |j                  j                  dd| j	                         fi       } |||       | j                  |       | S )Nr4   r   r   detach_)r   r   r   r   r   r   )r   r   r   rv   s       rY   method_detach_zTensorVariable.method_detach_  sM    *		&&]]_	
 	b% ##B'r[   c                 L    t        dd|  dddgt        j                         y )Nz'Unsupported Tensor.share_memory_() callr  z share_memory_zTDynamo does not support Tensor.share_memory_() which modifies tensor storage for IPCz7Move share_memory_() call outside the compiled region. r   )r    r   r   r   s    rY   method_share_memory_z#TensorVariable.method_share_memory_  s2    ="4&7nI"..		
r[   c                     t        |      dk(  rt        |d   t              s t        |      dk\  r/t        d |D              r| j	                  |dt        |      |      S y )Nr4   r   c              3   |   K   | ]4  }|j                         xr t        |j                         t               6 y wr   )rf  rT   rx  r`   )r   as     rY   r   z,TensorVariable.method_new.<locals>.<genexpr>  s9       $$&R:a6J6J6Lc+RRs   :<	new_empty)rv  rT   r;   allr   r  r  s       rY   
method_newzTensorVariable.method_new  s\     INz$q'<@IN  
 ##BT$ZHHr[   r   c                    t        |      dk7  ry |d   }|j                  d      }|3|j                         sy |j                         t        j
                  k7  ry t        |      }|j                  dd        |j                  d| j                  |d             |j                  d| j                  |d             t        j                  t        j                        j                  ||g|      S )Nr4   r   rx   rp   rw   )rv  r   rf  rx  rP   r  dictpop
setdefaultrq  r   rG  r  r   )r   r   r   r   data_argrx   
fwd_kwargss          rY   method_new_tensorz TensorVariable.method_new_tensor  s     t9>7H%,,.((*emm;&\
x&gt'7'7G'DEh(8(8X(FG55ellCQQJ
 	
r[   c                     t        | | j                         j                  j                  d   j	                               S r   )UntypedStorageVariabler   r   r   untyped_storager   s     rY   method_untyped_storagez%TensorVariable.method_untyped_storage  s6     &$--/&&++O<LLN
 	
r[   c                 t    | j                   s,| j                  j                  j                  |       d| _         y r   )r   rv   r   _rename)r   r   s     rY   set_name_hintzTensorVariable.set_name_hint  s,      JJOO##D) $Dr[   reversec                    ddl m} t        |t              s%t	        |      st        j                  |t              S |r|| gn| |g} |j                  j                  dt        j                  gt        |i        } |||      S Nr4   r   r   r]  )r   r   rT   ru   ra   r7   r   r   r   r   rk  r!  r0   )r   r   r   r   r   r   rv   s          rY   nb_add_implzTensorVariable.nb_add_impl  sz     	+5.15J55Q"((^<< 't}dE]&		&&X\\
,=dB,G

 %00r[   c           
          ddl m} |j                         st        j                  |t
              S |r|| fn| |f\  }} || |j                  j                  dt        j                  gt        ||gi              S rj  )r   r   r^   r7   r   r   r   r   rk  lshiftr0   r   r   r   r   r   lhsrhss          rY   nb_lshift_implzTensorVariable.nb_lshift_impl  |     	+$$&"((^<<$+E4=$S"BII""3Dc3ZQS3T
 	
r[   c           
          ddl m} |j                         st        j                  |t
              S |r|| fn| |f\  }} || |j                  j                  dt        j                  gt        ||gi              S rj  )r   r   r^   r7   r   r   r   r   rk  rshiftr0   r&  s          rY   nb_rshift_implzTensorVariable.nb_rshift_impl
	  r*  r[   c           
          ddl m} |j                         st        j                  |t
              S |r|| fn| |f\  }} || |j                  j                  dt        j                  gt        ||gi              S rj  )r   r   r^   r7   r   r   r   r   rk  or_r0   r&  s          rY   
nb_or_implzTensorVariable.nb_or_impl	  {     	+$$&"((^<<$+E4=$S"BII""0A3*b0Q
 	
r[   c           
          ddl m} |j                         st        j                  |t
              S |r|| fn| |f\  }} || |j                  j                  dt        j                  gt        ||gi              S rj  )r   r   r^   r7   r   r   r   r   rk  and_r0   r&  s          rY   nb_and_implzTensorVariable.nb_and_impl.	  s{     	+$$&"((^<<$+E4=$S"BII""1BC:r1R
 	
r[   c           
          ddl m} |j                         st        j                  |t
              S |r|| fn| |f\  }} || |j                  j                  dt        j                  gt        ||gi              S rj  )r   r   r^   r7   r   r   r   r   rk  xorr0   r&  s          rY   nb_xor_implzTensorVariable.nb_xor_impl@	  r1  r[   c           
          ddl m} |r|| fn| |f\  }} || |j                  j                  dt        j
                  gt        ||gi              S rj  )r   r   r   r   rk  r  r0   r&  s          rY   nb_multiply_implzTensorVariable.nb_multiply_implR	  s\     	+$+E4=$S"BII""0A3*b0Q
 	
r[   c           
         t        |t              s%t        |      st        j                  |t
              S ddlm} |r|| fn| |f\  }} || |j                  j                  dt        j                  gt        ||gi              S rj  )rT   ru   ra   r7   r   r   r   r   r   r   rk  floordivr0   r&  s          rY   nb_floor_divide_implz#TensorVariable.nb_floor_divide_imple	  s     5.15J55Q"((^<<*$+E4=$S"BII""!2!25FSzSU5V
 	
r[   c           
         t        |t              s%t        |      st        j                  |t
              S ddlm} |r|| fn| |f\  }} || |j                  j                  dt        j                  gt        ||gi              S rj  )rT   ru   ra   r7   r   r   r   r   r   r   rk  truedivr0   r&  s          rY   nb_true_divide_implz"TensorVariable.nb_true_divide_implz	  s     5.15J55Q"((^<<*$+E4=$S"BII""!1!14EsCjRT4U
 	
r[   c           
         t        |t              s%t        |      st        j                  |t
              S ddlm} |r|| fn| |f\  }} || |j                  j                  dt        j                  gt        ||gi              S rj  )rT   ru   ra   r7   r   r   r   r   r   r   rk  modr0   r&  s          rY   nb_remainder_implz TensorVariable.nb_remainder_impl	  s     5.15J55Q"((^<<*$+E4=$S"BII""0A3*b0Q
 	
r[   c                 j    | j                         j                  j                  d   }t        |      dfS )Nr   T)r   r   r   r   r  s      rY   	hash_implzTensorVariable.hash_impl	  s.     }}##((9$x~r[   c           
          t        |      st        j                  |t              S |r|| gn| |g}t        j                  | |j                  j                  dt        j                  gt        |i        d       S Nr   r   ra   r7   r   r   r   r   r   r   rk  subr0   r   r   r   r   r   s        rY   nb_subtract_implzTensorVariable.nb_subtract_impl	  |     %U+"((^<< 't}dE]%%"BII""0A$0K  & 
 	
r[   c                     t        |t              sy| j                         j                  j                  d   }|j                         j                  j                  d   }||u S )NFr   )rT   r7   r   r   r   )r   r   r  bs       rY   is_python_equalzTensorVariable.is_python_equal	  sQ    %1MMO  %%o6NN!!&&7Avr[   r   NFF)NNNN)rK   Nr  )r   r@   rK   ru   )r   r@   rK   r  )rW   
__module____qualname____doc__r7   _nonvar_fieldsstrr   rP   rU   r,   r  r  rp   rw   rx   r`   rN   r   rn   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr  r   r  r"  r$  r&  r)  r9   r,  r1  r3  r5  r7  r:  r	   r>  rE  rJ  rL  rP  rV  rq  r   r  r  r  r/  propertyrz   rd  re  r  r   r  r  r  r  method_nelementr  method_ndimensionr  r  r  r  r  r  r  r  r	  r  r   r$  rG  rK  rO  rV  r[  r^  r`  rc  re  rh  rn  rr  rv  ry  r|  r  r  r  cacherZ  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r#  r)  r-  r0  r4  r7  r9  r<  r?  rB  rD  rK  r  rO  __classcell__r   s   @rY   ru   ru      s   G 	  
	'	'!N&YS YB B. )-)-%)$(#&/xx~~&/ {{	&/
 &/ &/ &/ &/ &/ &/ &/ &/ &/ S#X%&/ c3h$&&/  d{!&/" Tk#&/$ %&/& 
'&/R JN - ;?$; 	 E3: E
A'A d
A 	A
 
A*
C 


7 
O 
%((.. T 4 @7 @O @8'8 8 	8
 
8" /%,, /4S> / /b[B-[B58[B	[Bz7#> 7? 7-	4	-	4	-	4	-	D	 8$? 8O 8-	D	 -	D	 -	D	 -	D	 
*E 
( 
-	4	(#> (? (
;-;	D	 ;
'B 
 
2-2582	2>[-[58[	[| NR?
-?
6>smd6J?
	o	?
B;'; ,;  	;
 ?#; c?23; 
;&D & eCHo  
Nc N
T#Y 

 0' 0  0 
	 0Dz'z z ?#	z
 -z 
zxA-A69AEHA	4	A
C-C69CEHC	4	C ,0**!Dj*	4	*X	: 	QU?U 	 #O8 _t=S 
 #-	D	 -	D	 "-	D	  15' '- 
D	 	, !"	,', Tz, 	,
 , 
4	,\
-
4C
	'
2-	4	>&A >o > SX(6-(69H49O(6	(6T(. ; (. (.V OT;!/2;GK;	o		%;@ ,0/3/3)-u-'u- "D(u- &,	u-
 &,u-  $&u- 
4	u-n%'% % "	%
 
%C'C C "	C
 
C-'-  - 
	-&'  "	
 
,
'
 

<
'
 

8$!< $ $
'
 

2&#> &? &
'
 

 )!< ) )
'
 

 )!< ) )
'
 

 )!< ) )('( ( "	(
 
(< __
  
&"!< " "P7 PO P
: 
 

%"= %/ % !'  	 Tz 
t$-'- - 	-
 
-B
'
 
 "	

 


'
 
 "	

 


'
 
 "	

 


'
 
 "	

 

'  "	
 
6 )-' 
 % 
4	6 )-' " "	 % 
4	&6-65D6	6)-)4C)	)
P'P P "	P
 
P
'
 
 "	

 

p-p58p@Op	pj 15W'W o-W 
	Wr	
h 	
'  "	
 
4	$

'
 
 "	

 
4	
2
-
	!
# $  	1'1 1 	1
 
1. 	
'
 
 	

 

, 	
'
 
 	

 

, 	
'
 
 	

 

, 	
'
 
 	

 

, 	
'
 
 	

 

, 	
'
 
 	

 

. 	
'
 
 	

 

2 	
'
 
 	

 

2 	
'
 
 	

 

*7 E#t)<L  	
'
 
 	

 

$V  r[   ru   c                       e Zd ZdZddhej
                  ZdefdZe	 d8ddde	de	dz  d	e	dd
f
d       Z
de	de	de	ddf fdZdefdZdefdZde	fdZdddefdZdddededefdZddde	defdZ	 d8ded   deez  ez  fdZdddedee   deeef   def
dZdddef fdZdddefdZddde	de	defdZ	 d9ddded edefd!Z	 d9ddded edefd"Z 	 d9ddded edefd#Z!	 d9ddded edefd$Z"	 d9ddded edefd%Z#	 d9ddded edefd&Z$	 d9ddded edefd'Z%	 d9ddded edefd(Z&	 d9ddded edefd)Z'	 d9ddded edefd*Z(	 d9ddded edefd+Z)dddefd,Z*ddde	de	defd-Z+dddefd.Z,ddde	de	defd/Z-ddde.eef   fd0Z/dddefd1Z0ddde	de	defd2Z1dddefd3Z2ddde	de	defd4Z3defd5Z4defd6Z5de6defd7Z7 xZ8S ):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.
    rv   r   rK   c                 ,    t        | j                        S r   )reprr   r   s    rY   r   zSymNodeVariable.debug_repr	  s    DLL!!r[   Nr   r@   r  r7   c                 t   |t        |j                  |      }d|j                  j                  v rD|j                  j                  d   |k7  r(t        d|j                  j                  d    d|       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 )Nr   zproxy example_value z != r   )r+   r   r   r  r2   rT   sympyIntegerr`   rN   r7   r   r   r   r   current_tracerrecord_proxyable_vt)r  r   rv   r   r  r  s         rY   r   zSymNodeVariable.create	  s     ?$UZZ4Gejjoo-zz/7:$*5::???+K*LDQXPYZ  	%**g.gsD9:&0%--&Hc'lgG"((W55eW88::==M)II$$88=
r[   r   c                 N    t        |   di | || _        || _        d | _        y Nr   )r   r   rv   r   _tensor_var)r   rv   r   r   r   s       rY   r   zSymNodeVariable.__init__	  s)    "6"
26r[   c                     t        | j                  t              r | j                  j                  j                  S t        | j                        S r   )rT   r   r   r   pytyper   r   s    rY   r   zSymNodeVariable.python_type	  s5    dllH-<<$$+++%%r[   c                      yr   r   r   s    rY   r^   zSymNodeVariable.is_symnode_like	  r   r[   c                     | j                   S r   r   r   s    rY   r   zSymNodeVariable.as_proxy	  r   r[   c                 F   t        | j                  t        j                        r| S t        | j                  t        j                  t        j
                  f      s!t        dt        | j                               t        j                  || j                         dk7        S )Nz!Expected SymInt or SymFloat, got r   )rT   r   rP   r   SymIntSymFloatr  r   r   r   r   r   s     rY   r   zSymNodeVariable.bool_impl
  sw     dllEMM2K$,,u~~(FG 3D4F3GH  %%b$--/Q*>??r[   r   r   c                    t        |t        t        t        f      sK|dv r.t        |   }t        j                  | |t               d            S t        j                  t              S t        |   }|j                  j                  d|| j                         |j                         fi       }t        j                  ||d      S )z4SymNode tp_richcompare: symbolic numeric comparison.__eq____ne__Nr   rG  )rT   r   r9   ru   r(   r7   r   r  r   r   r   r   r   )r   r   r   r   r   rv   s         rY   r   z SymNodeVariable.richcompare_impl
  s     %/3C^!TU)).r2&,,Rvx1FGG#**>::&r*		&&UT]]_enn6F$G
 %%b%%>>r[   rp   c           	          | j                   Qt        j                  |t        j                        j                  || gdt        j                  ||      i      | _         | j                   S )Nrp   )rh  r7   r   rP   scalar_tensorr   )r   r   rp   s      rY   	as_tensorzSymNodeVariable.as_tensor#
  s_    #.44E'' mB/2G2GE2R(ST  r[   output_graphr?   c                     	 t        | j                        S # t        $ r\}t        j                  j
                  j                  j                  r t        t        j                  dt        |       d      d }~ww xY w)Nz5Consider annotating your code using torch._check*(). constrain_as_size_example)	case_name)r   r   r   rP   r  experimental_configno_data_dependent_graph_breakr"   r#   ANTI_PATTERNrV  )r   rw  r  s      rY   rw  zSymNodeVariable.evaluate_expr*
  si    
	--* 	xx$$,,JJ**GAxP5 		s    	A<AA77A<r   r   c           
      r    ddl m}  || |j                  j                  d|gt	        | g||             S )Nr4   r   r   )r   r   r   r   r0   )r   r   r   r   r   r   s         rY   r   zSymNodeVariable.call_method9
  sH     	+"BII"" #D=4=&9
 	
r[   c                     | j                         }|t        t        fv r-t        j                  j                  | j                               S t        | !  |      S r   )	r   r`   rN   r   r9   r   rw  r   r^  )r   r   rj  r   s      rY   r^  zSymNodeVariable.nb_index_implK
  sO     !!#c4[ --44T5G5G5IJJw$R((r[   c           	          ddl m}  |||j                  j                  dt        | j                         fi             S r"  )r   r   r   r   r   r   rm  s      rY   r`  zSymNodeVariable.nb_int_implY
  s>     	+))(("	
 	
r[   c                 $    | j                  |      S r   rb  r  s       rY   rc  zSymNodeVariable.method___int__l
  s     ##r[   r   c           
          t        |      st        j                  |t              S |r|| gn| |g}t        j                  | |j                  j                  dt        j                  gt        |i        d       S rF  )ra   r7   r   r   r   r   r   r   rk  r!  r0   rJ  s        rY   r#  zSymNodeVariable.nb_add_implq
  rL  r[   c           
          |j                         st        j                  |t              S t        j                  | |j                  j                  dt        j                  gt        | |gi        d       S rF  )r^   r7   r   r   r   r   r   r   rk  r/  r0   r   r   r   r   s       rY   r0  zSymNodeVariable.nb_or_impl
  t     $$&"((^<<%%"BII""0A4-QS0T  & 
 	
r[   c           
          |j                         st        j                  |t              S t        j                  | |j                  j                  dt        j                  gt        | |gi        d       S rF  )r^   r7   r   r   r   r   r   r   rk  r3  r0   r  s       rY   r4  zSymNodeVariable.nb_and_impl
  st     $$&"((^<<%%"BII""1BD%=RT1U  & 
 	
r[   c           
          |j                         st        j                  |t              S t        j                  | |j                  j                  dt        j                  gt        | |gi        d       S rF  )r^   r7   r   r   r   r   r   r   rk  r6  r0   r  s       rY   r7  zSymNodeVariable.nb_xor_impl
  r  r[   c           
         |j                         st        j                  |t              S |r|| gn| |g}t        j                  | |j                  j                  dt        j                  gt        |i        d       S rF  )r^   r7   r   r   r   r   r   r   rk  r%  r0   rJ  s        rY   r)  zSymNodeVariable.nb_lshift_impl
       $$&"((^<< 't}dE]%%"BII""3DT23N  & 
 	
r[   c           
         |j                         st        j                  |t              S |r|| gn| |g}t        j                  | |j                  j                  dt        j                  gt        |i        d       S rF  )r^   r7   r   r   r   r   r   r   rk  r,  r0   rJ  s        rY   r-  zSymNodeVariable.nb_rshift_impl
  r  r[   c           
          t        |      st        j                  |t              S |r|| gn| |g}t        j                  | |j                  j                  dt        j                  gt        |i        d       S rF  rH  rJ  s        rY   rK  z SymNodeVariable.nb_subtract_impl
  rL  r[   c           
         t        |      st        j                  |t              S |r|| fn| |f\  }}t        j                  | |j                  j                  dt        j                  gt        ||gi        d       S rF  )ra   r7   r   r   r   r   r   r   rk  r  r0   r   r   r   r   r'  r(  s         rY   r9  z SymNodeVariable.nb_multiply_impl
  s     %U+"((^<<$+E4=$S%%"BII""0A3*b0Q  & 
 	
r[   c           
         t        |      st        j                  |t              S |r|| fn| |f\  }}t        j                  | |j                  j                  dt        j                  gt        ||gi        d       S rF  )ra   r7   r   r   r   r   r   r   rk  r;  r0   r  s         rY   r<  z$SymNodeVariable.nb_floor_divide_impl
  s     %U+"((^<<$+E4=$S%%"BII""!2!25FSzSU5V  & 
 	
r[   c           
         t        |      st        j                  |t              S |r|| fn| |f\  }}t        j                  | |j                  j                  dt        j                  gt        ||gi        d       S rF  )ra   r7   r   r   r   r   r   r   rk  r>  r0   r  s         rY   r?  z#SymNodeVariable.nb_true_divide_impl
  s     %U+"((^<<$+E4=$S%%"BII""!1!14EsCjRT4U  & 
 	
r[   c           
         t        |      st        j                  |t              S |r|| fn| |f\  }}t        j                  | |j                  j                  dt        j                  gt        ||gi        d       S rF  )ra   r7   r   r   r   r   r   r   rk  rA  r0   r  s         rY   rB  z!SymNodeVariable.nb_remainder_impl  s     %U+"((^<<$+E4=$S%%"BII""0A3*b0Q  & 
 	
r[   c           	          ddl m}  |||j                  j                  dt        | j                         fi             S r"  )r   r   r   r   r   r   rm  s      rY   re  zSymNodeVariable.nb_float_impl,  s>    
 	+))(("	
 	
r[   c                 $    | j                  |      S r   rg  r  s       rY   rh  z SymNodeVariable.method___float__=  s     !!"%%r[   c                 t    t         j                  |t        j                  | j	                               d       S NrG  )r   r   rk  rl  r   r   s     rY   rn  z SymNodeVariable.nb_negative_implB  4     %%LL) & 
 	
r[   c                 $    | j                  |      S r   rq  r  s       rY   rr  zSymNodeVariable.method___neg__L       $$R((r[   c                 8    t        | j                               dfS rP  hashrw  r   s     rY   rD  zSymNodeVariable.hash_implQ  s    D&&()500r[   c                 t    t         j                  |t        j                  | j	                               d       S r  )r   r   rk  ru  r   r   s     rY   rv  z SymNodeVariable.nb_positive_implT  r  r[   c                 $    | j                  |      S r   rx  r  s       rY   ry  zSymNodeVariable.method___pos__^  r  r[   c                 t    t         j                  |t        j                  | j	                               d       S r  )r   r   rk  r{  r   r   s     rY   r|  z SymNodeVariable.nb_absolute_implc  r  r[   c                 $    | j                  |      S r   r~  r  s       rY   r  zSymNodeVariable.method___abs__m  r  r[   c                      yr   r   r   s    rY   is_python_hashablez"SymNodeVariable.is_python_hashabler  r   r[   c                 4    t        | j                               S r   r  r   s    rY   get_python_hashzSymNodeVariable.get_python_hashu  s     D&&())r[   c                     t        |t              r!| j                         |j                         k(  S t        |t              xr! | j                         |j	                         k(  S r   )rT   r   rw  r7   rx  )r   r   s     rY   rO  zSymNodeVariable.is_python_equalz  sZ    e_-%%'5+>+>+@@@ uo. C""$(@(@(BB	
r[   r   rQ  )9rW   rR  rS  rT  r7   rU  rV  r   classmethodr   r   r   r   r   rN   r^   r   r   r   ru   rv  r
   r`   r_   rw  r  r  r   r^  r`  rc  r#  r0  r4  r7  r)  r-  rK  r9  r<  r?  rB  re  rh  rn  rr  rn   rD  rv  ry  r|  r  r  r  r  rO  r\  r]  s   @rY   r   r   	  s,    	 
	'	'N"C " 
 #	'  t	
  
 27c 7C 73 74 7&T & # @'@ 
@?'? ? 	?
 
?$ 7       7;$]3	e	
'
 
 ?#	

 S/)*
 

$)') 
)
'
 

&$-$69$EH$	$ 	
'
 
 	

 

, 	
'
 
 	

 

( 	
'
 
 	

 

( 	
'
 
 	

 

( 	
'
 
 	

 

* 	
'
 
 	

 

* 	
'
 
 	

 

, 	
'
 
 	

 

, 	
'
 
 	

 

* 	
'
 
 	

 

* 	
'
 
 	

 

"
'
 

"&-&69&EH&	&

'
 

)-)69)EH)	)
17 1E#t)<L 1
'
 

)-)69)EH)	)

'
 

)-)69)EH)	)
D * *

V 
 
r[   r   c                   <    e Zd ZdZedddej                  j                  dedd fd       Z	de
fdZdddeee
f   fd	Zddd
ededefdZdddedefdZededee   deeef   deee   eeef   f   fd       Zdddedee   deeef   def
 fdZdef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@   rv   r  rK   c                 .    ddl m}  |dt        | |d|S )Nr4   r   rt  r   )r   r   r  )r   rv   r  r   s       rY   r   zNumpyNdarrayVariable.create  s,     	/  
+
 	
 	
r[   c                      yrP  r   r   s    rY   is_hashablez NumpyNdarrayVariable.is_hashable  s    r[   c                 "    ddl m}  ||d       y )Nr   )raise_type_errorz unhashable type: 'numpy.ndarray')r  r  )r   r   r  s      rY   rD  zNumpyNdarrayVariable.hash_impl  s    *?@r[   r   r   c                 8   ddl m} t        |t        t        t
        f      st	        j                  t              S t        |   }|j                  j                  d ||      | j                         |j                         fi       }t        j                  ||      S )zKndarray tp_richcompare: element-wise comparison via numpy_operator_wrapper.r   )numpy_operator_wrapperr   )rR   r  rT   r   r9   ru   r   r   r(   r   r   r   r  )r   r   r   r   r  r   rv   s          rY   r   z%NumpyNdarrayVariable.richcompare_impl  s     	3%/3C^!TU#**>::&r*		&&"5)]]_enn./	
 $**2u55r[   r   c                 :   	
 ddl m	 ddlm
 d } j	                         j
                  j                  d   }t        j                  |      }dt        f	 
fd}dv rEj                  j                  d		 j	                         fi       }t        j                  |      }nd
v r t        j                  t        |            S dv rDt!        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_wrapperr4   r   r   rK   c            	      n     j                   j                  dj                          fi             S )Nr   )r   r   r   )r   r  r   r   r   s   rY   insert_into_graphz;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  s;     		&&#%7$--/49PRT r[   )Trealimagflatr   )ry   r  )ro   r{   c              3   2   K   | ]  }t        |        y wr   r  r  s     rY   r   z3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s     6I!s1v6Ir  rz   )r  flagsrp   z$Unsupported ndarray attribute accessr<  rX  z3Dynamo currently does not support tracing `ndarray.r  r   __version__z&Unsupported ndarray.__version__ access)rR   r  r   r   r   r   r   tnpndarrayr7   r   r   r  r   r   rV   r   rn   rz   r`   r    r  )r   r   r   ro  r   example_ndarrayr  rv   r  r  r   s   ```      @@rY   rq  z NumpyNdarrayVariable.var_getattr  s    	/*,,11/B++m4	? 	 	 00II**"$'	E *00U;F ))"((W_d-KLL((#$)G$GAH&,,R6Iq6I1IJJ$&&V^#)=)=$=A>&,,RQ88$&&//>&tfAdV4QRVQWWYZ	 ]"@&tfAdV4QRVQWWYZ	 >%%r[   r   r   c                     | dk(  r8ddd}|j                         D ci c]  \  }}|j                  ||      | }}}||fS c c}}w )Nclipminmax)a_mina_max)r   r   )r   r   r   kwargs_renamer   r   s         rY   
patch_argszNumpyNdarrayVariable.patch_args  sT     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astyper4   )BuiltinVariablerp   r   Ozndarray.astype(object)r  rX  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__rz   r  __iter__)tostringtobytes__delattr__zUnsupported ndarray method callz	`ndarray.z&()` is not modelled in `torch._numpy`.r   )r  r    rR   r  r  builtinr  rv  is_constant_matchrT   rp  r  r   r  r   r   r   r   r0   r  r  r   )r   r   r   r   r   r    r  r  	dtype_argis_object_stris_object_typerv   r   s               rY   r   z NumpyNdarrayVariable.call_method  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5r[   c                 :    t         t         j                  S t        S r   )r  r  r   r   s    rY   r   z NumpyNdarrayVariable.python_type9  s    >::Or[   )rW   rR  rS  rT  rW  rP   r  r  r   r   rN   r  rn   r`   rD  r7   rV  r   rq  r  r  r  r   r   r   r\  r]  s   @rY   r  r    sj   
 

'

05

KN

	

 

T A7 AE#t)<L A
6'6 6 	6
 
6(G-G58G	GR o.8<S/=Q8R	tO$d3+?&@@	A 26'26 26 ?#	26
 S/)*26 
26hT r[   r  c                        e Zd ZdZddhej
                  Zddddej                  j                  de	e
z  dz  deded	df
 fd
Ze	 ddede	e
z  dz  ded	d fd       Z xZS )UnspecializedPythonVariablezO
    This is a 1-element tensor represents unspecialized python float/int.
    	raw_valueneed_unwrapNTr  r  rv   r   rK   c                B    t        |   |fi | || _        || _        y r   )r   r   r  r  )r   rv   r  r  r   r   s        rY   r   z$UnspecializedPythonVariable.__init__K  s&     	)&)"&r[   tensor_variablec                 H    t        di t        |j                        ||dS )Nr  r   )r  r  __dict__)r  r  r  r  s       rY   from_tensor_variablez0UnspecializedPythonVariable.from_tensor_variableW  s/     + 
?++,
#
 	
r[   r  )rW   rR  rS  rT  ru   rU  rP   r  r  r_   r`   rN   r   r   r  r  r\  r]  s   @rY   r  r  @  s    
 	 
	&	&N )- 
'xx~~
' 3;%	
'
 
' 
' 

' 
 !	
'
 3;%
 	

 
'
 
r[   r  c                        e Zd ZdZdhej
                  Zdej                  j                  de	ddf fdZ
ededd f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  rv   r   rK   Nc                 X    |j                  dd      }t        |   |fi | || _        y )Nr  F)r  r   r   r  )r   rv   r   r  r   s       rY   r   zFakeItemVariable.__init__o  s-    jj6)&)&r[   r  c                 >    t        di t        |j                        S rg  )r  r  r  )r  r  s     rY   r  z%FakeItemVariable.from_tensor_variablet  s      A$'?'?"@AAr[   )rW   rR  rS  rT  ru   rU  rP   r  r  r   r   r  r  r\  r]  s   @rY   r  r  f  sl    9 			&	&N
'ehhnn ' ' '
 B,B	B Br[   r  c                   @    e Zd Zdddee   deeef   defdZdefdZ	y)	r  r   r@   r   r   rK   c           	      <   ddl m} | j                  j                  }|t        j
                  j                  u rd }t        |      dk(  rP|d   j                         r=t        |      dk(  r/|d   } |j                  ||| j                  | j                        }nht        d| j                   d| d| ddd	gt        j                  
       n4t        j                  ||      j                  || gt!        |      z   |      }|t#        d      | j                  j$                  }|t        j
                  j$                  ur(t        j                  ||      j                  ||g|       |j&                  j(                  j+                  t-               |t.               |S )Nr4   rB   r   zCCalling subclass default constructor with more than tensor argumentr  r  rd   r  zFAvoid this constructor call or move it outside `torch.compile` regioner   z'__new__ must return a non-None variabler  )ru  rC   rJ   __new__rP   rU   rv  r   rz  r   r    r   r   r7   r   r   r  r  r   r   rA  r  r  r5   )	r   r   r   r   rC   new_funcrT  data	init_funcs	            rY   r   z$TensorSubclassVariable.call_function|  s    	A::%%u||+++C4yA~$q'"3"3"5#f+:JAw C2BBdjj$++ a#zzl&ixqI 92 +66		 "''H5CCTFT$Z'C ; !JKKJJ''	 ELL111!!"i0>>rC5&Q 			))Hc-A 	* 	
 
r[   c                     | j                   S r   rX   r   s    rY   rx  z)TensorSubclassVariable.as_python_constant  r   r[   N)
rW   rR  rS  r  r7   r  rV  r   r   rx  r   r[   rY   r  r  {  sI    0'0 ?#0 S/)*	0
 
0dD r[   r  c            
            e Zd Zdhej                  Zdedej                  deddf fdZ	de
fdZdd	d
edee   deeef   def
 fdZddZ xZS )r  r   from_tensorr   rK   Nc                 @    t        |   di | || _        || _        y rg  )r   r   r  r   )r   r  r   r   r   s       rY   r   zUntypedStorageVariable.__init__  s%     	"6"&*r[   c                 "    t         j                  S r   )rP   UntypedStorager   s    rY   r   z"UntypedStorageVariable.python_type  s    ###r[   r   r@   r   r   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 )Nrz   z0 args and 0 kwargsz
 args and z kwargsr   )untyped_storage_sizer4   r   r   resize_z0 kwargsr   )r1   rv  r   rz   r   r7   r   r`   external_utilsr  r   r   r   r   r  r   rP   rh  r5  resize_storage_bytes_r   r   )	r   r   r   r   r   ro  r  r   r   s	           rY   r   z"UntypedStorageVariable.call_method  sQ    6>v#)4ykCK=@	 '',,.F#F+&,,RV==A2$II**',))2246	  9Ta#BjS[M:QRII""		""88!!**,d1g.>.>.@A	 Kw"2tT6::r[   c                 l     || j                          |j                  d       |j                  d       y )Nr  r   )r  load_methodr   r   s     rY   reconstructz"UntypedStorageVariable.reconstruct  s-      !-.Ar[   r   r>   rK   N)rW   rR  rS  r7   rU  ru   rP   r  r   r   r   r   rV  r  r  r   r  r\  r]  s   @rY   r  r    s    		'	'N
	+#	+ ++	+ 		+
 
	+$T $+;'+; +; ?#	+;
 S/)*+; 
+;Zr[   r  c            	       6    e Zd Zddej                  j
                  j                  j                  fhZ	 dde	de
deddf fdZdefd	Zed
ej                   j"                  dej                   j"                  fd       ZdddefdZdddede
defdZddZ xZS )rH  )r   r  r   r  rN  r   rK   Nc                 j    t        |   di | || _        || _        |j	                         | _        y rg  )r   r   r  rN  r   tensor_version)r   r  rN  r   r   s       rY   r   zDataPtrVariable.__init__  s6     	"6"&&);;=r[   c                     t         S r   r  r   s    rY   r   zDataPtrVariable.python_type
  s    
r[   r   c                 l   t        |t        j                  j                        r|j                  |j
                  f| j                  v rt        |j                        dk(  rt        |j                  d   t        j                  j                        r|j                  d   }t        |t        j                  j                        rn|j                  |j
                  f| j                  v rJt        |j                        dk(  r2t        |j                  d   t        j                  j                        r|S )Nr4   r   )	rT   rP   r  Noder   target_DATA_PTR_PRESERVING_TARGETSrv  r   )r  r   s     rY   "_strip_data_ptr_preserving_aliasesz2DataPtrVariable._strip_data_ptr_preserving_aliases  s     tUXX]]+$++&#*J*JJDII!#499Q<799Q<D tUXX]]+$++&#*J*JJDII!#499Q<7 r[   r   r7   c                 D   t        |t              sy| j                  | j                  |j                  k7  ry| j                  | j                  j                         j                        }| j                  |j                  j                         j                        }||u S rP  )rT   rH  r  r  r  r   r   )r   r   	self_root
other_roots       rY   _is_same_data_ptrz!DataPtrVariable._is_same_data_ptr  s    %1&$*=*=AUAU*U;;%%',,
	 <<&&(--

 J&&r[   r   r@   r   c           	          |dvrt        j                  t              S | j                  |      }|rt        j                  |dk(        S t	        dd|  d| d| dg        y)	z-DataPtr tp_richcompare: identity-based eq/ne.rq  rr  zData pointer comparisonzrichcompare_impl rX  zjDynamo can only trace data pointer comparisons when it can prove both operands have the same data pointer.r   N)r9   r   r   r  r    )r   r   r   r   same_data_ptrs        rY   r   z DataPtrVariable.richcompare_impl'  sp     ))#**>::..u5#**2>::-'vQrd!E7;J	
r[   c                      || j                          |j                  | j                         |j                  d       y )Nr   )r  r  rN  r   r   s     rY   r  zDataPtrVariable.reconstruct;  s2      !D,,-Ar[   )data_ptrr  )rW   rR  rS  rP   rh  ri  r  r7  r  ru   rV  r   r   r   r   r  r  r  r  rN   r  r7   r   r  r\  r]  s   @rY   rH  rH    s    !	%))..//778$  &	>#	> 	> 		>
 
	>T  ehhmm   ''8 'T '
'
 
 	

 

(r[   rH  )rU   )rT  r  loggingrk  r  r  r^  collections.abcr   r   
contextlibr   	itertoolsr   r   typingr   r	   r
   r   rb  torch._numpy_numpyr  torch.fxrP   torch.randomr   r   torch._dynamor   torch._library.opaque_objectr   torch._opaque_baser   torch._subclasses.meta_utilsr   %torch.fx.experimental.symbolic_shapesr   r   r   r   r   torch.utils._python_dispatchr   rR  r   r   r   _trace_wrapped_higher_order_opr   r  r   r   r   r    r!   r"   r#   r  r$   guardsr%   r&   r   r'   rR   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r  r5   r6   r7   r   r9   listsr:   r;   script_objectr<   user_definedr=   numpyr  ModuleNotFoundErrortorch._dynamo.codegenr>   torch._dynamo.output_graphr?   torch._dynamo.symbolic_convertr@   	functionsrA   ru  rC   	getLoggerrW   r  gtltgeler  neis_is_notsupported_tensor_comparison_opssupported_const_comparison_opssupported_comparison_opsr  fromkeysr  %supported_tensor_comparison_op_values$supported_const_comparison_op_valuesr  rN   rZ   re   
TensorBaser  rU   rS  ra   rV  rk   ru   r   r  r  r  r  r  rH  r   r[   rY   <module>r1     s  "       . "   9 9     $ + A ) 6  G 3 3 :   ; 0     J I & 5 4 2
 /6H/< g! 
	
++
++
++
++
,,oo	#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
& T  88&&//%,,2G2GG Yo Y$ YKell Ks K# K*N$_ N$bH|
o |
~y> yx#
. #
LB~ B*45 4nD_ DNEo EGe  	Bs   >J< <KK