U
    qh%                     @  s   d dl mZ d dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ G d	d
 d
eZG dd deZG dd deZdS )    )annotationsN)TensorProto)float8e4m3fnfloat8e4m3fnuz
float8e5m2float8e5m2fnuzint4uint4)np_dtype_to_tensor_dtype)float8e4m3_to_float32float8e5m2_to_float32)OpRun)reshape_inputc                   @  s4   e Zd ZdddddZddddddd	d
dZdS )_CommonDequantizeLinearz
np.ndarrayint)xreturnc                 C  s   d }|j tkr*|j jd d dkr*tj}n|j tkrP|j jd d dkrPtj}n|j tkrv|j jd d dkrvtj}n||j t	kr|j jd d dkrtj
}nV|j tkr|j jd d dkrtj}n0|j tkr|j jd d dkrtj}n
t|j }|S )Nr   Ze4m3fnZe4m3fnuzZe5m2Ze5m2fnuzr	   r   )dtyper   descrr   FLOAT8E4M3FNr   FLOAT8E4M3FNUZr   
FLOAT8E5M2r   FLOAT8E5M2FNUZr	   ZUINT4r   ZINT4r
   )selfr   Ztensor_dtype r   K/tmp/pip-unpacked-wheel-xnis5xre/onnx/reference/ops/op_dequantize_linear.py
get_x_type   s    
z"_CommonDequantizeLinear.get_x_typeNznp.ndarray | Nonez
int | None)r   x_scalex_zero_pointaxis
block_sizec                 C  sD  |  |}|tjtjtjtjhk}|d k	rt|st|  |}||krVtd| d| d|tj	t
||j|| }	n|r|d k	r|tj}
|
 }|
 }||ks|tdkrtd|tjkrt|}	nT|tjkrt|dd}	n<|tjkrt|}	n(|tjkrt|ddd}	n|tj	}	|	t
||j|| }||jfS )	NzType mismatch z != z in DequantizeLinear.r   z=x_zero_point is not null but should be zero for float8 types.T)uz)fnr!   )r   r   r   r   r   r   
ValueErrorZastypenpZfloat32r   shapeZuint8minmaxr   r   r   )r   r   r   r   r   r    Zx_typeZfp8_typeZ	zero_typeZdxZu_x_zero_pointZumiZumayr   r   r   _run*   sL    

   




z_CommonDequantizeLinear._run)NNN)__name__
__module____qualname__r   r)   r   r   r   r   r      s
      r   c                      s   e Zd Zd fdd	Z  ZS )DequantizeLinear_19Nc                   s(   t |jdkrtdt ||||S )N   z%Input 2 must be a vector or a number.)lenr%   r#   superr)   )r   r   r   r   r   	__class__r   r   r)   [   s    zDequantizeLinear_19._run)NNr*   r+   r,   r)   __classcell__r   r   r1   r   r-   Z   s   r-   c                      s$   e Zd Zddd fdd
Z  ZS )DequantizeLinear_21Nr   r    c                  s   t  j|||dS )Nr6   )r0   r)   )r   r   r    argsr1   r   r   r)   b   s    zDequantizeLinear_21._runr3   r   r   r1   r   r5   a   s   r5   )
__future__r   Znumpyr$   Zonnxr   Zonnx._custom_element_typesr   r   r   r   r   r	   Zonnx.helperr
   Zonnx.numpy_helperr   r   Zonnx.reference.op_runr   Z%onnx.reference.ops.op_quantize_linearr   r   r-   r5   r   r   r   r   <module>   s    C