a
    Ad                     @  s   d dl mZ d dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
mZ edg dZddd	d
ddZG dd dejZG dd dZG dd dZG dd dZG dd dZdS )    )annotationsN)
namedtuple)	sd_modelscacheerrorshashessharedNetworkWeights)network_keysd_keyw	sd_module         
      )Zss_sd_model_nameZss_resolutionZss_clip_skipZss_num_train_imagesZss_tag_frequencyc                   @  s   e Zd ZdZdZdZdZdS )	SdVersionr   r   r      N)__name__
__module____qualname__UnknownSD1SD2SDXL r   r   G/var/www/html/stable-diffusion-webui/extensions-builtin/Lora/network.pyr      s   r   c                   @  s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )NetworkOnDiskc              
     s*  || _  | _i | _tj d  dk| _ fdd}| jrzt	dd| j   || _W n6 t
y } zt|d   W Y d }~n
d }~0 0 | jri }t| j dd	 d
D ]\}}|||< q|| _| jd| j | _d | _d | _| | jdptj| jd| j  | jdpd |  | _d S )Nr   z.safetensorsc                    s   t  } | dd  | S )NZssmd_cover_images)r   read_metadata_from_safetensorspop)metadatafilenamer   r   read_metadata   s    
z-NetworkOnDisk.__init__.<locals>.read_metadatazsafetensors-metadatalora/zreading lora c                 S  s   t | d dS )Nr   i  )metadata_tags_orderget)xr   r   r   <lambda>)       z(NetworkOnDisk.__init__.<locals>.<lambda>)keyZss_output_nameZsshs_model_hashuse_addnet_hash )namer#   r!   ospathsplitextloweris_safetensorsr   cached_data_for_file	Exceptionr   displaysorteditemsr'   aliashash	shorthashset_hashr   sha256_from_cachedetect_versionZ
sd_version)selfr/   r#   r$   emkvr   r"   r   __init__   s2    (
zNetworkOnDisk.__init__c                 C  sP   t | jdddrtjS t | jdddkr:tjS t| jrJtjS tj	S )NZss_base_model_versionr.   Zsdxl_Zss_v2True)
strr!   r'   
startswithr   r   r   lenr   r   r@   r   r   r   r?   :   s    
zNetworkOnDisk.detect_versionc                 C  s4   || _ | j dd | _| jr0dd l}| |j| j< d S )Nr      )r;   r<   networksavailable_network_hash_lookup)r@   rD   rL   r   r   r   r=   D   s
    zNetworkOnDisk.set_hashc                 C  s.   | j s*| tj| jd| j | jdp&d d S )Nr%   r,   r.   )r;   r=   r   sha256r#   r/   r4   rJ   r   r   r   	read_hashL   s    zNetworkOnDisk.read_hashc                 C  s4   dd l }tjjdks$| j |jv r*| jS | jS d S )Nr   Filename)rL   r   optslora_preferred_namer:   r3   Zforbidden_network_aliasesr/   )r@   rL   r   r   r   	get_aliasP   s    zNetworkOnDisk.get_aliasN)r   r   r   rE   r?   r=   rO   rS   r   r   r   r   r      s
   %
r   c                   @  s   e Zd ZddddZdS )Networkr   )network_on_diskc                 C  s4   || _ || _d| _d| _d | _i | _d | _d | _d S Ng      ?)r/   rU   te_multiplierunet_multiplierZdyn_dimmodulesmtimeZmentioned_name)r@   r/   rU   r   r   r   rE   Y   s    zNetwork.__init__N)r   r   r   rE   r   r   r   r   rT   X   s   rT   c                   @  s   e Zd ZddddddZdS )
ModuleTyperT   r	   zNetwork | None)netweightsreturnc                 C  s   d S Nr   r@   r\   r]   r   r   r   create_moduleg   s    zModuleType.create_moduleN)r   r   r   ra   r   r   r   r   r[   f   s   r[   c                   @  sF   e Zd ZdddddZdd Zdd	 ZdddZdd Zdd Zd
S )NetworkModulerT   r	   )r\   r]   c                 C  s   || _ |j| _|j| _|j| _t| jdr6| jjj| _d | _|j	d| _
d|jv rb|jd  nd | _d|jv r|jd  nd | _d S )Nweightbiasalphascale)networkr
   r   r   hasattrrc   shapedimr   r'   rd   itemre   rf   r`   r   r   r   rE   l   s    zNetworkModule.__init__c                 C  s&   d| j d d v r| jjS | jjS d S )Ntransformerr   )r   rg   rW   rX   rJ   r   r   r   
multiplierz   s    zNetworkModule.multiplierc                 C  s4   | j d ur| j S | jd ur0| jd ur0| j| j S dS rV   )rf   rj   re   rJ   r   r   r   
calc_scale   s
    
zNetworkModule.calc_scaleNc                 C  s   | j d ur:|| j j}|| j j|j|jd7 }||}t|dkrP||}|  |  krt||j}|d ur|| 	  }|| 
  | 	  |fS )N)dtyper   )rd   reshaperi   todevicero   rI   sizenumelrm   rn   )r@   updownorig_weightoutput_shapeZex_biasr   r   r   finalize_updown   s    


zNetworkModule.finalize_updownc                 C  s
   t  d S r_   NotImplementedError)r@   targetr   r   r   calc_updown   s    zNetworkModule.calc_updownc                 C  s
   t  d S r_   ry   )r@   r(   yr   r   r   forward   s    zNetworkModule.forward)N)	r   r   r   rE   rm   rn   rx   r|   r~   r   r   r   r   rb   k   s   
rb   )
__future__r   r0   collectionsr   enumrY   r   r   r   r   r   r	   r&   Enumr   r   rT   r[   rb   r   r   r   r   <module>   s   D