
    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)OFTLayer)BaseTunerLayer)
EetqLinearc                        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dede
ee      ddfdZddZdef fdZ xZS )EetqOFTLinearroft_block_sizemodule_dropoutinit_weightscoftepsblock_shareuse_cayley_neumannnum_cayley_neumann_termsfan_in_fan_outc                     t         |           t        j                  | |       || _        || _        | j                  ||||||||	||
|       y )N)	r   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                 O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/peft/tuners/oft/eetq.pyr   zEetqOFTLinear.__init__   sf      GdJ/ (2D$#/D --)'-#5)A      xc                    | j                   r| j                  |      S | j                  D ]  }|| j                  j	                         vr | j                  |   }t        j                          }|r2|j                  }| j                  ||j                  j                        } ||      } | j                  |      }r|j                        }|S )N)disable_adaptersr   active_adaptersoft_Rkeystorchis_autocast_enableddtype_cast_input_dtypeweightto)r   r"   active_adapterr&   requires_conversionexpected_dtyperesults          r    forwardzEetqOFTLinear.forwardA   s    $$//22"&"6"6 
!)::

>2*/*C*C*E&E#&%&WWN..q%,,2D2DEA!H
 --a0F">2Mr!   N
safe_mergeadapter_namesreturnc                     t        d      )Nz5Merging LoRA layers is not supported for Eetq layers.AttributeError)r   r3   r4   s      r    mergezEetqOFTLinear.mergeV   s     !XYYr!   c                     t        d      )Nz7Unmerging LoRA layers is not supported for Eetq layers.r7   )r   s    r    unmergezEetqOFTLinear.unmergeY   s     !Z[[r!   c                 *    t         |          }d|z   S )Nzoft.)r   __repr__)r   repr   s     r    r=   zEetqOFTLinear.__repr__\   s    '"$CC<r!   )
r   r   g        TFgiUMu?FF   F)FN)r5   N)__name__
__module____qualname__intfloatboolr   r(   Tensorr2   r   liststrr9   r;   r=   __classcell__)r   s   @r    r
   r
      s    
 "#$'!% %',,-#($	 	$	
  $	 "$	 $	 $	 $	 $	 !%$	 '*$	 !$	L	U\\ 	*	ZD 	Z$s)AT 	Z`d 	Z	\	 c 	  	 r!   r
   targetr   r   r5   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,   hasattrrL   )rJ   r   r   
new_moduletarget_base_layers        r    dispatch_eetqrR   a   ss    
 J&.)"113"z*;ZH"6<B6B
)0066"+00FKr!   )typingr   r   r(   peft.import_utilsr   peft.tuners.oft.layerr   peft.tuners.tuners_utilsr   eetqr   nnModuler
   rH   rR    r!   r    <module>r[      sx    !  / * 3 D  D NHHOO  ehhoo	r!   