
    Vh                        d dl mZ d dlZd dlZd dlmc mZ d dlm	Z	 d dl
mZmZmZ d dlmZmZmZ ddgZd
dZ G d	 de      Zy)    )annotationsN)PerChannelMinMaxObserver)QuantizationAnnotationQuantizationSpec	Quantizer)OperatorConfigOperatorPatternTypeQuantizationConfigget_embedding_operators_configEmbeddingQuantizerc                 X   t        t        j                  t        j                  dt	        j
                  d            } t        d d | d       }t        j                  j                  gg}|j                  t        j                  g       t        ||      }t        j                  |      S )Nr   g      0?)eps)dtypeqschemech_axisobserver_or_fake_quant_ctr)config	operators)r   torchuint8 per_channel_affine_float_qparamsr   	with_argsr
   nn	EmbeddingappendF	embeddingr   copydeepcopy)weight_quantization_specquantization_configopssupported_config_and_operatorss       c/home/dcms/DCMS/lib/python3.12/site-packages/torch/ao/quantization/quantizer/embedding_quantizer.pyr   r      s    /kk66#;#E#E&#Q	  -T49QSWX',xx'9'9&:%;CJJ}%3"c&" ==788    c                  v     e Zd Zd fdZed	d       Ze	 	 	 	 d
d       ZddZddZddZ	edd       Z
 xZS )r   c                "    t         |           y N)super__init__)self	__class__s    r$   r*   zEmbeddingQuantizer.__init__,   s    r%   c                h    | j                         D ch c]  \  }}|	 }}}t        |      S c c}}w r(   )get_supported_operatorslist)clsspec_
op_configss       r$   "get_supported_quantization_configsz5EmbeddingQuantizer.get_supported_quantization_configs/   s=     !$ ; ; =/
T1D/

 /
 J/
s   .c                H    | j                         D ]  \  }}||k(  s|c S  g S r(   )r.   )r0   r!   r   r"   s       r$   .get_supported_operator_for_quantization_configzAEmbeddingQuantizer.get_supported_operator_for_quantization_config6   s7     668 	KFC ,,
	 	r%   c                <    | j                  |j                         |S )z!just handling global spec for now)_annotate_embedding_opsgraphr+   models     r$   annotatezEmbeddingQuantizer.annotateD   s    $$U[[1r%   c                   t               }|j                  D ]  }|j                  dk(  s|j                  t        j
                  j                  j                  j                  k(  sO|j                  j                  t        d      t        |j                  d   |j                  j                  i      |j                  d<    y )Ncall_functionz<Embedding config must have a valid weight quantization spec.r   )input_qspec_mapquantization_annotation)r   nodesoptargetr   r"   atenr   defaultr   weight
ValueErrorr   argsmeta)r+   r9   embedding_confignodes       r$   r8   z*EmbeddingQuantizer._annotate_embedding_opsI   s    +I+KKK 	D ?*KK599>>#;#;#C#CC#**119$V  8N		!&6&=&=&D&D%8		34	r%   c                     y r(    r:   s     r$   validatezEmbeddingQuantizer.validate\   s    r%   c                    t               gS r(   )r   )r0   s    r$   r.   z*EmbeddingQuantizer.get_supported_operators_   s    .011r%   )returnNone)rP   zlist[QuantizationConfig])r!   r
   rP   zlist[OperatorPatternType])r;   torch.fx.GraphModulerP   rR   )r9   ztorch.fx.GraphrP   rQ   )r;   rR   rP   rQ   )rP   zlist[OperatorConfig])__name__
__module____qualname__r*   classmethodr4   r6   r<   r8   rN   r.   __classcell__)r,   s   @r$   r   r   +   sc         "4	" 
& 2 2r%   )rP   r   )
__future__r   r   r   torch.nn.functionalr   
functionalr   torch.ao.quantization.observerr   )torch.ao.quantization.quantizer.quantizerr   r   r   7torch.ao.quantization.quantizer.xnnpack_quantizer_utilsr   r	   r
   __all__r   r   rM   r%   r$   <module>r_      sK    "     C 
  %9 62 62r%   