Ë
    ÜÓ^j~
  ã                   ó‚   — d dl mZ ddlmZ erddlmZ ddlmZmZ ddl	m
Z
  ej                  e«      Z G d„ d	e«      Zy
)é    )ÚTYPE_CHECKINGé   )ÚHfQuantizeré   )ÚPreTrainedModel)Úis_auto_round_availableÚlogging)ÚQuantizationConfigMixinc                   ó^   ‡ — e Zd ZdZdZdefˆ fd„Zd„ Zdd„Zdd„Z	e
defd	„«       Zd
„ Zˆ xZS )ÚAutoRoundQuantizerzW
    Quantizer of the AutoRound method. (https://huggingface.co/papers/2309.05516)
    TÚquantization_configc                 ó&   •— t        ‰| �  |fi |¤Ž y )N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_auto_round.pyr   zAutoRoundQuantizer.__init__%   s   ø€ Ü‰ÑÐ,Ñ7°Ó7ó    c                 óZ   — |j                  d«      | _        t        «       st        d«      ‚y )NÚ
device_mapzbLoading an AutoRound quantized model requires auto-round library (`pip install 'auto-round>=0.5'`))Úgetr   r   ÚImportError)r   Úargsr   s      r   Úvalidate_environmentz'AutoRoundQuantizer.validate_environment(   s-   € Ø Ÿ*™* \Ó2ˆŒÜ&Ô(ÜØtóð ð )r   c                 óÔ   — |j                   j                  dk7  rt        j                  d«       ddlm}m} | j                  r& || j                  «      } |||«      \  }}|| _	        y y )NÚ	input_idszRAutoRound offers only limited support for models that are not strictly text-based.r   )Úconvert_hf_modelÚinfer_target_device)
r   Úmain_input_nameÚloggerÚwarningÚ"auto_round.inference.convert_modelr   r   Úpre_quantizedr   Úused_backends)r   Úmodelr   r   r   Útarget_devicer%   s          r   Ú$_process_model_before_weight_loadingz7AutoRoundQuantizer._process_model_before_weight_loading/   sY   € Ø�?‰?×*Ñ*¨kÒ9Ü�N‰NÐoÔpß\à×ÒÙ/°·±Ó@ˆMÙ#3°E¸=Ó#IÑ ˆE�=Ø!.ˆDÕð r   c                 ód   — | j                   rddlm}  ||| j                  «       y t	        d«      ‚)Nr   )Ú	post_initz+AutoRound only sports pre-quantized models.)r$   r#   r*   r%   Ú
ValueError)r   r&   r   r*   s       r   Ú#_process_model_after_weight_loadingz6AutoRoundQuantizer._process_model_after_weight_loading9   s*   € Ø×ÒÝDá�e˜T×/Ñ/Õ0äÐJÓKÐKr   Úreturnc                  ó   — y)NF© ©r   s    r   Úis_trainablezAutoRoundQuantizer.is_trainableA   s   € àr   c                  ó   — y)NTr/   r0   s    r   Úis_serializablez"AutoRoundQuantizer.is_serializableE   s   € àr   )r&   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationr
   r   r   r(   r,   ÚpropertyÚboolr1   r3   Ú__classcell__)r   s   @r   r   r      sM   ø„ ñð
  Ðð8Ð,Cõ 8òó/óLð ð˜dò ó ðör   r   N)Útypingr   Úbaser   Úmodeling_utilsr   Úutilsr   r	   Úutils.quantization_configr
   Ú
get_loggerr4   r!   r   r/   r   r   ú<module>rB      s;   ðõ !å ñ Ý0ç 4Ý ?ð 
ˆ×	Ñ	˜HÓ	%€ô*˜õ *r   