§
    Þ˜ºhïF  ã                   óº   — d dl mZmZmZ ddlmZ erddlmZ ddlm	Z	m
Z
mZmZmZ ddlmZ  e¦   «         rd dlZ ej        e¦  «        ZdZ G d	„ d
e¦  «        ZdS )é    )ÚTYPE_CHECKINGÚAnyÚOptionalé   )ÚHfQuantizeré   )ÚPreTrainedModel)Úis_accelerate_availableÚis_kernels_availableÚis_torch_availableÚis_triton_availableÚlogging)Úget_module_from_nameNc                   ó„  ‡ — e Zd ZdZdZdZdgZˆ fd„Zd„ Zd„ Z	d&d„Z
dddddedeeef         fd„Z	 d'dddddedddeeef         deee                  fd„Zd(d„Zdddee         dee         fd„Z	 d'dddeee                  fd„Zdee         ded
ee         fd „Zd!„ Zded
efd"„Zd#„ Zd'd$„Zed
efd%„¦   «         Zˆ xZS ))ÚMxfp4HfQuantizerz/
    FP4 quantization using fbgemm kernels
    TFÚ
acceleratec                 óX   •—  t          ¦   «         j        |fi |¤Ž || _        d | _        d S ©N)ÚsuperÚ__init__Úquantization_configÚtriton_kernels_hub)Úselfr   ÚkwargsÚ	__class__s      €úo/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_mxfp4.pyr   zMxfp4HfQuantizer.__init__1   s9   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7Ø#6ˆÔ Ø"&ˆÔÐÐó    c                 óˆ   — | j         €5	 ddlm}  |d¦  «        | _         n# t          $ r t          d¦  «        ‚w xY w| j         S )z3Lazy import and initialize kernels only when neededNr   )Ú
get_kernelz kernels-community/triton_kernelsz2kernels package is required for MXFP4 quantization)r   Úkernelsr   ÚImportError)r   r   s     r   Ú_lazy_import_kernelsz%Mxfp4HfQuantizer._lazy_import_kernels6   sp   € àÔ"Ð*ðXØ.Ð.Ð.Ð.Ð.Ð.à*4¨*Ð5WÑ*XÔ*X�Ô'Ð'øÝð Xð Xð XÝ!Ð"VÑWÔWÐWðXøøøàÔ&Ð&s   ‰   :c                 ó&  — t          ¦   «         st          d¦  «        ‚| j        j        rd S t          j                             ¦   «         s>| j        r(t           	                    d¦  «         d| j        _        d S t          d¦  «        ‚t          ¦   «         st          d¦  «        ‚t          j                             ¦   «         }|dk    }t          d¦  «        ot          ¦   «         }| j        rU|s(t           	                    d¦  «         d| j        _        d S |s(t           	                    d	¦  «         d| j        _        d S n"|st          d
¦  «        ‚|st          d¦  «        ‚| j        s|                      ¦   «          |                     d¦  «        }|€t           	                    d¦  «         d S |�W| j        sRt%          |t&          ¦  «        r?d|                     ¦   «         v sd|                     ¦   «         v rt          d¦  «        ‚d S d S d S d S )NzqUsing mxfp4 quantization requires torchPlease install the latest version of torch ( pip install --upgrade torch )z^Using MXFP4 quantized models requires a GPU, we will default to dequantizing the model to bf16Tz-Quantizing a model using MXFP4 requires a GPUz9Using mxfp4 requires Accelerate: `pip install accelerate`)é   é   z3.4.0z¡MXFP4 quantization is only supported on GPUs with compute capability >= 7.5 (e.g T4, A100, L4, H100, or B200). We will default to dequantizing the model to bf16.ztMXFP4 quantization requires triton >= 3.4.0 and kernels installed, we will default to dequantizing the model to bf16zmMXFP4 quantization is only supported on GPUs with compute capability >= 7.5 (e.g T4, A100, L4, H100, or B200)zAMXFP4 quantization requires triton >= 3.4.0 and kernels installedÚ
device_mapzÀYou have loaded an FP4 model on CPU and have a CUDA device available, make sure to set your model on a GPU device in order to run your model. To remove this warning, pass device_map = 'cuda'. ÚcpuÚdiskzòYou are attempting to load an FP4 model with a device_map that contains a CPU or disk device.This is not supported when the model is quantized on the fly. Please use a quantized checkpoint or remove the CPU or disk device from the device_map.)r   r!   r   Ú
dequantizeÚtorchÚcudaÚis_availableÚpre_quantizedÚloggerÚwarning_onceÚRuntimeErrorr
   Úget_device_capabilityr   r   Ú
ValueErrorr"   ÚgetÚ
isinstanceÚdictÚvalues)r   Úargsr   Úcompute_capabilityÚgpu_is_supportedÚkernels_availabler&   s          r   Úvalidate_environmentz%Mxfp4HfQuantizer.validate_environmentA   s›  € Ý!Ñ#Ô#ð 	Ýð]ñô ð ð
 Ô#Ô.ð 	ØˆFåŒz×&Ò&Ñ(Ô(ð 	TØÔ!ð TÝ×#Ò#Øtñô ð ð 7;�Ô(Ô3Ø�å"Ð#RÑSÔSÐSå&Ñ(Ô(ð 	[ÝÐYÑZÔZÐZå"œZ×=Ò=Ñ?Ô?ÐØ-°Ò7ÐÝ/°Ñ8Ô8ÐSÕ=QÑ=SÔ=SÐàÔð 	bà#ð Ý×#Ò#ðIñô ð ð 7;�Ô(Ô3Ø�à$ð Ý×#Ò#ð Kñô ð ð 7;�Ô(Ô3Ø�ðð "ð 	båØñô ð ð #ð 	båÐ`ÑaÔaÐaàÔ!ð 	(Ø×%Ò%Ñ'Ô'Ð'à—Z’Z Ñ-Ô-ˆ
ØÐÝ×Òð|ñô ð ð ð ð Ð#àÔ&ð	å˜z­4Ñ0Ô0ð	ð ˜j×/Ò/Ñ1Ô1Ð1Ð1°V¸z×?PÒ?PÑ?RÔ?RÐ5RÐ5Rå ðnñô ð ð $Ð#ð	ð 	ð 	ð 	ð 6SÐ5Rr   Údtypeútorch.dtypeÚreturnc                 óX   — |€'t           j        }t                               d|¦  «         |S )NzôOverriding dtype=%s with `dtype=torch.bfloat16` due to requirements of `fbgemm-gpu` to enable model loading in fp4. Pass your own dtype to specify the dtype of the remaining non-linear layers or pass dtype=torch.bfloat16 to remove this warning.)r*   Úbfloat16r.   Úinfo)r   r<   s     r   Úupdate_dtypezMxfp4HfQuantizer.update_dtypeŠ   s6   € Øˆ=Ý”NˆEÝ�KŠKð@ð ñô ð ð ˆr   Úmodelr	   Úparam_valueztorch.TensorÚ
param_nameÚ
state_dictc                 ó(  — ddl m} ddlm} | j        j        r2d|v sd|v r*t          ||d t          d¦  «         …         ¦  «        \  }}	nt          ||¦  «        \  }}	t          ||¦  «        st          ||¦  «        r| j        j        r|	dv rdS d	S dS )
Nr   ©ÚMxfp4GptOssExperts©ÚGptOssExpertsÚblocksÚscalesÚ_blocks)Údown_proj_biasÚgate_up_proj_biasFT)	ÚintegrationsrI   Úmodels.gpt_oss.modeling_gpt_ossrK   r   r)   r   Úlenr4   )
r   rC   rD   rE   rF   r   rI   rK   ÚmoduleÚtensor_names
             r   Úcheck_quantized_paramz&Mxfp4HfQuantizer.check_quantized_param–   sÜ   € ð 	6Ð5Ð5Ð5Ð5Ð5ØCÐCÐCÐCÐCÐCð Ô#Ô.ð 	J°HÀ
Ð4JÐ4JÈhÐZdÐNdÐNdÝ"6°u¸jÐIZÍCÐPYÉNÌNÈ?ÐIZÔ>[Ñ"\Ô"\ÑˆF�K�Kå"6°u¸jÑ"IÔ"IÑˆF�KÝ�fÐ0Ñ1Ô1ð 	Ý�v˜}Ñ-Ô-ð	Ø26Ô2JÔ2Uð	ð ÐEÐEÐEØ�uØ�4Øˆur   NÚtarget_deviceztorch.deviceÚunexpected_keysc                 óú  — ddl m}m}	m}
m}m} ddlm} | j        �s|  	                    ¦   «         }t          ||¦  «        \  }}t          j        |¦  «        5  t          ||¦  «        r³ |||¦  «        \  }}|j        j        |j        j        |j        j        }}} ||||¦  «        \  }}d|v rdnd}t%          |||¦  «         t%          ||› d� || | |¦   «         ¬¦  «        ¬¦  «        ¦  «         t'          ||› d	�¦  «         t'          ||› d
�¦  «         d d d ¦  «         d S # 1 swxY w Y   d S |                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }d|v sd|v r6| j        j        r*t          ||d t-          d	¦  «         …         ¦  «        \  }}nt          ||¦  «        \  }}||||||dœ}t          ||¦  «        st          ||¦  «        r`| j        j        rV| j        j        r'|d t-          d	¦  «         …         } |	|||||fi |¤Ž d S  |
|||||  	                    ¦   «         fi |¤Ž d S d S d S )Nr   )rI   r)   Úload_and_swizzle_mxfp4Úquantize_to_mxfp4Úswizzle_mxfp4rJ   Úgate_up_projÚ	down_projÚ_precision_config)Úrhs_data)Úweight_scaleÚflex_ctxrN   Ú_scalesÚempty_paramÚcasting_dtypeÚto_contiguousÚrankÚdevice_meshrL   rM   )rd   re   rf   rg   rh   rC   )rQ   rI   r)   rZ   r[   r\   rR   rK   r-   r"   r   r*   Údevicer4   Ú
matmul_ogsÚPrecisionConfigÚFlexCtxÚ
InFlexDataÚsetattrÚdelattrr3   r   rS   )r   rC   rD   rE   rW   rF   rX   r   rI   r)   rZ   r[   r\   rK   r   rT   Ú_Útriton_weight_tensorra   rk   rl   rm   Úprojrd   re   rf   rg   rh   Úshard_kwargsÚdq_param_names                                 r   Úcreate_quantized_paramz'Mxfp4HfQuantizer.create_quantized_param®   sÏ  € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	DÐCÐCÐCÐCÐCàÔ!ñ A	Ø!%×!:Ò!:Ñ!<Ô!<ÐÝ,¨U°JÑ?Ô?‰IˆF�AÝ”˜mÑ,Ô,ð 6ð 6Ý˜fÐ&8Ñ9Ô9ð 6Ø9JÐ9JÈ;ÐXjÑ9kÔ9kÑ6Ð(¨,à*Ô5ÔEØ*Ô5Ô=Ø*Ô5Ô@ð /9 W�Oð
 :G¸Ø,¨lÐ<Nñ:ô :Ñ6Ð(¨,ð .<¸zÐ-IÐ-I˜>˜>È{�DÝ˜F DÐ*>Ñ?Ô?Ð?ÝØØÐ2Ð2Ð2Ø'˜°\ÈGÈGÐ]gÐ]gÑ]iÔ]iÐLjÑLjÔLjÐkÑkÔkñô ð õ ˜F tÐ$4Ð$4Ð$4Ñ5Ô5Ð5Ý˜F tÐ$4Ð$4Ð$4Ñ5Ô5Ð5ð+6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð 6ð 6ð4 !Ÿ*š* ]Ñ3Ô3ˆKØ"ŸJšJ Ñ7Ô7ˆMØ"ŸJšJ Ñ7Ô7ˆMØ—:’:˜fÑ%Ô%ˆDØ Ÿ*š* ]Ñ3Ô3ˆKØ˜JÐ&Ð&¨(°jÐ*@Ð*@ÀdÔF^ÔFiÐ*@å0°¸
ÐCTÅcÈ)ÁnÄnÀ_ÐCTÔ8UÑVÔV‘	�˜˜å0°¸
ÑCÔC‘	�˜ð  +Ø!.Ø!.ØØ*Øðð ˆLõ ˜&Ð"4Ñ5Ô5ð Ý˜6 =Ñ1Ô1ðØ6:Ô6NÔ6Yðð Ô+Ô6ð ð %/Ð/@µ#°i±.´.°Ð/@Ô$A�MØ�J˜v z°;ÀÈ}ÐmÐmÐ`lÐmÐmÐmÐmÐmà*Ð*ØØ"Ø#Ø%Ø×1Ò1Ñ3Ô3ðð ð 'ðð ð ð ð ðð ð ð s   ÁCD)Ä)D-Ä0D-c                 óÄ   — | j         j        r|                      |¦  «         t          j                             ¦   «         r t          j                             ¦   «          d S d S r   )r   r)   Úremove_quantization_configr*   r+   r,   Úempty_cache)r   rC   r   s      r   Ú#_process_model_after_weight_loadingz4Mxfp4HfQuantizer._process_model_after_weight_loading  s^   € àÔ#Ô.ð 	3Ø×+Ò+¨EÑ2Ô2Ð2åŒ:×"Ò"Ñ$Ô$ð 	%ÝŒJ×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	%ð 	%r   Úexpected_keysÚcheckpoint_keysc                 ó@  — g }|D �]—}|                      d¦  «        rI|d t          d¦  «         …         }|                     |dz   ¦  «         |                     |dz   ¦  «         Œa|                      d¦  «        rI|d t          d¦  «         …         }|                     |dz   ¦  «         |                     |dz   ¦  «         Œ¿| j        s¼|                      d	¦  «        r2|d t          d¦  «         …         }|                     |dz   ¦  «         �Œ|                      d
¦  «        r2|d t          d¦  «         …         }|                     |dz   ¦  «         �ŒT|                      d¦  «        r�Œk|                     |¦  «         �Œ‚|                     |¦  «         �Œ™|S )Nz.mlp.experts.gate_up_projr]   Úgate_up_proj_blocksÚgate_up_proj_scalesz.mlp.experts.down_projr^   Údown_proj_blocksÚdown_proj_scalesz.mlp.experts.down_proj_blocksz .mlp.experts.gate_up_proj_blocksrM   )ÚendswithrS   Úappendr-   )r   rC   rz   r{   Únew_expected_keysÚkeyÚbases          r   Úupdate_expected_keysz%Mxfp4HfQuantizer.update_expected_keys  sÕ  € àÐØ ð 	.ñ 	.ˆCØ�|Š|Ð7Ñ8Ô8ð .ØÐ1�c .Ñ1Ô1Ð1Ð1Ô2�Ø!×(Ò(¨Ð0EÑ)EÑFÔFÐFØ!×(Ò(¨Ð0EÑ)EÑFÔFÐFÐFØ—’Ð6Ñ7Ô7ð .ØÐ.�c +Ñ.Ô.Ð.Ð.Ô/�Ø!×(Ò(¨Ð0BÑ)BÑCÔCÐCØ!×(Ò(¨Ð0BÑ)BÑCÔCÐCÐCØÔ'ð .à—<’<Ð ?Ñ@Ô@ð 
2ØÐ9¥#Ð&8Ñ"9Ô"9Ð!9Ð9Ô:�DØ%×,Ò,¨T°KÑ-?Ñ@Ô@Ð@Ñ@Ø—\’\Ð"DÑEÔEð 2ØÐ<¥#Ð&;Ñ"<Ô"<Ð!<Ð<Ô=�DØ%×,Ò,¨T°NÑ-BÑCÔCÐCÑCØ—\’\ (Ñ+Ô+ð 2áà%×,Ò,¨SÑ1Ô1Ð1Ñ1à!×(Ò(¨Ñ-Ô-Ð-Ñ-Ø Ð r   Úkeep_in_fp32_modulesc                 ó<  — ddl m} |                      || j        j        |¦  «        | _        |                     dd¦  «        }|r&t                               d¦  «         d| j        _        |j	        } ||| j        | j        |¬¦  «        }| j        |j	        _        d S )Nr   )Úreplace_with_mxfp4_linearÚuse_kernelsFzžYou are using full precision kernels, we will dequantize the model to bf16. To use the quantized model with quantization kernels, please set use_kernels=FalseT)Úmodules_to_not_convertr   Úconfig)
rQ   r‰   Úget_modules_to_not_convertr   r‹   r3   r.   r/   r)   rŒ   )r   rC   r‡   r   r‰   rŠ   rŒ   s          r   Ú$_process_model_before_weight_loadingz5Mxfp4HfQuantizer._process_model_before_weight_loading)  sÉ   € ð 	=Ð<Ð<Ð<Ð<Ð<à&*×&EÒ&EØ�4Ô+ÔBÐDXñ'
ô '
ˆÔ#ð —j’j °Ñ6Ô6ˆàð 	7Ý×Òðeñô ð ð 37ˆDÔ$Ô/à”ˆØ)Ð)ØØ#'Ô#>Ø $Ô 8Øð	
ñ 
ô 
ˆð ,0Ô+CˆŒÔ(Ð(Ð(r   Úmissing_keysÚprefixc                 ó&  ‡— ddl m} g Š|                     ¦   «         D ]f\  }}t          ||¦  «        rQ|D ]N}||v s	||› d|› �v r?|                     d¦  «        s*|                     d¦  «        s‰                     |¦  «         ŒOŒgˆfd„|D ¦   «         S )Nr   rH   ú.z.weightz.biasc                 ó   •— g | ]}|‰v¯|‘Œ	S © r”   )Ú.0ÚkÚnot_missing_keyss     €r   ú
<listcomp>z8Mxfp4HfQuantizer.update_missing_keys.<locals>.<listcomp>U  s$   ø€ ÐEÐEÐE�a¨1Ð4DÐ+DÐ+D�Ð+DÐ+DÐ+Dr   )rQ   rI   Únamed_modulesr4   r�   r‚   )	r   rC   r�   r�   rI   ÚnamerT   Úmissingr—   s	           @r   Úupdate_missing_keysz$Mxfp4HfQuantizer.update_missing_keysH  sÝ   ø€ Ø5Ð5Ð5Ð5Ð5Ð5àÐØ!×/Ò/Ñ1Ô1ð 	9ð 	9‰LˆD�&Ý˜&Ð"4Ñ5Ô5ð 9Ø+ð 9ð 9�Gà ˜˜¨D°vÐ4IÐ4IÀÐ4IÐ4IÐ,IÐ,IØ '× 0Ò 0°Ñ ;Ô ;ð -Jà '× 0Ò 0°Ñ 9Ô 9ð -Jð )×/Ò/°Ñ8Ô8Ð8øøØEÐEÐEÐE˜<ÐEÑEÔEÐEr   c                 ó‚   — d|j         j        v r0t          |dd ¦  «        �|j                             dddddœ¦  «         |S )NÚGptOssConfigÚbase_model_tp_planÚgrouped_gemm)z(layers.*.mlp.experts.gate_up_proj_blocksz(layers.*.mlp.experts.gate_up_proj_scalesz%layers.*.mlp.experts.down_proj_blocksz%layers.*.mlp.experts.down_proj_scales)r   Ú__name__ÚgetattrrŸ   Úupdate)r   rŒ   s     r   Úupdate_tp_planzMxfp4HfQuantizer.update_tp_planW  s^   € Ø˜VÔ-Ô6Ð6Ð6Ý�vÐ3°TÑ:Ô:ÐFØÔ)×0Ò0àDRØDRØAOØAOð	ð ñô ð ð ˆr   c                 óB  — | j         j        r5d|v r|                     dd¦  «        S d|v r|                     dd¦  «        S n]| j        sV|                     d¦  «        r|                     dd¦  «        S |                     d¦  «        r|                     dd¦  «        S |S )NrN   Ú rc   r]   r}   r^   r   )r   r)   Úreplacer-   r�   )r   rE   s     r   Úupdate_param_namez"Mxfp4HfQuantizer.update_param_named  sÆ   € ØÔ#Ô.ð 		KØ˜JÐ&Ð&Ø!×)Ò)¨)°RÑ8Ô8Ð8Ø˜jÐ(Ð(Ø!×)Ò)¨)°RÑ8Ô8Ð8ð )àÔ#ð 	KØ×"Ò" >Ñ2Ô2ð QØ!×)Ò)¨.Ð:OÑPÔPÐPØ×"Ò" ;Ñ/Ô/ð KØ!×)Ò)¨+Ð7IÑJÔJÐJØÐr   c                 óÀ  — ddl m} |                     ¦   «         }|                     ¦   «         D �]­\  }}t	          ||¦  «        �r–t          |d¦  «        �r…t          |d¦  «        �rt|j        j        j         	                    |j        j        j
        ¦  «                             dd¦  «                             dddd	¦  «        ||› d
�<   |j        j        j        j         	                    |j        j        j        j
        ¦  «                             dd¦  «        ||› d�<   |j        j        j         	                    |j        j        j
        ¦  «                             dd¦  «                             dddd¦  «        ||› d�<   |j        j        j        j         	                    |j        j        j        j
        ¦  «                             dd¦  «        ||› d�<   �Œ¯|S )Nr   rH   r]   r^   éÿÿÿÿéþÿÿÿé    éZ   é   z.gate_up_proj_blocksz.gate_up_proj_scalesi@  z.down_proj_blocksz.down_proj_scales)rQ   rI   rF   r™   r4   Úhasattrr]   ÚstorageÚlayoutÚunswizzle_dataÚdataÚ	transposeÚreshapeÚgate_up_proj_precision_configra   r^   Údown_proj_precision_config)r   rC   rI   rF   rš   rT   s         r   Úget_state_dictzMxfp4HfQuantizer.get_state_dictq  sÞ  € Ø5Ð5Ð5Ð5Ð5Ð5à×%Ò%Ñ'Ô'ˆ
à!×/Ò/Ñ1Ô1ð 	ñ 	‰LˆD�&å˜6Ð#5Ñ6Ô6ñå˜F NÑ3Ô3ñõ ˜F KÑ0Ô0ñð Ô'Ô/Ô6×EÒEÀfÔFYÔFaÔFfÑgÔgß’Y˜r 2Ñ&Ô&ß’W˜R  R¨Ñ,Ô,ð ˜dÐ8Ð8Ð8Ñ9ð Ô8ÔEÔMÔT×cÒcØÔ<ÔIÔQÔVñô ç’i  BÑ'Ô'ð ˜dÐ8Ð8Ð8Ñ9ð Ô$Ô,Ô3×BÒBÀ6ÔCSÔC[ÔC`ÑaÔaß’Y˜r 2Ñ&Ô&ß’W˜R  r¨2Ñ.Ô.ð ˜dÐ5Ð5Ð5Ñ6ð Ô5ÔBÔJÔQ×`Ò`ØÔ9ÔFÔNÔSñô ç’i  BÑ'Ô'ð ˜dÐ5Ð5Ð5Ñ6ùð Ðr   c                 ó   — dS )NTr”   )r   Úsafe_serializations     r   Úis_serializablez Mxfp4HfQuantizer.is_serializable“  s   € Øˆtr   c                 ó:   — t                                d¦  «         dS )Nz©MXFP4 quantization don't support training, please consider dequantizing the model first by passing quantization_config=Mxfp4Config(dequantize=True) to .from_pretrained()F)r.   r/   )r   s    r   Úis_trainablezMxfp4HfQuantizer.is_trainable–  s'   € å×Òð xñ	
ô 	
ð 	
ð ˆur   )r<   r=   r>   r=   r   )rC   r	   )r¡   Ú
__module__Ú__qualname__Ú__doc__Ú requires_parameters_quantizationÚrequires_calibrationÚrequired_packagesr   r"   r;   rB   Ústrr5   r   rV   r   Úlistru   ry   r†   rŽ   rœ   r¤   r¨   r¸   r»   ÚpropertyÚboolr½   Ú__classcell__)r   s   @r   r   r   '   s‡  ø€ € € € € ðð ð (,Ð$Ø Ðà%˜Ðð'ð 'ð 'ð 'ð 'ð
	'ð 	'ð 	'ðGð Gð GðR
ð 
ð 
ð 
ðà ðð $ðð ð	ð
 ˜˜c˜”Nðð ð ð ð> 04ðTð Tà ðTð $ðTð ð	Tð
 &ðTð ˜˜c˜”NðTð " $ s¤)Ô,ðTð Tð Tð Tðl%ð %ð %ð %ð!Ð*;ð !ÈDÐQTÌIð !ÐhlÐmpÔhqð !ð !ð !ð !ð@ 59ðDð Dà ðDð ' t¨C¤yÔ1ðDð Dð Dð Dð>F°t¸C´yð FÈ#ð FÐRVÐWZÔR[ð Fð Fð Fð Fðð ð ð¨Cð °Cð ð ð ð ð ð  ð  ðDð ð ð ð ð˜dð ð ð ñ „Xðð ð ð ð r   r   )Útypingr   r   r   r…   r   Úmodeling_utilsr	   Úutilsr
   r   r   r   r   Úquantizers_utilsr   r*   Ú
get_loggerr¡   r.   r   r   r”   r   r   ú<module>rÎ      s  ðð 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à Ð Ð Ð Ð Ð ð ð 1Ø0Ð0Ð0Ð0Ð0Ð0ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 3Ð 2Ð 2Ð 2Ð 2Ð 2ð ÐÑÔð Ø€L€L€Là	ˆÔ	˜HÑ	%Ô	%€ØÐ ðtð tð tð tð t�{ñ tô tð tð tð tr   