
    i,              	           S SK r S SKJrJr  S SKrS SKJrJrJr  S SK	J
r
  \ " S S\5      5       r " S S5      r  SS	\S
\S\S\4S jjr\SS4S jr SS jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrg)    N)IntEnumunique)FakeQuantizeMinMaxObserverPerChannelMinMaxObserver)QuantizationSpecc                   (    \ rS rSrSrSrSrSrSrSr	g)		Precision   r                N)
__name__
__module____qualname____firstlineno__A16W16A16W8A16W4A8W8A8W4__static_attributes__r       m/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/backends/mediatek/quantizer/qconfig.pyr
   r
      s    FEEDDr   r
   c                   F    \ rS rSrS\S\4S jr\S 5       r\S 5       rSr	g)	QuantizationConfig   activation_specweight_specc                     Xl         X l        g N_activation_spec_weight_spec)selfr    r!   s      r   __init__QuantizationConfig.__init__    s     !0'r   c                 B    [         R                  " U R                  5      $ r#   )copydeepcopyr%   r'   s    r   
activationQuantizationConfig.activation&   s    }}T2233r   c                 B    [         R                  " U R                  5      $ r#   )r+   r,   r&   r-   s    r   weightQuantizationConfig.weight*   s    }}T..//r   r$   N)
r   r   r   r   r   r(   propertyr.   r1   r   r   r   r   r   r      s?    (/(>N( 4 4 0 0r   r   	precisionis_per_channelis_qatreturnc           
         [         R                  [        [         R                  [        [         R
                  [        [         R                  [        [         R                  [        0nX;  a  [        S5      eX0   nU" X5      $ )NzUnrecognized precision setting.)r
   r   get_a16w16_quant_configr   get_a16w8_quant_configr   get_a16w4_quant_configr   get_a8w8_quant_configr   get_a8w4_quant_configRuntimeError)r4   r5   r6   precision_mappings
qconfig_fns        r   get_quant_configrA   /   sg     	1//-- *<==#.Jn--r   c                 N   Uc   [         R                  " U 5      R                  nUc   [         R                  " U 5      R                  nU(       a  [         R                  O[         R
                  nU(       a  [        R                  " USS9nOUR                  SS9n[        U UUUUS9$ )Nư>observerepsrF   )dtype	quant_min	quant_maxqschemeobserver_or_fake_quant_ctr)	torchiinfomaxminper_tensor_symmetricper_tensor_affiner   	with_argsr   )rH   is_symmetricr6   observer_clsrI   rJ   rK   observer_or_fake_quants           r   _get_activation_qspecrW   C   s     KK&**	KK&**	,8e((e>U>UG!-!7!7SW!X!-!7!7D!7!A#9 r   c           	         U(       d  [        XU[        S9$ Uc   [        R                  " U 5      R                  nUc   [        R                  " U 5      R
                  nU(       a  [        R                  O[        R                  nU(       a  [        R                  " [        SS9nO[        R                  " SS9n[        U UUUSUS9$ )N)rU   rC   rD   rG   r   )rH   rI   rJ   rK   ch_axisrL   )rW   r   rM   rN   rO   rP   per_channel_symmetricper_channel_affiner   rS   r   r   )rH   rT   r5   r6   rI   rJ   rK   rV   s           r   _get_weight_qspecr\   `   s     $n
 	
 KK&**	KK&**	-9e))u?W?WG!-!7!7-4"
 ":!C!C!M#9 r   c                     [        [        R                  SU5      n[        [        R                  SX5      n[	        X#5      nU$ NT)rW   rM   int16r\   r   r5   r6   act_quantization_specwgt_quantization_specquantization_configs        r   r9   r9      s>    1%++tVL-ekk4X, r   c                     [        [        R                  SU5      n[        [        R                  SX5      n[        X#5      nU$ r^   rW   rM   r_   r\   int8r   r`   s        r   r:   r:      s>    1%++tVL-ejj$W, r   c           	          [        [        R                  SU5      n[        [        R                  SXSSS9n[        X#5      nU$ )NTF   rI   rJ   re   r`   s        r   r;   r;      sG    1%++tVL-

E>R1 - r   c                     [        [        R                  SU5      n[        [        R                  SX5      n[	        X#5      nU$ )NFrW   rM   rf   r\   r   r`   s        r   r<   r<      s>    1%**eVL-ejj%X, r   c           	          [        [        R                  SU5      n[        [        R                  SXSSS9n[	        X#5      nU$ )NFrh   ri   rj   rl   r`   s        r   r=   r=      sG    1%**eVL-

E>R1 - r   )FF)NN)r+   enumr   r   rM   torchao.quantization.pt2er   r   r   #torchao.quantization.pt2e.quantizerr   r
   r   boolrA   rW   r\   r9   r:   r;   r<   r=   r   r   r   <module>rr      s        
 A   0 0& !... . 	.0  < LP@7I 6H 6H 5G 5G r   