
    
Ng                        d dl mZmZ d dlZdZdZd ZdZdeej	        ej
        ef         dedej	        fd	Zd
ej
        dej
        dedej	        fdZdeej	        ej
        ef         dedeej	        ej	        f         fdZdS )    )TupleUnionNi      xsignedreturnc                 H   |rt           j        nt           j        }|rt          nt          }|rt
          nt          }t          | t           j                  st          j	        |           } t          j
        t          j        | ||                                        |          S )a  Cast to 4bit via rounding and clipping (without packing).

    Args:
        x: element to be converted
        signed: boolean, whether to convert to signed int4.

    Returns:
        An ndarray with a single int4 element (sign-extended to int8/uint8)
    )npint8uint8INT4_MIN	UINT4_MININT4_MAX	UINT4_MAX
isinstancendarrayasarrayrintclipastype)r   r   dtypeclip_low	clip_highs        H/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/subbyte.pyfloat32_to_4bit_unpackedr      s     +BGG28E!0xxyH"1	Ia$$ JqMM7271h	2233::5AAA    val_lowval_highc                 X    t          ||          }t          | |          }|dz  |dz  z  S )af  Cast two elements to 4bit (via rounding and clipping) and pack
    to a single byte
    Args:
        val_low: element to be packed in the 4 LSB
        val_high: element to be packed in the 4 MSB
        signed: boolean, whether to convert to signed int4.

    Returns:
        An ndarray with a single int8/uint8 element, containing both int4 elements
       r   )r   )r   r   r   i8_highi8_lows        r   float32x2_to_4bitx2r$   $   s5     'x88G%gv66Fa<&4-''r   c                 >   d }	 t          | t          j                  st          j        |           } | dz  }| dz	  }|r ||          n|}|r ||          n|}|rt          j        nt          j        }|                    |          |                    |          fS )Nc                 B    t          j        | dz	  dk    | | dz            S )N   r      )r   where)r   s    r   <lambda>z&unpack_single_4bitx2.<locals>.<lambda>9   s     bhQ1}aTBB r   r   r!   )r   r   r   r   r   r   r   )r   r   unpack_signedx_lowx_highr   s         r   unpack_single_4bitx2r.   6   s     CBM a$$ JqMMHE!VF$*5MM%   E&,8]]6"""&F+BGG28ELLu!5!566r   )typingr   r   numpyr   r   r   r   r   r   r   floatboolr   r$   r.    r   r   <module>r4      s  
             		BRZ5()B37BZB B B B*(X(!#(37(Z( ( ( ($7RZ5()7377
2:rz!"7 7 7 7 7 7r   