
    oi<                         S SK Jr  S SKrS SKJrJr  SSKJr  \" 5       (       a    " S S\R                  R                  \5      r
\" 5       (       a!   " S S	\R                  R                  \5      rgg)
    )AnyN)is_bnb_4bit_availableis_bnb_available   )IA3Layerc                      ^  \ rS rSr SS\R
                  R                  S\S\S\SS4
U 4S jjjr	S	\R                  S
\S\S\R                  4S jrS\4U 4S jjrSrU =r$ )Linear8bitLt   
base_layeradapter_nameis_feedforwardinit_ia3_weightsreturnNc                    > [         TU ]  5         [        R                  " XUS9  SU R                  5       R                  l        X l        U R                  X$5        g N)r   Fsuper__init__r   get_base_layerweightrequires_grad_active_adapterupdate_layerselfr   r   r   r   kwargs	__class__s         M/home/james-whalen/.local/lib/python3.13/site-packages/peft/tuners/ia3/bnb.pyr   Linear8bitLt.__init__   M     Gd~N :?D!((6#/ l=    xargsr   c                 n   U R                   (       a  U R                  U5      $ SnU R                   HA  nXPR                  R	                  5       ;  a  M"  X@R                  U   R                  5       -  nMC     [        R                  " 5       (       + =(       a    UR                  [        R                  :g  nU(       a  UR                  5       nU R                  (       a   U R                  X-  5      nUR                  nO!U R                  U5      nUR                  nXt-  nU(       a  UR                  U5      nU$ 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   forwardLinear8bitLt.forward,   s    $$q))K"&"6"6!)::zz.9AACC #7
 (-'@'@'B#B"bTYTaTaIa"GGI""9!'+!'-">2Mr!   c                 *   > [         TU ]  5       nSU-   $ Nzia3.r   __repr__r   repr   s     r   r<   Linear8bitLt.__repr__G       '"$CC<r!   r   T__name__
__module____qualname____firstlineno__r+   nnModulestrboolr   Tensorr   r7   r<   __static_attributes____classcell__r   s   @r   r	   r	      s     &*	>	> 	> !		>
 #	> 	> 	> 	U\\ 	# 	 	 	6	 c 	  	 r!   r	   c                      ^  \ rS rSr SS\R
                  R                  S\S\S\SS4
U 4S jjjr	S	\R                  S
\S\S\R                  4S jrS\4U 4S jjrSrU =r$ )
Linear4bitN   r   r   r   r   r   Nc                    > [         TU ]  5         [        R                  " XUS9  SU R                  5       R                  l        X l        U R                  X$5        g r   r   r   s         r   r   Linear4bit.__init__P   r    r!   r"   r#   r   c                    U R                   (       a  U R                  U5      $ SnU R                   HA  nXPR                  R	                  5       ;  a  M"  X@R                  U   R                  5       -  nMC     [        R                  " 5       (       + =(       a    UR                  [        R                  :g  nU(       a  UR                  5       nU R                  (       a   U R                  X-  5      nUR                  nO!U R                  U5      nUR                  nXt-  nUR                  5       nU(       a  UR                  U5      nU$ r%   )r&   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   r   cloner0   r1   s	            r   r7   Linear4bit.forward`   s    $$q))K"&"6"6!)::zz.9AACC #7
 (-'@'@'B#B"bTYTaTaIa"GGI""9!'+!'-\\^F #>2Mr!   c                 *   > [         TU ]  5       nSU-   $ r:   r;   r=   s     r   r<   Linear4bit.__repr__   r@   r!   rA   rB   rC   rO   s   @r   rQ   rQ   N   s     &*	>	> 	> !		>
 #	> 	> 	> 	U\\ 	# 	 	 	>	 c 	  	 r!   rQ   )typingr   r+   peft.import_utilsr   r   layerr   rH   rI   r	   rQ    r!   r   <module>r^      s[      E  / uxx / d 3 UXX__h 3  r!   