
    bi<                         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ej                  j                  e      Z
 e       r! G d d	ej                  j                  e      Zyy)
    )AnyN)is_bnb_4bit_availableis_bnb_available   )IA3Layerc                        e Zd Z	 ddej                  j
                  dedededdf
 fdZdej                  d	e
d
e
dej                  fdZdef fdZ xZS )Linear8bitLt
base_layeradapter_nameis_feedforwardinit_ia3_weightsreturnNc                     t         |           t        j                  | ||       d| j                         j                  _        || _        | j                  ||       y N)r   Fsuper__init__r   get_base_layerweightrequires_grad_active_adapterupdate_layerselfr
   r   r   r   kwargs	__class__s         N/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/peft/tuners/ia3/bnb.pyr   zLinear8bitLt.__init__   T     GdJ~N :?D!((6#/D l,<=    xargsr   c                 0   | j                   r| j                  |      S d}| j                  D ]?  }|| j                  j	                         vr || j                  |   j                         z  }A t        j                          xr |j                  t        j                  k7  }|r|j                         }| j                  r!| j                  ||z        }|j                  }n"| j                  |      }|j                  }||z  }|r|j                  |      }|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_dtypes	            r   forwardzLinear8bitLt.forward,   s    $$q))K"&"6"6 D!)::tzz.9AACCD
 (-'@'@'B#B"bTYTaTaIa"GGI""[9!'+!'+-">2Mr   c                 *    t         |          }d|z   S Nzia3.r   __repr__r   repr   s     r   r9   zLinear8bitLt.__repr__G       '"$CC<r   T__name__
__module____qualname__r)   nnModulestrboolr   Tensorr   r5   r9   __classcell__r   s   @r   r	   r	      s     &*	>	> 	> !		>
 #	> 	> 	U\\ 	# 	 	 	6	 c 	  	 r   r	   c                        e Zd Z	 ddej                  j
                  dedededdf
 fdZdej                  d	e
d
e
dej                  fdZdef fdZ xZS )
Linear4bitr
   r   r   r   r   Nc                     t         |           t        j                  | ||       d| j                         j                  _        || _        | j                  ||       y r   r   r   s         r   r   zLinear4bit.__init__P   r   r   r    r!   r   c                 P   | j                   r| j                  |      S d}| j                  D ]?  }|| j                  j	                         vr || j                  |   j                         z  }A t        j                          xr |j                  t        j                  k7  }|r|j                         }| j                  r!| j                  ||z        }|j                  }n"| j                  |      }|j                  }||z  }|j                         }|r|j                  |      }|S r#   )r$   r
   r%   r&   r'   r(   r)   r*   r+   r,   r-   r   cloner.   r/   s	            r   r5   zLinear4bit.forward`   s   $$q))K"&"6"6 D!)::tzz.9AACCD
 (-'@'@'B#B"bTYTaTaIa"GGI""[9!'+!'+-\\^F #>2Mr   c                 *    t         |          }d|z   S r7   r8   r:   s     r   r9   zLinear4bit.__repr__   r<   r   r=   r>   rH   s   @r   rJ   rJ   N   s     &*	>	> 	> !		>
 #	> 	> 	U\\ 	# 	 	 	>	 c 	  	 r   rJ   )typingr   r)   peft.import_utilsr   r   layerr   rB   rC   r	   rJ    r   r   <module>rS      sU      E  / uxx / d 3 UXX__h 3  r   