
    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)OFTLayer)BaseTunerLayerc                        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Zdej                  fdZ	de
f fdZ xZS )AwqOFTLinearroft_block_sizemodule_dropoutcoftepsblock_sharefan_in_fan_outinit_weightsuse_cayley_neumannnum_cayley_neumann_termsc                     t         |           t        j                  | |       || _        || _        | j                  ||||||||
||
       y )N)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__s                 N/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/peft/tuners/oft/awq.pyr   zAwqOFTLinear.__init__   sc      	$
+ $. +))#%1%= 	 	
    xc                    | j                   r| j                  |      }|S | j                  D ]  }|| j                  j	                         vr | j                  |   }t        j                          }|r2|j                  }| j                  ||j                  j                        } ||      }|s|j                        } | j                  |      }|S )N)disable_adaptersr   active_adaptersoft_Rkeystorchis_autocast_enableddtype_cast_input_dtypeweightto)r   r!   resultactive_adapterr%   requires_conversionexpected_dtypes          r   forwardzAwqOFTLinear.forward?   s      --a0FM"22 	)NTZZ__%66JJ~.E&+&?&?&A"A"!"**1ell.@.@AaA"DD(	) ))!,r    returnc                 *    t         |          }d|z   S )Nzoft.)r   __repr__)r   repr   s     r   r4   zAwqOFTLinear.__repr__U   s    g |r    )
r       g        FgiUMu?FFTF   )__name__
__module____qualname__intfloatboolr   r'   Tensorr1   strr4   __classcell__)r   s   @r   r	   r	      s    
   #!$!#(()#
 	#

 #
 #
 #
 #
 #
 #
 #
 !#
 #&#
J ,#  r    r	   targetr   r   r2   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.linearrC   	packagingversionparseimportlib_metadataImportErrorr	   qweight)rA   r   r   
new_moduletarget_base_layerrC   AUTOAWQ_MINIMUM_VERSIONversion_autoawqs           r   dispatch_awqrR   Z   s    
 J&.)"113"4'7&/&7&7&=&=g&F#'//556H6P6PQZ6[\O&8!OP_O` a//F.GG_a 
 &flEfEJ.66FNr    )importlib.metadatametadatarK   typingr   r   packaging.versionrH   r'   peft.import_utilsr   peft.tuners.oft.layerr   peft.tuners.tuners_utilsr   nnModuler	   r?   rR    r    r   <module>r]      sq    0     3 * 3>588??H >BHHOO  ehhoo	r    