
    oi              	          S SK JrJr  S SKrS SKJr  S SKJr  S SKJ	r	  \" 5       (       a&  S SK
Jr   " S S\R                  R                  \5      rS	\R                  R                  S
\S\S\\R                  R                     4S jrg)    )AnyOptionalN)is_eetq_available)OFTLayer)BaseTunerLayer)
EetqLinearc                      ^  \ rS rSr          SS\S\S\S\S\S\S\S	\S
\S\4U 4S jjjrS\R                  4S jr
SS\S\\\      SS4S jjrSS jrS\4U 4S jjrSrU =r$ )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U ]  5         [        R                  " X5        Xl        X l        U R                  UUUUUUUU	UU
US9  g )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                 N/home/james-whalen/.local/lib/python3.13/site-packages/peft/tuners/oft/eetq.pyr   EetqOFTLinear.__init__   s`      Gd/ (2$#/ --)'-#5)A      xc                    U R                   (       a  U R                  U5      $ U R                   H  nX R                  R	                  5       ;  a  M"  U R                  U   n[
        R                  " 5       (       + nU(       a1  UR                  nU R                  XR                  R                  5      nU" U5      nM     U R                  U5      nW(       a  UR                  W5      nU$ )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!   forwardEetqOFTLinear.forwardA   s    $$//22"&"6"6!)::

>2*/*C*C*E&E#&%&WWN..q,,2D2DEA!H #7 --a0F">2Mr#   N
safe_mergeadapter_namesreturnc                     [        S5      e)Nz5Merging LoRA layers is not supported for Eetq layers.AttributeError)r   r6   r7   s      r!   mergeEetqOFTLinear.mergeV   s     !XYYr#   c                     [        S5      e)Nz7Unmerging LoRA layers is not supported for Eetq layers.r:   )r   s    r!   unmergeEetqOFTLinear.unmergeY   s     !Z[[r#   c                 *   > [         TU ]  5       nSU-   $ )Nzoft.)r   __repr__)r   repr    s     r!   rB   EetqOFTLinear.__repr__\   s    '"$CC<r#   )r   r   )
r   r   g        TFgiUMu?FF   F)FN)r8   N)__name__
__module____qualname____firstlineno__intfloatboolr   r*   Tensorr4   r   liststrr<   r?   rB   __static_attributes____classcell__)r    s   @r!   r
   r
      s    
 "#$'!% %',,-#($	 	$	
  $	 "$	 $	 $	 $	 $	 !%$	 '*$	 !$	 $	L	U\\ 	*	ZD 	Z$s)AT 	Z`d 	Z	\	 c 	  	 r#   r
   targetr   r   r8   c                     S n[        U [        5      (       a  U R                  5       nOU n[        5       (       aT  [        U[        5      (       a?  [        X40 UD6nUR                  U l        [        U S5      (       a  UR                  U l        U$ )Nbias)	
isinstancer   get_base_layerr   r   r
   r.   hasattrrT   )rR   r   r   
new_moduletarget_base_layers        r!   dispatch_eetqrZ   a   s}    
 J&.))"113"z*;ZH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
   rO   rZ    r#   r!   <module>rc      s{    !  / * 3 D  D NHHOO  ehhoo	r#   