
    bIg                    h    d dl mZ d dlZdZdZd ZdZ	 	 	 	 	 	 d	dZ	 	 	 	 	 	 	 	 d
dZ		 	 	 	 	 	 ddZ
y)    )annotationsNi      c                R   |rt         j                  nt         j                  }|rt        nt        }|rt
        nt        }t        | t         j                        st        j                  |       } t        j                  | ||      }t        j                  |      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cliprintastype)xsigneddtypeclip_low	clip_highclippeds         I/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/subbyte.pyfloat32_to_4bit_unpackedr      sn     BGG288E!xyH"	Ia$JJqMgga9-G777""5))    c                H    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   )val_lowval_highr   i8_highi8_lows        r   float32x2_to_4bitx2r#   $   s/     'x8G%gv6Fa<&4-''r   c                4   d }	 t        | t        j                        st        j                  |       } | dz  }| dz	  }|r ||      n|}|r ||      n|}|rt        j                  nt        j
                  }|j                  |      |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    bhhQ1}aT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M a$JJqMHE!VF$*M% E&,]6"&FBGG288ELLu!566r   )r   np.ndarray | np.dtype | floatr   boolreturn
np.ndarray)r   np.dtyper    r2   r   r/   r0   r1   )r   r.   r   r/   r0   ztuple[np.ndarray, np.ndarray])
__future__r   numpyr   r
   r   r   r   r   r#   r-    r   r   <module>r6      s    # 		*$*.2**,((!)(37(($7$7.27"7r   