
    bi%              	          d dl mZ d dlmZmZ d dlZd dlZd dl	m
Z
 d dlmZ d dlmZ  G d dej                  j                   e      Zdej                  j                   d	ed
edeej                  j                      fdZy)    N)AnyOptional)is_auto_awq_available)	LoraLayer)BaseTunerLayerc                   |     e Zd Z	 	 	 	 	 	 	 ddededededededef fdZd	ej                  fd
Z	de
f fdZ xZS )AwqLoraLinearr
lora_alphalora_dropoutinit_lora_weights
use_rslorause_dora	lora_biasc
           
          |r"t        | j                  j                   d      t        |           t        j                  | |       || _        || _        | j                  ||||||||	       y )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   kwargsr   s              O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/peft/tuners/lora/awq.pyr   zAwqLoraLinear.__init__   s~      7 788jkll4, $. +!%/! 	 		
    xc                    | j                  |      }| j                  r|S | j                  D ]  }|| j                  j	                         vr | j                  |   }| j
                  |   }| j                  |   }| j                  |   }t        j                          }|r2|j                  }	| j                  ||j                  j                        } | | ||                  }
|r|
j                  	      }
|
|z  }
||
z   } |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outputs              r   forwardzAwqLoraLinear.forward=   s    ))!,  M"22 	%NT[[%5%5%77[[0F[[0F''7Gll>2G&+&?&?&A"A"!'**1fmm.A.ABF71:./F">2g%Ff_F#	%$ r   returnc                 *    t         |          }d|z   S )Nzlora.)r   __repr__)r   repr   s     r   r7   zAwqLoraLinear.__repr__W   s    g }r   )r      g        TFFF)r   
__module____qualname__intfloatboolr   r(   Tensorr4   strr7   __classcell__)r   s   @r   r	   r	      s    
 !"& !
 	!

 !
 !
  !
 !
 !
 !
F 4#  r   r	   targetr   r   r5   c                    d }t        | t              r| j                         }n| }t               rddlm} t        ||      rt        j                  j                  d      }t        j                  j                  t        j                  d            }||kD  rt        d| d| d      t        | |fi |}|j                  | _        |S )Nr   )WQLinear_GEMMz0.2.0autoawqz9Found an incompatible version of auto-awq. Found version z, but only versions above z are supported for PEFT.)
isinstancer   get_base_layerr   awq.modules.linearrD   	packagingversionparseimportlib_metadataImportErrorr	   qweight)rB   r   r   
new_moduletarget_base_layerrD   AUTOAWQ_MINIMUM_VERSIONversion_autoawqs           r   dispatch_awqrS   \   s    
 J&.)"113"4'7&/&7&7&=&=g&F#'//556H6P6PQZ6[\O&8!OP_O` a//F.GG_a 
 'v|FvFJ.66FNr   )importlib.metadatametadatarL   typingr   r   packaging.versionrI   r(   peft.import_utilsr   peft.tuners.lora.layerr   peft.tuners.tuners_utilsr   nnModuler	   r@   rS    r   r   <module>r^      ss    0     3 , 3@EHHOOY @FHHOO  ehhoo	r   