
    bi              	           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	 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)    )AnyOptionalN)is_gptqmodel_available)OFTLayer)BaseTunerLayer)get_auto_gptq_quant_linearc                        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Zdej                  fdZ
def fdZ xZS )GPTQOFTLinearadapter_nameroft_block_sizemodule_dropoutcoftepsblock_shareuse_cayley_neumannnum_cayley_neumann_termsfan_in_fan_outinit_weightsc                     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_layerr   r   r   r   r   r   r   r   r   r   r   kwargs	__class__s                 O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/peft/tuners/oft/gptq.pyr   zGPTQOFTLinear.__init__   sc      	$
+ $. +))#%1%= 	 	
    xc                    | j                  |      }| j                  r| j                  |      S | j                  D ]  }|| j                  j	                         vr | j                  |   }t        j                          }|r2|j                  }| j                  ||j                  j                        } ||      } | j                  |      }r|j                        }|S )N)r   disable_adapters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GPTQOFTLinear.forward=   s    ))!,  ++A.."22 	NTZZ__%66JJ~.E&+&?&?&A"A"!"**1ell.@.@AaA	 ))!,YY~.Fr!   returnc                 *    t         |          }d|z   S )Nzoft.)r   __repr__)r   repr   s     r    r5   zGPTQOFTLinear.__repr__V   s    g |r!   )
   r   g        FgiUMu?FF   FT)__name__
__module____qualname__strintfloatboolr   r(   Tensorr2   r5   __classcell__)r   s   @r    r
   r
      s    
  #!#(()$!"
 "
 	"

 "
 "
 "
 "
 "
 !"
 #&"
 "
 "
H 2#  r!   r
   targetr   r   r3   c                 Z   d }t        | t              r| j                         }n| }|j                  dd       }t	               r2ddlm} t        ||      rt        | |fi |}|j                  | _        |S t        |      }|*t        ||      rt        | |fi |}|j                  | _        |S )Ngptq_quantization_configr   )BaseQuantLinear)

isinstancer   get_base_layergetr   gptqmodel.nn_modules.qlinearrE   r
   qweightr   )rB   r   r   
new_moduletarget_base_layercfgrE   quant_linears           r    dispatch_gptqrO   [   s    
 J&.)"113"
**/
6C@'9&v|FvFJ.66FN  2#6#
3Dl(S&v|FvFJ.66FNr!   )typingr   r   r(   peft.import_utilsr   peft.tuners.oft.layerr   peft.tuners.tuners_utilsr   
peft.utilsr   nnModuler
   r<   rO    r!   r    <module>rX      sp    !  4 * 3 1@EHHOOX @FHHOO  ehhoo	r!   