
    Ph                        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       ~C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\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                  t     e Zd Z 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                    t        i       }| j                         D ]  \  }}|j                  |        t        |      S r*   )setget_supported_operatorsaddlist)cls
op_configsspec_s       r&   "get_supported_quantization_configsz5EmbeddingQuantizer.get_supported_quantization_configs.   s9    .1"g
224GD!NN4  5Jr'   c                H    | j                         D ]  \  }}||k(  s|c S  g S r*   )r1   )r4   r#   r   r$   s       r&   .get_supported_operator_for_quantization_configzAEmbeddingQuantizer.get_supported_operator_for_quantization_config5   s2     668KFC ,,
 9 	r'   c                <    | j                  |j                         |S )z!just handling global spec for now)_annotate_embedding_opsgraphr-   models     r&   annotatezEmbeddingQuantizer.annotateC   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_opsH   s    +I+KKKD ?*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   )r4   s    r&   r1   z*EmbeddingQuantizer.get_supported_operators^   s    .011r'   )returnzList[QuantizationConfig])r#   r   rT   zList[OperatorPatternType])r?   torch.fx.GraphModulerT   rU   )r=   ztorch.fx.GraphrT   None)r?   rU   rT   rV   )rT   zList[OperatorConfig])__name__
__module____qualname__r,   classmethodr8   r:   r@   r<   rR   r1   __classcell__)r.   s   @r&   r   r   *   sc         "4	" 
& 2 2r'   )rT   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   rQ   r'   r&   <module>rd      sN    "      C 
  %9 62 62r'   