o
    wi                     @  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mZ d dlmZmZ d dlmZ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G dd deZdS )    )annotationsN)TensorProto)
float4e2m1float8e4m3fnfloat8e4m3fnuz
float8e5m2float8e5m2fnuzint4uint4)np_dtype_to_tensor_dtypetensor_dtype_to_np_dtype)float8e4m3_to_float32float8e5m2_to_float32unpacked_float4e2m1_to_float32)OpRun)reshape_inputc                   @  s*   e Zd ZdddZ				ddddZdS )_CommonDequantizeLinearx
np.ndarrayreturnintc                 C  s*  d }|j tkr|j jd d dkrtj}|S |j tkr*|j jd d dkr*tj}|S |j tkr>|j jd d dkr>tj}|S |j t	krR|j jd d dkrRtj
}|S |j tkrf|j jd d dkrftj}|S |j tkrz|j jd d dkrztj}|S |j tkr|j jd d dkrtj}|S t|j }|S )	Nr   e4m3fne4m3fnuze5m2e5m2fnuzr
   r	   r   )dtyper   descrr   FLOAT8E4M3FNr   FLOAT8E4M3FNUZr   
FLOAT8E5M2r   FLOAT8E5M2FNUZr
   UINT4r	   INT4r   
FLOAT4E2M1r   )selfr   tensor_dtype r&   d/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/reference/ops/op_dequantize_linear.py
get_x_type   s0   	
z"_CommonDequantizeLinear.get_x_typeNx_scalex_zero_pointnp.ndarray | Noneaxis
int | None
block_sizeoutput_dtypec                 C  sp  |  |}|tjtjtjtjhv }|d ur?|s?|tjkr?|  |}	||	kr0td| d|	 d|t	j
t||j|| }
n`|rb|d urb|t	j}| }| }||ks^|t	dkrbtd|tjkrlt|}
n3|tjkrxt|dd}
n'|tjkrt|}
n|tjkrt|ddd}
n|tjkrt|}
n|t	j
}
|
t||j|| }||rt|fS |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)fnr0   )r(   r   r   r   r   r    r#   
ValueErrorastypenpfloat32r   shapeuint8minmaxr   r   r   r   r   )r$   r   r)   r*   r,   r.   r/   x_typefp8_type	zero_typedxu_x_zero_pointumiumayr&   r&   r'   _run1   s^   
	










z_CommonDequantizeLinear._run)r   r   r   r   )NNNN)r   r   r)   r   r*   r+   r,   r-   r.   r-   r/   r-   )__name__
__module____qualname__r(   rB   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.)lenr6   r2   superrB   )r$   r   r)   r*   r,   	__class__r&   r'   rB   o   s   zDequantizeLinear_19._run)NNrC   rD   rE   rB   __classcell__r&   r&   rJ   r'   rF   n   s    rF   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 )NrO   rI   rB   )r$   r,   r.   argsrJ   r&   r'   rB   v   s   zDequantizeLinear_21._runrL   r&   r&   rJ   r'   rN   u   s    rN   c                      s&   e Zd Zdddd fdd
Z  ZS )DequantizeLinear_23Nr,   r.   r/   c                  s   t  j||||dS )NrS   rP   )r$   r,   r.   r/   rQ   rJ   r&   r'   rB   |   s   zDequantizeLinear_23._runrL   r&   r&   rJ   r'   rR   {   s    rR   )
__future__r   numpyr4   onnxr   onnx._custom_element_typesr   r   r   r   r   r	   r
   onnx.helperr   r   onnx.numpy_helperr   r   r   onnx.reference.op_runr   %onnx.reference.ops.op_quantize_linearr   r   rF   rN   rR   r&   r&   r&   r'   <module>   s   $	R