
    oi%              	          S SK Jr  S SKJrJr  S SKrS SKrS SK	J
r
  S SKJr  S SKJr   " S S\R                  R                   \5      rS\R                  R                   S	\S
\S\\R                  R                      4S jrg)    N)AnyOptional)is_auto_awq_available)	LoraLayer)BaseTunerLayerc                      ^  \ rS rSr       SS\S\S\S\S\S\S\4U 4S	 jjjrS
\R                  4S jr
S\4U 4S jjrSrU =r$ )AwqLoraLinear   r
lora_alphalora_dropoutinit_lora_weights
use_rslorause_dora	lora_biasc
                    > U(       a"  [        U R                  R                   S35      e[        TU ]  5         [
        R                  " X5        Xl        X l        U R                  UUUUUUUU	S9  g )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              N/home/james-whalen/.local/lib/python3.13/site-packages/peft/tuners/lora/awq.pyr   AwqLoraLinear.__init__   sx      7 788jkll4, $. +!%/! 	 		
    xc                 6   U R                  U5      nU R                  (       a  U$ U R                   H  nX0R                  R	                  5       ;  a  M"  U R                  U   nU R
                  U   nU R                  U   nU R                  U   n[        R                  " 5       (       + nU(       a1  UR                  n	U R                  XR                  R                  5      nU" U" U" U5      5      5      n
U(       a  U
R                  W	5      n
X-  n
X*-   nM     U$ )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   forwardAwqLoraLinear.forward=   s    ))!,  M"22N[[%5%5%77[[0F[[0F''7Gll>2G&+&?&?&A"A"!'**1mm.A.ABF71:./F">2%F_F# 3$ r!   returnc                 *   > [         TU ]  5       nSU-   $ )Nzlora.)r   __repr__)r   repr   s     r   r:   AwqLoraLinear.__repr__W   s    g }r!   )r   r   )r      g        TFFF)r   
__module____qualname____firstlineno__intfloatboolr   r*   Tensorr6   strr:   __static_attributes____classcell__)r   s   @r   r	   r	      s    
 !"& !
 	!

 !
 !
  !
 !
 !
 !
 !
F 4#  r!   r	   targetr   r   r8   c                    S n[        U [        5      (       a  U R                  5       nOU n[        5       (       a  SSKJn  [        XE5      (       a  [        R                  R                  S5      n[        R                  R                  [        R                  " S5      5      nXg:  a  [        SU SU S35      e[        X40 UD6nUR                  U l        U$ )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.linearrJ   	packagingversionparseimportlib_metadataImportErrorr	   qweight)rH   r   r   
new_moduletarget_base_layerrJ   AUTOAWQ_MINIMUM_VERSIONversion_autoawqs           r   dispatch_awqrY   \   s    
 J&.))"113"4'77&/&7&7&=&=g&F#'//556H6P6PQZ6[\O&8!OP_O` a//F.GG_a 
 'vFvFJ.66FNr!   )importlib.metadatametadatarR   typingr   r   packaging.versionrO   r*   peft.import_utilsr   peft.tuners.lora.layerr   peft.tuners.tuners_utilsr   nnModuler	   rE   rY    r!   r   <module>rd      ss    0     3 , 3@EHHOOY @FHHOO  ehhoo	r!   