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 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)OFTLayer)BaseTunerLayer)QuantizedLinearc                       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def fddZdej	fddZ
def fddZ  ZS )AqlmOFTLinearr               TFiUMu?   adapter_nameroft_block_sizemodule_dropoutinit_weightscoftepsblock_sharefan_in_fan_outuse_cayley_neumannnum_cayley_neumann_termsc                    s>   t    t| | || _| j||||||||	||d
 d S )N)r   r   r   r   r   r   r   r   )super__init__r   _active_adapterupdate_layer)self
base_layerr   r   r   r   r   r   r   r   r   r   r   kwargs	__class__ Q/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/peft/tuners/oft/aqlm.pyr      s   

zAqlmOFTLinear.__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"   forward>   s   






zAqlmOFTLinear.forwardreturnc                    s   t   }d| S )Nzoft.)r   __repr__)r   repr   r!   r"   r5   T   s   
zAqlmOFTLinear.__repr__)
r   r	   r
   TFr   FFFr   )__name__
__module____qualname__strintfloatboolr   r)   Tensorr3   r5   __classcell__r!   r!   r   r"   r      sH    	
!r   targetr   r   r4   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_aqlmY   s   

rG   )typingr   r   r)   peft.import_utilsr   peft.tuners.oft.layerr   peft.tuners.tuners_utilsr   aqlmr   nnModuler   r:   rG   r!   r!   r!   r"   <module>   s"   =
