
    sg                        d dl mZ d dlZd dlmZm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)ListSet)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       f/var/www/html/venv/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_configs0   s=     !$ ; ; =/
T1D/

 /
 J/
s   .c                H    | j                         D ]  \  }}||k(  s|c S  g S r*   )r0   )r2   r#   r   r$   s       r&   .get_supported_operator_for_quantization_configzAEmbeddingQuantizer.get_supported_operator_for_quantization_config7   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.annotateE   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-   r;   embedding_confignodes       r&   r:   z*EmbeddingQuantizer._annotate_embedding_opsJ   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   )r2   s    r&   r0   z*EmbeddingQuantizer.get_supported_operators`   s    .011r'   )returnNone)rR   zList[QuantizationConfig])r#   r   rR   zList[OperatorPatternType])r=   torch.fx.GraphModulerR   rT   )r;   ztorch.fx.GraphrR   rS   )r=   rT   rR   rS   )rR   zList[OperatorConfig])__name__
__module____qualname__r,   classmethodr6   r8   r>   r:   rP   r0   __classcell__)r.   s   @r&   r   r   ,   sc         "4	" 
& 2 2r'   )rR   r
   )
__future__r   r    typingr   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   rO   r'   r&   <module>rb      sN    "      C 
  %9 62 62r'   