o
    Ni<                     @   sp   d dl mZ d dlZd dlmZmZ ddlmZ e r&G dd dejj	eZ
e r6G dd	 d	ejj	eZdS dS )
    )AnyN)is_bnb_4bit_availableis_bnb_available   )IA3Layerc                       j   e Zd Z	ddejjdedededdf
 fdd	Zd
ej	de
de
dej	fddZdef fddZ  ZS )Linear8bitLtT
base_layeradapter_nameis_feedforwardinit_ia3_weightsreturnNc                    <   t    tj| ||d d|  j_|| _| || d S N)r   Fsuper__init__r   get_base_layerweightrequires_grad_active_adapterupdate_layerselfr	   r
   r   r   kwargs	__class__ G/home/ubuntu/.local/lib/python3.10/site-packages/peft/tuners/ia3/bnb.pyr      
   
zLinear8bitLt.__init__xargsr   c           	      O   s   | j r| |S d}| jD ]}|| j vrq|| j|  9 }qt  o+|jtj	k}|r2|
 }| jr@| || }|j}n| |}|j}|| }|rS||}|S Nr   )disable_adaptersr	   active_adaptersia3_lkeysflattentorchis_autocast_enableddtypefloat32floatr   to	r   r    r!   r   ia3_scalingactive_adapterrequires_conversionresultexpected_dtyper   r   r   forward,   s&   



zLinear8bitLt.forwardc                       t   }d| S Nzia3.r   __repr__r   repr   r   r   r8   G      
zLinear8bitLt.__repr__T__name__
__module____qualname__r(   nnModulestrboolr   Tensorr   r4   r8   __classcell__r   r   r   r   r      s    r   c                       r   )
Linear4bitTr	   r
   r   r   r   Nc                    r   r   r   r   r   r   r   r   P   r   zLinear4bit.__init__r    r!   r   c           	      O   s   | j r| |S d}| jD ]}|| j vrq|| j|  9 }qt  o+|jtj	k}|r2|
 }| jr@| || }|j}n| |}|j}|| }| }|rW||}|S r"   )r#   r	   r$   r%   r&   r'   r(   r)   r*   r+   r,   r   cloner-   r.   r   r   r   r4   `   s(   



zLinear4bit.forwardc                    r5   r6   r7   r9   r   r   r   r8      r;   zLinear4bit.__repr__r<   r=   r   r   r   r   rG   N   s    rG   )typingr   r(   peft.import_utilsr   r   layerr   rA   rB   r   rG   r   r   r   r   <module>   s   2