a
    d֐                     @   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m	Z	m
Z
mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ dd	lmZmZmZmZ dd
lmZmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE ddlFmGZG ddlHmIZImJZJ ddlKmLZLmMZMmNZNmOZO ddlPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZXmYZY ddlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZd ddlemfZf ddlgmhZhmiZimjZjmkZk ddlmlZlmmZmmnZnmoZo ddlpmqZqmrZr G dd dZsejtG dd dZuG d d! d!Zvd"d# Zwd.d$d%Zxd/d'd(ZyejtG d)d* d*Zzd0e
e/ e{d+d,d-Z|dS )1    N)AnyOptionalUnion)SymInt)GuardSource)
PyOperator)
FakeTensor)immutable_list   )configmutation_guardreplay_record	skipfiles)
is_allowedis_builtin_callableis_numpy)unimplemented)GuardBuilder)SideEffects)
AttrSourceConstantSourceGetItemSourceGlobalSourceGlobalWeakRefSourceis_constant_sourceLocalInputSourceLocalSourceRandomValueSourceSourceTupleIteratorGetItemSource)clone_inputget_fake_valuegetfileglobal_key_name	HAS_NUMPYis_namedtupleis_numpy_int_type	is_typingistensoristypenpodict_valuespreserve_rng_statetuple_iteratortuple_iterator_getitemtuple_iterator_lenwrap_fake_exception   )MutableLocaltypestr)BuiltinVariable)ConstantVariableEnumVariable)ConstDictVariableDataClassVariableDefaultDictVariableHFPretrainedConfigVariable)UserFunctionVariable)ListVariableNamedTupleVariableRangeVariableSizeVariableSliceVariableTupleIteratorVariableTupleVariable)
AutogradFunctionContextVariableAutogradFunctionVariableComptimeVariableGetAttrVariableInspectSignatureVariableLambdaVariableNumpyVariablePythonModuleVariableSkipFilesVariableTypingVariable)UnspecializedNNModuleVariable)SymNodeVariableTensorVariableTensorWithTFOverrideVariableUnspecializedPythonVariable)tensor_dunder_fnstorch_special_class_typesTorchPyOperatorTorchVariable)UserDefinedClassVariableUserDefinedObjectVariablec                   @   s   e Zd ZdS )_missingN)__name__
__module____qualname__ r\   r\   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/variables/builder.pyrX   h   s   rX   c                   @   st   e Zd ZU eed< eed< eed< eej	j
j ed< dZeed< dd Zd	d
 Zdd Zdd Zdd Zdd ZdS )GraphArgsourceexampleZis_unspecializedfake_tensorT	is_tensorc                 C   s|   t | jtjr^t | jtjjjs$J t | jtr^d| jj	vrHg | jj	d< | jj	d 
| jj t | jtjjjrxtdd S )NZgraph_arg_posz3Fake Tensor observed in TorchDynamo Fx graph inputs)
isinstancer`   torchTensorra   _subclassesr   r_   r   __dict__appendposAssertionErrorselfr\   r\   r]   __post_init__y   s    zGraphArg.__post_init__c                 C   s   | j |S N)r_   Zreconstruct)rl   txr\   r\   r]   load   s    zGraphArg.loadc                 C   s   | j gS rn   r`   rk   r\   r\   r]   get_examples   s    zGraphArg.get_examplesc                 C   s,   | j d ur(t| j tjj js J | j gS d S rn   )ra   rc   rd   rf   r   rk   r\   r\   r]   get_fake_examples   s
    
zGraphArg.get_fake_examplesc                 C   s   dS )Nr1   r\   rk   r\   r\   r]   __len__   s    zGraphArg.__len__c                 C   s
   d | _ d S rn   rq   rk   r\   r\   r]   erase   s    zGraphArg.eraseN)rY   rZ   r[   r   __annotations__r   boolr   rd   rf   ra   r   rb   rm   rp   rr   rs   rt   ru   r\   r\   r\   r]   r^   l   s   
r^   c                       s   e Zd ZdZed fddZdd Zee	ddd	 Z
ed
d Zdd Zdd Zdd Zdd Zdd Zdd Zeejejf dddZejdddZdd Z  ZS )VariableBuilderz3Wrap a python value in a VariableTracker() instancer_   c                    s0   |d usJ t    || _|| _| | _d S rn   )super__init__ro   r_   name)rl   ro   r_   	__class__r\   r]   r{      s
    
zVariableBuilder.__init__c                 C   s6   || j jjv r| j jj| S | |jf i |  S rn   )ro   outputside_effects_wrapcloneoptionsrl   valuer\   r\   r]   __call__   s    zVariableBuilder.__call__Nc                   C   s   t tdh dS )N   >         i   i   i   g      ?g    ?gi@             i  g?i   (   @   g?`   g{Gz?   gMbP?)setrangeunionr\   r\   r\   r]   _common_constants   s    z!VariableBuilder._common_constantsc              
   C   sB   t | rtjtt| dS ttttt	tt
jjtt
jjtit|  S )N)Z	tuple_cls)r%   	functoolspartialr=   typetuplerB   listr<   r+   rd   nnZParameterListZ
ModuleListr   r\   r\   r]   	list_type   s    zVariableBuilder.list_typec                 C   s   | j S rn   ry   rk   r\   r\   r]   
get_source   s    zVariableBuilder.get_sourcec                 C   s   d|   iS )Nr_   )r   rk   r\   r\   r]   r      s    zVariableBuilder.optionsc                    s6   |    t ts   tjkr$d S  fdd|D S )Nc                    s   h | ]}  |qS r\   )
make_guard).0Zguardry   r\   r]   	<setcomp>       z.VariableBuilder.make_guards.<locals>.<setcomp>)r   rc   r   guard_sourcer   ZCONSTANT)rl   guardsr\   ry   r]   make_guards   s    zVariableBuilder.make_guardsc                    s  ddl m } j}ttjtjfr.S tr@S tt	t
tfsXtrtt	t
frtdd D rtj ntj  fddtD }| d}tt
r܈jjjj|S |S ttr&tj  fddttD }t|t  dS tttfr~fd	dd
D }ttrht ||tj!dS t"||tjdS nxtt#t$j%t$j&fr`tt'fdd( r`tj) ( D ]$}*|rĈj+t,|| qćfdd fdd( D }tt$j%r8t-|t.j/ d}nt0|t. d}jjj1j|S ttj2j3r^ttj2j4tj2j5tj2j6frt7j8st9d t:;rt<|tj!d}t=>t.s|S jjj?j|S t@dds
tAjBtj2jCjDjEr@t@ddr.t@dds.J dt<|tj!dS jjjFjGH dS ntIJsttjKtjLtjMfrt.tNtOfv rt7jPsQ v stjtRstjtSstjtTrtjjUtRrtI|tjVdS WS ntI|tjVdS nttXrNtdd D rNtIj|tjYdS ttZj[rrt\j|tjYdS t]rt^j|tj_dS t`rtaj|tjbdS tcrtdj|tjYdS tejfu rtgthjij|tjbdS |u rtj S tkjlu r(tgtmj|tjbdS tnrXtoj|tprLtjbntj!dS tqv rxtaj|tjbdS tt.trjsfrttjutvddrtewddstxj|tjbdS ttrjstjyjzfrt{j|tjbdS ttrj|t}j~frtj|tjdS t.tjjju rDtj|tjbdS ttjjjr\t S ttrjrt.t@dd tjjju rt@d d!d"krʈt@jd"d krttjj|tjbdd"S ttNtOfstrttjrWS trt|tj!S tr:t|tj!dS ttr^ttj!tjdS t.jd#krtjtrta|tjbdS tAt.t.rtj|tjbdS tjtj!d}t=>t.s|S jjj?j|S d S )$Nr
   )comptimec                 S   s&   g | ]}t |tp t|p |d u qS rn   )rc   intr&   r   xr\   r\   r]   
<listcomp>   r   z)VariableBuilder._wrap.<locals>.<listcomp>c                    s0   g | ](\}}t jt || qS r\   rx   ro   r   r   
add_guards)r   iitem)r   rl   r\   r]   r      s   )r   c                    s2   g | ]*}t jt |t| qS r\   )rx   ro   r   r   r.   r   )r   r   )r   rl   r   r\   r]   r     s   )mutable_localr   c                    s,   g | ]$}t  jt  |t|qS r\   )rx   ro   r   r   getattrr   kr   r\   r]   r     s   )startstopstepc                    s    t | p | pt| tjS rn   )r5   
is_literaltensor_can_be_dict_keyrc   enumEnum)r   rk   r\   r]   <lambda>   s   
z'VariableBuilder._wrap.<locals>.<lambda>c                    s     | rtt| S | S d S rn   )r   r   r#   )keyrk   r\   r]   index_source-  s    
z+VariableBuilder._wrap.<locals>.index_sourcec              	      s6   i | ].}|t jt ||  qS r\   r   r   r   r   rl   r   r\   r]   
<dictcomp>3  s   z)VariableBuilder._wrap.<locals>.<dictcomp>z5TorchDynamo purposely graph breaks on RNN, GRU, LSTMsZ_is_fsdp_managed_moduleFZ_fsdp_use_orig_paramsz3Dynamo only supports FSDP with use_orig_params=Truery   )r   r   c                 s   s    | ]}t |pt|V  qd S rn   )r   r5   r   r   r\   r\   r]   	<genexpr>  r   z(VariableBuilder._wrap.<locals>.<genexpr>)r   r_   r   )r_   r   T)Zallow_torchZ_torchdynamo_inline__self__rY    applyZbuiltin_function_or_method)r   r   r)   rd   r   SymFloatwrap_symr(   wrap_tensorr   r   r+   r%   allr   ZEQUALS_MATCHZLIST_LENGTH	enumerater   ro   r   r   Z
track_listr_   r-   ZTUPLE_ITERATOR_LENr   r/   rA   r2   slicerc   r@   
TYPE_MATCHr>   dictcollectionsdefaultdictOrderedDictmapkeysZ	DICT_KEYSr   Zstore_dict_keyr#   r9   r   default_factoryr7   Z
track_dictr   ModuleZRNNZGRUZLSTMr   Z	allow_rnnr   r   Zis_dynamic_nn_modulerM   r   Z"cls_supports_mutation_side_effectsZtrack_object_existingr   
issubclassr~   paralleldistributedZDistributedDataParallelregister_attr_or_moduler|   r   r5   r   SizeZdeviceZdtyper   floatZspecialize_int_floatr   r   r   r   baseZCONSTANT_MATCHwrap_unspecialized_primitive	frozensetZID_MATCHr   r   r6   r   r4   ZBUILTIN_MATCHr   rU   ZFUNCTION_MATCHr'   rL   inspect	signaturerH   rG   createrE   dataclassesfields_dataclasses_fields_lambdar   rI   callablerR   typesFunctionTyper   checkr"   getattr_staticrK   ZjitZScriptFunctionr;   
ModuleTyper   ZDummyModulerJ   ZPYMODULE_MATCHZautogradfunctionZFunctionMetarD   ZFunctionCtxrC   
MethodTyper   rF   r$   r*   numberr8   Zis_matching_objectwrapr   r:   r   rT   Z
NAME_MATCHrY   rS   rV   rW   )rl   r   r   r   r   resultitemsr   r\   r   r]   r      s    
















	






	






zVariableBuilder._wrapc                 C   s4   t |tjjp2t | jto2| jjdko2t | jjtS )Nstate)	rc   rd   r   	Parameterr_   r   memberr   r   r   r\   r\   r]   r   "  s    
z&VariableBuilder.tensor_can_be_dict_keyc                 C   s   | j ot| j tot| j jto| j jjdkot| j jjtot| j jjjto| j jjjjdkot| j jjjjto| j jjjjj| j	j
 v rt| j	j
| j jjjjj tjjS dS )NparamsZparam_groupsT)r_   rc   r   r   indexr   r   r   Z
local_namero   f_localsr   rd   ZoptimZ	Optimizerrk   r\   r\   r]   tensor_should_specialize+  s,    
z(VariableBuilder.tensor_should_specializer   c              	   C   s   t |  s*| jjt|  |dd  n.t |  rX| jjj|tdd| j	d |dS t
j| j| jjtdd| j	t||dS )NF[^a-zA-Z0-9]+_)r_   sym_num)ro   proxyr   )r   r   ro   r   add_graphargr^   r   resubr|   rN   r   create_graph_inputr   r   r\   r\   r]   r   ?  s     zVariableBuilder.wrap_symc           	   	   C   sp  |     r*| jjj|| j|   dS t|   rZ| jjj|t	dd| j|   dS t
|tjv rnd}nt
|tjtjjfv sJ d}| jjt	dd| jt
|}t| j||| tj|  ||   d}d|jjvsJ |j |jjd< d }|jjjd }t|tjjjr|}| jj t!|   |d| t
|tjv rl|j"j#}t
|}t$||   ||S |S )	Nry   r   r   TF)ro   r   example_valuer   should_specializeignore_subclassr_   Ztensor_dictr   )%r   r   Zis_nn_modulero   r   r   r|   r   r   r   r   r   Ztraceable_tensor_subclassesrd   re   r   r   r   wrap_fx_proxyr   r   ZTENSOR_MATCHr   nodemetarg   copyr   rc   rf   ra   r   r   r^   Z__torch_function____func__rP   )	rl   r   r   Ztensor_proxyZtensor_variablefake_tensor_valuer   Zsubclass_torch_function__funcZsubclass_typer\   r\   r]   r   S  s^    
	zVariableBuilder.wrap_tensorc           
   	   C   s  | j | jjjv r | jjj| j  S tjrzt|trzt| 	 sz| jjj
}|j|j|| jd|d}| jjjt|| j n
t|}t| 	 ts| 	 tjdh}d|i}ni }|d| 	 i t|tjr|d|i | jjtdd| j t|}ttf| j||d	|}|| jjj| j < t| 	 sd }|jj j!d
 }	t|	tj"j#j$r`|	}| jj%t&| 	 |d|dd |S d S )Nry   )hintTr   r_   Z	raw_valuer   r   )ro   r   r   r   F)rb   )'r|   ro   r   Zunspec_variable_mapr   dynamic_shapesrc   r   r   r   	shape_envZcreate_symintnodeZcreate_symbolr_   tracked_fakesrh   TrackedFakerd   tensorr   r   r   r   updatere   r   r   r   r   wrap_fx_proxy_clsrQ   r   r   r  rf   ra   r   r   r^   )
rl   r   r  Zwrapped_valuer   r   r   Z
unspec_varr  r   r\   r\   r]   r     sf    





	z,VariableBuilder.wrap_unspecialized_primitive)rY   rZ   r[   __doc__r   r{   r   staticmethodr   	lru_cacher   r   r   r   r   r   r   r   r   rd   r   r   r   re   r   r   __classcell__r\   r\   r}   r]   rx      s(   
	  =	Rrx   c                 C   s   t | tr| j}n t | tr$| j}ntd|   g }t|D ]:}d }| jrbt	t
| jd|j}|t||d|  q@t|| S )Nz)Dataclass fields handling fails for type Z__dataclass_fields__ry   )rc   rW   r   r8   Zuser_clsr   r   r   r_   r   r   r|   rh   add_optionsrB   )objr   r   fieldr_   r\   r\   r]   r     s    

r   c                 K   s   t f t| ||d|S )N)
target_clsro   r   r   )r  rO   )ro   r   r   r   r\   r\   r]   r     s    r   Fc                 K   s  ddl m} t||sJ d|v r@|d d ur@|jj|d  d|jjvsPJ |}dd }t  |d u rzt	|j|}nt|t
rnt|tjr|jrtj " |||jj|j< W d    n1 s0    Y  || tu d}	d|v r|d d usJ |d |	d< t|fd	|i|	}W d    n1 s20    Y  t|tjrt|tjj}
|d
d}|
sp|rv|}nd }||}||jjd< | |}t|tjjj
r|
rtjjntj|d< ||d< || | |fi |S t|jjdr|jjjdkrt|jjjtjjs,|jjtjj krDddl!m"} ||jjS |jjtjj#ksh|jjtj$j%kr|ddl!m&} ||S t'|t(t)t*frt+j,r||jjd< t-j.|||fi |S t'|tj/r(t+j,r(||jjd< g }t0|D ].\}}|| }|1t-j.|||fi | qt2||fi |S t'|t(r|jjtj3t4j5t6tj7dt8t6tj7dt8fv rt+j,r||jjd< t-j.|||fi |S t9|fi |S n6t'|tj/rt:dd |D rdd |D }t2|fi |S t|t;t<frg }t0|D ]Z\}}|d u r$|1t9d i | n0|1t=||j>dt4j?||fi fd|i| qt'|t;rtt@|fi |S t'|t<tAfrtB|fdtC i|S |jDjEdkst|dsJ dtF||jDfi |S n|d u s|jjtjGu rt9d!i |S t|t(r6|jjtjHjIu r6||jjd< t9|fi |S t|tjJtjKfrh||jjd< t-||fi |S |jjtj$jLjMtj$jNfv rddl!mO} ||jjd< |||fi |S tPdtQ| d|jjR d|jj   d S )"Nr
   )InstructionTranslatorBaser   r   c                 S   s(   t | tjr$t | tjjjs$t| } | S rn   )rc   rd   re   rf   ra   r   r    r   r\   r\   r]   _clone_input
  s    z'wrap_fx_proxy_cls.<locals>._clone_input)r   rb   r_   ro   r   FZ
class_typespecialized_valuerY   Z	set_stater1   )rU   )rW   Zget_rankZget_world_sizec                 S   s   g | ]}t |tqS r\   )rc   r   r   r\   r\   r]   r   q  r   z%wrap_fx_proxy_cls.<locals>.<listcomp>c                 S   s   g | ]}t |qS r\   )r5   r   r\   r\   r]   r   s  r   call_functionr   ztorch.return_types_fieldsznamedtuple?)CUDAStreamVariableztorch.* op returned non-Tensor  )N)N)SZsymbolic_convertr  rc   r   r   r  r   r  r,   r!   r   rd   re   exportZ_CZDisableTorchFunctionSubclassZtracerZreal_value_cacherO   wrap_to_fake_tensor_and_recordr   r   popZ
specializerf   ra   hasattrtargetrY   r   	GeneratorrandomZset_rng_stater   rU   Z_DisableFuncTorchZcudaZ_is_in_bad_forkrW   r)   r   rw   r   r   r  rN   r   r   r   rh   r?   seedoperatormodr   r   rX   r5   r   r   r   r   Zcreate_proxygetitemrB   r	   r<   r2   r~   rZ   r=   Zmanual_seed_utilsZ_element_sizer   r   ZstreamsZStreamZcurrent_streamr  r   r3   op)r  ro   r   r   r   r   r  Zinitial_example_valuer  kwargsZis_parameterr   r  Zspecialized_propsrU   rW   sizesr   vZproxy_iunpackedvalr  r\   r\   r]   r    s   	
,&

 


r  c                   @   s&   e Zd ZU eeef ed< eed< dS )r	  Zfaker_   N)rY   rZ   r[   r   r   r   rv   r   r\   r\   r\   r]   r	    s   
r	  )r_   rb   c                   s   t  tjtjjfv s&rt tjrd u pLt  tjju pLtjdu pL| t fdd}|r~j	j
t| |S  S d S )NFc                      s   j j dS )N)static_shapesr   r_   )Z	fake_modeZfrom_tensorr\   er   r_   r.  ro   r\   r]   r     s
   z0wrap_to_fake_tensor_and_record.<locals>.<lambda>)r   rd   re   r   r   rc   r   r  r0   r   r  rh   r	  )r0  ro   r   r_   rb   Zfake_er\   r/  r]   r    s&    
r  )N)NF)F)}r   r   r   r   r   r$  r   r   typingr   r   r   rd   r   Ztorch._guardsr   Z
torch._opsr   Ztorch._subclasses.fake_tensorr   Ztorch.fx.immutable_collectionsr	   r   r   r   r   r   Zallowed_functionsr   r   r   excr   r   r   r   r   r_   r   r   r   r   r   r   r   r   r   r   r   utilsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r   r2   r3   builtinr4   Zconstantr5   r6   Zdictsr7   r8   r9   r:   Z	functionsr;   listsr<   r=   r>   r?   r@   rA   rB   miscrC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   Z	nn_modulerM   r
  rN   rO   rP   rQ   rR   rS   rT   rU   Zuser_definedrV   rW   rX   Z	dataclassr^   rx   r   r   r  r	  rw   r  r\   r\   r\   r]   <module>   sf   4L$	0-    I
 
 / 