
    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_aqlm_available)OFTLayer)BaseTunerLayer)QuantizedLinearc                        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 )AqlmOFTLinearadapter_nameroft_block_sizemodule_dropoutinit_weightscoftepsblock_sharefan_in_fan_outuse_cayley_neumannnum_cayley_neumann_termsc                     t         |           t        j                  | |       || _        | j	                  ||||||||	||
       y )N)r   r   r   r   r   r   r   r   )super__init__r   _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/aqlm.pyr   zAqlmOFTLinear.__init__   sY      	$
++))%#1%= 	 	
    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AqlmOFTLinear.forward>   s      ??1%%"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AqlmOFTLinear.__repr__T   s    g |r    )
r       g        TFgiUMu?FFF   )__name__
__module____qualname__strintfloatboolr   r(   Tensorr2   r5   __classcell__)r   s   @r   r
   r
      s    
   #!!$#(()
 
 	

 
 
 
 
 
 
 
 !
 #&
B ,#  r    r
   targetr   r   r3   c                     d }t        | t              r| j                         }n| }t               r.t        |t              rt        | |fi |}|j                  | _        |S r#   )
isinstancer   get_base_layerr   r   r
   codesqweight)rB   r   r   
new_moduletarget_base_layers        r   dispatch_aqlmrJ   Y   s\    
 J&.)"113"z*;_M"6<B6B
*00r    )typingr   r   r(   peft.import_utilsr   peft.tuners.oft.layerr   peft.tuners.tuners_utilsr   aqlmr   nnModuler
   r<   rJ    r    r   <module>rS      sv    !  / * 3 $:EHHOOX :zHHOO  ehhoo	r    