
    hM                        S SK Jr  S SKrS SKrS SKJs  Jr  S SKJ	r	  S SK
JrJrJrJrJrJr  S SKJr  SS/rS
S jr " S	 S\5      rg)    )annotationsN)PerChannelMinMaxObserver)OperatorConfigOperatorPatternTypeQuantizationAnnotationQuantizationConfigQuantizationSpec	Quantizer)Q_ANNOTATION_KEYget_embedding_operators_configEmbeddingQuantizerc            	     H   [        [        R                  [        R                  S[        R
                  " SS9S9n [        S S U S 5      n[        R                  R                  //nUR                  [        R                  /5        [        XS9n[        R                  " U5      $ )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       q/home/james-whalen/.local/lib/python3.13/site-packages/torchao/quantization/pt2e/quantizer/embedding_quantizer.pyr   r       s    /kk66#;#E#E&#Q	  -T49QSWX',xx'9'9&:%;CJJ}%3"&" ==788    c                     ^  \ rS rSrS
U 4S jjr\SS j5       r\    SS j5       rSS jrSS jr	SS jr
\SS j5       rS	rU =r$ )r   0   c                "   > [         TU ]  5         g N)super__init__)self	__class__s    r%   r,   EmbeddingQuantizer.__init__1   s    r&   c                l    U R                  5        VVs1 s H  u  pUiM	     nnn[        U5      $ s  snnf r*   )get_supported_operatorslist)clsspec_
op_configss       r%   "get_supported_quantization_configs5EmbeddingQuantizer.get_supported_quantization_configs4   s>     !$ ; ; =/
 =WTD = 	 /
 J/
s   0c                J    U R                  5        H  u  p#X!:X  d  M  Us  $    / $ r*   )r1   )r3   r"   r   r#   s       r%   .get_supported_operator_for_quantization_configAEmbeddingQuantizer.get_supported_operator_for_quantization_config;   s-     668KF ,
 9 	r&   c                <    U R                  UR                  5        U$ )z!just handling global spec for now)_annotate_embedding_opsgraphr-   models     r%   annotateEmbeddingQuantizer.annotateI   s    $$U[[1r&   c                   [        5       nUR                   H  nUR                  S:X  d  M  UR                  [        R
                  R                  R                  R                  :X  d  MS  UR                  R                  c  [        S5      e[        UR                  S   UR                  R                  0S9UR                  [        '   M     g )Ncall_functionz<Embedding config must have a valid weight quantization spec.r   )input_qspec_map)r   nodesoptargetr   r#   atenr   defaultr   weight
ValueErrorr   argsmetar   )r-   r>   embedding_confignodes       r%   r=   *EmbeddingQuantizer._annotate_embedding_opsN   s    +I+KKKD ?*KK599>>#;#;#C#CC#**119$V  /E		!&6&=&=&D&D%/		*+  r&   c                    g r*    r?   s     r%   validateEmbeddingQuantizer.validatea   s    r&   c                    [        5       /$ r*   )r   )r3   s    r%   r1   *EmbeddingQuantizer.get_supported_operatorsd   s    .011r&   rS   )returnNone)rX   zlist[QuantizationConfig])r"   r   rX   zlist[OperatorPatternType])r@   torch.fx.GraphModulerX   rZ   )r>   ztorch.fx.GraphrX   rY   )r@   rZ   rX   rY   )rX   zlist[OperatorConfig])__name__
__module____qualname____firstlineno__r,   classmethodr7   r:   rA   r=   rT   r1   __static_attributes____classcell__)r.   s   @r%   r   r   0   sc         "4	" 
& 2 2r&   )rX   r   )
__future__r   r   r   torch.nn.functionalr   
functionalr   "torchao.quantization.pt2e.observerr   #torchao.quantization.pt2e.quantizerr   r   r   r   r	   r
   -torchao.quantization.pt2e.quantizer.quantizerr   __all__r   r   rS   r&   r%   <module>ri      sI    #     G  K %9 62 62r&   