U
    rh#                     @  s`   d dl m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 G dd deZdS )	    )annotationsN)TensorProto)Base)expect)make_tensorc                   @  s   e Zd ZeddddZeddddZeddddZeddd	d
ZeddddZeddddZ	eddddZ
eddddZeddddZeddddZeddddZdS )DequantizeLinearNone)returnc                  C  s|   t jjddddgdgd} tddd	d
gtj}td}td	}tjddddgtjd}t| |||g|gdd d S )Nr   xx_scalex_zero_pointyinputsoutputsr               i i   ZdtypeZtest_dequantizelinearr   r   name)	onnxhelper	make_nodenparrayastypeuint8float32r   noder
   r   r   r    r#   P/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/dequantizelinear.pyexport   s    

zDequantizeLinear.exportc                  C  s   t jjddddgdgd} tjddgd	d
gddggddgddgddggddgddgddggggtjd}tjdddgtjd}tjdddgtjd}|tj|ddddtj |dddd }t	| |||g|gdd d S )Nr   r
   r   r   r   r   r   Y   "      J   ;         W             c         y   f   r   r   T         Ztest_dequantizelinear_axisr   )
r   r   r   r   r   r   r    r   Zreshaper   r!   r#   r#   r$   export_axis%   s0    
"zDequantizeLinear.export_axisc               	   C  st   t jjdddgdgdd} tdtjdgddd	d
dg}td}tjdddddgtjd}t	| ||g|gdd d S )Nr   r
   r   r   r   r   r   axisr+         ?r8     r                 ?       @      @      jr   Ztest_dequantizelinear_e4m3fnr   
r   r   r   r   r   FLOAT8E4M3FNr   r    r   r   r"   r
   r   r   r#   r#   r$   export_e4m3fnE   s    
zDequantizeLinear.export_e4m3fnc               	   C  st   t jjdddgdgdd} tdtjdgddd	d
dg}td}tjdddddgtjd}t	| ||g|gdd d S )Nr   r
   r   r   r   r:   r+   r<   r8   r=   r>   r   r?   r@   rA   rB   rC   r   Z$test_dequantizelinear_e4m3fn_float16r   )
r   r   r   r   r   rE   r   Zfloat16r   r   rF   r#   r#   r$   export_e4m3fn_float16Z   s    
z&DequantizeLinear.export_e4m3fn_float16c               	   C  s   t jjddddgdgdd} tdtjdgdd	d
ddg}tdtjd
gdg}td}tjdddddgtjd}t	| |||g|gdd d S )Nr   r
   r   
zero_pointr   r   r:   r+   r<   r8   r=   r>   r   r?   r@   rA   rB   rC   r   Z'test_dequantizelinear_e4m3fn_zero_pointr   rD   )r"   r
   rI   r   r   r#   r#   r$   export_e4m3fn_zero_pointo   s     
z)DequantizeLinear.export_e4m3fn_zero_pointc               	   C  st   t jjdddgdgdd} tdtjdgddd	d
dg}td}tjdddddgtjd}t	| ||g|gdd d S )Nr   r
   r   r   r   r:   r+   r<   r8   i   ir   r?   r@   rA   g      @g      hr   Ztest_dequantizelinear_e5m2r   )
r   r   r   r   r   Z
FLOAT8E5M2r   r    r   r   rF   r#   r#   r$   export_e5m2   s    
zDequantizeLinear.export_e5m2c                  C  s|   t jjddddgdgd} tddd	d
gtj}td}td}tjddddgtjd}t| |||g|gdd d S )Nr   r
   r   r   r   r   i0u  iy  i   i  r   i  g     g     rA   g      }@r   Ztest_dequantizelinear_uint16r   )	r   r   r   r   r   r   Zuint16r    r   r!   r#   r#   r$   export_uint16   s    

zDequantizeLinear.export_uint16c                  C  s|   t jjddddgdgd} tddd	d
gtj}td}td}tjddddgtjd}t| |||g|gdd d S )Nr   r
   r   r   r   r   iiii  r   i g     @g     @g       g     @r   Ztest_dequantizelinear_int16r   )	r   r   r   r   r   r   Zint16r    r   r!   r#   r#   r$   export_int16   s    

zDequantizeLinear.export_int16c               	   C  s   t jjddddgdgdd} tdtjdgdd	d
ddg}td}tdtjdd	g}tjdddddgtjd}t	| |||g|gdd d S )Nr   r
   r   r   r   r   r:   r+   r8      
      r   r8            r   Ztest_dequantizelinear_uint4r   )
r   r   r   r   r   ZUINT4r   r    r   r   r!   r#   r#   r$   export_uint4   s     
zDequantizeLinear.export_uint4c               	   C  s   t jjddddgdgdd} tdtjdgdd	d
ddg}td}tdtjdd	g}tjdddddgtjd}t	| |||g|gdd d S )Nr   r
   r   r   r   r   r:   r+   r8   rN   ir   rQ   rR   rS   iir   Ztest_dequantizelinear_int4r   )
r   r   r   r   r   ZINT4r   r    r   r   r!   r#   r#   r$   export_int4   s     
zDequantizeLinear.export_int4c                    s  t jjddddgdgddd} tjd	d
gddgddggddgddgddggddgddgddggddgddgddggggtjdtjdd gd!d"gd d ggd#d gd!dgd#d ggggtjdtjdd$gd$dgdd%ggd	dgdd	gd&dggggtjd}j|jkstd t	 fd'd(t
tjD s4tj  j   d$ksRtj  j   }tj| d)}tj|| d)}tj|tj | }t| |g|gd*d+ d S ),Nr   r
   r   r   r   r8   r   )r   r   r;   
block_sizer   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   rS   !   A   *   r0   r1   r2   r3   r4   r5   r   g      @rA   g      @r@   g      @r      rP   c                 3  s*   | ]"}| krj | j | kV  qd S )N)shape).0iZ
block_axisr
   r   r#   r$   	<genexpr>  s   z2DequantizeLinear.export_blocked.<locals>.<genexpr>)repeatsr;   Ztest_dequantizelinear_blockedr   )r   r   r   r   r   r   r    r^   AssertionErrorallrangelenrepeatr   r   )r"   r   rc   Zx_scale_elementwiseZx_zero_point_elementwiser   r#   ra   r$   export_blocked   sh    	  zDequantizeLinear.export_blockedN)__name__
__module____qualname__staticmethodr%   r9   rG   rH   rJ   rK   rL   rM   rV   rX   ri   r#   r#   r#   r$   r      s,   r   )
__future__r   Znumpyr   r   r   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   Zonnx.helperr   r   r#   r#   r#   r$   <module>   s   