o
    Ni)                  	   @   s   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	 e r2d dl
mZ G dd dejjeZd	ejjd
ededeejj fddZdS )    )AnyOptionalN)is_eetq_available)	LoraLayer)BaseTunerLayer)
EetqLinearc                       s   e Zd Z							ddededed	ed
ededef fddZdejfddZ	ddede
ee  ddfddZdddZdef fddZ  ZS )EetqLoraLinearr              TFr
lora_alphalora_dropoutinit_lora_weights
use_rslorause_dora	lora_biasc
              
      sV   |rt | jj dt   t| | || _|| _| j||||||||	d d S )Nz2 does not support DoRA yet, please set it to False)r   r   r   r   r   r   )	
ValueError	__class____name__super__init__r   quant_linear_module_active_adapterupdate_layer)self
base_layeradapter_namer   r   r   r   r   r   r   kwargsr    I/home/ubuntu/.local/lib/python3.10/site-packages/peft/tuners/lora/eetq.pyr      s    

zEetqLoraLinear.__init__xc                 C   s   |  |}| jr
|S | jD ]G}|| j vrq| j| }| j| }| j| }| j| }t	  }|r=|j
}	| ||jj
}||||}
|rL|
|	}
|
| }
||
 }q|S )N)r   disable_adaptersactive_adapterslora_Akeyslora_Br   scalingtorchis_autocast_enableddtype_cast_input_dtypeweightto)r   r!   resultactive_adapterr$   r&   dropoutr'   requires_conversionexpected_dtypeoutputr   r   r    forward>   s(   








zEetqLoraLinear.forwardN
safe_mergeadapter_namesreturnc                 C      t d)Nz5Merging LoRA layers is not supported for Eetq layers.AttributeError)r   r5   r6   r   r   r    mergeX      zEetqLoraLinear.mergec                 C   r8   )Nz7Unmerging LoRA layers is not supported for Eetq layers.r9   )r   r   r   r    unmerge[   r<   zEetqLoraLinear.unmergec                    s   t   }d| S )Nzlora.)r   __repr__)r   repr   r   r    r>   ^   s   
zEetqLoraLinear.__repr__)r   r	   r
   TFFF)FN)r7   N)r   
__module____qualname__intfloatboolr   r(   Tensorr4   r   liststrr;   r=   r>   __classcell__r   r   r   r    r      s6    	
# 
r   targetr   r   r7   c                 K   s\   d }t | tr|  }n| }t r,t |tr,t| |fi |}|j| _t| dr,|j| _|S )Nbias)	
isinstancer   get_base_layerr   r   r   r,   hasattrrJ   )rI   r   r   
new_moduletarget_base_layerr   r   r    dispatch_eetqc   s   


rP   )typingr   r   r(   peft.import_utilsr   peft.tuners.lora.layerr   peft.tuners.tuners_utilsr   eetqr   nnModuler   rG   rP   r   r   r   r    <module>   s"   I
