o
    wÖia  ã                   @  s¤   d dl mZ d dlZd dlmZ d dlZd dlZd dlZd dl	Z	d dl
Z	d dl	mZmZ dd	d
„Zddd„Zddd„ZG dd„ dejƒZedkrPejdd dS dS )é    )ÚannotationsN)ÚAny)ÚhelperÚnumpy_helperÚivalÚintÚreturnr   c                 C  s   t  | ¡ tj¡ t j¡S ©N)ÚnpÚint16ÚviewÚ	ml_dtypesÚbfloat16ÚastypeÚfloat32)r   © r   úX/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/test/numpy_helper_test.pyÚbfloat16_to_float32   s   r   c                 C  sÔ   | dk s| dkrt | › dƒ‚| dkrt tj ¡S | dkr$t tj¡S | d@ dkr/t d¡S | d@ }| dM } | d? }| d@ }|d@ }|dkrN|d	8 }d}n|d8 }d
}t|d | ƒd|  }|re| }t |¡S )Nr   éÿ   ú is not a float8.é   é€   é   é   é   é   é   é   ç       @)Ú
ValueErrorr
   r   ÚnanÚfloat©r   ÚsignÚexpoÚmantÚpoweÚfractionÚfvalr   r   r   Úfloat8e4m3_to_float32   s,   

r)   c                 C  sþ   | dk s| dkrt | › dƒ‚| dv rt tj ¡S | dv r$t tj¡S | dkr/t tj¡ S | dkr9t tj¡S | d@ dkrDt d¡S | d	@ }| dM } | d
? }| d@ }|d@ }|dkrc|d8 }d}n|d8 }d}t|d | ƒd|  }|rz| }t |¡S )Nr   r   r   )r   éþ   éý   )r   é~   é}   éü   é|   r   r   é   r   é   é   r   r   é   r   )r   r
   r   r    Úinfr!   r"   r   r   r   Úfloat8e5m2_to_float321   s4   

r5   c                   @  sž  e Zd Zd€dd„Zd€dd„Zdd	d
„Zddd„Zddd„Zddd„Zddd„Z	ddd„Z
ddd„Zddd„Zddd„Zddd„Zddd„Zddd „Zej d!d"d#d$ejfejfg¡d%d&„ ƒZd'd(„ Zej g d)¢¡d*d+„ ƒZd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/d‚dƒd_d`„Z0ej dae1j2j3fdbe1j2j4fdce1j2j5fdde1j2j6fdee1j2j7fdfe1j2j8fdge1j2j9fdhe1j2j:fdie1j2j;fdje1j2j<fdke1j2j=fdle1j2j>fdme1j2j?fdne1j2j@fdoe1j2jAfdpe1j2jBfdqe1j2jCfdre1j2jDfdse1j2jEfdte1j2jFfdue1j2jGfdve1j2jHfg¡d„d{d|„ƒZId}d~„ ZJdS )…ÚTestNumpyHelperÚdtypeú	np.numberr   ÚNonec                 C  sJ   t j dd¡ |¡}t |d¡}|  |jd¡ t |¡}t j	 
||¡ d S )Né   é%   Útest)r
   ÚrandomÚrandr   r   Ú
from_arrayÚassertEqualÚnameÚto_arrayÚtestingÚassert_equal©Úselfr7   ÚaÚ
tensor_defÚ	a_recoverr   r   r   Ú_test_numpy_helper_float_typeQ   ó
   
z-TestNumpyHelper._test_numpy_helper_float_typec                 C  sZ   t jjt  |¡jt  |¡j|dd}t |d¡}|  |j	d¡ t 
|¡}t j ||¡ d S )N©r:   r;   )r7   Úsizer<   )r
   r=   ÚrandintÚiinfoÚminÚmaxr   r?   r@   rA   rB   rC   rD   rE   r   r   r   Ú_test_numpy_helper_int_typeX   s   ÿ
z+TestNumpyHelper._test_numpy_helper_int_typec                 C  ó   |   tj¡ d S r	   ©rJ   r
   r   ©rF   r   r   r   Ú
test_floata   ó   zTestNumpyHelper.test_floatc                 C  rS   r	   )rR   r
   Úuint8rU   r   r   r   Ú
test_uint8d   rW   zTestNumpyHelper.test_uint8c                 C  rS   r	   )rR   r
   Úint8rU   r   r   r   Ú	test_int8g   rW   zTestNumpyHelper.test_int8c                 C  rS   r	   )rR   r
   Úuint16rU   r   r   r   Útest_uint16j   rW   zTestNumpyHelper.test_uint16c                 C  rS   r	   )rR   r
   r   rU   r   r   r   Ú
test_int16m   rW   zTestNumpyHelper.test_int16c                 C  rS   r	   )rR   r
   Úint32rU   r   r   r   Ú
test_int32p   rW   zTestNumpyHelper.test_int32c                 C  rS   r	   )rR   r
   Úint64rU   r   r   r   Ú
test_int64s   rW   zTestNumpyHelper.test_int64c                 C  sJ   t  g d¢¡ t¡}t |d¡}|  |jd¡ t |¡}t j	 
||¡ d S )N)ÚAmyÚBillyÚCindyÚDavidr<   )r
   Úarrayr   Úobjectr   r?   r@   rA   rB   rC   rD   ©rF   rG   rH   rI   r   r   r   Útest_stringv   rK   zTestNumpyHelper.test_stringc                 C  sL   t jjddd t¡}t |d¡}|  |jd¡ t 	|¡}t j
 ||¡ d S )Nr0   rL   )rM   r<   )r
   r=   rN   r   Úboolr   r?   r@   rA   rB   rC   rD   ri   r   r   r   Ú	test_bool}   s
   
zTestNumpyHelper.test_boolc                 C  rS   r	   rT   rU   r   r   r   Útest_float16„   rW   zTestNumpyHelper.test_float16c                 C  rS   r	   )rJ   r
   Ú	complex64rU   r   r   r   Útest_complex64‡   rW   zTestNumpyHelper.test_complex64c                 C  rS   r	   )rJ   r
   Ú
complex128rU   r   r   r   Útest_complex128Š   rW   zTestNumpyHelper.test_complex128)r   )gAíþÿŸ¹?)i ü )gØq @ë>c                 C  s†   t  |¡}t |¡}t|tƒsJ ‚t t  |g¡¡d }t|ƒ}t  	|¡r5t  	|¡s,J ‚t  	|¡s3J ‚d S |  
||¡ |  
||¡ d S )Nr   )r
   r   r   Úfloat32_to_bfloat16Ú
isinstancer   r   r   rg   Úisnanr@   )rF   ÚfÚf32Úbf16Úf32_1Úf32_2r   r   r   Útest_bfloat16_to_float32   s   


z(TestNumpyHelper.test_bfloat16_to_float32c                 C  s<  |   t tddƒ¡d¡ |   t tddƒ¡d¡ |   t tddƒ¡d¡ |   t tddƒ¡d	¡ d
dddddddddddddd	tjfD ]X}| j|dH t |¡}t 	|¡}t
|tƒs]J ‚t t |g¡¡d
 }t|ƒ}t |¡r€t |¡sxJ ‚t |¡sJ ‚n|   ||¡ |   ||¡ W d   ƒ n1 s–w   Y  qCd S )NÚ1111110r0   éÀ  Ú1000g      ?Ú1ç      `?Ú111g      Œ?r   r   éÿÿÿÿg      à?g      à¿g      º?g      º¿r   éþÿÿÿéýÿÿÿ©ru   )r@   r   r)   r   r
   r    ÚsubTestr   r   Úfloat32_to_float8e4m3rs   rg   rt   ©rF   ru   rv   Úf8rx   ry   r   r   r   Útest_float8e4m3_to_float32¤   sL   ÿð


€õ€îz*TestNumpyHelper.test_float8e4m3_to_float32))g      r?ç      p?)ç      x?r‹   )góŽSt$—w?r‹   )g333333s?rŠ   )r   r   )g      h?rŠ   )gâX·Ñ`?r   )g333333c?r   )g      ‚?g      €?)g333333S?r   )gVbž•´ý?g      þ?c                 C  s$   t  |¡}t |¡}|  ||¡ d S r	   )r   r†   r   r)   r@   )rF   ÚvalÚexpectedrˆ   rv   r   r   r   Ú test_float8e4m3_to_float32_roundÊ   s   

z0TestNumpyHelper.test_float8e4m3_to_float32_roundc              	   C  s  |   t tddƒ¡d¡ |   t tddƒ¡d¡ |   t tddƒ¡d¡ |   t tddƒ¡d	¡ |  t t td
dƒ¡¡¡ |  t t tddƒ¡¡¡ |  t t tddƒ¡¡¡ |  t t tddƒ¡¡¡ |  t t tddƒ¡¡¡ |  t t tddƒ¡¡¡ |   t tddƒ¡tj¡ |   t tddƒ¡tj ¡ dddddtjfD ]X}| j	|dH t 
|¡}t |¡}t|tƒsÂJ ‚t t |g¡¡d }t|ƒ}t |¡råt |¡sÝJ ‚t |¡säJ ‚n|   ||¡ |   ||¡ W d   ƒ n1 sûw   Y  q¨d S )NÚ1111011r0   é à  Ú100g      ?Ú11g      ?r~   g      ð>Ú1111101r{   Ú1111111Ú11111101Ú11111110Ú11111111Ú1111100Ú11111100r   gö7ß  \?i P  r2   i òÿÿr„   )r@   r   r5   r   Ú
assertTruer
   rt   r4   r    r…   r   r   Úfloat32_to_float8e5m2rs   rg   r‡   r   r   r   Útest_float8e5m2_to_float32Þ   sX   ÿÿÿÿÿú


€õ€øz*TestNumpyHelper.test_float8e5m2_to_float32c                 C  sè   t  t j¡}t |¡}t |¡}|  |d¡ t  t j¡}tj|dd}t |¡}|  t  	|¡¡ t  t j ¡}t |¡}|  |d@ d¡ t |¡}|  |d¡ t  t j ¡}tj|dd}|  |d@ d¡ t |¡}|  t  	|¡¡ d S )Nr|   F©Úsaturater   é@þÿÿ©
r
   r   r4   r   r†   r   r)   r@   rš   rt   ©rF   ÚxÚtoÚbackr   r   r   Útest_float8_e4m3fn_inf
  s$   





z&TestNumpyHelper.test_float8_e4m3fn_infc                 C  sä   t  t j¡}tj|dd}tj|dd}|  |d¡ t  t j¡}tj|ddd}tj|dd}|  t  	|¡¡ t  t j ¡}tj|dd}tj|dd}|  |d¡ t  t j ¡}tj|ddd}tj|dd}|  t  	|¡¡ d S )NT©Úuzéð   F©r§   rž   éÿÿÿr    r¡   r   r   r   Útest_float8_e4m3fnuz_inf!  s    z(TestNumpyHelper.test_float8_e4m3fnuz_infc                 C  sô   t  t j¡}t |¡}t |¡}|  |d¡ t  t j¡}tj|dd}t |¡}|  t  	|¡¡ t  t j ¡}t |¡}|  |d@ d¡ t |¡}|  |d¡ t  t j ¡}tj|dd}|  |d@ d¡ t |¡}|  t  	|¡¡ |  
|d¡ d S )Nr   Fr   r   é  ÿÿr   )r
   r   r4   r   r›   r   r5   r@   rš   ÚisinfÚ
assertLessr¡   r   r   r   Útest_float8_e5m2_inf6  s&   





z$TestNumpyHelper.test_float8_e5m2_infc                 C  sô   t  t j¡}tj|ddd}tj|ddd}|  |d¡ t  t j¡}tj|dddd}tj|ddd}|  t  	|¡¡ t  t j ¡}tj|ddd}tj|ddd}|  |d¡ t  t j ¡}tj|dddd}tj|ddd}|  t  	|¡¡ d S )NT©Úfnr§   r   F©r±   r§   rž   r¬   )
r
   r   r4   r   r›   r   r5   r@   rš   rt   r¡   r   r   r   Útest_float8_e5m2fnuz_infN  s    z(TestNumpyHelper.test_float8_e5m2fnuz_infc                 C  ó¼   t  d¡}t |¡}t |¡}|  |d¡ t  d¡}tj|dd}t |¡}|  t  |¡¡ t  d¡}t |¡}t |¡}|  |d¡ t  d¡}tj|dd}t |¡}|  t  |¡¡ d S )Né@B r|   Fr   éÀ½ðÿrŸ   ©	r
   r   r   r†   r   r)   r@   rš   rt   r¡   r   r   r   Útest_float8_e4m3fn_out_of_rangec  ó    









z/TestNumpyHelper.test_float8_e4m3fn_out_of_rangec                 C  sØ   t  d¡}tj|dd}tj|dd}|  |d¡ t  d¡}tj|ddd}tj|dd}|  t  |¡¡ t  d¡}tj|dd}tj|dd}|  |d¡ t  d¡}tj|ddd}tj|dd}|  t  |¡¡ d S )	Nrµ   Tr¦   r¨   Fr©   r¶   rª   r·   r¡   r   r   r   Ú!test_float8_e4m3fnuz_out_of_rangex  s    



z1TestNumpyHelper.test_float8_e4m3fnuz_out_of_rangec                 C  r´   )Nrµ   r   Fr   r¶   r¬   )	r
   r   r   r›   r   r5   r@   rš   r­   r¡   r   r   r   Útest_float8_e5m2_out_of_range  r¹   z-TestNumpyHelper.test_float8_e5m2_out_of_rangec                 C  sè   t  d¡}tj|ddd}tj|ddd}|  |d¡ t  d¡}tj|dddd}tj|ddd}|  t  |¡¡ t  d¡}tj|ddd}tj|ddd}|  |d¡ t  d¡}tj|dddd}tj|ddd}|  t  |¡¡ d S )	Nrµ   Tr°   r   Fr²   r¶   r¬   )	r
   r   r   r›   r   r5   r@   rš   rt   r¡   r   r   r   Ú!test_float8_e5m2fnuz_out_of_range¢  s    



z1TestNumpyHelper.test_float8_e5m2fnuz_out_of_rangec                 C  ót   t  d¡}t |¡}|  |d¡ t  |¡}|  |d¡ t  d¡}tj|dd}|  |d¡ t  |¡}|  |d¡ d S ©Nr   r   Fr   ©r   r5   r   r†   r@   r)   r¡   r   r   r   Ú test_float8_e4m3fn_negative_zero·  ó   




z0TestNumpyHelper.test_float8_e4m3fn_negative_zeroc                 C  s‚   t  d¡}tj|dd}|  |d¡ t j|dd}|  |d¡ t  d¡}tj|ddd}t j|dd}|  |d¡ |  |d¡ d S )Nr   Tr¦   r   Fr©   r¿   r¡   r   r   r   Ú"test_float8_e4m3fnuz_negative_zeroÄ  s   

z2TestNumpyHelper.test_float8_e4m3fnuz_negative_zeroc                 C  r½   r¾   ©r   r5   r   r›   r@   r)   r¡   r   r   r   Útest_float8_e5m2_negative_zeroÑ  rÁ   z.TestNumpyHelper.test_float8_e5m2_negative_zeroc                 C  sŠ   t  d¡}tj|ddd}|  |d¡ t j|ddd}|  |d¡ t  d¡}tj|dddd}|  |d¡ t j|ddd}|  |d¡ d S )Nr   Tr°   r   Fr²   rÃ   r¡   r   r   r   Ú"test_float8_e5m2fnuz_negative_zeroÞ  s   

z2TestNumpyHelper.test_float8_e5m2fnuz_negative_zeroc                 C  ó|   t  d¡}t |¡}|  |d¡ t  |¡}|  t |¡¡ t  d¡}tj|dd}|  |d¡ t  |¡}|  t |¡¡ d S ©Nr   Fr   ©	r   r5   r   r†   r@   r)   rš   r
   rt   r¡   r   r   r   Útest_float8_e4m3fn_negative_nanë  ó   




z/TestNumpyHelper.test_float8_e4m3fn_negative_nanc                 C  sŠ   t  d¡}tj|dd}|  |d¡ t j|dd}|  t |¡¡ t  d¡}tj|ddd}|  |d¡ t j|dd}|  t |¡¡ d S )Nr   Tr¦   r   Fr©   rÈ   r¡   r   r   r   Ú!test_float8_e4m3fnuz_negative_nanø  s   

z1TestNumpyHelper.test_float8_e4m3fnuz_negative_nanc                 C  rÆ   rÇ   ©	r   r5   r   r›   r@   r)   rš   r
   rt   r¡   r   r   r   Útest_float8_e5m2_negative_nan  rÊ   z-TestNumpyHelper.test_float8_e5m2_negative_nanc                 C  s’   t  d¡}tj|ddd}|  |d¡ t j|ddd}|  t |¡¡ t  d¡}tj|dddd}|  |d¡ t j|ddd}|  t |¡¡ d S )Nr   Tr°   r   Fr²   rÌ   r¡   r   r   r   Ú!test_float8_e5m2fnuz_negative_nan  s   

z1TestNumpyHelper.test_float8_e5m2fnuz_negative_nanc                 C  sn   t  t d¡t d¡dœ¡}|  |tj¡ |  t  |j	j
d ¡t d¡¡ |  t  |j	j
d ¡t d¡¡ d S )Nçš™™™™™¹?çÍÌÌÌÌÌì?©r   r   r   r   ©r   Ú	from_dictr
   rg   ÚassertIsInstanceÚonnxÚMapProtor@   rB   ÚvaluesÚtensor_values©rF   Ú	map_protor   r   r   Ú,test_from_dict_values_are_np_arrays_of_float  ó   ÿÿz<TestNumpyHelper.test_from_dict_values_are_np_arrays_of_floatc                 C  sn   t  t d¡t d¡dœ¡}|  |tj¡ |  t  |j	j
d ¡t d¡¡ |  t  |j	j
d ¡t d¡¡ d S )Nr   é	   rÑ   r   rÒ   rÙ   r   r   r   Ú*test_from_dict_values_are_np_arrays_of_int)  rÜ   z:TestNumpyHelper.test_from_dict_values_are_np_arrays_of_intc                 C  s²   t  ddg¡}t  ddg¡}t ||dœ¡}|  |tj¡ t |jj	d ¡}|  
|d |d ¡ |  
|d |d ¡ t |jj	d ¡}|  
|d |d ¡ |  
|d |d ¡ d S )Nr   r0   rÝ   é
   rÑ   r   )r
   rg   r   rÓ   rÔ   rÕ   rÖ   rB   r×   rØ   r@   )rF   Ú
zero_arrayÚ	one_arrayrÚ   Ú
out_tensorr   r   r   Ú+test_from_dict_values_are_np_arrays_of_ints3  s   z;TestNumpyHelper.test_from_dict_values_are_np_arrays_of_intsc                 C  s@   |   t¡ t dddœ¡ W d   ƒ d S 1 sw   Y  d S )NrÏ   rÐ   rÑ   )ÚassertRaisesÚ	TypeErrorr   rÓ   rU   r   r   r   Ú>test_from_dict_raises_type_error_when_values_are_not_np_arraysA  s   "þzNTestNumpyHelper.test_from_dict_raises_type_error_when_values_are_not_np_arraysc                 C  óL   |   t¡ t t d¡t d¡dœ¡ W d   ƒ d S 1 sw   Y  d S )NrÏ   rÐ   )r   gš™™™™™ñ?©rä   rå   r   rÓ   r
   rg   rU   r   r   r   Ú"test_from_dict_differing_key_typesF  ó   "þz2TestNumpyHelper.test_from_dict_differing_key_typesc                 C  rç   )Nr   rÐ   rÑ   rè   rU   r   r   r   Ú$test_from_dict_differing_value_typesK  rê   z4TestNumpyHelper.test_from_dict_differing_value_typesTÚvaluer   Úcheck_dtyperk   c           	      C  s€  t  t  t jddgdg|dgdt  dtjjdg¡gt  d|dg¡g¡¡}tj 	|¡}| 
d dtjg d¢tjdi¡}tj|d	 d
d}|  |j|¡ t |¡}|  |d	 j|j¡ |rf|  |d	 j|j¡ tj|d
d}|  |j|j¡ |  |j|j¡ |  t|jƒt|jƒ¡ |  t|jƒt|jƒ¡ |  |j|j¡ |  t|jƒt|jƒ¡ |  | ¡ | ¡ ¡ |  |jt  |j¡¡ d S )NÚCastÚXÚY)r£   r<   r3   )r   r   r‚   r   )r7   r   Úcheck)rA   )r   Ú
make_modelÚ
make_graphÚ	make_nodeÚmake_tensor_value_inforÕ   ÚTensorProtoÚFLOATÚ	referenceÚReferenceEvaluatorÚrunr
   rg   r   r   r?   r@   Ú	data_typerB   Úshaper7   rA   ÚlenÚraw_dataÚlistÚtupleÚdimsÚSerializeToStringÚnp_dtype_to_tensor_dtype)	rF   rì   rí   Ú
onnx_modelÚrefÚstartÚtpr¤   Úagainr   r   r   Ú_to_array_from_arrayP  s2   üÿ 
z$TestNumpyHelper._to_array_from_arrayr÷   ÚUINT8ÚINT8ÚUINT16ÚINT16ÚINT32ÚINT64ÚBOOLÚFLOAT16ÚDOUBLEÚUINT32ÚUINT64Ú	COMPLEX64Ú
COMPLEX128ÚBFLOAT16ÚFLOAT8E4M3FNÚFLOAT8E4M3FNUZÚ
FLOAT8E5M2ÚFLOAT8E5M2FNUZÚUINT4ÚINT4Ú
FLOAT4E2M1Ú_Ústrrû   úonnx.TensorProto.DataTypec                 C  s   |   |¡ d S r	   )r	  )rF   r  rû   r   r   r   Útest_to_array_from_arrayk  s   z(TestNumpyHelper.test_to_array_from_arrayc                 C  s   |   tjjd¡ d S )NF)r	  rÕ   rö   ÚSTRINGrU   r   r   r   Útest_to_array_from_array_stringˆ  s   z/TestNumpyHelper.test_to_array_from_array_stringN)r7   r8   r   r9   )r   r9   )T)rì   r   rí   rk   )r  r   rû   r!  )KÚ__name__Ú
__module__Ú__qualname__rJ   rR   rV   rY   r[   r]   r^   r`   rb   rj   rl   rm   ro   rq   ÚparameterizedÚexpandr
   r    r4   rz   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  r  r  r  r"  r$  r   r   r   r   r6   P   s¢    


	










úÿ

&ÿ
,























êÿr6   Ú__main__r0   )Ú	verbosity)r   r   r   r   )Ú
__future__r   ÚunittestÚtypingr   r   Únumpyr
   r(  rÕ   Úonnx.referencer   r   r   r)   r5   ÚTestCaser6   r%  Úmainr   r   r   r   Ú<module>   s(   


    @ÿ