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 r'd 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_aqlm_available)	LoraLayer)BaseTunerLayer)QuantizedLinearc                       sp   e Zd Z							d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ef fddZ  ZS )AqlmLoraLinearr              TFadapter_namer
lora_alphalora_dropoutinit_lora_weights
use_rslorause_dora	lora_biasc
              
      sP   |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   _active_adapterupdate_layer)self
base_layerr   r   r   r   r   r   r   r   kwargsr    I/home/ubuntu/.local/lib/python3.10/site-packages/peft/tuners/lora/aqlm.pyr      s   

zAqlmLoraLinear.__init__xc                 C   s   |  |}| jr
|S | jD ]G}|| j vrq| j| }| j| }| j| }| j| }t	  }|r=|j
}	| ||jj
}||||}
|rL|
|	}
|
| }
||
7 }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AqlmLoraLinear.forwardreturnc                    s   t   }d| S )Nzlora.)r   __repr__)r   repr   r   r   r6   W   s   
zAqlmLoraLinear.__repr__)r   r	   r
   TFFF)r   
__module____qualname__strintfloatboolr   r(   Tensorr4   r6   __classcell__r   r   r   r   r      s6    	
r   targetr   r   r5   c                 K   sJ   d }t | tr|  }n| }t r#t |tr#t| |fi |}|j| _|S r!   )
isinstancer   get_base_layerr   r   r   codesqweight)r@   r   r   
new_moduletarget_base_layerr   r   r   dispatch_aqlmb   s   

rG   )typingr   r   r(   peft.import_utilsr   peft.tuners.lora.layerr   peft.tuners.tuners_utilsr   aqlmr   nnModuler   r:   rG   r   r   r   r   <module>   s"   F
