
    i              	          S SK Jr  S SKJrJ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	S
9 " S S5      5       r  SS\S\S\S\4S jjr\SS4S jr SS jr SS\4S jjr " S S5      r " S S5      rg)    )	dataclass)IntEnumunique)CallableOptionalN)FakeQuantizeMinMaxObserverPerChannelMinMaxObserver)QuantizationSpecc                       \ rS rSrSrSrg)	Precision       N)__name__
__module____qualname____firstlineno__A8W8__static_attributes__r       l/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/backends/samsung/quantizer/qconfig.pyr   r      s    Dr   r   T)eqfrozenc                   \    \ rS rSr% \\   \S'   \\   \S'   \\   \S'   \\\-     \S'   Srg)QuantizationConfig   input_activationoutput_activationweightbiasr   N)	r   r   r   r   r   r   __annotations__r   r   r   r   r   r   r      s7    /00 011%&&
#h.
//r   r   	precisionis_per_channelis_qatreturnc                 h    [         R                  [        0nX;  a  [        S5      eUnX0   nU" XUS9$ )NzUnrecognized precision setting.)wei_symmetric)r   r   get_a8w8_enn_quant_configRuntimeError)r#   r$   r%   precision_mappingsis_weight_symm
qconfig_fns         r   get_quant_configr.   !   sD     	1 *<==#N#.JnNKKr   c                 P   SnUc   [         R                  " U 5      R                  nUc   [         R                  " U 5      R                  nU(       a  [         R                  O[         R
                  nU(       a  [        R                  " X6S9nOUR                  US9n[        U UUUUS9$ )N      0?observerepsr3   )dtype	quant_min	quant_maxqschemeobserver_or_fake_quant_ctr)	torchiinfomaxminper_tensor_symmetricper_tensor_affiner   	with_argsr   )	r5   is_symmetricr%   observer_clsr6   r7   	eps_valuer8   observer_or_fake_quants	            r   _get_activation_qspecrE   3   s     IKK&**	KK&**	,8e((e>U>UG!-!7!7!"
 ".!7!7I!7!F#9 r   c           	         U(       d  U(       a   S5       eSnUc   [         R                  " U 5      R                  nUc   [         R                  " U 5      R                  nU(       d.  U(       a  [         R                  O[         R
                  n[        nO-U(       a  [         R                  O[         R                  n[        nU(       a  [        R                  " XS9n	OUR                  US9n	[        U UUUSU	S9$ )Nz!Not support asymm+perchannel moder0   r1   r4   r   )r5   r6   r7   r8   ch_axisr9   )r:   r;   r<   r=   r>   r?   r	   per_channel_symmetricper_channel_affiner
   r   r@   r   )
r5   rA   r$   r%   r6   r7   rC   r8   rB   rD   s
             r   _get_weight_qspecrJ   R   s     ~R/RR-IKK&**	KK&**	*6E&&E<S<S 	 & ,8E''U=U=U 	 0!-!7!7!"
 ".!7!7I!7!F#9 r   c                     [        [        R                  X!5      n[        [        R                  X0U5      nS n[	        UUUUS9nU$ )N)r   r   r    r!   )rE   r:   int8rJ   r   )r$   r%   act_symmetricr(   act_quantization_specwgt_quantization_specbias_quantization_specquantization_configs           r   r)   r)   z   sR     2%**mT-

M6 ",./$#	 r   c                   Z    \ rS rSrS\R
                  S\4S jr\S 5       r	\S 5       r
Srg)		QuantInfo   torch_dtypestringc                     Xl         X l        g N)_torch_dtype_string)selfrU   rV   s      r   __init__QuantInfo.__init__   s    'r   c                     U R                   $ rX   )rY   r[   s    r   rU   QuantInfo.torch_dtype   s       r   c                     U R                   $ rX   )rZ   r_   s    r   rV   QuantInfo.string   s    ||r   )rZ   rY   N)r   r   r   r   r:   r5   strr\   propertyrU   rV   r   r   r   r   rS   rS      sA    EKK   ! !  r   rS   c                      \ rS rSr\R
                  \" \R                  S5      \" \R                  S5      40r	\" \R                  S5      \" \R                  S5      4rS rS\4S jr\S\\   4S j5       r\S\\   4S	 j5       rS
rg)QuantInfoManager   INT8FLOAT32c                     S U l         g rX   r#   r_   s    r   r\   QuantInfoManager.__init__   s	    r   r#   c                     Xl         g rX   rk   )r[   r#   s     r   set_precisionQuantInfoManager.set_precision   s    "r   r&   c                 h    U R                   R                  U R                  U R                  5      S   $ )Nr   QUANT_INFO_MAPgetr#   FP_INFOr_   s    r   weight_precison QuantInfoManager.weight_precison   (    ""&&t~~t||DQGGr   c                 h    U R                   R                  U R                  U R                  5      S   $ )N   rq   r_   s    r   act_precisionQuantInfoManager.act_precision   rw   r   rk   N)r   r   r   r   r   r   rS   r:   rL   rr   float32rt   r\   rn   rd   r   ru   rz   r   r   r   r   rf   rf      s    5::v6	%**f8UVN 	%--+%--+G
#y # H)!4 H H Hx	2 H Hr   rf   )FF)NN)TFFF)dataclassesr   enumr   r   typingr   r   r:   torchao.quantization.pt2er   r	   r
   #torchao.quantization.pt2e.quantizerr   r   r   boolr.   rE   rJ   r)   rS   rf   r   r   r   <module>r      s    "   %  
 A    d4 0 0 !0 !LLL L 	L,  @ LP%R KP" H Hr   