o
    œÜÓhã	  ã                   @   s†   d dl Z d dlZd dlmZ d dlmZ d dlmZ e jj	eƒ  p0ej
 ¡  p0ej
 ¡ d  dk dde j dd	d
g¡dd„ ƒƒZdS )é    N)Úis_triton_available)ÚSwitchBackLinear)ÚLinear8bitLté   zJThis test requires triton and a GPU with compute capability 8.0 or higher.)ÚreasonÚvector_wise_quantizationFTc                 C   s^  dD ])}dD ]#}t j |d| ¡ ¡  ¡ }t|d| | d ¡  ¡ }t|d| ƒ ¡  ¡ }|jj 	|j¡ |j
j 	|j
¡ |jj 	|j¡ |j
j 	|j
¡ t  ||¡ ¡  ¡  d¡}| ¡  ¡  d¡}| ¡  ¡  d¡}||ƒ}	d|	 ¡  ¡   ¡  t|jƒ ||ƒ}
d|
 ¡  ¡   ¡  ||ƒ}d| ¡  ¡   ¡  |	|
  ¡  ¡ }|	|  ¡  ¡ }td||ƒ |d| k s»J ‚|j
j|j
j  ¡  ¡ }|j
j|j
j  ¡  ¡ }td	||ƒ |d| k sáJ ‚|jj|jj  ¡  ¡ }|jj|jj  ¡  ¡ }td
||ƒ |d| k sJ ‚|j|j  ¡  ¡ }|j|j  ¡  ¡ }td||ƒ |d| k s+J ‚qqd S )N)éS   )é   é   )r   Ti   ÚOUTé   ÚGW2ÚGW1ÚGX1)ÚtorchÚnnÚLinearÚcudaÚhalfr   r   ÚweightÚdataÚcopy_ÚbiasÚrandnÚrequires_grad_ÚcloneÚdetachÚabsÚmeanÚbackwardÚprintÚdtypeÚgrad)r   ÚdimÚbatchÚstandardÚ
switchbackÚbaselineÚx1Úx2Úx3Úout_standardÚout_sbÚout_baselineÚerr_sbÚerr_baseline© r0   úG/var/www/html/ai/venv/lib/python3.10/site-packages/tests/test_triton.pyÚtest_switchback   sJ   


Óÿr2   )Úpytestr   Ú bitsandbytes.triton.triton_utilsr   Ú$bitsandbytes.nn.triton_based_modulesr   Úbitsandbytes.nnr   ÚmarkÚskipifr   Úis_availableÚget_device_capabilityÚparametrizer2   r0   r0   r0   r1   Ú<module>   s    ,ÿ