o
    8wi                  	   @   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)OFTLayer)BaseTunerLayer)
EetqLinearc                       s   e Zd Z										d deded	e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 )#EetqOFTLinearr           TFiUMu?   roft_block_sizemodule_dropoutinit_weightscoftepsblock_shareuse_cayley_neumannnum_cayley_neumann_termsfan_in_fan_outc                    sF   t    t| | || _|| _| j||||||||	||
|d d S )N)	r   r   r   r   r   r   r   r   r   )super__init__r   quant_linear_module_active_adapterupdate_layer)self
base_layeradapter_namer   r   r   r   r   r   r   r   r   r   kwargs	__class__ Q/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/peft/tuners/oft/eetq.pyr      s"   

zEetqOFTLinear.__init__xc                 C   s~   | j r| |S | jD ]%}|| j vrq| j| }t  }|r,|j}| ||j	j}||}q| |}|r=|
|}|S )N)disable_adaptersr   active_adaptersoft_Rkeystorchis_autocast_enableddtype_cast_input_dtypeweightto)r   r#   active_adapterr&   requires_conversionexpected_dtyperesultr!   r!   r"   forwardA   s   






zEetqOFTLinear.forwardN
safe_mergeadapter_namesreturnc                 C      t d)Nz5Merging LoRA layers is not supported for Eetq layers.AttributeError)r   r3   r4   r!   r!   r"   mergeV      zEetqOFTLinear.mergec                 C   r6   )Nz7Unmerging LoRA layers is not supported for Eetq layers.r7   )r   r!   r!   r"   unmergeY   r:   zEetqOFTLinear.unmergec                    s   t   }d| S )Nzoft.)r   __repr__)r   repr   r!   r"   r<   \   s   
zEetqOFTLinear.__repr__)
r   r   r	   TFr
   FFr   F)FN)r5   N)__name__
__module____qualname__intfloatboolr   r(   Tensorr2   r   liststrr9   r;   r<   __classcell__r!   r!   r   r"   r      sH    	
& 
r   targetr   r   r5   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,   hasattrrI   )rH   r   r   
new_moduletarget_base_layerr!   r!   r"   dispatch_eetqa   s   


rO   )typingr   r   r(   peft.import_utilsr   peft.tuners.oft.layerr   peft.tuners.tuners_utilsr   eetqr   nnModuler   rF   rO   r!   r!   r!   r"   <module>   s"   G
