
    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	  e       r&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_eetq_available)	LoraLayer)BaseTunerLayer)
EetqLinearc                        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dede
ee      ddfdZddZdef fdZ xZS )EetqLoraLinear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              P/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/peft/tuners/lora/eetq.pyr   zEetqLoraLinear.__init__   s~      DNN$;$;#<<n!oppGtZ0 (2D$#/D %)"3%!#  	    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EetqLoraLinear.forward>   s    --a0F$$"&"6"6 )!)9)9);;^4^4++N;,,~6*/*C*C*E&E#&%+\\N..q&--2E2EFAwqz 23&#YY~6F')&#)$ Mr    N
safe_mergeadapter_namesreturnc                     t        d      )Nz5Merging LoRA layers is not supported for Eetq layers.AttributeError)r   r6   r7   s      r   mergezEetqLoraLinear.mergeX   s     !XYYr    c                     t        d      )Nz7Unmerging LoRA layers is not supported for Eetq layers.r:   )r   s    r   unmergezEetqLoraLinear.unmerge[   s     !Z[[r    c                 *    t         |          }d|z   S )Nzlora.)r   __repr__)r   repr   s     r   r@   zEetqLoraLinear.__repr__^   s    '"$CS= r    )r      g        TFFF)FN)r8   N)r   
__module____qualname__intfloatboolr   r)   Tensorr5   r   liststrr<   r>   r@   __classcell__)r   s   @r   r
   r
      s    
 "%&*$"#!	 	!	
 !	  !	  $!	 !	 !	 !	F	U\\ 	4	ZD 	Z$s)AT 	Z`d 	Z	\	!c 	! 	!r    r
   targetr   r   r8   c                     d }t        | t              r| j                         }n| }t               rKt        |t              r;t        | |fi |}|j                  | _        t        | d      r|j                  | _        |S )Nbias)	
isinstancer   get_base_layerr   r   r
   r-   hasattrrN   )rL   r   r   
new_moduletarget_base_layers        r   dispatch_eetqrT   c   ss    
 J&.)"113"z*;ZH#FLCFC
)0066"+00FKr    )typingr   r   r)   peft.import_utilsr   peft.tuners.lora.layerr   peft.tuners.tuners_utilsr   eetqr   nnModuler
   rJ   rT    r    r   <module>r]      sx    !  / , 3 F!) F!RHHOO  ehhoo	r    