
    bi	                         d dl mZ d dlZd dlmZ d dlZ edd      Z G d dej                        Z G d	 d
ej                        Z	y)    )TypeVarN)nnTztorch.nn.Module)boundc                   @     e Zd Zd fd	Zdej
                  fdZ xZS )LinearFP8Mixedc                     t         |   |||       d | _        d | _        g d}t	        |      D ]  \  }}|||dz      kD  s|| _         n t	        |      D ]  \  }}|||dz      kD  s|| _         y  y N)i   i   i   i         @   r      super__init__bw_codefw_code	enumeratebszbsz2selfinput_featuresoutput_featuresbiasarrayik	__class__s          [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/bitsandbytes/research/nn/modules.pyr   zLinearFP8Mixed.__init__       $?8e$ 	DAqa!e,	 e$ 	DAqq1u-		    xc                    | j                   t        j                  j                  dddd      j	                  |j
                        | _        t        j                  j                  dddd      j	                  |j
                        | _         t        j                  j                  || j                  j                         | j                   | j                  | j                  | j                        }| j                  || j                  z  }|S NT               )r   r   r   r   )r   bnb
functionalcreate_fp8_maptodevicer   researchmatmul_fp8_mixedweighttr   r   r   r   r#   outs      r    forwardzLinearFP8Mixed.forward   s    <<>>88q!QGJJ188TDL>>88q!QGJJ188TDLll++KKMMOLLLL , 
 99 499C
r"   T__name__
__module____qualname__r   torchTensorr6   __classcell__r   s   @r    r   r           r"   r   c                   @     e Zd Zd fd	Zdej
                  fdZ xZS )LinearFP8Globalc                     t         |   |||       d | _        d | _        g d}t	        |      D ]  \  }}|||dz      kD  s|| _         n t	        |      D ]  \  }}|||dz      kD  s|| _         y  y r
   r   r   s          r    r   zLinearFP8Global.__init__.   r!   r"   r#   c                 
   | j                   t        j                  j                  dddd      j	                  |j
                        | _        t        j                  j                  dddd      j	                  |j
                        | _         t        j                  || j                  j                         | j                   | j                  | j                  | j                        }| j                  || j                  z  }|S r%   )r   r+   r,   r-   r.   r/   r   matmul_fp8_globalr2   r3   r   r   r   r4   s      r    r6   zLinearFP8Global.forward<   s    <<>>88q!QGJJ188TDL>>88q!QGJJ188TDL##KKMMOLLLL
 99 499C
r"   r7   r8   r?   s   @r    rB   rB   -   r@   r"   rB   )
typingr   r<   r   bitsandbytesr+   r   Linearr   rB    r"   r    <module>rJ      s?       C()RYY Dbii r"   