a
    Ad
                     @   sH   d dl Z d dlZd dlZG dd dejZdd ZG dd dejZdS )    Nc                   @   s    e Zd ZejejdddZdS )ModuleTypeLokrnetweightsc                 C   sR   d|j v pd|j v od|j v }d|j v p:d|j v o:d|j v }|rN|rNt||S d S )Nlokr_w1	lokr_w1_a	lokr_w1_blokr_w2	lokr_w2_a	lokr_w2_b)wNetworkModuleLokr)selfr   r   Zhas_1Zhas_2 r   L/var/www/html/stable-diffusion-webui/extensions-builtin/Lora/network_lokr.pycreate_module   s
    
zModuleTypeLokr.create_moduleN)__name__
__module____qualname__networkNetworkNetworkWeightsr   r   r   r   r   r      s   r   c                 C   s8   t |jdkr|dd}| }t||| S )N      )lenshape	unsqueeze
contiguoustorchkronreshape)
orig_shapew1w2r   r   r   	make_kron   s    r$   c                       s0   e Zd Zejejd fddZdd Z  ZS )r   r   c                    s   t  || |jd| _|jd| _|jd| _| jd urN| jjd n| j| _|jd| _	|jd| _
|jd| _| jd ur| jjd n| j| _|jd| _d S )	Nr   r   r   r   r	   r
   r   Zlokr_t2)super__init__r   getr"   w1aw1br   dimr#   w2aw2bt2)r   r   r   	__class__r   r   r&      s    zNetworkModuleLokr.__init__c                 C   sN  | j d ur | j j|j|jd}n0| jj|j|jd}| jj|j|jd}|| }| jd urp| jj|j|jd}n| jd u r| jj|j|jd}| j	j|j|jd}|| }nJ| jj|j|jd}| jj|j|jd}| j	j|j|jd}t
|||}|d|d |d|d g}	t|jdkr4|j}	t|	||}
| |
||	S )N)dtyper      r   )r"   todevicer0   r(   r)   r#   r-   r+   r,   lyco_helpersmake_weight_cpsizer   r   r$   finalize_updown)r   orig_weightr"   r(   r)   r#   r+   r,   r-   output_shapeupdownr   r   r   calc_updown&   s(    



(zNetworkModuleLokr.calc_updown)	r   r   r   r   r   r   r&   r;   __classcell__r   r   r.   r   r      s   r   )r   r4   r   
ModuleTyper   r$   NetworkModuler   r   r   r   r   <module>   s
   
