o
    soi5                     @  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ZedddZedddZedd	d
ZedddZedddZ	edddZ
edddZedddZedddZedddZedddZedddZdS )QuantizeLinearreturnNonec                  C  t   t jjdg ddgd} tg dtj}td}td}tg dtj}t| |||g|gd	d
 d S )Nr   xy_scaley_zero_pointyinputsoutputs)r         i  iir      )r               r   test_quantizelinearr   r   name)	onnxhelper	make_nodenparrayastypefloat32uint8r   noder   r   r   r    r'   ^/home/ubuntu/.local/lib/python3.10/site-packages/onnx/backend/test/case/node/quantizelinear.pyexport   s   


zQuantizeLinear.exportc                  C  s   t jjdg d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g dtjd}tjg dtjd}||dddd |dddd tj}t	| |||g|gdd d S )Nr   r   r   r   i^
   i   iir          i   ii@iii*dtype)r         )T         r   r   test_quantizelinear_axisr   )
r   r   r   r    r!   r#   r$   reshaper"   r   r%   r'   r'   r(   export_axis$   s0   
$
zQuantizeLinear.export_axisc                  C  ~   t jjdg ddgd} tg dtj}td}tdtj	dgd	g}tdtj	d
gg d}t
| |||g|gdd d S )Nr   r   r   r                 ?       @g     j@g      i@r   r   r   r   r3   )r         ?r   i  `   test_quantizelinear_e4m3fnr   )r   r   r   r    r!   r"   r#   r   r   FLOAT8E4M3FNr   r%   r'   r'   r(   export_e4m3fnC      

zQuantizeLinear.export_e4m3fnc                  C  r:   )Nr   r   r   r   r;   r   r   r   r<   r3   )r   r?   r   i   r@   test_quantizelinear_e5m2r   )r   r   r   r    r!   r"   r#   r   r   
FLOAT8E5M2r   r%   r'   r'   r(   export_e5m2W   rD   zQuantizeLinear.export_e5m2c                  C  r
   )Nr   r   r   r   )r<   g      `      @      333333@333333@g      @g         @     r>     )rP   i      i   i  rQ   rR     r   rS   r   test_quantizelinear_uint16r   )	r   r   r   r    r!   r"   r#   uint16r   r%   r'   r'   r(   export_uint16k   s.   


zQuantizeLinear.export_uint16c                  C  r
   )Nr   r   r   r   )r<   g     rH   rI   rJ   rK   rL   rM   g    @g    g    @g    g     @g      rN   rO   r>      )rW        i  r   rY   rZ   rP   irP    rP   r[   rP   r[   test_quantizelinear_int16r   )	r   r   r   r    r!   r"   r#   int16r   r%   r'   r'   r(   export_int16   s.   


zQuantizeLinear.export_int16c                  C     t jjdg ddgdd} tg dg dg dgtj}tjg d	tjd
}tdt	j
|jt|}tdt	j
|jg d}t| |||g|gdd d S )Nr   r   r   r   r   r   axisr<         @g333333@g333333!@ir,      	            (   r>   rH         @r0   r   )r   r   r   r3   r   r   r   r2   r2   r3   r3      test_quantizelinear_uint4r   )r   r   r   r    r!   r"   r#   asarrayr   r   UINT4shape	ones_liker   r%   r'   r'   r(   export_uint4   6   
zQuantizeLinear.export_uint4c                  C  r_   )Nr   r   r   r   r`   rb   rd   rg   rl   r0   r   )r   r   r   r3   r   r2   r2   r3   r3      test_quantizelinear_int4r   )r   r   r   r    r!   r"   r#   rp   r   r   INT4rr   rs   r   r%   r'   r'   r(   export_int4   ru   zQuantizeLinear.export_int4c                  C     t jjdg ddgdd} tjg dg dg dgtjd	}tjg d
tjd	}tdtj	|j
t|}tdtj	|j
g d}t| |||g|gdd d S )Nr   r   r   r   r`   rb   )g       g      r=   rH   )rm         @      @g      @r0   rl   r   )r   r   r   r   r   r   r   r   r   r   r   r   test_quantizelinear_uint2r   )r   r   r   r    r!   r#   rp   r   r   UINT2rr   
zeros_liker   r%   r'   r'   r(   export_uint2  s4   
zQuantizeLinear.export_uint2c                  C  r|   )Nr   r   r   r   r`   rb   )g      rI   r=   r>   g       g      g333333g333333!r0   rl   r   )r   r   r   r   rX   rX   r   r   r   rX   rX   test_quantizelinear_int2r   )r   r   r   r    r!   r#   rp   r   r   INT2rr   r   r   r%   r'   r'   r(   export_int26  s4   
zQuantizeLinear.export_int2c                  C  r_   )Nr   r   r   r   r`   rb   rd   r   rl   r0   r   )r   r   r   r2   rw   rw   r   r   r   g      rX   r   test_quantizelinear_float4e2m1r   )r   r   r   r    r!   r"   r#   rp   r   r   
FLOAT4E2M1rr   r   r   r%   r'   r'   r(   export_float4e2m1T  sB   
z QuantizeLinear.export_float4e2m1c                    sD  t jjdg ddgddd} tjg dg dg d	gtjd
tjddgddgddggtjd
tjddgddgddggtjd
}j|jksIJ d t fddt	t
jD s_J j  j   dksmJ j  j   }tj| d}tj|| d}t| | tj}t| |g|gdd d S )Nr   r   r   r   r   )r   r   ra   
block_size)r~   g      (@g      I@r}   r=   g       @rm   r}   r<   g      4@g      $@rm   r0         ?rc   rH   皙@ffffff@皙@r   r   c                 3  ,    | ]}| krj | j | kV  qd S Nrr   .0i
block_axisr   r   r'   r(   	<genexpr>      z;QuantizeLinear.export_blocked_asymmetric.<locals>.<genexpr>repeatsra   &test_quantizelinear_blocked_asymmetricr   )r   r   r   r    r!   r#   r$   rr   allrangelenrepeatrintr"   r   )r&   r   r   y_scale_elementwisey_zero_point_elementwiser   r'   r   r(   export_blocked_asymmetricz  s\   

z(QuantizeLinear.export_blocked_asymmetricc                    s  t jjdddgdgddtjd} tjg dg d	g d
gtjdtjddgddgddggtjdd t fddt	t
jD sHJ j  j   dksVJ j  j   }tj| d}tjt| dddtj}tdtjj|}t| g|gdd d S )Nr   r   r   r   r   r   )r   r   ra   r   output_dtype)r~   rv   ir}   r   r   r0   r   rc   rH   r   r   r   c                 3  r   r   r   r   r   r'   r(   r     r   z:QuantizeLinear.export_blocked_symmetric.<locals>.<genexpr>r   r   r[   rP   )a_mina_max%test_quantizelinear_blocked_symmetricr   )r   r   r   r   INT16r    r!   r#   r   r   r   rr   r   clipr   r"   r]   r   r   )r&   r   r   y_valr   r'   r   r(   export_blocked_symmetric  s\   		
z'QuantizeLinear.export_blocked_symmetricN)r   r	   )__name__
__module____qualname__staticmethodr)   r9   rC   rG   rV   r^   rt   r{   r   r   r   r   r   r'   r'   r'   r(   r      s6    19%=r   )
__future__r   numpyr    r   r   onnx.backend.test.case.baser   onnx.backend.test.case.noder   onnx.helperr   r   r'   r'   r'   r(   <module>   s   