ó
    qyüi0  ã                   óœ   • S SK Jr  SSKJr  SSKJr  SSKJr  \(       a  SSKJ	r	  SSK
Jr  SS	KJr  \" 5       (       a  S S
Kr " S S\5      rg
)é    )ÚTYPE_CHECKINGé   )Úis_fouroversix_availableé   )ÚHfQuantizer)Úget_module_from_name)ÚPreTrainedModel)ÚFourOverSixConfig)Úis_torch_availableNc                   óº   ^ • \ rS rSr% SrSrS\S'   U 4S jrS rSS	S
\	SSS\
4U 4S jjrSS	S
\	S\4S jr  SS jrSS jrS r\S\4S j5       rS rS rSrU =r$ )ÚFourOverSixHfQuantizeré   z$
FP4 quantization with fouroversix.
Fr
   Úquantization_configc                 ó(   >• [         TU ]  " U40 UD6  g ©N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €Új/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/quantizers/quantizer_fouroversix.pyr   ÚFourOverSixHfQuantizer.__init__   s   ø€ Ü‰ÒÐ,Ñ7°Ó7ó    c                 ó8   • [        5       (       d  [        S5      eg )NzXUsing `fouroversix` requires fouroversix: `pip install fouroversix --no-build-isolation`)r   ÚImportError)r   Úargsr   s      r   Úvalidate_environmentÚ+FourOverSixHfQuantizer.validate_environment    s    € Ü'×)Ñ)ÜØjóð ð *r   Úmodelr	   Ú
param_nameÚparamztorch.TensorÚreturnc                 óª   >• SSK Jn  [        X5      u  pVUR                  [	        U5      5      (       a  UR                  U5      $ [        TU ]  XU5      $ ©Nr   )ÚQuantizedModule)Úfouroversixr%   r   Úis_quantized_module_typeÚtypeÚget_element_sizer   Úparam_element_size)r   r   r    r!   r%   ÚmoduleÚtensor_namer   s          €r   r*   Ú)FourOverSixHfQuantizer.param_element_size&   sM   ø€ õ 	0ä2°5ÓEÑˆà×3Ñ3´D¸³L×AÑAØ×*Ñ*¨;Ó7Ð7ä‰wÑ)¨%¸UÓCÐCr   c                 ó†   • SSK Jn  [        X5      u  pVUR                  [	        U5      5      =(       a    XeR
                  ;   $ r$   )r&   r%   r   r'   r(   Úparameters_to_quantize)r   r   r    r   r%   r+   r,   s          r   Úparam_needs_quantizationÚ/FourOverSixHfQuantizer.param_needs_quantization5   s7   € õ 	0ä2°5ÓEÑˆà×7Ñ7¼¸V»ÓE×vÈ+×YvÑYvÑJvÐvr   c                 ó^  • SSK JnJn  SSKJn  U" UU" U R
                  5      5        U R                  (       au  U R
                  R                  (       dY  UR                  5        HD  u  pxUR                  [        U5      5      (       d  M&  UR                   H  n	[        X‰5        M     MF     g g g )Nr   )r%   Úquantize_modelr   )Úadapt_fouroversix_config)r&   r%   r3   Úintegrations.fouroversixr4   r   Úpre_quantizedÚkeep_master_weightsÚnamed_modulesr'   r(   r/   Údelattr)
r   r   Ú
device_mapr   r%   r3   r4   Ú_r+   Úparameter_names
             r   Ú$_process_model_before_weight_loadingÚ;FourOverSixHfQuantizer._process_model_before_weight_loadingA   s‰   € ÷ 	@åGáØÙ$ T×%=Ñ%=Ó>ô	
ð ×× d×&>Ñ&>×&R×&RØ"×0Ñ0Ö2‘	�Ø"×;Ñ;¼DÀ»L×IÓIØ*0×*GÔ*G˜Ü Ö7ó +Hò 3ð 'SÐr   c                 ó   • U$ r   © )r   r   r   s      r   Ú#_process_model_after_weight_loadingÚ:FourOverSixHfQuantizer._process_model_after_weight_loadingX   s   € Øˆr   c                 ó   • g)NTr@   ©r   s    r   Úis_serializableÚ&FourOverSixHfQuantizer.is_serializable[   s   € Ør   c                 ó.   • U R                   R                  $ r   )r   r7   rD   s    r   Úis_trainableÚ#FourOverSixHfQuantizer.is_trainable^   s   € à×'Ñ'×;Ñ;Ð;r   c                 ó   • SSK Jn  U" U 5      $ )Nr   )ÚFourOverSixQuantize)r5   rK   )r   rK   s     r   Úget_quantize_opsÚ'FourOverSixHfQuantizer.get_quantize_opsb   s   € ÝBá" 4Ó(Ð(r   c                 óš   • SSK Jn  [        U R                  S5      (       a)  U R                  R                  nUR                  U5      nU$ / $ )a†  
Return weight conversions for loading pre-quantized checkpoints of
other pre-quantized models (not fouroversix models). After first use,
the pre_quantized_model_config_type attribute is set to None to ensure
subsequent calls (e.g., during save_pretrained) return an empty list
since, by then, the model will be saved with our framework's format
so weight conversions are no longer needed.
r   )ÚWeightConversionsÚpre_quantized_model_config_type)r&   rO   Úhasattrr   rP   Úget_weight_conversions)r   rO   Úmodel_config_typeÚweight_conversionss       r   rR   Ú-FourOverSixHfQuantizer.get_weight_conversionsg   sP   € õ 	2ô �4×+Ñ+Ð-N×OÑOØ $× 8Ñ 8× XÑ XÐØ!2×!IÑ!IØ!ó"Ðð &Ð%àˆ	r   r@   )r   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   ÚstrÚfloatr*   Úboolr0   r=   rA   rE   ÚpropertyrH   rL   rR   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r      s¶   ø‡ ñð !ÐØ,Ó,õ8òðDà ðDð ðDð ð	Dð
 
÷Dð
wà ð
wð ð
wð
 
ô
wð8à ô8ô.òð ð<˜dó <ó ð<ò)÷
ð r   r   )Útypingr   Úutils.import_utilsr   Úbaser   Úquantizers_utilsr   Úmodeling_utilsr	   Úutils.quantization_configr
   Úutilsr   Útorchr   r@   r   r   Ú<module>rk      s=   ðÝ  å 9Ý Ý 2ö Ý0Ý=õñ
 ×ÑÛôf˜[õ fr   