o
    3wi	                     @   s\   d dl mZ d dlZd dlmZ d dlZedddZG dd dejZG d	d
 d
ejZ	dS )    )TypeVarN)nnTztorch.nn.Module)boundc                       .   e Zd Zd fdd	ZdejfddZ  ZS )LinearFP8MixedTc                       t  ||| d | _d | _g d}t|D ]\}}|||d  kr'|| _ nqt|D ]\}}|||d  kr>|| _ d S q,d S 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__ ]/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/bitsandbytes/research/nn/modules.pyr         zLinearFP8Mixed.__init__xc                 C   s   | j d u r!tjdddd|j| _tjdddd|j| _ tjj|| j	
 | j | j| j| jd}| jd ur>|| j7 }|S NT               )r   r   r   r   )r   bnb
functionalcreate_fp8_maptodevicer   researchmatmul_fp8_mixedweighttr   r   r   r   r#   outr    r    r!   forward   s   


zLinearFP8Mixed.forwardT__name__
__module____qualname__r   torchTensorr5   __classcell__r    r    r   r!   r          r   c                       r   )LinearFP8GlobalTc                    r   r	   r   r   r   r    r!   r   .   r"   zLinearFP8Global.__init__r#   c                 C   s~   | j d u r!tjdddd|j| _tjdddd|j| _ tj|| j	 | j | j| j
| jd}| jd ur=|| j7 }|S r$   )r   r*   r+   r,   r-   r.   r   matmul_fp8_globalr1   r2   r   r   r   r3   r    r    r!   r5   <   s   


zLinearFP8Global.forwardr6   r7   r    r    r   r!   r?   -   r>   r?   )
typingr   r;   r   bitsandbytesr*   r   Linearr   r?   r    r    r    r!   <module>   s    "