
    VhA                         d dl mZmZ d dlmZ d dlmc mZ d dlm	Z	 ddl
mZ ddgZ G d dej                  e      Z G d	 dej                  e      Zy)
    )AnyOptionalN)Tensor   )ReferenceQuantizedModule	EmbeddingEmbeddingBagc                        e Zd ZdZ	 	 	 	 	 	 	 	 	 ddededee   dee   deded	ed
ee   dee	e
ef      ddf fdZd ZdedefdZed        Z xZS )r   aQ  A reference quantized Embedding module that fits into the
    FX Graph Mode Quantization workflow, activation will be floating point Tensor,
    we will store floating point weight as well in the module, but in forward we'll
    quantize and dequantize the weight before running the floating point functional
    embedding operator.
    Nnum_embeddingsembedding_dimpadding_idxmax_norm	norm_typescale_grad_by_freqsparse_weightweight_qparamsreturnc                 Z    t         |   |||||||||	|

       | j                  ||	       y Nsuper__init___init_weight_qparams)selfr   r   r   r   r   r   r   r   devicedtyper   	__class__s               ^/home/dcms/DCMS/lib/python3.12/site-packages/torch/ao/nn/quantized/reference/modules/sparse.pyr   zEmbedding.__init__   sB     		
 	!!.&9    c                      yNzQuantizedEmbedding(Reference) r   s    r   	_get_namezEmbedding._get_name2       .r    inputc           	          | j                         }t        j                  ||| j                  | j                  | j
                  | j                  | j                        S r   )
get_weightF	embeddingr   r   r   r   r   )r   r'   weight_quant_dequants      r   forwardzEmbedding.forward5   sM    #0{{ MMNN##KK
 	
r    c                     | |j                   |j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  j                  |j                  j                  |      S r   )
r   r   r   r   r   r   r   weightr   r   )clsmodr   s      r   
from_floatzEmbedding.from_floatA   sj    OOLLMM""JJJJJJJJ
 	
r    )	NN       @FFNNNN)__name__
__module____qualname____doc__intr   floatboolr   dictstrr   r   r%   r-   classmethodr2   __classcell__r   s   @r   r   r      s     &*$(#($(37:: : c]	:
 5/: : !: : &!: !c3h0: 
:8/

V 

 

 
 
r    c                        e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 ddededee   dededed	ed
ee	   dedee   dee
eef      ddf fdZd Z	 	 dde	dee	   dee	   de	fdZedd       Z xZS )r	   aT  A reference quantized EmbeddingBag module that fits into the
    FX Graph Mode Quantization workflow, activation will be floating point Tensor,
    we will store floating point weight as well in the module, but in forward we'll
    quantize and dequantize the weight before running the floating point functional
    embedding operator.
    Nr   r   r   r   r   moder   r   include_last_offsetr   r   r   c                 ^    t         |   |||||||||	|
||       | j                  ||       y r   r   )r   r   r   r   r   r   rA   r   r   rB   r   r   r   r   r   s                 r   r   zEmbeddingBag.__init__Z   sH      		
 	!!.&9r    c                      yr"   r#   r$   s    r   r%   zEmbeddingBag._get_namez   r&   r    r'   offsetsper_sample_weightsc                     | j                         }t        j                  |||| j                  | j                  | j
                  | j                  | j                  || j                  | j                        S r   )
r)   r*   embedding_bagr   r   r   rA   r   rB   r   )r   r'   rE   rF   r,   s        r   r-   zEmbeddingBag.forward}   se      $0 MMNN##IIKK$$
 	
r    c                 B    | |j                   |j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  j                  |j                  j                  |      S r   )r   r   r   r   r   rA   r   r/   rB   r   r   r   )r0   r1   r   use_precomputed_fake_quants       r   r2   zEmbeddingBag.from_float   sz    LLMM""HHJJJJ##OOJJJJ
 	
r    )Nr3   FmeanFNFNNNN)NN)F)r4   r5   r6   r7   r8   r   r9   r:   r<   r   r;   r   r   r%   r-   r=   r2   r>   r?   s   @r   r	   r	   R   s    %)#($($)%)37:: : 5/	:
 : !: : : &!: ": c]: !c3h0: 
:@/ %)/3	

 &!
 %V,	

 

* 
 
r    )typingr   r   torch.nnnntorch.nn.functional
functionalr*   torchr   utilsr   __all__r   r	   r#   r    r   <module>rT      sN          + 
'A
6 A
HP
2??$< P
r    