o
    ߗi                     @   s  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Zd dl	Z	d dl
mZmZmZmZ d dlZd dlmZ d dlm  mZ ddlmZmZ ddlmZmZ ddl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*m+Z+m,Z,m-Z- ddlm.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z? erd dl@mAZA G dd dZBG dd de4ZCG dd de4ZDG dd de4ZEG dd deEZFG dd de4ZGG dd de4ZHG d d! d!e4ZIG d"d# d#e4ZJG d$d% d%e4ZKG d&d' d'e4ZLd(d) ZMG d*d+ d+e4ZNejOG d,d- d-ZPG d.d/ d/e?ZQG d0d1 d1e?ZRG d2d3 d3e4ZSG d4d5 d5e4ZTG d6d7 d7e4ZUG d8d9 d9e4ZVG d:d; d;e4ZWG d<d= d=e4ZXejYdd>d?d@ ZZG dAdB dBe4Z[G dCdD dDe4Z\G dEdF dFe4Z]G dGdH dHe4Z^G dIdJ dJe4Z_G dKdL dLe4Z`G dMdN dNe4ZaG dOdP dPeaZbG dQdR dReaZcG dSdT dTeaZdG dUdV dVeaZeG dWdX dXeaZfejgeeejheeejiefiZjG dYdZ dZe4ZkG d[d\ d\e4ZlG d]d^ d^e4ZmdS )_    N)DictListOptionalTYPE_CHECKING   )config	variables)create_call_functioncreate_instruction)$do_not_convert_to_tracable_parameterunimplemented)GuardBuilderinstall_guard)unpatched_nn_module_init)
AttrSourceDefaultsSourceGetItemSourceODictGetItemSource
TypeSourceWeakRefCallSource)check_unspec_or_constant_argsidentityis_tensor_base_attr_getterproxy_args_kwargsset_example_value   )VariableTracker)NestedUserFunctionVariableUserFunctionVariableUserMethodVariablewrap_bound_arg)UnspecializedNNModuleVariable)call_random_fnis_standard_setattrUserDefinedObjectVariable)InstructionTranslatorc                   @   s   e Zd ZdS )NO_SUCH_SUBOBJN)__name__
__module____qualname__ r+   r+   Z/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/torch/_dynamo/variables/misc.pyr'   6   s    r'   c                       st   e Zd Zh ejZdd fddZ fddZd fd	d
ZdddeddfddZ							d fddZ
  ZS )SuperVariableNreturnc                    "   t  jdi | || _|| _d S Nr+   )super__init__typevarobjvar)selfr3   r4   kwargs	__class__r+   r,   r2   ?   s   
zSuperVariable.__init__c                    sZ      fdd  | j | jd ur# | j  tdd d S  tdd d S )Nc                      s   t tS N)r   BuiltinVariabler1   r+   )r8   codegenr+   r,   <lambda>L   s    z+SuperVariable.reconstruct.<locals>.<lambda>r   Fr   )add_push_nullr3   r4   extend_outputr	   r5   r;   r7   r;   r,   reconstructK   s   


zSuperVariable.reconstructtxr&   c                    s  | j sJ d| j }| j  }| j jrt| j jnd }t|tr*| j j}| j j}d }d }d }|j	}	z	|	
|d }
W n tyO   tt|||d f Y S w t|
t|	D ]$}|	| j|t }r{|tur{|ruttt|d||}||f  S qWtd d S )Nz1-arg super not implementedr   __mro__zUnable to resolve super getattr)r4   r3   as_python_constantpython_typesourcer   
issubclasstypevaluerC   index
ValueErrorgetattrr1   rangelen__dict__getr'   r   r   r   )r5   rB   namesearch_typetype_to_usetype_to_use_sourcerF   resolved_classresolved_attr
search_mrostart_indexrJ   resolved_getattrr7   r+   r,   _resolved_getattr_and_sourceT   s<   

	

z*SuperVariable._resolved_getattr_and_sourcerQ   r   c                 C   sJ   |  | |\}}tj|st| |S |rt|tj tjj	||dS )NrF   )
rZ   r   ConstantVariable
is_literalGetAttrVariabler   
make_guardr   CONSTANT_MATCHcreate)r5   rB   rQ   rI   rF   r+   r+   r,   var_getattr   s   	
zSuperVariable.var_getattrargsList[VariableTracker]r6   Dict[str, VariableTracker]c                    s  |  | |\}}|tju rttS |tjjju r\| j}ddl	m
} t|tjrVt|j|rV|sV|sVt  tjt|d|| jg| |W  d    S 1 sOw   Y  ndtd n^| jjrm|tju rm|jj	| jS t|trt|jtjrtj|j|d|||S t|trt|jtjrtj|j| j|d|||S t|tjrtj||d|| jg| |S t|tjrtj|j| j|d|||S |tj j!u rt| jtjr| jjrt"|dkrt"|dkr|d # r|d $ }	tj !| jj%|	}
t&| jj|	}t'(||
|S |tj j)tj*fv r=t| jtj+r=|s.t"|dks0J t,tj+| j-|d||S |tj j!u rYt| jtj+rYt,tj+| j-|d||S t.|rrt| jtrr| jj/|g|R i |S |tj0u r|d }z|$ }W n t1y   td	|  Y nw |jj	2| jstd
| j d| d |jj	3| j|t4  t5d S td|  d S )Nr   )AttributeMutationNewr[   zsuper() nn.Module.__init__r   r   __setitem____getitem__znon-const delattr attr: zdelattr(, z, ...)znon-function or method super: )6rZ   objectr2   LambdaVariabler   torchnnModuler4   side_effectsrf   
isinstancer   r%   mutation_typer   r   r   call_functionr   rF   __new__output(track_object_new_from_user_defined_classstaticmethod__func__typesFunctionTypeclassmethodr    
MethodTypecollectionsOrderedDictrh   rN   is_python_constantrD   rI   r   r   buildrg   __setattr__CustomizedDictVariabler1   call_methodr$   method_setattr_standard__delattr__NotImplementedErroris_attribute_mutation
store_attrDeletedVariabler\   )r5   rB   rQ   rc   r6   inner_fnrF   r4   rf   keyrI   attrr7   r+   r,   r      s   


$






zSuperVariable.call_methodr9   r.   NrB   r&   rc   rd   r6   re   r.   r   )r(   r)   r*   r   _nonvar_fieldsr2   rA   rZ   strrb   r   __classcell__r+   r+   r7   r,   r-   :   s    	1r-   c                       s&   e Zd Zd fddZdd Z  ZS )ExceptionVariabler.   Nc                    r/   r0   )r1   r2   exc_typerc   )r5   r   rc   r6   r7   r+   r,   r2      s   
zExceptionVariable.__init__c                    s6      fdd  j  tjd d S )Nc                      s     djjS )Nbuiltins)load_import_fromr   r(   r+   r;   r5   r+   r,   r<          z/ExceptionVariable.reconstruct.<locals>.<lambda>F)r=   foreachrc   rr   rN   r?   r+   r   r,   rA      s
   zExceptionVariable.reconstructr   )r(   r)   r*   r2   rA   r   r+   r+   r7   r,   r      s    r   c                   @      e Zd ZdZdS )UnknownVariablez
    It could be anything!
    Nr(   r)   r*   __doc__r+   r+   r+   r,   r         r   c                   @   r   )DelayGraphBreakVariablez^
    Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
    Nr   r+   r+   r+   r,   r   	  r   r   c                   @   sH   e Zd ZdZdd Zdddeddfd	d
Z								dddZdS )ComptimeVariableza
    This variable is special, it lets you execute arbitrary code at
    Dynamo compile time
    c                 C   s   t d)Nzcomptime is special form)r   r?   r+   r+   r,   rA     s   zComptimeVariable.reconstructrB   r&   rQ   r.   r   c                 C   s2   ddl m } ddlm} |t||t| j|dS )Nr   )comptimer   )r   r[   )r   	functionsr   rL   r   rF   )r5   rB   rQ   r   r   r+   r+   r,   rb     s
   zComptimeVariable.var_getattrrc   rd   r6   re   c                 C   s   ddl m} |r
J t|dksJ |d }t|tr$| || n:t|trU| }|jr8J d|j	 t
||j|j |jrJt|jjnd d}||| n	tdt| tjd S )Nr   )ComptimeContextr   zOcomptime function must not have free variables, but these variables were free: r+   z"unsupported argument to comptime: )r   r   rN   rp   r   get_functionr   get_codeclosureco_freevarsrx   ry   	f_globalsfn_namerD   defaultstupleitemsRuntimeErrorrH   r   r\   ra   )r5   rB   rc   r6   r   fncodefuncr+   r+   r,   rr   "  s.   

zComptimeVariable.call_functionNrB   r&   rc   rd   r6   re   r.   r   )r(   r)   r*   r   rA   r   rb   rr   r+   r+   r+   r,   r     s    
r   c                       sL   e Zd ZU ee ed< dZee ed< 	ddee ddf fddZ  Z	S )CellVariablepre_existing_contentsN
local_namer.   c                       t  jdi | || _d S r0   )r1   r2   r   )r5   r   r6   r7   r+   r,   r2   Y  s   
zCellVariable.__init__r9   )
r(   r)   r*   r   r   __annotations__r   r   r2   r   r+   r+   r7   r,   r   L  s   
 r   c                       s   e Zd Zd fddZ  ZS )NewGlobalVariabler.   Nc                       t  jdi | d S r0   r1   r2   r5   r6   r7   r+   r,   r2   a     zNewGlobalVariable.__init__r   )r(   r)   r*   r2   r   r+   r+   r7   r,   r   `  s    r   c                       s   e Zd ZdZddhejZedd Zdeddf fd	d
Zddde	ddf fddZ
						d fddZdd Z  ZS )InspectSignatureVariablez!represents inspect.signature(...)	signature
parametersc                 K   s$   |r	t d|  t| tj dS )Nzinspect.signature with rq   )r   r   r   baseValueMutationNew)callabler6   r+   r+   r,   ra   n  s
   
zInspectSignatureVariable.create	inspectedr.   Nc                    s   t  jdi | || _z!t| jdr| j | _nt| jtr&| jj| _n| j	 | _W n t
y:   td Y nw t| j| _t| jj | _t| jtr[| jdd  | _d S d S )Nr   z,inspect.signature with non-constant functionr   r+   )r1   r2   r   hasattrr   r   rp   r"   rI   rD   r   r   inspectr   listr   r   r    )r5   r   r6   r7   r+   r,   r2   v  s"   z!InspectSignatureVariable.__init__rB   r&   rQ   r   c                    s0   |dkrt jdd | jD tdS t ||S )Nr   c                 S   s&   i | ]}t j|d  t|d qS )r   r   )r   r\   ra   InspectParameterVariable).0paramr+   r+   r,   
<dictcomp>  s    
z8InspectSignatureVariable.var_getattr.<locals>.<dictcomp>)user_cls)r   ConstDictVariabler   dictr1   rb   )r5   rB   rQ   r7   r+   r,   rb     s   	z$InspectSignatureVariable.var_getattrrc   rd   r6   re   c                    s   |dkrHt jdstdj d jj|i |}i }jjrBtjt|dfddjjD   fddjj	 D }t
||S t ||||S )	Nbind__kwdefaults__zinspect.signature.bind with z without __kwdefaults__)rB   c                    s,   i | ]}| j d u rd nt j |ddqS )NT)is_kw)rF   r   )r   kr5   r+   r,   r     s    
z8InspectSignatureVariable.call_method.<locals>.<dictcomp>c                    s"   i | ]\}}|| | d qS ))valrF   r+   r   r   v)kwdefaults_sourceswrapr+   r,   r     s    )r   r   r   r   r   r   	functoolspartialr!   r   InspectBoundArgumentsVariabler1   r   )r5   rB   rQ   rc   r6   objr   r7   )r   r5   r   r,   r     s*   

z$InspectSignatureVariable.call_methodc                    s0      fdd  | j  tdd d S )Nc                            t dgS )Nr   )r>   create_load_python_moduler   create_load_attrr+   r@   r+   r,   r<     
    z6InspectSignatureVariable.reconstruct.<locals>.<lambda>r   F)r=   r   r>   r	   r?   r+   r@   r,   rA     s
   

z$InspectSignatureVariable.reconstructr   )r(   r)   r*   r   r   r   rv   ra   r2   r   rb   r   rA   r   r+   r+   r7   r,   r   e  s&    
&r   c                       s8   e Zd ZdZd fddZdddedd	fd
dZ  ZS )r   z!represents inspect.Parameter(...)r.   Nc                    r   r0   r1   r2   rI   r5   rI   r6   r7   r+   r,   r2        
z!InspectParameterVariable.__init__rB   r&   rQ   r   c              	   C   s\   zt | j|}| jot| j|}t|||W S  ty-   td| j d| d Y d S w )Nzgetattr(ri   ))rL   rI   rF   r   r   r   AttributeErrorr   r5   rB   rQ   
attr_valuerF   r+   r+   r,   rb     s   z$InspectParameterVariable.var_getattrr   )r(   r)   r*   r   r2   r   rb   r   r+   r+   r7   r,   r     s    r   c                       s   e Zd ZdZddhejZdejdee	ef de
f fddZdd	 Zd
dde	ddf fddZ						d fddZdd Z  ZS )r   z+represents inspect.signature(...).bind(...)bound_argumentspacked_varsr   r   c           	         s   t  jdi | || _|| _t | _i }|j D ]F\}}t	|}t
|tr8tt|||< | j| qt
|trR| j| tdd | D ||< qt
|tr\|||< qtd qtj|t|jtj d| _|| _d S )Nc                 S      i | ]
\}}t ||qS r+   r   r\   r   r+   r+   r,   r     s    z:InspectBoundArgumentsVariable.__init__.<locals>.<dictcomp>zKinspect.signature(...).bind(...).arguments contains non-variable/tuple/dictr   r+   )r1   r2   r   r   setr   	argumentsr   r   r\   rp   r   TupleVariabler   addr   r   r   r   rH   r   r   bound_arguments_varr   )	r5   r   r   r   r6   arguments_dictr   r   key_varr7   r+   r,   r2     s4   






z&InspectBoundArgumentsVariable.__init__c                 C   sz   | j j D ]4\}}|}|j| jv r3t|tjrt|j}nt|tjr/dd |j D }nt	d || j
j|j< qd S )Nc                 S   s   i | ]\}}|j |qS r+   )underlying_valuer   r+   r+   r,   r         zIInspectBoundArgumentsVariable._update_bound_arguments.<locals>.<dictcomp>z>inspect.signature(...).bind(...) cannot update bound arguments)r   r   r   r   rp   r   r   r   r   r   r   r   )r5   r   r   true_valr+   r+   r,   _update_bound_arguments  s   z5InspectBoundArgumentsVariable._update_bound_argumentsrB   r&   rQ   r.   r   c                    s|   |dkr| j S |dkr|   tt| jjS |dkr0|   dd | jj D }t	|S |dkr7| j
S t ||S )Nr   rc   r6   c                 S   r   r+   r   r   r   r   r+   r+   r,   r   "  s    
z=InspectBoundArgumentsVariable.var_getattr.<locals>.<dictcomp>r   )r   r   r   r   r   r   rc   r6   r   r   r   r1   rb   )r5   rB   rQ   kwr7   r+   r,   rb     s   

z)InspectBoundArgumentsVariable.var_getattrrc   rd   r6   re   c                    sj   |dkr,| j  D ]\}}t|}|| jvr"| j|d||gi  q	|   td S t ||||S )Napply_defaultsrg   )r   r   r   r\   r   r   r   r1   )r5   rB   rQ   rc   r6   r   r   r   r7   r+   r,   r   +  s   


z)InspectBoundArgumentsVariable.call_methodc                    s       fdd} j|dd  jj  tdtjjd jj	 D ]\}}  
|  | q, tdtjjdtdd	dg d S )
Nc                      s    j    d d S )Nr   )r   append_outputr   r+   r   r+   r,   gen_fnG  s   
z9InspectBoundArgumentsVariable.reconstruct.<locals>.gen_fnTcall_function_exBUILD_TUPLEarg	BUILD_MAPCALL_FUNCTION_EXr   )r   r=   r   r   rc   r   r
   rN   r6   r   create_load_constr>   )r5   r;   r   r   r   r+   r   r,   rA   A  s   

z)InspectBoundArgumentsVariable.reconstructr   )r(   r)   r*   r   r   r   r   BoundArgumentsr   r   r   r2   r   rb   r   rA   r   r+   r+   r7   r,   r     s0    	
'r   c                    s    fdd}t |_|S )Nc                     s    j | i |S r9   )applyrc   r6   fn_clsr+   r,   trampoline_autograd_apply^  s   zDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_apply)!produce_trampoline_autograd_apply_origin)r  r  r+   r  r,   r  ]  s   r  c                       s^   e Zd ZdZdhejZd fddZdd	d
ZdddZdddZ					dddZ
  ZS )AutogradFunctionVariablez-represents a torch.autograd.Function subclassr  r.   Nc                    r   r0   )r1   r2   r  )r5   r  r6   r7   r+   r,   r2   m  r   z!AutogradFunctionVariable.__init__rB   r&   c                    s*  d  fdd}t |||f  rt rtjdu r!td ddlm	} ddl
m} | jj}|| jj}|rB|| jj| jj}| jj}	|	tjjjurQtd | jj}
|
tjjjur`td	 d
dlm} | j}|d u ryt| jj| jj}||| jj|t|ddd||}| jrt| jd}t|tj  |rt| jd}t|tj  |S | jrt| jd}nd }| jj}t!"||}|g|}t#|t$j%rt&'|}t(|d
 t(|j)kr|d
d  }t*j+||d||S t#|t$j,rt*j-|j.t*/| j|d||S td|  d S )NFc                    s@   t | tjr| jdurd t | tjr| rd d S d S d S )NFT)rp   r   TensorVariablerequires_gradNNModuleVariableis_training)noder  rB   r+   r,   visitt  s   

z2AutogradFunctionVariable.call_apply.<locals>.visitzNThe config.capture_autograd_function flag is deprecated, it's now always true.r   )#autograd_function_forward_rewritten)_is_setup_context_definedzNYI - User defind vjpzNYI - User defind jvpr   )AutogradFunctionApplyVariabler  )memberr[   forwardsetup_contextz?non-function or method in subclass of torch.autograd.Function: )0r   r  rl   is_grad_enabledr   capture_autograd_functionwarningswarn"torch._functorch.autograd_functionr  torch.autograd.functionr  r  r  r  vjpautogradFunctionr   jvphigher_order_opsr  rF   r   import_sourcer)   r(   backwardrr   r   r_   r   FUNCTION_MATCHAutogradFunctionContextVariablera   rp   rx   ry   r   r   rN   _parametersr   r   r{   r    rw   UserDefinedClassVariable)r5   rB   rc   r6   r  r  r  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnr  rF   r   fwd_srcsetup_ctx_srcr   ctxsigr+   r  r,   
call_applyq  s   	






z#AutogradFunctionVariable.call_applyc                 C   sX   | j j}t|d jtjjju sJ t|t	j
sJ t| jd}tj||d|||S )Nr   r$  r[   )r  r$  rH   rI   rl   _dynamoexternal_utilsFakeBackwardCFunctionrp   rx   ry   r   rF   r   r   rr   )r5   rB   rc   r6   r   	fn_sourcer+   r+   r,   call_backward  s   z&AutogradFunctionVariable.call_backwardc                 C   s
   t | jS r9   )r
  r  r5   rB   rc   r6   r+   r+   r,   rr     s   
z&AutogradFunctionVariable.call_functionrc   rd   r6   re   c                 C   sX  ddl m} ddlm} |dkr3|| jr,t| j}|||jjd|gt||R  dS | 	|||S |dkr>| 
|||S dd	lm } | jd urOt| j|nd }	z	t| j|}
W n tye   d }
Y nw t|
tr|
| j}|	d ur||j||	d
|||S ||||||S t|
trtj|
j| |	d
|||S td|  d S )Nr   )is_callable_allowedr   )wrap_fx_proxyr  rr   )rB   proxyr$  )trace_rulesr[   zUnsupported method: )r;  r8  builderr9  r  r  rt   create_proxyr   r1  r6   rF   r   r   getattr_staticr   rp   rv   __get__lookupcreate_with_sourcerr   rz   r   r    rw   r   )r5   rB   rQ   rc   r6   r8  r9  r  r;  rF   r   r   r+   r+   r,   r     sX   
	



z$AutogradFunctionVariable.call_methodr   r   )rc   rd   r6   re   )r(   r)   r*   r   r   r   r2   r1  r6  rr   r   r   r+   r+   r7   r,   r
  e  s    

a

r
  c                   @   s&   e Zd ZU ejedZee e	d< dS )SavedTensorBox)default_factorytensorsN)
r(   r)   r*   dataclassesfieldr   rE  r   r   r   r+   r+   r+   r,   rC    s   
 rC  c                       s   e Zd ZdZdddhejZ						d	d fdd	ZeddddZdd Z							d fddZ
d fddZ  ZS )r&  zZ
    Tracks an autograd.Function() context using mutation tracking in side_effects.py
    r:  	inferencesaved_tensorsNFr.   c           	         s:   t  jd||d| || _|| _|| _|| _|| _d S N)rI   
value_typer+   )r1   r2   rH  r:  rI  needs_input_gradnon_differentiable)	r5   rI   rK  rH  r:  rI  rL  rM  r6   r7   r+   r,   r2   )  s   
z(AutogradFunctionContextVariable.__init__rB   r&   c                 C   st   d }|r|st dd |D }| jdtjjjdi }| jjd tjjjt	j
td|t |di }t|j|j |S )Nc                 s   s"    | ]}t |tjo|jV  qd S r9   )rp   r   r  r  r   xr+   r+   r,   	<genexpr>?  s
    
z9AutogradFunctionContextVariable.create.<locals>.<genexpr>rr   r+   T)rH  r:  rI  rL  )r   rt   r=  rl   r  functionFunctionCtxro   track_object_newr   r   r&  rC  r   r  rI   )rB   rc   r6   rL  r:  outr+   r+   r,   ra   ;  s,   z&AutogradFunctionContextVariable.createc                 C   s   | j d u r	td | j S )Nzproxy not set)r:  r   r   r+   r+   r,   as_proxyV  s   
z(AutogradFunctionContextVariable.as_proxyrc   rd   r6   re   r   c                    s   |dkrt  ||||S |dkr't|dksJ t|i d | _tjd S |dkr2td|  | j	d u r;td | j
sM| jrC|rEJ |jj| | t| j	jdkrYg | j	_|D ]	}| j	j| q[tjd S )Nr   mark_non_differentiabler   save_for_backwardz"autograd.Function context method: zCsave_for_backward only supported on a newly constructed FunctionCtx)r1   r   rN   r   rM  r   r\   ra   r   rI  rH  rF   rt   ro   track_save_for_backwardrE  append)r5   rB   rQ   rc   r6   r   r7   r+   r,   r   [  s(   
z+AutogradFunctionContextVariable.call_methodc                    s    dv rt  fddS  dkr jd ur ttjjS  dkrBjd ur0tjjS j	rBt
j	d}tjj|S t  S )N)rW  rV  c                     s     | |S r9   )r   r  rQ   r5   rB   r+   r,   r<   ~  r   z=AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>rI  rL  )rk   rI  r   r   r   rE  rL  r\   ra   rF   r   r   r   rI   r1   rb   r5   rB   rQ   rF   r7   rZ  r,   rb   {  s   
z+AutogradFunctionContextVariable.var_getattr)NFNNNNr   NNr   r   )r(   r)   r*   r   r%   r   r2   rv   ra   rU  r   rb   r   r+   r+   r7   r,   r&    s8    

 r&  c                       s>   e Zd ZdZ	d	d fddZ							
dddZ  ZS )AutogradEngineVariablez;
    Represents a torch._C._ImperativeEngine instance.
    Nr.   c                    s   t  jd||d| d S rJ  r   )r5   rI   rK  r6   r7   r+   r,   r2     s   zAutogradEngineVariable.__init__rc   rd   r6   re   r   c                 C   sp   |dkr/t jjjr)|jsJ dtjt jjjj	| j
d||jj g|R |S td d S td|  d S )Nqueue_callbackzXqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=Truer[   z#torch._C._ImperativeEngine method: )rl   r2  compiled_autogradin_compiled_autograd_region	one_graphr   r   r3  FakeCompiledAutogradEnginer^  rF   rr   rt   ro   get_ca_final_callbacks_varr   r5   rB   rQ   rc   r6   r+   r+   r,   r     s(   

	z"AutogradEngineVariable.call_methodr9   r   r   r(   r)   r*   r   r2   r   r   r+   r+   r7   r,   r]    s    r]  c                       s8   e Zd Zd fddZ							
		dddZ  ZS )rk   r.   Nc                    r   r0   )r1   r2   r   )r5   r   r6   r7   r+   r,   r2     r   zLambdaVariable.__init__rB   r&   rc   rd   r6   re   r   c                 C   s   | j |i |S r9   )r   r7  r+   r+   r,   rr     s   zLambdaVariable.call_functionr   r   )r(   r)   r*   r2   rr   r   r+   r+   r7   r,   rk     s    rk   c                       s   e Zd ZddhejZd!d" fddZ fddZdefd	d
Ze	de
jjfddZdd Zdd Zd#ddZdd Z								d$ddZdee deeef def fdd Z  ZS )%r^   rQ   py_typeNr.   c                    sD   t  jdi | t|tsJ t|tsJ || _|| _|| _d S r0   )r1   r2   rp   r   r   r   rQ   rf  )r5   r   rQ   rf  r6   r7   r+   r,   r2     s   
zGetAttrVariable.__init__c                    s   | j d ur| j S t   d S r9   )rf  r1   rE   r   r7   r+   r,   rE     s   
zGetAttrVariable.python_typec                 C   s   | j j d| j d| j dS N(ri   r   )r8   r(   r   rQ   r   r+   r+   r,   __repr__  s   zGetAttrVariable.__repr__
base_proxyc                 C   s
   t | |S r9   )rL   )rj  r   r+   r+   r,   create_getattr_proxy  s   
z$GetAttrVariable.create_getattr_proxyc                 C   s   t | j | jS r9   )r^   rk  r   rU  rQ   r   r+   r+   r,   rU    s   zGetAttrVariable.as_proxyc                 C   s8   | j  }zt|| jW S  ty   t|  dd w )Nz is not a constant)r   rD   rL   rQ   r   r   )r5   constantr+   r+   r,   rD     s   
z"GetAttrVariable.as_python_constantrB   r&   c                 C   sZ   t | jtjs	t|j| jj}| j|j	vrtt
|| j}||j	vr'tt
||S r9   )rp   r   r   r  r   rt   get_submodule
module_keyrQ   rO   r   r?  )r5   rB   rQ   step1step2r+   r+   r,   const_getattr  s   
zGetAttrVariable.const_getattrc                 C   s    || j  ||| j d S r9   )r   r>   create_load_attrsrQ   r?   r+   r+   r,   rA     s   
zGetAttrVariable.reconstructrc   rd   r6   re   r   c                 C   s   | j || j||S r9   )r   r   rQ   r7  r+   r+   r,   rr     s   zGetAttrVariable.call_functionc                    s  |dv rF| j dkrF|sF|d  rFt| jtjtjtjfrF| j}|d  }|	||r2|
||S |dkrEt|dkr@|d S td S n<|dkr| j dkrt|dkr|d  r|st| jtjtjtjfr| j}|d  }|	||r}tdS td	S t ||||S )
N)rh   rP   rO   r   rP   r   r   __contains__TF)rQ   r~   rp   r   r   r%   r  r(  rD   has_key_in_generic_dictrb   rN   r\   r1   r   )r5   rB   rQ   rc   r6   r   r   r7   r+   r,   r      sX   






zGetAttrVariable.call_methodr9   r   r   r   )r(   r)   r*   r   r   r2   rE   r   ri  rv   rl   fxProxyrk  rU  rD   rq  rA   rr   r   r   r   r   r+   r+   r7   r,   r^     s>    


r^   c                       sL   e Zd Zd fddZ							
		d fddZdd Zdd Z  ZS )MethodWrapperVariabler.   Nc                    r   r0   )r1   r2   method_wrapper)r5   rx  r6   r7   r+   r,   r2   <  r   zMethodWrapperVariable.__init__rB   r&   rc   rd   r6   re   r   c                    s`   t | jr&t|d tjr&t|dkrt|dksJ |d || jjjS t	 
||| d S )Nr   r   )r   rx  rp   r   r  rN   rb   __self__r(   r1   rr   r7  r7   r+   r,   rr   @  s   
z#MethodWrapperVariable.call_functionc                 C      dS NTr+   r   r+   r+   r,   r~   O     z(MethodWrapperVariable.is_python_constantc                 C      | j S r9   )rx  r   r+   r+   r,   rD   R     z(MethodWrapperVariable.as_python_constantr   r   )r(   r)   r*   r2   rr   r~   rD   r   r+   r+   r7   r,   rw  ;  s    rw  c                       s<   e Zd Zd fddZd fddZd	d
 Zdd Z  ZS )GetSetDescriptorVariabler.   Nc                    r   r0   )r1   r2   desc)r5   r  r6   r7   r+   r,   r2   W  r   z!GetSetDescriptorVariable.__init__rB   r&   c                    s:   |dkr| j rt| j d}t|| jj|S t ||S )Nr@  )rF   r   r   r   r  r@  r1   rb   r[  r7   r+   r,   rb   [  s   z$GetSetDescriptorVariable.var_getattrc                 C   rz  r{  r+   r   r+   r+   r,   r~   b  r|  z+GetSetDescriptorVariable.is_python_constantc                 C   r}  r9   )r  r   r+   r+   r,   rD   e  r~  z+GetSetDescriptorVariable.as_python_constantr   r   )r(   r)   r*   r2   rb   r~   rD   r   r+   r+   r7   r,   r  V  s
    r  c                       sh   e Zd ZddhejZdejddf fddZdd Zd	d
 Z	de
fddZdddZdddZ  ZS )PythonModuleVariablerI   is_torchr.   Nc                    s6   t  jdi | || _| jtu p| jjd| _d S )Nztorch.r+   )r1   r2   rI   rl   r(   
startswithr  r   r7   r+   r,   r2   p  s   zPythonModuleVariable.__init__c                 C      t jS r9   )rx   
ModuleTyper   r+   r+   r,   rE   u  r~  z PythonModuleVariable.python_typec                 C   r}  r9   rI   r   r+   r+   r,   rD   x  r~  z'PythonModuleVariable.as_python_constantc                 C   s   d| j  dS )NzPythonModuleVariable(r   r  r   r+   r+   r,   ri  {  s   zPythonModuleVariable.__repr__rB   r&   c                 C   s   t | j|}tj|S r9   )r   rI   r   r\   ra   r5   rB   rQ   resultr+   r+   r,   call_hasattr~  s   z!PythonModuleVariable.call_hasattrc                 C   sl   |j j| |r|j j| |S | js|| jjvr t| j|}n| jj| }| jo.t	| j|}t
|||S r9   )rt   ro   has_pending_mutation_of_attr	load_attrr  rI   rO   rL   rF   r   r   r   r   r+   r+   r,   rb     s   z PythonModuleVariable.var_getattrr   )r(   r)   r*   r   r   rx   r  r2   rE   rD   r   ri  r  rb   r   r+   r+   r7   r,   r  i  s    
r  c                       sN   e Zd Zd fddZ							dd
dZdddefddZdd Z  ZS )TypingVariabler.   Nc                    r   r0   r   r   r7   r+   r,   r2     r   zTypingVariable.__init__rc   rd   r6   re   r   c                 C   s:   |dkrt |dkr| j|d   }t|S td d S )Nrh   r   r   z+unsupported method call on typing variablel)rN   rI   rD   r  r   )r5   rB   rQ   rc   r6   
new_typingr+   r+   r,   r     s   zTypingVariable.call_methodrB   r&   rQ   c                 C   sd   ddl m}m} |jj| |r|j| |S t| j|}| j	r-t
| j	|}||||S |||S )Nr   )SourcelessBuilderVariableBuilder)r<  r  r  rt   ro   r  r  rL   rI   rF   r   )r5   rB   rQ   r  r  rI   attr_sourcer+   r+   r,   rb     s   
zTypingVariable.var_getattrc                 C   r}  r9   r  r   r+   r+   r,   rD     r~  z!TypingVariable.as_python_constantr   r   )	r(   r)   r*   r2   r   r   rb   rD   r   r+   r+   r7   r,   r    s    
r  )maxsizec                  C   sZ   ddl m}  i }|  D ]\}}|j D ]\}}t|r)t||d  }r)|||< qq|S )Nr   )NP_TO_TNP_MODULE)utilsr  r   rO   r   rL   )r  np_fn_to_tnp_fnnp_modtnp_modr   tnp_fnnp_fnr+   r+   r,   get_np_to_tnp_map  s   r  c                       s   e Zd ZdZejfZd fddZedd Z	edd	 Z
	
							dddZ						dddZdd Z fddZ  ZS )NumpyVariablezz
    Wrapper around `numpy.*`. Currently, is able to trace a small subset of numpy functions as well as numpy dtypes.
    r.   Nc                    r   r0   r   r   r7   r+   r,   r2     r   zNumpyVariable.__init__c                 C   s:   |j d}t|dkr|d d ddgksJ || jv S N.r   rl   _numpy)r)   splitrN   constant_fold_functionsclsr   modr+   r+   r,   can_constant_fold_through  s   $
z'NumpyVariable.can_constant_fold_throughc                 C   s<   |j d}t|dkr|d d ddgksJ t|d S r  )r)   r  rN   np_constant_collections_maprP   r  r+   r+   r,    get_constant_collection_for_func  s   $z.NumpyVariable.get_constant_collection_for_funcrB   r&   rc   rd   r6   re   r   c           
   	   C   s  t jstd| j d ddlm} ddlm} t 	| j}|d u r,td| j d | 
| }d urez|| jd	d
 |D i dd | D W S  tyd   t| jj d| d|  Y d S w |jdkrt jrd|j d}|dt j 7 }t| ||j||\}}| |rt||rtj|  dd
 |D i dd | D S |jjd||gt||R  }	|||	S )Nznumpy.z()r   )numpy_to_tensor_wrapperr   )NumpyNdarrayVariablezCan't find numpy function zM in torch._numpy.  Please file an issue to request support for this function.c                 S      g | ]}|  qS r+   rD   rN  r+   r+   r,   
<listcomp>      z/NumpyVariable.call_function.<locals>.<listcomp>c                 S      i | ]	\}}||  qS r+   r  r   r+   r+   r,   r         z/NumpyVariable.call_function.<locals>.<dictcomp>z with non-const args:  ztorch._numpy.randomz
delegate 'z' to NumPy itself via zconfg.use_numpy_random_stream=c                 S   r  r+   r  rN  r+   r+   r,   r    r  c                 S   r  r+   r  r   r+   r+   r,   r     r  rr   )r   trace_numpyr   rI   r  r  tensorr  r  rP   r  r   r   r(   r)   use_numpy_random_streamr*   
patch_argsr  r   r   r\   ra   rD   rt   r=  r   )
r5   rB   rc   r6   r  r  r   collection_variable_typmsgr:  r+   r+   r,   rr     sb   


zNumpyVariable.call_functionc                 C   s   t d d S )Nnumpyr   rd  r+   r+   r,   r     s   zNumpyVariable.call_methodc                 C   r}  r9   r  r   r+   r+   r,   rD   #  r~  z NumpyVariable.as_python_constantc                    s$   t jrt| jtr| jjS t  S r9   )r   r  rp   rI   rH   r(   r1   rU  r   r7   r+   r,   rU  &  s   
zNumpyVariable.as_proxyr   r   r   )r(   r)   r*   r   tnp
issubdtyper  r2   rz   r  r  rr   r   rD   rU  r   r+   r+   r7   r,   r    s4    


@
	r  c                       s4   e Zd Zd	 fddZdefddZdd Z  ZS )
NullVariabler.   Nc                    r   r0   r   r   r7   r+   r,   r2   2  r   zNullVariable.__init__c                 C   rz  )Nr  r+   r   r+   r+   r,   ri  5  r|  zNullVariable.__repr__c                 C   s$   t jdk r	td |td d S )N)      z0cannot reconstruct NullVariable in < Python 3.11	PUSH_NULL)sysversion_infor   r   r
   r?   r+   r+   r,   rA   8  s   
zNullVariable.reconstructr   )r(   r)   r*   r2   r   ri  rA   r   r+   r+   r7   r,   r  1  s    r  c                   @   r   )r   z"Marker used to implement delattr()Nr   r+   r+   r+   r,   r   >  r   r   c                       sP   e Zd ZdZdhejZedd Zd fddZde	fd	d
Z
dd Z  ZS )StringFormatVariablez[
    Represents a call to str.format(), we delay calling format until after the graph.
    format_stringc                 C   sb   t dd t|| D r'tj|jdd |D i dd | D S | |t	|t
|S )Nc                 s   s    | ]}|  V  qd S r9   )r~   rN  r+   r+   r,   rP  K  s
    
z.StringFormatVariable.create.<locals>.<genexpr>c                 S   r  r+   r  )r   r   r+   r+   r,   r  Q  r  z/StringFormatVariable.create.<locals>.<listcomp>c                 S   r  r+   r  r   r+   r+   r,   r   R  r  z/StringFormatVariable.create.<locals>.<dictcomp>)all	itertoolschainvaluesr   r\   ra   formatr   r   r   )r  r  sym_args
sym_kwargsr+   r+   r,   ra   I  s   zStringFormatVariable.creater.   Nc                    s6   t  jdi | t|tsJ || _|| _|| _d S r0   )r1   r2   rp   r   r  r  r  )r5   r  r  r  r6   r7   r+   r,   r2   W  s
   
zStringFormatVariable.__init__c                 C   s&   | j j d| jd| jd| jdS rg  )r8   r(   r  r  r  r   r+   r+   r,   ri  ^  s   &zStringFormatVariable.__repr__c                    s`    j  fdddd  tj dd j D } t|  tddd	 d S )
Nc                      s      j dgS )Nr  )r>   r  r  r   r+   r   r+   r,   r<   c  s
    
z2StringFormatVariable.reconstruct.<locals>.<lambda>Tr   c                 S   s   i | ]\}}t j||qS r+   r   r\   ra   r   r+   r+   r,   r   l  s    z4StringFormatVariable.reconstruct.<locals>.<dictcomp>r   r   r   )	r=   r   r   r  r  r   r   r   r
   )r5   r;   r6   r+   r   r,   rA   a  s   	z StringFormatVariable.reconstructr   )r(   r)   r*   r   r   r   rz   ra   r2   r   ri  rA   r   r+   r+   r7   r,   r  B  s    
r  c                       sN   e Zd ZdZd fddZedd Zdd
dZdd ZedddZ	  Z
S )DebuggingVariablez
    Represents a call to a debugging function like print(), or something
    registered to config.reorderable_logging_functions.
    r.   Nc                    r   r0   r   r   r7   r+   r,   r2   y  r   zDebuggingVariable.__init__c                 C   s(   t | ot| tjtjfo| tjjjv S r9   )	r   rp   rx   ry   BuiltinFunctionTyperl   r2  r   reorderable_logging_functions)r   r+   r+   r,   is_reorderable_logging_function}  s
   z1DebuggingVariable.is_reorderable_logging_functionrB   r&   c                 C   sP   |j rd S | | j||std| j d| d| d |j| t|f d S )NzReordering debugging function z with inputs r  z is not yet implemented.)exportcan_reorder_logsrI   r   debug_localsrY  r   r7  r+   r+   r,   rr     s   
zDebuggingVariable.call_functionc                 C   s   | j |S r9   )rF   rA   r?   r+   r+   r,   rA     s   zDebuggingVariable.reconstructTc                 C   s:   t jt jtf}t||g}|D ]
}t||s dS qdS )zm
        Run some additional checks for what sort of function calls can we
        actually reorder.
        FT)r   r  r\   r  pytreetree_leavesrp   )r   rc   r6   allowed_input_types	flat_argsr   r+   r+   r,   r    s   
z"DebuggingVariable.can_reorder_logsr   r   )r.   T)r(   r)   r*   r   r2   rv   r  rr   rA   r  r   r+   r+   r7   r,   r  s  s    

r  c                       s8   e Zd ZdZd fddZ							
dddZ  ZS )LoggingLoggerVariablez<
    Represents a call to any of logging.Logger methods
    r.   Nc                    r   r0   r   r   r7   r+   r,   r2     r   zLoggingLoggerVariable.__init__rc   rd   r6   re   r   c                 C   sP   |j rd S t| j|d }t|dd }||htjjjr"tj	
d S td d S )Nrw   zLogger not supported for non-export cases. To avoid graph breaks caused by logger in compile-mode, it is recommended to disable logging by adding logging methods to config.ignore_logger_methods)r  rL   rI   intersectionrl   r2  r   ignore_logger_methodsr   r\   ra   r   )r5   rB   rQ   rc   r6   methodrQ  r+   r+   r,   r     s   z!LoggingLoggerVariable.call_methodr   r   re  r+   r+   r7   r,   r    s    r  c                       s   e Zd ZdZd ZzddlmZmZ	m
Z W n ey)   eddi Z	eddi ZY nw d fdd	Zd
d Zdee deeef defddZdddedefddZ  ZS )ConstantLikeVariablez8self.value is a compile-time constant, but not a literalr   )dtypefloatinggenericinvalid_typer+   r.   Nc                    r   r0   r   r   r7   r+   r,   r2     r   zConstantLikeVariable.__init__c                 C   r}  r9   r  r   r+   r+   r,   rD     r~  z'ConstantLikeVariable.as_python_constantrc   r6   c                 C   s   zdd |D }dd |  D }W n ty,   t| j d| d| d| d Y nw t| j||i |}tj|rDtj	|S t
|tjrNt|S t| j d| d	|  d S )
Nc                 S   r  r+   r  rN  r+   r+   r,   r    r  z4ConstantLikeVariable.call_method.<locals>.<listcomp>c                 S   r  r+   r  r   r+   r+   r,   r     r  z4ConstantLikeVariable.call_method.<locals>.<dictcomp>r  z(*z, **r   z() -> )r   r   r   _error_prefixrL   rI   r   r\   r]   ra   rp   reMatchConstantRegexMatchVariable)r5   rB   rQ   rc   r6   cargsckwargsr  r+   r+   r,   r     s   &z ConstantLikeVariable.call_methodrB   r&   rQ   c                 C   st   t | j|}t|| jrt|}t|| jrt|S t|tr)t|| j	r)t
|S tj|r5tj|S t| |S r9   )rL   rI   rp   np_floatingfloatnp_dtypeNumpyDTypeVariablerH   rG   
np_genericr  r   r\   r]   ra   r^   r  r+   r+   r,   rb     s   
z ConstantLikeVariable.var_getattrr   )r(   r)   r*   r   r  r  r  r  r  r  r  r  ImportErrorrH   r2   rD   r   r   r   r   r   rb   r   r+   r+   r7   r,   r    s&    

r  c                   @   r   )RegexPatternVariablez
re.PatternNr(   r)   r*   r  r+   r+   r+   r,   r    r   r  c                   @   r   )r  zre.MatchNr  r+   r+   r+   r,   r    r   r  c                       s"   e Zd ZdZd fddZ  ZS )TorchVersionVariableztorch.__version__r.   Nc                    s6   | dtj |d tju sJ t jdi | d S )NrI   r+   )
setdefaultrl   __version__r1   r2   r   r7   r+   r,   r2     s   zTorchVersionVariable.__init__r   )r(   r)   r*   r  r2   r   r+   r+   r7   r,   r  
  s    r  c                   @   r   )NumpyTypeInfoVariableznp.iinfo/np.finfoNr  r+   r+   r+   r,   r    r   r  c                   @   s   e Zd ZdZdd ZdS )r  znp.dtype[...]c                 C   s
   | j jjS )a0  Similar to how numpy dtype descriptors (e.g. np.float32 ) are handled by NumpyVariable:

        np.dtype() objects are serialized as strings, torch._numpy wrappers will normalize to the torch dtype.
        This also handles unsupported things nicely (i.e. structured arrays and object arrays).
        )rI   rH   r(   r   r+   r+   r,   rU    s   
zNumpyDTypeVariable.as_proxyN)r(   r)   r*   r  rU  r+   r+   r+   r,   r    s    r  c                       s,   e Zd ZdZd
 fddZddd	Z  ZS )RandomClassVariablezrandom.Randomr.   Nc                    r   r0   r   r   r7   r+   r,   r2   -  r   zRandomClassVariable.__init__rB   r&   c                 C   sT   t |dkrtd n|rtd t |dkrtjd n|d }t|tj dS )Nr   zrandom.Random() with > 1 argzrandom.Random() with kwargsr   )seedrq   )rN   r   r   r\   ra   RandomVariabler   r   )r5   rB   rc   r6   r  r+   r+   r,   rr   0  s   
 
z!RandomClassVariable.call_functionr   r   )r(   r)   r*   r   r2   rr   r   r+   r+   r7   r,   r  *  s    r  c                       s   e Zd ZdZdhejZh dZ		ddeej	 dee ddf fdd	Z
d
d Zdd Zedd Zedd Zedd Zedd Zdee deeef def fddZdd Z  ZS )r  zrandom.Random()

    Implemented by wrapping a VariableTracker around a random.Random object.
    The supported methods for the random.Random object cannot be overriden.
    Assumes that random objects behave the same given a set seed or state.
    random>   r  randintuniform	randrangeNrandr  r.   c                    sj   t  jdi | |d ur#| |sJ t | _| j|  d S |d ur+| nd }t|| _d S r0   )r1   r2   is_supported_random_objr  RandomsetstategetstaterD   )r5   r  r  r6   r7   r+   r,   r2   O  s   
zRandomVariable.__init__c                 C   r  r9   )r  r  r   r+   r+   r,   rE   ^  r~  zRandomVariable.python_typec                 C   r}  r9   )r  r   r+   r+   r,   rD   a  r~  z!RandomVariable.as_python_constantc                 C   s   t | tjur	dS ttjdD ]2}t| |s dS t| |}t	
|r3|ttj|| kr2 dS qt|dd ttj|urB dS qdS )NF)r  r  r  rw   T)rH   r  r  r  r  r  _supported_fn_namesr   rL   r   	isbuiltinr@  )r   rQ   methr+   r+   r,   r  d  s    


z&RandomVariable.is_supported_random_objc                 C   sz   t | tu sJ t | d tu sJ t | d tu sJ tdd | d D s)J | d d u s9t | d tu s;J d S d S )Nr   r   c                 s   s    | ]	}t |tu V  qd S r9   )rH   intrN  r+   r+   r,   rP  |  s    z-RandomVariable.check_state.<locals>.<genexpr>r   )rH   r   r  r  r  stater+   r+   r,   check_statew  s
   (zRandomVariable.check_statec                 C   sF   t |  ttj| d tdd | d D tj| d gS )Nr   c                 S   s   g | ]}t j|qS r+   r  rN  r+   r+   r,   r    r   z-RandomVariable.wrap_state.<locals>.<listcomp>r   r   )r  r   r   r   r\   ra   r  r+   r+   r,   
wrap_state  s   
zRandomVariable.wrap_statec                 C   s   |   }t| |S r9   )rD   r  r   )r  	state_objr+   r+   r,   unwrap_state  s   
zRandomVariable.unwrap_staterc   r6   c                    s   dkr&|j j|  | jjdd |D i dd | D  tjd S  dkr2| 	| j
 S  dkrN|j j|  | j| |d  tjd S  | jv r|j j|  | j
  fd	d
}t| j dd |D i dd | D  t||||S t | ||S )Nr  c                 S   r  r+   r  rN  r+   r+   r,   r    r  z.RandomVariable.call_method.<locals>.<listcomp>c                 S   r  r+   r  r   r+   r+   r,   r     r  z.RandomVariable.call_method.<locals>.<dictcomp>r  r  r   c                     s&   t  }| t| | i |S r9   )r  r  r  rL   )rc   r6   rrQ   r  r+   r,   call_random_meth  s   
z4RandomVariable.call_method.<locals>.call_random_methc                 S   r  r+   r  rN  r+   r+   r,   r    r  c                 S   r  r+   r  r   r+   r+   r,   r     r  )rt   ro   mutationr  r  r   r   r\   ra   r  r  r  r  r  rL   r#   r1   r   )r5   rB   rQ   rc   r6   r  r7   r  r,   r     s2   


zRandomVariable.call_methodc                    s\      fdd  dd     d  | | j   dd    d S )Nc                      r   )Nr  )r>   r   r  r   r+   r@   r+   r,   r<     r   z,RandomVariable.reconstruct.<locals>.<lambda>r   Fr  r   T)r=   rr   dup_topr  r  r  r  pop_topr?   r+   r@   r,   rA     s   

zRandomVariable.reconstructr\  )r(   r)   r*   r   r   r   r  r   r  r  r2   rE   rD   rv   r  r   r  r  r   r   r   r   rA   r   r+   r+   r7   r,   r  ;  sD    	




'r  c                       sB   e Zd Zedd Z fddZ							
		dddZ  ZS )WeakRefVariablec                 K   sD   | dd }| }|ot|}t| ||}||d< t|fi |S )NrF   )rP   r   r   r   r
  )rB   weakref_valueoptionsrF   referentreferent_vtr+   r+   r,   r     s   zWeakRefVariable.buildc                    r   r0   )r1   r2   r  )r5   r  r  r7   r+   r,   r2     r   zWeakRefVariable.__init__rB   r&   rc   rd   r6   re   r.   r   c                 C   r}  r9   )r  r7  r+   r+   r,   rr     s   zWeakRefVariable.call_functionr   )r(   r)   r*   rv   r   r2   rr   r   r+   r+   r7   r,   r
    s    
r
  )nr|   rF  r   r   r  r  r  r  rx   r  typingr   r   r   r   torch._Crl   torch._numpyr  r  torch.utils._pytreer  _pytreer  r>  r   r   bytecode_transformationr	   r
   create_parameter_opr   excr   guardsr   r   mutation_guardr   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   	nn_moduler"   user_definedr#   r$   r%   torch._dynamo.symbolic_convertr&   r'   r-   r   r   r   r   r   r   r   r   r   r  r
  	dataclassrC  r&  r]  rk   r^   rw  r  r  r  	lru_cacher  r  r  r   r  r  r  r  r  r  r  r  r  finfoiinfor  r  r  r  r
  r+   r+   r+   r,   <module>   s     <=d  4o)x&
#
n17:	 