a
    d_                     @   s   d dl Z d dlZd dlZd dl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 Zdd	 Zd
d ZddddZG dd dZd dlmZ dS )    N)ContextManagerOptional)Source)StorageWeakRef)	WeakIdRefc                 C   s"   z| j W S  ty   Y dS 0 d S )NF)is_leafRuntimeErrort r   e/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_subclasses/meta_utils.pysafe_is_leaf   s    r   c                 C   s>   t  " t dd | jW  d    S 1 s00    Y  d S )NignorezThe .grad attribute of a Tensor)warningscatch_warningsfilterwarningsgradr	   r   r   r   	safe_grad   s    
r   c                 C   s   | |ksJ |  d| d S )Nz != r   )abr   r   r   	assert_eq   s    r   Fskip_symbolicc                   s    fdd||S )Nc                    sf   | j |j  s  | j|j  | j|j  | j|j  | jd u |jd u   | j|j  |  |   |  |   |  |   t	| d ut	|d u t	| d urΈt	| t	| | jr | 
 |
   |  |   |  |  nTs8 |  |   |  |   |  |  |  rb| j|j d S N)dtypeshaperequires_gradr   Zgrad_fn	is_sparseis_inferenceis_conjis_negr   	dense_dim
sparse_dimis_coalescedstridestorage_offset_is_view_base)m1m2r   gor   r   r   r+      s.    
zassert_metadata_eq.<locals>.gor   )r   r(   r)   r   r   r*   r   assert_metadata_eq   s    r,   c                   @   sr   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zddd dfe	e
 dddZddd dddddZdS )MetaConverterc                 C   s>   i | _ t | _g | _d| _d| _d| _d| _d | _	d| _
d S )N   r   )storage_memoweakrefWeakValueDictionarytensor_memomaybe_storages_to_deletecheck_expired_frequencycheck_expired_counthitmissZdel_hookarg_cntselfr   r   r   __init__G   s    
zMetaConverter.__init__c                 C   s   | j dko| jdkS )Nr   )r6   r7   r9   r   r   r   
successfulR   s    zMetaConverter.successfulc                 C   sh   g }g }| j D ]"}| s&|| q|| q|D ]}| j|d  q6|| _ t| jt| j | _d S r   )r3   expiredappendr/   popmaxr4   len)r:   Znew_liZstor_to_deleteobjr   r   r   check_for_expired_weak_storagesU   s    
z-MetaConverter.check_for_expired_weak_storagesc                 C   s   | j t|d S r   )r2   getr   )r:   r
   r   r   r   get_tensor_memoi   s    zMetaConverter.get_tensor_memoc                    sZ   t |  |js|jrd nt| t| fdd}t || || j< d S )Nc                     sT     } | d u rd S | j d  r< r<| jd  nd urP| j d S r   )r2   r?   r=   r/   r3   r>   )Zself_refZself_weak_refZtensor_ref_keyZweak_str   r   del_tenv   s    
z.MetaConverter.set_tensor_memo.<locals>.del_ten)	r0   refr   	is_mkldnnr   Z_typed_storager   finalizer2   )r:   r
   vrG   r   rF   r   set_tensor_memol   s    
zMetaConverter.set_tensor_memoc                    s6   t  }|| jvr,| fdd | j|< | j| S )Nc                      s   t j  t jddS Nmeta)r   device)torchemptysizeZuint8r   sr   r   <lambda>       z,MetaConverter.meta_storage.<locals>.<lambda>)r   r/   untyped_storage)r:   rT   callbackswrr   rS   r   meta_storage   s    

zMetaConverter.meta_storageNc                 C   s   |  S r   r   r	   r   r   r   rU      rV   zMetaConverter.<lambda>sourcec                    s  d u r(ddl m} |dt| j tj tjjj	rBJ | j
}|  j
d7  _
tj}d urjj}d u  fdd}|  jd7  _| j| jkr|   d| _| d u rt  jr|d u sJ dt}	|fdd	}
t|
sJ d
|
  jr*d|
_jr|	st & |
 }
|
  W d    n1 sn0    Y  njrt}	|\}|fdd	}
t|
sJ d
jrd|
_jr|	st  |
 }
W d    n1 s0    Y  n r s*J ddl m} | jj||dd}dd }tj tjjj!}tj"tjjj!d z|j#j#krnD||j#j#rt$|}n(|j#|j#rt%|}n|&j#}|\}trZt' F |  |(|}
W d    n1 s$0    Y  W d    n1 sD0    Y  j|
_njjjkrt F |  |(|}
W d    n1 s0    Y  W d    n1 s0    Y  njsJ t'  |&|j)}W d    n1 s0    Y  j|_t F |  |(|}
W d    n1 sL0    Y  W d    n1 sl0    Y  W tj"tjjj!| ntj"tjjj!| 0 nnt}	|\}|fdd	}
t|
sJ d
jr2j|
_|	s2t  |
jtj*d}
W d    n1 s(0    Y  + }t,|}|| j-vrz|
. krz|
/ |krz|
+ | j-|< n| j0||d}t }ddl1m2}m3} t4|
|r||
j5}|J t'   |
6|| W d    n1 s0    Y  W d    n1 s0    Y  t7d urNddl m} | jt7||dd|
_8tj9|
:  tj;|
<  W d    n1 s0    Y  t=t>|
dd | ?|
 | S )Nr   )ConstantSourceZ__unknown_tensor   c                    s&    r | S |  |  |  fS r   )Z,create_symbolic_sizes_strides_storage_offsetrR   r$   r%   r	   )make_symbolic	shape_envr\   r   r    sym_sizes_strides_storage_offset   s    zCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offsetzsymbolic on sparse NYIc                      s(   t jjj     j jt jddS )NrN   )r   layoutrO   )	rP   opsZatenZ_sparse_coo_tensor_with_dimsr"   r!   r   r   Z
sparse_coor   r	   r   r   rU      s   z+MetaConverter.meta_tensor.<locals>.<lambda>z)the callback you passed in doesn't detachTc                      s   t j jddS rM   rP   Zempty_stridedr   r   sizesstridesr
   r   r   rU      s   
)
AttrSourcer'   r[   c                 S   s   t | ot | |kS r   )utilsZis_complex_dtypeZcorresponding_real_dtype)Zcomplex_dtypeZ
real_dtyper   r   r   	is_c_of_r  s
    
z,MetaConverter.meta_tensor.<locals>.is_c_of_rFc                      s   t j jddS rM   rd   r   re   r   r   rU   n  s   
)Zmemory_format)rX   )
FakeTensorin_kernel_invocation_managerr   r   )@Ztorch._dynamo.sourcer]   rA   r2   rP   _CZ_dispatch_tls_local_exclude_setZhasZDispatchKeyPythonr8   
contextlibnullcontextZsuppress_guardsr5   r4   rC   rE   Zinference_moder   r   r   Z_coalesced_r#   r   Zenable_gradclonerI   r&   rh   meta_tensorr'   Z&_dispatch_tls_is_dispatch_key_excludedZADInplaceOrViewZ'_dispatch_tls_set_dispatch_key_excludedr   Zview_as_realZview_as_complexviewZno_gradZ
as_stridedr   Zpreserve_formatrW   r   r/   r$   r%   rZ   torch._subclasses.fake_tensorrk   rl   
isinstanceZ	fake_modeset_r   r   Z	_set_conjr   Z_set_negr    r,   r   rL   )r:   r
   r`   rX   r\   r]   r8   Zmaybe_suppressra   r   rZ_storage_offsetrh   baserj   Zold_excluder%   ZmidrT   rY   Zr_sZmaybe_fake_mgrrk   rl   r   )r_   r`   rf   r\   rg   r
   r   rr      s   



2

,


NP
,P



.

	
P2zMetaConverter.meta_tensorc                 C   s   |  S r   r   r	   r   r   r   rU     rV   F)rX   ignore_subclassr\   c          	      C   sd  ddl m} t|tju sFt|tjju sF|r:t|tjsFt||r<t|j	|j
tjtjtjfv |j|j| o|jd uo|jjt|| | |jjdv g	r|  jd7  _tS |  jd7  _t }|rtj }|" | j||||d}W d    n1 s0    Y  t|tjju r6tjj||jd}|S n$tj !|r\|  jd7  _tS |S d S )Nr   )rk   Zlazyr^   )r`   rX   r\   )r   )"rt   rk   typerP   ZTensornn	Parameterru   anyZis_sparse_csrrb   Z
sparse_cscZ
sparse_bsrZ
sparse_bscZis_quantizedZ	is_nestedr&   r'   r   Z_is_functional_tensorr    r   rO   r7   NotImplementedr6   ro   rp   rm   ZDisableTorchFunctionSubclassrr   r   Z	overridesZis_tensor_like)	r:   r
   r`   rX   ry   r\   rk   ctxrw   r   r   r   __call__  sP    


&zMetaConverter.__call__)N)__name__
__module____qualname__r;   r<   rC   rE   rL   rZ   r   r   rr   r   r   r   r   r   r-   F   s$   $
  " r-   )ro   r   r0   typingr   r   rP   Ztorch._guardsr   Z torch.multiprocessing.reductionsr   Ztorch.utils.weakr   r   r   r   r,   r-   Ztorch._prims_commonZ_prims_commonri   r   r   r   r   <module>   s    (   G