
    NjR                    <   d dl mZ d dlZd dlmZ d dlZ ej                  e      Z	 G d de
e      Zej                  ej                  ej                  ej                  ej                   ej"                  ej$                  ej&                  iZddZ	 	 	 	 	 	 	 	 d	dZy)
    )annotationsN)Enumc                      e Zd ZdZdZdZdZy)DTypefloat16float32float64int8N)__name__
__module____qualname__Float16Float32Float64Int8     g/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/model2vec/quantization.pyr   r      s    GGGDr   r   c                `   t         |   }| j                  |k(  r| S |t        j                  t        j                  t        j
                  hv r| j                  |      S |t        j                  k(  rt        j                  t        j                  |             dz  }| j                  t        j                  d      }t        j                  |||       t        j                  ||       t        j                  |dd|       |j                  t        j                        }|S t!        d      )a+  Quantize embeddings to a specified data type to reduce memory usage.

    :param embeddings: The embeddings to quantize, as a numpy array.
    :param quantize_to: The data type to quantize to.
    :return: The quantized embeddings.
    :raises ValueError: If the quantization type is not valid.
    g     _@T)copy)outi   z!Not a valid enum member of DType.)	dtype_mapdtyper   r   r   r   astyper   npmaxabsr   dividerintclipr
   
ValueError)
embeddingsquantize_tomapped_dtypescalebuf	quantizeds         r   quantize_embeddingsr)      s     [)L<' u}}emmU]]CC  ..	

	" rvvj)*U2 

6
		#u#&

T3C(JJrww'	<==r   c                    |t        |      }t        | |      } |;|| j                  d   kD  rt        d| d| j                  d          | ddd|f   } | S )a  Quantize embeddings to a datatype and reduce dimensionality.

    :param embeddings: The embeddings to quantize and reduce, as a numpy array.
    :param quantize_to: The data type to quantize to. If None, no quantization is performed.
    :param dimensionality: The number of dimensions to keep. If None, no dimensionality reduction is performed.
    :return: The quantized and reduced embeddings.
    :raises ValueError: If the passed dimensionality is not None and greater than the model dimensionality.
    N   zDimensionality z* is greater than the model dimensionality )r   r)   shaper"   )r#   r$   dimensionalitys      r   quantize_and_reduce_dimr.   =   s     K(([A
!J,,Q//!.!11[\f\l\lmn\o[pq   ?N? 23
r   )r#   
np.ndarrayr$   r   returnr/   )r#   r/   r$   zstr | DType | Noner-   z
int | Noner0   r/   )
__future__r   loggingenumr   numpyr   	getLoggerr   loggerstrr   r   r   r   r   r   r	   r   r
   r   r)   r.   r   r   r   <module>r8      s    "   			8	$C  
MM2::	MM2::	MM2::	JJ		 >F);MWr   