
    jt                     Z    d dl Z d dlmZ d dlmZ d dlmZ d dlm	Z	  G d de          Z
dS )    N)Optional)Module)QuantizedEmbeddingc            	       x     e Zd ZdZdedef fdZd Zd Zd Z	 	 	 	 dde	e         de	e         de
defdZ xZS )	Embeddingav  Implements a simple lookup table that maps each input integer to a
    high-dimensional vector.

    Typically used to embed discrete tokens for processing by neural networks.

    Args:
        num_embeddings (int): How many possible discrete tokens can we embed.
           Usually called the vocabulary size.
        dims (int): The dimensionality of the embeddings.
    num_embeddingsdimsc                     t                                                       t          j        d|z            }t          j                            ||f|          | _        d S )N   )shapescale)super__init__mathsqrtmxrandomnormalweight)selfr   r	   r   	__class__s       a/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/mlx/nn/layers/embedding.pyr   zEmbedding.__init__   sQ    	!d(##i&&nd-C5&QQ    c                 P    | j         j        d          d| j         j        d          S )Nr   z, r   )r   r   )r   s    r   _extra_reprzEmbedding._extra_repr   s*    +#A&@@$+*;A*>@@@r   c                     | j         |         S )N)r   r   xs     r   __call__zEmbedding.__call__   s    {1~r   c                      || j         j        z  S )z
        Call the embedding layer as a linear layer.

        Use this for example when input embedding and output projection
        weights are tied.
        )r   Tr   s     r   	as_linearzEmbedding.as_linear"   s     4;=  r   NaffineF
group_sizebitsmodequantize_inputc                 R    |rt          d          t          j        | |||          S )zPReturn a :obj:`QuantizedEmbedding` layer that approximates this embedding layer.z!Quantized input is not supported.)
ValueErrorr   from_embedding)r   r$   r%   r&   r'   s        r   to_quantizedzEmbedding.to_quantized+   s3      	B@AAA!0z4NNNr   )NNr#   F)__name__
__module____qualname____doc__intr   r   r   r"   r   strboolr+   __classcell__)r   s   @r   r   r      s        	 	Rs R# R R R R R R
A A A  ! ! ! %)"$
O 
OSM
O sm
O 	
O
 
O 
O 
O 
O 
O 
O 
O 
Or   r   )r   typingr   mlx.corecorer   mlx.nn.layers.baser   mlx.nn.layers.quantizedr   r    r   r   <module>r:      s                 % % % % % % 6 6 6 6 6 6*O *O *O *O *O *O *O *O *O *Or   