U
    rh)D                     @  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	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZmZ G dd	 d	eZdS )
    )annotationsN)TensorProtohelpersubbyte)Base)expect)float32_to_float8e4m3float32_to_float8e5m2make_tensortensor_dtype_to_field)float8e4m3_to_float32float8e5m2_to_float32c                   @  s0   e Zd ZeddddZeddddZdS )CastNone)returnc               $   C  sx  d} dddddddd	d
dddddddddddddddddddddd d!d"d#d$d%g$}t t}t t}t d&d' }t d(d' }d)}|D ]\}}d }	d }
|d*ks|d*krt jd+d,d-d.d/d0d1d2d3d4d5d6gt jd7}tjd8k}|jt j	d7}|r|d9d d: n|d;d d: }|d*krn|d<ks$t
|d=d>g}|d=d>g}tjttj|j}	tjttj|j}
n|d<ks|t
|d=d>g}t jt|d: ft j	d7}|r||d9d d:< n||d;d d:< |jt jd7}|d=d>g}tjttj|j}	tjttj|j}
n||ks(||krdt jd+d,d-d.d/d2d?d@d3d4d5d6dAdBdCgt jd7}|d<kr|}tdDtjd=dEg| }n|dFkr|t jt j}tdDtjd=dEg| }n|dGkrt||}tdDtjd=dEg| }n|dHkr t||dIdJdIdJ}tdDtjd=dEg| }nt|dKkrPt||}tdDtjd=dEg| }nD|dLkrt||dIdIdMdIdIdM}tdDtj d=dEg| }nt!dN|dGkrt||}n|dHkrt||dIdJdIdJ}nt|dKkrt||}n\|dLkrt||dIdIdMdIdIdM}n8|dFkr(|t jt j}n|d<kr8|}nt!dNtdDt"t|d=dEg| }|}n|dOksx|dOkrt #dPdQt j}dR}|d<kr|}tdDtj|| }n|dFkr|t j}tdDtj|| }nX|dSkr||}tdDtj$|| }n0|dTkr0||}tdDtj%|| }nt!dN|dSkrT||t&j'}n||dTkrp||t&j(}n`|dFkr|t j}nH|d<kr|}n8|dUkr|t j)}n |dVkr|t j*}nt!dNtdWt"t||| }|}tjt"t||}	tjt"t||}
n|dXkrt j+,| t-t"t|}|dXkrg }|. D ](}t/|0dY}|1dY}|2| qTt |t3d=d>g}n|t-t"t|}nLt jd+d,d-d.d/d0d1d2d3d4d5d6gt 4t3d7d=d>g}|t-t"t|}tjj5dZd[gd\gt"t|d]}|	rR|
rRt6||g|gd^| d_ | |	g|
gd` qt6||g|gd^| d_ | da qd S )bN)      )FLOATFLOAT16)r   DOUBLE)r   r   )r   r   )r   r   )r   r   )r   STRING)r   r   )r   BFLOAT16)r   r   r   FLOAT8E4M3FNr   r   r   FLOAT8E4M3FNUZr   r   )r   r   )r   r   )r   r   )r   r   r   
FLOAT8E5M2r   r   r   FLOAT8E5M2FNUZr   r"   )r   r   )r   r   )r"   r   )r"   r   )r   UINT4)r   r$   )r   INT4)r   r%   )r$   r   )r$   r   )r$   UINT8)r%   r   )r%   r   )r%   INT8c                 S  s   t j| ddS )NFsignedr   Zfloat32_to_4bit_unpackedx r-   D/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/cast.py<lambda>F       zCast.export.<locals>.<lambda>c                 S  s   t j| ddS )NTr(   r*   r+   r-   r-   r.   r/   I   r0   )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little      r   r   r   r   10000001e-7
-0.0000001	0.0000001-1000000r,      r   r   r   T)uzr   r"   )fnrF   7Conversion from {from_type} to {to_type} is not tested.)r$   r%   i   )rE   rE   r$   r%   r&   r'   yr   zutf-8r   inputoutput)inputsoutputstoZ
test_cast__to_)rM   rN   nameZinput_type_protosZoutput_type_protosrM   rN   rQ   )7np	vectorizer   r	   arrayfloat32sys	byteorderviewZuint16AssertionErrorZreshapeonnxr   Zmake_tensor_type_protointr   r   shaper   zeroslenr
   tolistastypefloat16r   r   r   r   r   r   r"   
ValueErrorgetattrZaranger$   r%   customZuint4Zint4Zuint8Zint8randomZrandom_sampleZtensor_dtype_to_np_dtypeflattenstrencodedecodeappendobjectr<   	make_noder   )r]   
test_casesvect_float32_to_float8e4m3vect_float32_to_float8e5m2Zvect_float32_to_uint4Zvect_float32_to_int4Zf8_types	from_typeto_typeZinput_type_protoZoutput_type_protonp_fp32Zlittle_endisanZnp_uint16_viewZnp_bfp16rK   rL   Znp_fp32_zerosZnp_fp32_from_bfloatinput_valuesexpectedZexpected_tensorZinput_shapessisZsunoder-   r-   r.   export   s   '



    
   
   
   

    
   
   


 



   
   
   
   
   





     


	zCast.exportc                  C  s  ddddddddg} t t}t t}| D ]\}}t jd	d
dddddddddddddgt jd}|dkr|}tdtjddg|	 }n>|dkr|
t j
t j}tdtjddg|	 }ntd|dkr||d d!}nT|d"kr||d#d d$}n<|d%kr||d d!}n$|d&kr*||d#d#d d'}ntdtd(d) |D }	t }
tt||
_d|
_|
jddg t|
j}t|
||	 |
}tjjd*d+gd,gtt|d-d.}t||g|gd/| d0 | d1 q,d S )2Nr   r   r   r   r   r    r!   r#   r1   r2   r3   r4   r5   r6   r@   rA   r7   r8   r9   r:   rB   rC   rD   r;   r   r,   r   rE   r   rH   r   F)saturater   T)rF   r{   r   r"   )rG   rF   r{   c                 S  s   g | ]}t |qS r-   )r\   ).0rw   r-   r-   r.   
<listcomp>  s     z.Cast.export_saturate_false.<locals>.<listcomp>r   rK   rL   r   )rM   rN   rO   r{   Ztest_cast_no_saturate_rP   rR   )rS   rT   r   r	   rU   rV   r
   r   r   r`   ra   rb   r   rc   bytesrd   Z	data_typerQ   Zdimsextendr   r[   r   rm   r   )rn   ro   rp   rq   rr   rs   rt   rK   ru   ZivalsZtensorfieldrL   ry   r-   r-   r.   export_saturate_falseW  s    


     

   
zCast.export_saturate_falseN)__name__
__module____qualname__staticmethodrz   r   r-   r-   r-   r.   r      s     ?r   )
__future__r   rW   ZnumpyrS   r[   Zonnx._custom_element_typesZ_custom_element_typesre   r   r   r   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   Zonnx.helperr   r	   r
   r   Zonnx.numpy_helperr   r   r   r-   r-   r-   r.   <module>   s   