o
    ãÊi‰  ã                   @   sì   U d dl mZmZ d dlZd dlZd dlmZ ejj	Z	i Z
eeef ed< dd„ Zee	jje	jjgƒddd„ƒZee	jjgƒdd	d
„ƒZee	jjgƒddd„ƒZee	jjgƒddd„ƒZee	jjgƒddd„ƒZee	jjgƒddd„ƒZdS )é    )ÚAnyÚDictN)ÚSwizzleTensorÚSWIZZLE_OPS_TABLEc                    s   ‡ fdd„}|S )z)Register aten ops to the swizzle op tablec                    s   ˆ D ]}| t |< q| S ©N)r   )ÚfuncÚop©Úaten_ops© úO/home/ubuntu/.local/lib/python3.10/site-packages/torchao/swizzle/swizzle_ops.pyÚ	decorator   s   
zimplements.<locals>.decoratorr   )r
   r   r   r	   r   Ú
implements   s   r   c                 C   sÄ   |d }|d }t  |¡rAt  |¡rA|jdkrA|jdkrAd}d}t|tƒr+| ¡ }d}t|tƒr6| ¡ }d}tj ||||¡}|S t|tƒrJ| 	¡ n|}t|tƒrU| 	¡ n|}| ||fi |¤Ž}|S )Nr   é   é   FT)
ÚtorchÚis_floating_pointÚndimÚ
isinstancer   Ú	as_tensorÚtorchaoÚopsÚ
swizzle_mmÚ	unswizzle)Úaten_opÚargsÚkwargsÚaÚbÚa_is_swizzledÚb_is_swizzledÚ
tensor_outr   r   r   r      s,   ÿþ



ýr   c                 C   sN   |d }|d }t |tƒr| ¡ n|}t |tƒr| ¡ n|}| ||fi |¤ŽS )Nr   r   ©r   r   r   )r   r   r   r   r   r   r   r   Úswizzle_bmm7   s
   r#   c                 C   sb   |d }|d }|d }t |tƒr| ¡ n|}t |tƒr | ¡ n|}| ||||dd … fi |¤ŽS )Nr   r   r   é   r"   )r   r   r   Úbiasr   r   r   r   r   Úswizzle_addmmA   s   r&   c              
   C   sÀ   |d }|d }|d }|d }t |ƒdkrd n|d }t |ƒdkr$d n|d }t |ƒdkr0d n|d }	d}
d}t|tƒrC| ¡ }d	}
t|tƒrN| ¡ }d	}tjj|||
||||||	f	i |¤ŽS )
Nr   r   r   r$   é   é   é   FT)Úlenr   r   r   r   r   Úswizzle_scaled_mm)r   r   r   r   r   Úscale_aÚscale_br%   Úscale_resultÚ	out_dtyper   r    r   r   r   r+   K   s8   

÷
ör+   c                 C   sJ   |d }|d }t |ƒdkr|d dkr|d dkr| ¡ S | | ¡ |ƒS )Nr   r   r   )r*   Úshallow_transposer   )r   r   r   ÚtensorÚdimsr   r   r   Úswizzle_permutek   s
   $r3   c                 C   s   |d }|  ¡ S )Nr   )r0   )r   r   r   r1   r   r   r   Úswizzle_numpy_Tt   s   r4   r   )Útypingr   r   r   Útorchao.opsr   Útorchao.swizzle.swizzle_tensorr   r   Úatenr   Ú__annotations__r   ÚmmÚdefaultÚmatmulr   Úbmmr#   Úaddmmr&   Ú
_scaled_mmr+   Úpermuter3   Únumpy_Tr4   r   r   r   r   Ú<module>   s&   		