o
    ‚o™i	  ã                   @   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__© úT/home/ubuntu/.local/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    "