
    sg                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	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 d dlmZ d dlmZmZmZmZmZ d dlmZ ddlm Z m!Z! dd	l"m#Z# dd
l$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? 	 d dl@ZAerd dlCmDZD  ej                  eF      ZGej                  ej                  ej                  ej                  ej                  ej                  dZNej                  ej                  ej                  ej                  dZQi eNeQZReSj                  eNj                               ZVeSj                  eQj                               ZW G d de;      ZX G d de;      ZY G d deX      ZZ G d deX      Z[ G d deX      Z\ G d  d!e;      Z] G d" d#e;      Z^y# eB$ r dZAY *w xY w)$    N)DictListTYPE_CHECKING)compiled_autograd)is_sparse_any)guard_scalarGuardOnDataDependentSymNodehas_free_symbolsis_symbolicSymTypes)is_traceable_wrapper_subclass   )config	variables)trace_wrapped)unimplemented	UserErrorUserErrorType)call_hook_from_backward_state)GuardBuilderinstall_guard)
AttrSource)
fqnget_custom_getattrget_fake_valueget_real_valueguard_if_dynobject_has_getattributeproductproxy_args_kwargsset_example_valuetensortype_to_dtype   )VariableTracker)ConstantVariable)SizeVariableInstructionTranslator)><z>=z<===!=)iszis notr+   r,   c                       e Zd ZdZdddddddd	d
dddddhej
                  Zd Zddddddej                  j                  ddf fdZ
d Zd Zd Zedej                  fd       ZdZdZd Zd Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Zd% Zd& ZdZd'ZdZd(Zd) Z d* Z!d[dZd+Z"d, Z#	 	 	 	 	 	 d\d-Z$d. Z%d/ Z&d[d0Z'd1 Z(e(Z)d2 Z*e*Z+d3 Z,d4 Z-d[d5Z.d]d7Z/d8 Z0d9 Z1d: Z2d6d;d<Z3d= Z4d> Z5d? Z6d@ Z7e e8jr                  d      dA               Z:dB Z;ddCdDZ<dE Z=dF Z>dG Z?dH Z@dI ZAdJ ZBddKdLZCddCdMZDdN ZEdO ZFdP ZGdQ ZHdR ZIdSeJdTefdUZKd^dVZLdW ZMdX ZNdSeJfdYZO xZPS )_TensorVariablez=A torch.Tensor input or an intermediate value in the FX graphproxydtypedevicelayoutndimsizestriderequires_gradis_quantizedis_contiguous	is_sparse
class_typespecialized_value_is_name_setc                 j    t        | j                  j                  | j                  j                        S )z
        Get the actual value represented by this variable if computation is run
        using the user-provided inputs.
        NOTE: this runs actual tensor computation and may be
        slow and memory-intensive.
        )r   r0   nodetracerselfs    Q/var/www/html/venv/lib/python3.12/site-packages/torch/_dynamo/variables/tensor.pyr   zTensorVariable.get_real_valueq   s#     djjootzz/@/@AA    N)r5   r6   r9   r=   returnc                2   t        |   di | || _        || _        || _        || _        || _        || _        || _        || _	        || _
        || _        || _        |	| _        |
| _        |#| j                  j                  j                   dk(  }|| _        y )Nplaceholder )super__init__r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   has_grad_fnr?   opr=   )rB   r0   r1   r2   r3   r4   r7   r8   r:   r;   rK   r5   r6   r9   r=   kwargs	__class__s                   rC   rJ   zTensorVariable.__init__z   s    & 	"6"

		*(*"$&::??-->L".rD   c                 Z    t        | j                  j                  j                  d         S Nexample_value)reprr0   r?   metarA   s    rC   
debug_reprzTensorVariable.debug_repr   s     DJJOO((9::rD   c                     | j                   S Nr0   rA   s    rC   as_proxyzTensorVariable.as_proxy       zzrD   c                     | j                   S rV   )r;   rA   s    rC   python_typezTensorVariable.python_type   s    rD   valuec           
         | j                   | j                  | j                  t        | j                        | j
                  | j                  | j                  t        |       d}	 | j                  d u|d<   t        |       rMt        |       sBt        | j                         D cg c]  }t        |      rt        |      n| c}      |d<   |S t        |       st        | j                         D cg c]  }t        |      rt        |      n| c}      |d<   t        | j!                               |d<   t"        j$                  j&                  j)                  |       rd |d<   |S t        t"        j*                  j,                  D cg c]  }| j/                  |      r| c}      |d<   |S # t        $ r	 d|d<   Y Hw xY wc c}w c c}w c c}w )N)r1   r2   r3   r4   r7   r8   r:   r;   rK   Fr5   r6   r9   memory_format)r1   r2   r3   intr4   r7   r8   r:   typegrad_fn	Exceptionr   r
   tupler5   r   r6   torch_C
_functorchis_batchedtensor_prims_common_memory_formatsr9   )r\   propssxs       rC   
specializezTensorVariable.specialize   s    [[llll

O"00!..u+	
	)#(==#<E-  (8(?!:?**,GQ;q>Qq0GE&M8 3 "%( " ;@**,GQ;q>Qq0GE&M
 $ELLN3E(Oxx""33E: *.o&  */ "'!4!4!D!D ..Q.? *o& E  	) $)E- 	) H Hs$   %F- #G0GG-F?>F?c                 :   | j                   j                  j                  d   }| j                  st	        |      r| j                   j                  j                  d   }|j                         \  }}t        | j                         |      }t        ||      }||v r-t        |t        j                        sJ ddlm}  ||||      S t        |      sddlm}	 |	j                  ||      S | j                  r| j                  j!                         st"        |j$                  j&                  |j$                  j(                  d}
	 t+        | j                  j-                         |
      }|t"        t1        |      rt"        t3        |      rt"        t        ||      }t        |      rt"        ddlm} dd	lm} t;        | j                  |      }t=        |j?                  |j@                                 |||      |      S # t.        $ r}t"        |d }~ww xY w)
NrQ   r#   wrap_fx_proxy)txr0   rQ   SourcelessBuilderLGr   )r   VariableBuilder)!r0   r?   rS   sourcer   __tensor_flatten__getattrrX   
isinstancere   Tensorbuilderrq   callablert   createsubguards_allowedNotImplementedErroroutputlocal_scopeglobal_scopeevalnamerc   r   r   guardsr   ry   r   r   
make_guardHASATTR)rB   rr   r   fake_valattrsctxr0   rQ   rq   rt   scope_input_associated_real_valueexc
real_valuer   ry   attr_sources                    rC   dynamic_getattrzTensorVariable.dynamic_getattr   s   ::??''8 {{<XFzz++O<H!446JE3DMMOT2E#Hd3Mu}!->>>2$%}UU m,6(//MBB = = ?%% ii++"))2H2HI	/ ,00@0@0BE+J( (/%%"#?@%%:;%%94@
J &%), d3k,,\-A-ABC/r;/
;;1  	/%3.	/s   $H 	HHHc                     | j                   t        j                  | j                         S | j                  |dg i       S )Ndim)r4   r%   r   call_methodrB   rr   s     rC   method_attr_ndimzTensorVariable.method_attr_ndim  s8    99 #**49955##Br266rD   c                 Z    | j                   t        j                  | j                         S y rV   )r1   r%   r   r   s     rC   method_attr_dtypez TensorVariable.method_attr_dtype%  s&    ::!#**4::66 "rD   c                 Z    | j                   t        j                  | j                         S y rV   )r2   r%   r   r   s     rC   method_attr_devicez!TensorVariable.method_attr_device)  &    ;;"#**4;;77 #rD   c                 Z    | j                   t        j                  | j                         S y rV   )r3   r%   r   r   s     rC   method_attr_layoutz!TensorVariable.method_attr_layout-  r   rD   c                 t    | j                   ,t        j                  | j                   j                  dk(        S y )Ncuda)r2   r%   r   ra   r   s     rC   method_attr_is_cudaz"TensorVariable.method_attr_is_cuda1  s1    ;;"#**4;;+;+;v+EFF #rD   c                     | j                   A| j                   D cg c]!  }t        j                  j                  |      # }}t	        |      S | j                  |dg i       S c c}w Nr5   )r5   r   r%   r   r&   r   )rB   rr   rm   sizess       rC   method_attr_shapez TensorVariable.method_attr_shape5  s\    99 CG99MaY//66q9MEM&&##BB77 Ns   &A"c                 Z    | j                   t        j                  | j                         S y rV   )r7   r%   r   r   s     rC   method_attr_requires_gradz(TensorVariable.method_attr_requires_grad<  s*    )#**4+=+=>> *rD   c                 Z    | j                   t        j                  | j                         S y rV   )r8   r%   r   r   s     rC   method_attr_is_quantizedz'TensorVariable.method_attr_is_quantized@  s*    (#**4+<+<== )rD   c                 Z    | j                   t        j                  | j                         S y rV   )r:   r%   r   r   s     rC   method_attr_is_sparsez$TensorVariable.method_attr_is_sparseD  s&    >>%#**4>>:: &rD   c                     t        j                  t        j                  j                  j
                        j                  || gi       S rV   )r   TorchInGraphFunctionVariablere   rf   	_autograd_get_data_attrcall_functionr   s     rC   method_attr_datazTensorVariable.method_attr_dataH  s8    55HH--

-TFB
'	(rD   c                 \    | j                   rt        d       y t        j                  d       S )NzTensorVariable has a grad_fn)rK   r   r   r%   r   s     rC   method_attr_grad_fnz"TensorVariable.method_attr_grad_fnM  s%    89--d33rD   c                 \    ddl m} t        j                  |      j	                  || gi       S )Nr   )_tensor_version)tensor_version_opr   r   r   r   )rB   rr   r   s      rC   method_attr__versionz#TensorVariable.method_attr__versionS  s,    755oFTT
 	
rD   c                 N   ddl m} ddlm} 	  |t              j                  || t        |      gi       }t        ||       }| j                  r<t        t        | j                  |      j                  t        j                               t        |      S # t        $ r d}Y `w xY w)Nr#   GetAttrVariable)BuiltinVariableF) r   builtinr   r|   r   r%   r}   AttributeErrorrz   r   r   r   r   r   )rB   rr   r   r   r   varret_vals          rC   call_hasattrzTensorVariable.call_hasattrZ  s    %,	!'*88T+D12BC
 %S/::G ;;4;;-889M9MN  ((  	G	s   5B B$#B$c                 .    ddl m}  j                        r! j                         v rt	        d d       dk(  r | j                               S t         d d       }| |      nd }|} j                  rq j                  j                         rWdvr|j                         sCt         j                  t        j                               t         j                        |_         j                  t        t         j"                  j$                        rt        t         j"                  j$                        }t        |d      rt        ||j'                         d	         rut         j(                  j*                  t        ||j'                         d	         j,                  v r4t.        j0                  j3                  t         j                        
      S |dk7  r fd} |       }| j5                        }|t6        |S )Nr#   )UserDefinedClassVariablezIllegal getattr invocation  in strict moderN   method_attr_)gradr7   	overloadsr   )rz   r   c                  h   ddl m}  ddlm} 	 t	        j
                  t        j                        }t        |      t        j                  k7  ry |j                  j                               }j                   | |t        j                              S  | |      S # t        $ r Y y w xY w)Nr#   rp   r   )rr   r0   rz   rr   r0   )r   rq   miscr   inspectgetattr_staticre   r~   r   ra   typesGetSetDescriptorTypecreate_getattr_proxyrX   rz   r   )rq   r   static_attrr0   r   rB   rr   s       rC   try_generic_attr_handlingz=TensorVariable.var_getattr.<locals>.try_generic_attr_handling  s    21 ")"8"8t"LK $(B(BB'<<T]]_dS;;*(U:dkk43P  )Be<<% &   s   $B% %	B10B1)r   r   is_strict_mode_strict_mode_banned_opsr   r[   r|   rz   r   is_python_constantr   r   r   
TYPE_MATCHr   hasattrre   opsatenr   Taginplace_viewtagsr   r   DelayGraphBreakVariabler   r   )rB   rr   r   r   handlerresultfnr   s   ```     rC   var_getattrzTensorVariable.var_getattro  s   .r"tt/K/K/M'M7v_MN;+D,<,<,>??$,tf 5t< ' 3 --/55&:S:S:U $//,*A*ABC&t{{D9FM ;;"wuyy~~t'D.BK(Bq 12II**gb",,.:K.L.Q.QQ !~~==%dkk48 >   >dfn=4 /0F>))"d3F>%%rD   c                    | j                   st        d       |j                  j                  |j                  j                  d}	 t        | j                   j                         |      }t        d       t        | j                   j                  t        j                               t        |      }t        j                  |      S # t        $ r}t        d|        Y d }~{d }~ww xY w)Nz3call_id not supported for sourceless TensorVariableru   z%error getting associated real value: z%call_id without associated real value)rz   r   r   r   r   r   r   rc   r   r   r   ID_MATCHidr%   r   )rB   rr   r   r   r   id_values         rC   call_idzTensorVariable.call_id  s    {{OP ii++"))2H2HI	I+/0@0@0BE+J( (/ABdkk,,\-B-BCD23&&x00  	IA#GHH	Is   $C	 		C*C%%C*c                      | j                   dkD  S )Nr   )r4   r   s     rC   has_unpack_var_sequencez&TensorVariable.has_unpack_var_sequence  s    yy1}rD   c           	         ddl m} | j                  rt        | j                        }n;| j	                  |dg i       }t        |t              sJ t        |j                        }|dk7  sJ d       | j                  r| j                  d   }nx| j	                  |dt        j                  d      gi       }t        |t        t        f      sJ t        |t              r|j                  |j                        }n|j                  }|t        |      }n%t        |      |k(  sJ d| dt        |       d       |D cg c]'  } |t        |       || j!                         |   	      ) c}S c c}w )
Nr#   wrap_fx_proxy_clsr5   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.
target_clsrr   r0   )r   r   r5   lenr   r}   r&   itemsr%   r   SymNodeVariableevaluate_exprr   r\   rangera   rX   )	rB   rr   idxesr   size_lensize_varlength
dyn_lengthis	            rC   unpack_var_sequencez"TensorVariable.unpack_var_sequence  sX   .99499~H''FB;Hh5558>>*H1}<<<}99YYq\F))"f7G7N7Nq7Q6RTVWJ j?<L*MNNN*o6#11"))<#))=&ME E
f$`*6(2HUT^_`$ 
 d$--/RSBTU
 	
 
s   ;,E*c                 J    t         j                  j                  j                  S rV   )re   _dynamor   )_autograd_backward_strict_mode_banned_opsrA   s    rC   r   z&TensorVariable._strict_mode_banned_ops  s    }}##MMMrD   c           
         | j                  |      r!|| j                         v rt        d| d       	 	 t        | d|       }	  ||i |}|r|S 	 ddlm}  || |j                  j                  d|gt        | g||             S # t        $ r}t        d| d|        Y d }~Wd }~ww xY w# t
        $ r Y jw xY w)	NzIllegal method invocation r   method_zunhandled args for z: r#   rp   r   )r   r   r   r|   	TypeErrorr   r   rq   r   create_proxyr    )	rB   rr   r   argsrM   handler_methodr   erq   s	            rC   r   zTensorVariable.call_method  s     r"tt/K/K/M'M6tfOLM	

	A$TWTF+;<NA'88!M 
 	+"BII"" #D=4=&9
 	
  A 3D6A3?@@A  		s)   B1 B
 
	B.B))B.1	B=<B=c                 .     | j                   dg|i |S r   _method_size_striderB   r  rM   s      rC   method_sizezTensorVariable.method_size   s    't''@@@@rD   c                 .     | j                   dg|i |S )Nr6   r  r  s      rC   method_stridezTensorVariable.method_stride#  s    't''B4B6BBrD   c                    t        |      }d }|dk(  r|nt        j                  }t        | |      x}"| ||      S t        j                  ||         S | j                  j
                  j                  j                  d      x}s|5 t        ||             }t        |      s |t        d |D                    S y  t        ||      |      }t        |      st        j                  t        |            S y y )Nc           
      h    t        | D cg c]  }t        j                  |fi | c}fi |S c c}w rV   )r&   r%   r   )rm   optionsys      rC   make_const_size_variablezDTensorVariable._method_size_stride.<locals>.make_const_size_variable)  s9    @AB1!((6g6BFM Bs   /r5   rQ   c              3   2   K   | ]  }t        |        y wrV   r`   .0rs     rC   	<genexpr>z5TensorVariable._method_size_stride.<locals>.<genexpr>B  s     ,DSV,D   )r   r%   r   r|   r0   r?   rS   getr
   rd   r`   )rB   r   r   r  RetVariabler  fakefake_rs           rC   r  z"TensorVariable._method_size_stride&  s   3	 )-$<L<S<S 	 t$$A1{"1~%'..qv66 JJOO((,,_==DJ{,t,.'/ 'u,DV,D'DEE 0
 -t,S1'/+223v;?? 0 KrD   c                 B   | j                   (t        j                  t        | j                               S | j                  j
                  j                  j                  d      x}:|j                         }t        |      st        j                  t        |            S y y rP   )r5   r%   r   r   r0   r?   rS   r  numelr
   r`   )rB   r  r  s      rC   method_numelzTensorVariable.method_numelH  s    99 #**7499+=>> JJOO((,,_==DJZZ\F#F+'..s6{;; , KrD   c                 Z    | j                   t        j                  | j                         S y rV   )r4   r%   r   rA   s    rC   
method_dimzTensorVariable.method_dimT  s&    99 #**49955 !rD   c                 n    | j                   )t        j                  | j                   j                        S y rV   )r1   r%   r   is_floating_pointrA   s    rC   method_is_floating_pointz'TensorVariable.method_is_floating_pointZ  s,    ::!#**4::+G+GHH "rD   c                 n    | j                   )t        j                  | j                   j                        S y rV   )r1   r%   r   
is_complexrA   s    rC   method_is_complexz TensorVariable.method_is_complex^  s,    ::!#**4::+@+@AA "rD   c                 N   ||j                         nt        j                  }| j                  !t	        j
                  || j                  v       S | j                  j                  j                  j                  d      x}%t	        j
                  |j                  |            S y )NrQ   r^   )
as_python_constantre   contiguous_formatr9   r%   r   r0   r?   rS   r  )rB   r_   r  s      rC   method_is_contiguousz#TensorVariable.method_is_contiguousb  s     ( ,,.(( 	
 )#**=D<N<N+NOOjjoo**..??dL#**"""?  MrD   Fc           
          | j                   t         j                  t        j                        rt	         fdt        j                         D              } j                  j                  dk(  r"t        j                  d|j                         S t        j                  d|j                         S |t        t        |j                                     dk(  r|j                         }t        j                  t        |            }ddlm} dd	lm}  |j"                         }	|rd
|i|} ||	 |	j$                  j&                  ddgt)         |g|             S y y )Nc              3   F   K   | ]  \  }}j                   |v s|  y wrV   )r1   )r  kvrB   s      rC   r  z-TensorVariable.method_type.<locals>.<genexpr>u  s$      aTZZ1_s   !!r   ztorch.cuda.ztorch.ztorch.tensortyper   r'   r#   rp   non_blockingr   ra   )r1   r}   r2   re   nextr"   r   ra   r%   r   __name__r   r(  symbolic_convertr(   r   rq   
current_txr   r  r    )
rB   r1   r/  rM   
tensortypetensor_typetensor_type_constr(   rq   rr   s
   `         rC   method_typezTensorVariable.method_typeo  sS   M

&4;;5 1779 J {{6)'..Z=P=P<Q/RSS'..
8K8K7L/MNND113459KK
  224K 0 7 7K8H I@.1&113B(,A&A &		&&! '.?'@&I ! L rD   c           
      N   t        |t              r|j                  rddlm} ddlm} ddlm}  |j                         }|j                         }  ||t        t        |j                  d      d            |j                  j                        }|j                  || ||      S y y )Nr   r'   r#   rx   TensorWithTFOverrideVariable__torch_function____func__)r}   TensorSubclassVariablerz   r2  r(   r   ry   torch_functionr:  r3  r(  r   r;  r<  from_tensor_var)rB   clsr(   ry   r:  rr   py_clstorch_fns           rC   method_as_subclassz!TensorVariable.method_as_subclass  s    c12szz@0D1&113B ++-F:cjj2FGT ''002H
 0??D&( # 8B2rD   c                     t        | j                  t        j                        rF| j                  j                  dk7  r| j                  j                  nd}t        j                  |      S y )Ncpu)r}   r2   re   ra   indexr%   r   )rB   rG  s     rC   method_get_devicez TensorVariable.method_get_device  sL    dkk5<<0)-)9)9U)BDKK%%E#**511 1rD   c                 T    t        j                  | j                  j                        S rV   )r%   r   r1   itemsizerA   s    rC   method_element_sizez"TensorVariable.method_element_size  s    &&tzz':':;;rD   )forcec                   t         j                  st        d       t        st        d       | j                  t
        j                  k7  rt        d| j                   d      ddlm	}  |j                         }|rR|j                         rB| j                  |dg i       }|j                  j                  dd	|j                         fi       }n* |j                  j                  dd
gt!        | | gi        }t"        j%                  ||      S )Nz+Tensor.numpy(). config.trace_numpy is Falsez&Tensor.numpy(). NumPy is not availablezcan't convert z1 layout tensor to numpy. Use Tensor.dense() firstr   r'   detachr   rE  view_as)r   trace_numpyr   npr3   re   stridedr   r2  r(   r3  r(  r   r   r  rX   r    NumpyNdarrayVariabler   )rB   rL  r(   rr   tr0   s         rC   method_numpyzTensorVariable.method_numpy  s    !!GHBC;;%--' -^_  	=-"--/ U--/  Xr26AII**=%!**,RTUE +BII**y+<dD\2+NE $**2u55rD   c                     ddl m} ddlm}  |j                         fd| j                         j                  j                  d   } || j                               }|j                  |      S )Nr   r'   r#   rs   c           	         fd}| j                   t        j                  t        j                  t        j                  t        j
                  fvrt        d       | j                         dk(  r	 || |      S | j                         dk(  r(t        |       D cg c]  \  }} ||||          c}}S t        |       D cg c]  \  }} |||          c}}S c c}}w c c}}w )Nc                     t         j                  j                  j                  j                  dd      5  t
        j                  |j                               cd d d        S # 1 sw Y   y xY w)Nallow_scalar_outputsT)unittestmockpatchobject	fake_moder   r   item)r   	sub_proxyrr   s     rC   wrapz:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrap  s[     ]]((//LL"8$  +11!(  s   $A%%A.z1Input tensor for tolist must be an integer tensorr   r#   )r`  )	r1   re   int8int16int32int64r   r   	enumerate)tensorr`  ra  r   val
sub_tensortolistrr   s         rC   rj  z,TensorVariable.method_tolist.<locals>.tolist  s    	 ||

	$  QRzz|q FI..zz|q >G>OPFAsS)A,/PP &/v%6!Az zYq\:  Qs   CC"rQ   )	r2  r(   r   rt   r3  rX   r?   rS   r   )rB   r(   rt   rg  outrj  rr   s        @@rC   method_tolistzTensorVariable.method_tolist  sb    <.-"--/	> %%**?;VT]]_- ''C00rD   c                     t        d       y )NzTensor.backwardr   r  s      rC   method_backwardzTensorVariable.method_backward      '(rD   c                     t        d       y )NzTensor.data_ptrrn  r  s      rC   method_data_ptrzTensorVariable.method_data_ptr  rp  rD   c                 \    t         j                  s| j                          t        d       y y )NzTensor.item)r   capture_scalar_outputs_warn_capture_scalar_outputsr   r  s      rC   method_itemzTensorVariable.method_item  s$    ,,--/-( -rD   c                      t         j                  j                  j                         } dj	                  t        j                  |             }t        j                  t        j                  d      |       y )Nr   a                      Graph break from `Tensor.item()`, consider setting:
                        torch._dynamo.config.capture_scalar_outputs = True
                    or:
                        env TORCHDYNAMO_CAPTURE_SCALAR_OUTPUTS=1
                    to include these operations in the captured graph.

                    Graph break: from user code at:
                    %s
                )re   _guardsTracingContextextract_stackjoin	tracebackformat_listlogwarningtextwrapdedent)
user_stackuser_stack_formatteds     rC   ru  z+TensorVariable._warn_capture_scalar_outputs  sX     ]]11??A
!wwy'<'<Z'HIOO	 !	
rD   c                     ddl m}  |j                         }| j                  |dt	        j
                  d      gi       S )Nr   r'   r5   r   )r2  r(   r3  r   r%   r   )rB   r(   rr   s      rC   method___len__zTensorVariable.method___len__  s<    <-"--/F-=-D-DQ-G,H"MMrD   r\   c                    ddl m}  |j                         }|=ddlm} ddlm} |j                  |j                  ||j                        | |||gi       S y )Nr   r'   )	polyfillsr#   rs   )
r2  r(   r3  r   r  r   rt   inline_user_function_returnr   addcmul_inplace)rB   tensor1tensor2r\   r(   rr   r  rt   s           rC   method_addcmul_zTensorVariable.method_addcmul_  s_    <-"--/$211!((Y-F-FGw/ 	 rD   c                 ^   fd |      r;t        |t              r+|j                  rt        j                         rt        d       ddlm}  |j                         } |j                  j                  dt        j                  gt        | ||gi         t        j                  d       S )Nc                     t        | t              r,| j                  t        j                  t        j
                  fv S t        | t        j                        rt        fd| j                  D              S y)Nc              3   .   K   | ]  } |        y wrV   rH   )r  r_  has_bool_keys     rC   r  zJTensorVariable.method___setitem__.<locals>.has_bool_key.<locals>.<genexpr>1  s     B$<-Bs   F)
r}   r/   r1   re   boolrb  r   TupleVariableanyr   )r.  r  s    rC   r  z7TensorVariable.method___setitem__.<locals>.has_bool_key-  sQ    !^,ww5::uzz":::Ay667B!''BBBrD   zWboolean masking setitem backwards, see https://github.com/pytorch/pytorch/issues/114123r   r'   r   )r}   r/   r7   re   is_grad_enabledr   r2  r(   r3  r   r  operatorsetitemr    r%   r   )rB   keyr\   r(   rr   r  s        @rC   method___setitem__z!TensorVariable.method___setitem__,  s    	 5.1##%%'i 	=-"--/			
 c5126	

  &&t,,rD   c                     t        d       y )NzTensor.resize_rn  r  s      rC   method_resize_zTensorVariable.method_resize_H  s    &'rD   c                     t        d       y )NzTensor.resize_as_rn  r  s      rC   method_resize_as_z TensorVariable.method_resize_as_K  s    )*rD   c                     t        d       y )NzTensor.sparse_resize_rn  r  s      rC   method_sparse_resize_z$TensorVariable.method_sparse_resize_N  s    -.rD   c                     t        d       y )NzTensor.sparse_resize_and_clear_rn  r  s      rC   method_sparse_resize_and_clear_z.TensorVariable.method_sparse_resize_and_clear_Q  s    78rD   c                 8    t        |      dkD  rt        d       y y )Nr#   z(Tensor.set_.source_Tensor_storage_offset)r   r   r  s      rC   method_set_zTensorVariable.method_set_T  s    t9q= DE rD   )alphac                    |bddl m}  |j                         }t        j                  t
        j                        j                  |||gi       }| j                  |d|gi       S y Nr   r'   add_)	r2  r(   r3  r   r   re   mulr   r   )rB   otherr  r(   rr   r   s         rC   method_add_zTensorVariable.method_add_^  sf    @1&113B;;EIIFTTUENBF ##B"== rD   c                8   ddl m}  |j                         }|t        j                  t
        j                        j                  |||gi       }t        j                  t
        j                        j                  |||gi       }| j                  |d|gi       S y r  )
r2  r(   r3  r   r   re   divr   r  r   )rB   r  r  r\   r(   rr   r   s          rC   method_addcdiv_zTensorVariable.method_addcdiv_h  s    <-"--/;;EIIFTTWg&F ;;EIIFTTVUORF ##B"== rD   c                 .   ddl m}  |j                         }t        j                  t
        j                        j                  || |gi       }t        j                  t
        j                        j                  ||gi       }|j                  |dg i       S )Nr   r'   r_  )
r2  r(   r3  r   r   re   eqr   r  r   )rB   argr(   rr   r   s        rC   method___contains__z"TensorVariable.method___contains__u  s    <-"--/ 77AOOsR
 77		BPP"
 !!"fb"55rD   c           
      r  
 ddl m}  |j                         }|D cg c]  }|j                          c}
|j	                         D ci c]  \  }}||j                          c}}
fd}d|_        ddlm}	  |	| |j                  j                  d|gt        | gi              S c c}w c c}}w )	Nr   r'   c                 (     | j                   i S rV   )redistributerm   args_as_valuekwargs_as_values    rC   redistribute_fn_with_prim_typeszKTensorVariable.method_redistribute.<locals>.redistribute_fn_with_prim_types  s    !1>>=DODDrD   prim_redistributer#   rp   r   r   r2  r(   r3  r(  r   r1  r   rq   r   r  r    )rB   r  rM   r(   rr   rm   r-  r.  r  rq   r  r  s             @@rC   method_redistributez"TensorVariable.method_redistribute  s    <-"--/ :>>A--/>AGPA1a2244P	E 4G'0*("))((/ #D62.
 	
 ?P   B.B3c           
      r  
 ddl m}  |j                         }|D cg c]  }|j                          c}
|j	                         D ci c]  \  }}||j                          c}}
fd}d|_        ddlm}	  |	| |j                  j                  d|gt        | gi              S c c}w c c}}w )	Nr   r'   c                 (     | j                   i S rV   )to_localr  s    rC   to_local_fn_with_prim_typeszCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_types  s    1::}@@@rD   prim_to_localr#   rp   r   r   r  )rB   r  rM   r(   rr   rm   r-  r.  r  rq   r  r  s             @@rC   method_to_localzTensorVariable.method_to_local  s    <-"--/ :>>A--/>AGPA1a2244P	A 0?#,*("))((+ #D62.
 	
 ?Pr  c                 .     | j                   dg|i |S )Nregister_hook_method_register_hookr  s      rC   method_register_hookz#TensorVariable.method_register_hook  s    )t))/KDKFKKrD   c                 .     | j                   dg|i |S )N"register_post_accumulate_grad_hookr  r  s      rC   )method_register_post_accumulate_grad_hookz8TensorVariable.method_register_post_accumulate_grad_hook  s*    )t))0
37
;A
 	
rD   r   hookc           	        	 ddl m}  |j                         }| j                  szt        j
                  st        d       |j                  j                  |      \  	}	fd}ddl	m
}  |||j                  j                  d|| j                         |fi             S t        j                  t        j                  j!                               }|j                  j"                  j%                  | ||       |S )	Nr   r'   z<Compilation of intermediate hooks requires compiled autogradc                 l    t        |       } |t        j                  t        t        |             y )N)r   bw_state	hook_name)r|   	functoolspartialr   r   )rg  r  r  r  r   s      rC   _register_hook_trampolinezGTensorVariable._method_register_hook.<locals>._register_hook_trampoline  s6     ' 5%%%8!)"+	 rD   r#   rp   r   )mutable_local)r2  r(   r3  rz   r   compiled_autograd_enabledr   r   add_backward_state_hookr   rq   r  rX   r   RemovableHandleVariablebaseMutableLocalside_effectsr  )
rB   r   r  r(   rr   bw_state_proxyr  rq   handle_variabler  s
    `       @rC   r  z$TensorVariable._method_register_hook  s     	=-"--/{{$>>  R )+		(I(I$(O%I~ / 		&&#-]]_n5	  $;;#..557
 			,,T4$OrD   c                     |dur|j                         }| j                         j                  j                  d   j                  |k7  rt        d       y | S )NTrQ   zTensor.requires_grad_)r(  rX   r?   rS   r7   r   )rB   r7   s     rC   method_requires_grad_z$TensorVariable.method_requires_grad_  sK    $)<<>M==?$$_5CC}T12KrD   c                     t        |      dk(  rt        |d   t              s t        |      dk\  r<t        d |D              r)ddlm} | j                   |j                         d||      S y y )Nr#   r   c              3   n   K   | ]-  }t        |t              xr |j                         t        k(   / y wrV   )r}   r%   r[   r`   )r  as     rC   r  z,TensorVariable.method_new.<locals>.<genexpr>  s0      OP
1./JAMMOs4JJs   35r   r'   	new_empty)r   r}   r&   allr2  r(   r   r3  )rB   r  rM   r(   s       rC   
method_newzTensorVariable.method_new
  st     INz$q'<@IN TX  A##0%002Kv  rD   c                     t        | | j                         j                  j                  d   j	                               S rP   )UntypedStorageVariablerX   r?   rS   untyped_storagerA   s    rC   method_untyped_storagez%TensorVariable.method_untyped_storage  s4    %$--/&&++O<LLN
 	
rD   c                 v    | j                   s-| j                  j                  j                  |       d| _         y y )NT)r=   r0   r?   _rename)rB   r   s     rC   set_name_hintzTensorVariable.set_name_hint  s.      JJOO##D) $D !rD   rr   r(   rV   r  zList[VariableTracker]rM   zDict[str, VariableTracker]rE   r$   )NFT)Qr1  
__module____qualname____doc__r$   _nonvar_fieldsr   re   fxProxyrJ   rT   rX   r[   staticmethodr~   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  method_nelementr   method_ndimensionr#  r&  r*  r7  rC  rH  rK  rU  rl  ro  rr  rv  r  	lru_cacheru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  strr  r  r  r  r  __classcell__rN   s   @rC   r/   r/   \   s\   G 	 
	'	'N$B, !$/xx~~$/$ 
%$/L; /%,, / /bA<F7788G8?>;(
4
)*N`1$!
FN$
 &	$

 -$
 
$
LAC @D< #O6 #IB&P,2
< %* 64'1R)))
 Y
  
&N :> -8(+/9F +/ > :> >6"
4
4L

=# =_ =~

%# %rD   r/   c                        e Zd ZdZddhej
                  Zd Zedd       Zd fdZ	d Z
d Zd	 Zdd
Z	 	 	 	 	 	 ddZ xZS )r   z
    Represents a symbolic scalar, either int, float or bool.  This is most commonly used to
    handle symbolic size computation, e.g., tensor.size(0), but it is also used to
    handle logic like float_tensor.item() or unspecialized float inputs.
    r0   sym_numc                 ,    t        | j                        S rV   )rR   r  rA   s    rC   rT   zSymNodeVariable.debug_repr1  s    DLL!!rD   c                    |t        |j                  |      }d|j                  j                  v r|j                  j                  d   |k(  sJ t        |j                  |       t	        |t
        j                  t        t        f      r<t	        |t
        j                        rt        |      n|}t        j                  |      S t        ||fi |S rP   )r   r?   rS   r!   r}   sympyIntegerr`   r  r%   r   r   )r@  rr   r0   r  r  s        rC   r   zSymNodeVariable.create4  s    ?$UZZ4Gejjoo-::???3w>>>%**g.gsD9:&0%--&Hc'lgG#**733ug999rD   c                 N    t        |   di | || _        || _        d | _        y NrH   )rI   rJ   r0   r  _tensor_var)rB   r0   r  rM   rN   s       rC   rJ   zSymNodeVariable.__init__B  s)    "6"
rD   c                     t        | j                  t              r | j                  j                  j                  S t        | j                        S rV   )r}   r  r   r?   pytypera   rA   s    rC   r[   zSymNodeVariable.python_typeI  s5    dllH-<<$$+++%%rD   c                     | j                   S rV   rW   rA   s    rC   rX   zSymNodeVariable.as_proxyO  rY   rD   c                     | j                   =ddlm} |j                  |t        j
                        j                  || gi       | _         | j                   S )Nr#   rs   )r  r   rt   r   re   scalar_tensorr   )rB   rr   rt   s      rC   	as_tensorzSymNodeVariable.as_tensorR  sP    #2077E'' mB+  rD   c                     	 t        | j                        S # t        $ 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	   r   r   ANTI_PATTERNr  )rB   output_graphr  s      rC   r   zSymNodeVariable.evaluate_expr[  sM    	--* 	**GAxP5 	s    	A(AAc           
      r    ddl m}  || |j                  j                  d|gt	        | g||             S )Nr#   rp   r   )r   rq   r   r  r    )rB   rr   r   r  rM   rq   s         rC   r   zSymNodeVariable.call_methode  sH     	+"BII"" #D=4=&9
 	
rD   rV   rE   Nr  )r1  r  r  r  r$   r  rT   classmethodr   rJ   r[   rX   r	  r   r   r  r  s   @rC   r   r   $  s|     	 
	'	'N" : : & 
 &	

 -
 

rD   r   c                   `     e Zd ZdZedd       ZddZed        Z	 	 	 	 	 	 d fdZd Z	 xZ
S )	rS  z}
    Represents a np.ndarray, but backed by torch Tensor via torch._numpy.ndarray.
    Use this for Tensor.numpy() call.
    c                 .    ddl m}  |dt        | |d|S )Nr#   r   r   rH   )r   r   rS  )rr   r0   r  r   s       rC   r   zNumpyNdarrayVariable.create~  s*    .  
+
 	
 	
rD   c                    	
 ddl m	 ddlm
 d } j	                         j
                  j                  d   }t        j                  |      }	 
fd}dv rEj                  j                  d	 j	                         fi       }t        j                  |      }n͉d	v rt        j                  t        |            S d
v rCt        t        |      x}      s%t        j                  t!        d |D                    S  |       S dk(  r<t        |j"                  x}      st        j                  t%        |            S  |       S dv rt'        d        ndv rt'        d       |t(        |S )Nr   )numpy_attr_wrapperr#   rp   rQ   c            	      n     j                   j                  dj                          fi             S )Nr   )r   r  rX   )r   r  rB   rr   rq   s   rC   insert_into_graphz;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph  s;     		&&#%7$--/49PRT rD   )Trealimagr   )r4   rJ  )shaper6   c              3   2   K   | ]  }t        |        y wrV   r  r  s     rC   r  z3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s     4GSV4Gr  r5   )r  flagsr1   zTODO: add support for ndarray.)__version__z delegate np.__version__ to NumPy)utilsr  r   rq   rX   r?   rS   tnpndarrayr   r  rS  r   r%   r|   r
   rd   r5   r`   r   r   )rB   rr   r   r   rQ   example_ndarrayr  r0   r  r  rq   s   ```      @@rC   r   z NumpyNdarrayVariable.var_getattr  se   
 	/*,,11/B++m4	 	 ((II**"$'	E *00U;F ))#**7?D+IJJ((#$)G$GAH'..u4GQ4G/GHH$&&V^#)=)=$=A>'..s1v66$&&//:4&AB_$<=>%%rD   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  rM   kwargs_renamer-  r.  s         rC   
patch_argszNumpyNdarrayVariable.patch_args  sR    6>&+e<M=C\\^LTQm''1-q0LFLV| Ms   Ac           	      .   ddl m} | j                  |||      \  }}|dv rt        |   ||||      S |dv rt        | d        |j                  j                  d ||      gt        | gt        |      z   |       }t        j                  ||      S )Nr   )numpy_method_wrapper)__len__r5   rj  )tostringtobytesz  is not modelled in torch._numpyr   )r  r,  r*  rI   r   r   r   r  r    listrS  r   )rB   rr   r   r  rM   r,  r0   rN   s          rC   r   z NumpyNdarrayVariable.call_method  s     	1tT6:f007&r4v>>**TF"BCD&		&& &
 vT
2F;

 $**2u55rD   c                 "    t         j                  S rV   )rQ  r!  rA   s    rC   r[   z NumpyNdarrayVariable.python_type  s    zzrD   r  r  )r1  r  r  r  r  r   r   r*  r   r[   r  r  s   @rC   rS  rS  x  s^    
 
 
;z  6 &	6
 -6 
6.rD   rS  c                        e Zd ZdZddhej
                  Zddddej                  j                  ddf fd	Z	e
dd
       Z xZS )UnspecializedPythonVariablezO
    This is a 1-element tensor represents unspecialized python float/int.
    	raw_valueneed_unwrapNTr4  r5  r0   rE   c                B    t        |   |fi | || _        || _        y rV   )rI   rJ   r4  r5  )rB   r0   r4  r5  rM   rN   s        rC   rJ   z$UnspecializedPythonVariable.__init__  s&     	)&)"&rD   c                 H    t        di t        |j                        ||dS )Nr6  rH   )r3  dict__dict__)r@  tensor_variabler4  r5  s       rC   from_tensor_variablez0UnspecializedPythonVariable.from_tensor_variable  s/     + 
?++,
#
 	
rD   r  r1  r  r  r  r/   r  re   r  r  rJ   r  r<  r  r  s   @rC   r3  r3    s_    
 	 
	&	&N 37D'XX^^'	' 
 
rD   r3  c                        e Zd ZdZdhej
                  Zdej                  j                  ddf fdZ	e
d        Z xZS )FakeItemVariablezAn unspecialized python variable which prevents access to the underlying raw value.
    This is needed if item is called on a FakeTensor.r5  r0   rE   Nc                 X    |j                  dd      }t        |   |fi | || _        y )Nr5  F)poprI   rJ   r5  )rB   r0   rM   r5  rN   s       rC   rJ   zFakeItemVariable.__init__  s-    jj6)&)&rD   c                 >    t        di t        |j                        S r  )r?  r9  r:  )r@  r;  s     rC   r<  z%FakeItemVariable.from_tensor_variable  s    A$'?'?"@AArD   r=  r  s   @rC   r?  r?    sS    9 			&	&N
'ehhnn '4 '
 B BrD   r?  c                   R     e Zd Zd	 fdZdddee   deeef   def fdZd Z	 xZ
S )
r=  rE   c                 2    || _         t        |   |i | y rV   )r\   rI   rJ   )rB   r\   r  rM   rN   s       rC   rJ   zTensorSubclassVariable.__init__  s    
$)&)rD   rr   r(   r  rM   c                 0   t        |      dk(  rwt        |d   t              rdddlm} ddlm}   ||t        | j                  d            | j                  j                        }|j                  ||d   | j                  |      S t        | 5  |||      S )Nr#   r   rx   r9  r;  )r   r}   r/   r   ry   r>  r:  r   rz   r\   r;  r?  rI   r   )rB   rr   r  rM   ry   r:  rB  rN   s          rC   r   z$TensorSubclassVariable.call_function  s     t9>ja.A0DJt{{,@Ajj++-H 0??DGTZZ  w$Rv66rD   c                     | j                   S rV   r  rA   s    rC   r(  z)TensorSubclassVariable.as_python_constant0  rY   rD   r  )r1  r  r  rJ   r   r$   r   r  r   r(  r  r  s   @rC   r=  r=    sG    *7#7 ?#7 S/)*	7
 
7(rD   r=  c                        e Zd Zdhej                  Zdedej                  ddf fdZde	e   de
eef   def fdZd	 Z xZS )
r  rQ   from_tensorrE   Nc                 B    t        |   di |f || _        || _        y r  )rI   rJ   rH  rQ   )rB   rH  rQ   rM   rN   s       rC   rJ   zUntypedStorageVariable.__init__:  s(     	"6"#&*rD   r  rM   c           	      d   |dk(  r|rJ |rJ | j                   j                         }t        |      st        j                  t        |            S ddlm} ddlm	}  |||j                  j                  d|| j                  j                         fi             S |dk(  rt        |      dk(  rq|rJ |j                  j                  dt        j                   j"                  j$                  | j                  j                         |d   j                         fi        | S t&        | Q  ||||      S )	Nr5   r   )untyped_storage_sizer#   rp   r   resize_r   )rQ   r5   r
   r%   r   r`   external_utilsrK  r   rq   r   r  rH  rX   r   re   r   inductorresize_storage_bytes_rI   r   )	rB   rr   r   r  rM   r   rK  rq   rN   s	           rC   r   z"UntypedStorageVariable.call_methodE  s    6>O8:'',,.F#F+'..s6{;;A2$II**',))2246	  9Ta:II""		""88!!**,d1g.>.>.@A	 Kw"2tT6::rD   c                 l     || j                          |j                  d       |j                  d       y )Nr  r   )rH  load_methodr   )rB   codegens     rC   reconstructz"UntypedStorageVariable.reconstructl  s-      !-.ArD   )r1  r  r  r$   r  r/   re   UntypedStoragerJ   r   r   r  r   rS  r  r  s   @rC   r  r  4  sz    		'	'N
	+#	+ ++	+
 
	+%; ?#	%;
 S/)*%; 
%;NrD   r  )_r  r   loggingr  r  r|  r   rZ  typingr   r   r   r  torch._numpy_numpyr   torch.fxre   torch.randomtorch._dynamor   torch._subclasses.meta_utilsr   %torch.fx.experimental.symbolic_shapesr   r	   r
   r   r   torch.utils._python_dispatchr   r   r   r   _trace_wrapped_higher_order_opr   r   r   r   r   rM  r   r   r   r   rz   r   r  r   r   r   r   r   r   r   r    r!   r"   r  r$   constantr%   listsr&   numpyrQ  ModuleNotFoundErrortorch._dynamo.symbolic_convertr(   	getLoggerr1  r~  gtltgeler  nesupported_tensor_comparison_opsis_is_notsupported_const_comparison_opssupported_comparison_opsr9  fromkeysvalues%supported_tensor_comparison_op_values$supported_const_comparison_op_valuesr/   r   rS  r3  r?  r=  r  rH   rD   rC   <module>rt     s           , ,     + 6  G   : 9 9 : 0    " & 
 D g! 
	
++
++
++
++#  ,,oo
++
++	" %$  )-#**,) % (,}}"))+( $
E%_ E%PQ
o Q
hm> m`
. 
8B~ B&_ :;_ ;}'  	Bs   4G G#"G#