o
    soi5                     @  s   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ eh dZeh d	Zed
dhZG dd deZdS )    )annotationsN)TensorProto)Base)expect)make_tensortensor_dtype_to_np_dtype)to_float8e8m0>   
FLOAT8E5M2FLOAT8E4M3FNFLOAT8E4M3FNUZFLOAT8E5M2FNUZ>   INT4UINT4
FLOAT4E2M1UINT2INT2c                   @  s6   e Zd Zed
ddZed
ddZed
ddZd	S )CastreturnNonec               	   C  s  g d} | D ]^\}}||krqt t|}t t|}t|}t|}|dks*|dkr7tjg dtjd}d}ne|tv s?|tv rLtjg dtjd}d}nP|dv sT|dv ratd	d
tj}d}n;|dv si|dv rvtddtj}d}n&|dks~|dkrtjg dtjd}d}ntjg dtjd	ddg}d}|tv rt
j||}	td|||	dd}
nD|tv r||}	t
j|	}td||| dd}
n)|tv r||}	t
j|	}td||| dd}
n||}	td|||	dd}
|tv r	td||t
j|	|dd}n@|tv r#t
j|	|}td||| dd}n&|tv r=t
j|	|}td||| dd}ntd|||	|dd}t
jjddgdg|d}t||
g|gd| d | d qd S )N)0)FLOATFLOAT16)r   DOUBLE)r   r   )r   r   )r   r   )r   r   )r   BFLOAT16)r   r   )r   r
   )r   r
   )r   r   )r   r   )r
   r   )r
   r   )r   r   )r   r   )r   r	   )r   r	   )r   r   )r   r   )r	   r   )r	   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   UINT8)r   r   )r   r   )r   INT8)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   r   )
0.47892547
0.48033667
0.49968487
0.81910545
0.47031248z0.816468z
0.21087195	0.7229038NaNINF+INF-INFdtype)      r   r   r   r   r   r    10000001e-7r!   r"   r#   r$   z
-0.0000001z	0.0000001z-1000000r'      )r   r   i   )r-   r-   )r   r   r(   )      r   )z0.480.25z1.05z-3.5z-89r*   r+   r!   r"   r#   r$   z-4z0.01z-0.0r'   inputTvalsrawoutputr   inputsoutputsto
test_cast__to_r:   r;   name)getattrr   r   nparrayfloat32F8_TYPESarangeastypereshapeonnxnumpy_helpersaturate_castr   FOUR_BIT_TYPES_pack_4bitx2tobytesTWO_BIT_TYPES_pack_2bitx4helper	make_noder   )
test_cases	from_typeto_type
from_dtypeto_dtypefrom_np_dtypeto_np_dtypenp_fp32input_shapenp_fromr4   packedr8   node r_   T/home/ubuntu/.local/lib/python3.10/site-packages/onnx/backend/test/case/node/cast.pyexport   s   3









 zCast.exportc                  C  s   t ddgg d} d}| D ]X\}}tt|}tt|}t|}t|}tjg dtjd}td|||	|dd	}	td
|||	|	|dd	}
t
jjddgd
g|dd}t||	g|
gd| d | d qd S )Nr   r   )r
   r   r	   r   r,   r)   r%   r4   Tr5   r8   r   r   )r:   r;   r<   saturatetest_cast_no_saturate_r>   r?   )	itertoolsproductrA   r   r   rB   rC   rD   r   rG   rI   rQ   rR   r   )rS   r[   rT   rU   rV   rW   rX   rY   rZ   r4   r8   r^   r_   r_   r`   export_saturate_false   sX   

zCast.export_saturate_falsec            	   	   C  sl  t jg dt jd} g d}|D ]\}}|dkr| }t| }nC|dkr.| t j}t|}n4|dkrWt| }|dkrA|t j}n!|dkrL|t j}ntd| d| d	td| d| d	td
tt	|ddg|dd}tdtt	|ddg|dd}|dkrt
jjdd
gdgtt	|ddd}nt
jjdd
gdgtt	|d}t||g|gd| d | d qd S )N)z0.0z0.124r2   z0.5z1.1z2.0z4.0z8.0r%   ))r   
FLOAT8E8M0)r   rg   )rg   r   )rg   r   r   r   rg   zConversion from z to z is not tested.r4      r(   T)r7   r8   r   r1   up)r:   r;   r<   rb   
round_moder9   test_cast_e8m0_r>   r?   )rB   rC   rD   r   rG   float16
ValueErrorr   rA   r   rI   rQ   rR   r   )	rZ   rS   rT   rU   input_np	output_npr4   r8   r^   r_   r_   r`   export_e8m0@  sx   


	zCast.export_e8m0N)r   r   )__name__
__module____qualname__staticmethodra   rf   rp   r_   r_   r_   r`   r      s     `Er   )
__future__r   rd   numpyrB   rI   r   onnx.backend.test.case.baser   onnx.backend.test.case.noder   onnx.helperr   r   onnx.numpy_helperr   	frozensetrE   rL   rO   r   r_   r_   r_   r`   <module>   s   