
    
Ng                         d dl mZ d dlmZ d dlZd dlmZmZ d dl	m
Z
mZmZmZ d dlmZmZmZmZmZmZ d dlmZ 	 	 dddZ G d de          Z G d de          Z G d de          Z G d de          ZdS )    )annotations)ClassVarN)TensorProtosubbyte)float32_to_float8e4m3float32_to_float8e5m2np_dtype_to_tensor_dtypetensor_dtype_to_np_dtype)float8e4m3fnfloat8e4m3fnuz
float8e5m2float8e5m2fnuzint4uint4)OpRunvalue
np.ndarrayshapetuple[int, ...]axis
int | None
block_sizereturnc           
        t          | j                  dk    r| S t          | j                  dk    r| j        dk    r| d         S |st          | j                  dk    sJ dgt          |          z  }	 | j        ||<   |                     t	          |                    S # t
          $ r$}t          d| d| j         d| d          |d}~ww xY w|dk    rt          d          t          j        | ||	          } ||         | j        |         k    r+| 	                    t          d||                   |
          } | j        |k    rt          d          t          j        || j                  |k    sJ | S )a  Reshape/Replicate scale/zero-point to be broadcastable to shape.

    Args:
        value: the array to be reshaped/replicated
        shape: the rarget shape
        axis: quantization axis, applicable for per-axis and blocked quantization
        block_size: size of quantization block, applicable only for blocked quantization

    Returns:
        value array after reshape/replicate according to quantization mode.
    r      zaxis is out of boundary, axis=z, value.shape=z, shape=.Nz&block_size must be a positive integer.)repeatsr   )indicesr   zInvalid shapes for Blocked Quantization. Input 2 shape should identical to Input 1 shape, except for one dimension, in which blocking is performed)lenr   sizereshapetuple
IndexError
ValueErrornprepeattakerangebroadcast_shapes)r   r   r   r   dimses         a/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/reference/ops/op_quantize_linear.pyreshape_inputr-      s   " 5;1
5;!
aQx 
5;1$$$$sSZZ	DJ==t--- 	 	 	= = =${= =49= = =  	 QABBB IeZd;;;Edu{4(((

5E$K#8#8t
DD{e a
 
 	
 uek22e;;;;Ls   6+B" "
C,CCc            
      .   e Zd ZU  ej        e          Z ej        e          Zej        dej	        dej
        dej        diZded<   ej        ej	        ej
        ej        ej        ej        ej        ej        ej        ej        f
ZddZ	 	 	 	 	 dddZdS )_CommonQuantizeLinear)r      )i   )r   i  )i i  z0ClassVar[dict[TensorProto.DataType, tuple[int]]]quant_integer_ranges
zero_pointr   r   intc                   d }|j         t          k    r*|j         j        d         d         dk    rt          j        }n1|j         t
          k    r)|j         j        d         d         dk    rt          j        }n|j         t          k    r)|j         j        d         d         dk    rt          j        }n|j         t          k    r)|j         j        d         d         dk    rt          j
        }n|j         t          k    r)|j         j        d         d         dk    rt          j        }nM|j         t          k    r)|j         j        d         d         dk    rt          j        }nt          |j                   }|S )Nr   e4m3fne4m3fnuze5m2e5m2fnuzr   r   )dtyper   descrr   FLOAT8E4M3FNr   FLOAT8E4M3FNUZr   
FLOAT8E5M2r   FLOAT8E5M2FNUZr   UINT4r   INT4r	   )selfr3   zero_point_types      r,   get_zero_point_typez)_CommonQuantizeLinear.get_zero_point_typef   sM   ,, &q)!,88)6OO.. &q)!,
::)8OO++
0@0Fq0I!0LPV0V0V)4OO.. &q)!,
::)8OO&&:+;+A!+DQ+G7+R+R)/OO%%**:*@*CA*F&*P*P).OO6z7GHHO    Nr   Txy_scalenp.ndarray | Noner   saturateboolr   r   output_dtypenp.dtype | Nonetuple[np.ndarray]c                   t          ||j        ||          }||4|                     |          }|r||k    rt          d| d|           |pt          j        t          j        vrt          d d          |t          ||j        ||          nd}||z  }t          j        v rt          j
        |                              t          j                  }	|	|z  }	t                    }
t          j                 }t          j        |	|d         |d                                       |
          fS t          j        k    r7t                              ||          }|                    t"                    fS t          j        k    r8t                              |d|	          }|                    t&                    fS t          j        k    r7t                              ||          }|                    t,                    fS t          j        k    r9t                              |dd|
          }|                    t0                    fS t          j        t          j        fv r]t          j
        |                              t          j                  }	|	|z  }	fd}t          j        |          } ||	          }|fS t          d d          )Nz+Mismatched output data-types: output_dtype=z, zero_point type=zUnexpected type: output_dtype=z# is not a supported quantized type.r   r   )rI   T)uzrI   )fnrO   rI   c                L    t          j        | t          j        k              S )N)signed)r   float32_to_4bit_unpackedr   rA   )rF   tensor_types    r,   <lambda>z,_CommonQuantizeLinear._run.<locals>.<lambda>   s&    G$D;+*::% % % rE   )r-   r   rD   r$   r   UINT8r/   quant_typesr2   r%   rintastypeint32r
   clipr<   r   r   r=   r   r>   r   r   r?   r   r@   rA   	vectorize)rB   rF   rG   r3   r   rI   r   rK   rC   xir:   quant_rangef8single_funcfunci4rT   s                   @r,   _runz_CommonQuantizeLinear._run   s     $
CC #!"66zBBO  ? ? s,ssbqss   *K!6[%63???aaaa   % *agtZ@@@ 	
 K/DDD""28,,B*B,[99E/D[QKGBAA??FFuMMOO+222&<<Q<RRBIIl++--+444&<<dX =  B IIn--//+000&<<Q<RRBIIj))+++444&<<dth =  B IIn--//;,k.>???""28,,B*B   K <,,DbB5L][]]]
 
 	
rE   )r3   r   r   r4   )Nr   TNN)rF   r   rG   r   r3   rH   r   r4   rI   rJ   r   r   rK   rL   r   rM   )__name__
__module____qualname__r%   r\   r   r   r   rV   INT8UINT16INT16r2   __annotations__r@   rA   r<   r=   r>   r?   rW   rD   rc    rE   r,   r/   r/   P   s        (BL)>??(BL)>??8+J?	N     	 ""K   > )-!%(,K
 K
 K
 K
 K
 K
 K
rE   r/   c                        e Zd Zd fd	Z xZS )QuantizeLinear_10Nc                    t          |j                  dk    rt          d          t                                          ||||          S )Nr   %Input 2 must be a vector or a number.)r   r   r   r$   superrc   )rB   rF   rG   r3   r   	__class__s        r,   rc   zQuantizeLinear_10._run   sE    w}!!DEEEww||Aw
|>>>rE   NNrd   re   rf   rc   __classcell__rr   s   @r,   rm   rm      s=        ? ? ? ? ? ? ? ? ? ?rE   rm   c                        e Zd Zd fd	Z xZS )QuantizeLinear_19Nc                    t          |j                  dk    rt          d          t                                          |||||          S )Nr   ro   )r   rI   rp   )rB   rF   rG   r3   r   rI   rr   s         r,   rc   zQuantizeLinear_19._run   sG    w}!!DEEEww||Aw
|QQQrE   )NNNrt   rv   s   @r,   rx   rx      sG        R R R R R R R R R RrE   rx   c                  *     e Zd Zddddd fd
Z xZS )QuantizeLinear_21Nr   rI   r   rK   c               <     t                      j        |||||dS )Nr|   )rq   rc   )rB   r   rI   r   rK   argsrr   s         r,   rc   zQuantizeLinear_21._run   s%    uww|TxJeqrrrrrE   rt   rv   s   @r,   r{   r{      sW        #dtRV s s s s s s s s s s srE   r{   rs   )
r   r   r   r   r   r   r   r   r   r   )
__future__r   typingr   numpyr%   onnxr   r   onnx.helperr   r   r	   r
   #onnx.reference.custom_element_typesr   r   r   r   r   r   onnx.reference.op_runr   r-   r/   rm   rx   r{   rk   rE   r,   <module>r      s   # " " " " "           % % % % % % % %                           ( ' ' ' ' ' !	/ / / / /d|
 |
 |
 |
 |
E |
 |
 |
~? ? ? ? ?- ? ? ?R R R R R- R R Rs s s s s- s s s s srE   