§
    ‚Štj~
  ã                   ó†   — 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d
S )é    )ÚTYPE_CHECKINGé   )ÚHfQuantizeré   )ÚPreTrainedModel)Úis_auto_round_availableÚlogging)ÚQuantizationConfigMixinc                   ód   ‡ — 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          ¦   «         j        |fi |¤Ž d S )N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_auto_round.pyr   zAutoRoundQuantizer.__init__%   s)   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7Ð7Ð7ó    c                 ót   — |                      d¦  «        | _        t          ¦   «         st          d¦  «        ‚d S )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(   sB   € Ø Ÿ*š* \Ñ2Ô2ˆŒÝ&Ñ(Ô(ð 	ÝØtñô ð ð	ð 	r   Úmodelr   c                 óÈ   — |j         j        dk    rt                               d¦  «         ddlm}m} | j        r( || j        ¦  «        } |||¦  «        \  }}|| _	        d S d S )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   r   r   r   r    Útarget_devicer&   s          r   Ú$_process_model_before_weight_loadingz7AutoRoundQuantizer._process_model_before_weight_loading/   s‰   € ØŒ?Ô*¨kÒ9Ð9Ý�NŠNÐoÑpÔpÐpØ\Ð\Ð\Ð\Ð\Ð\Ð\Ð\àÔð 	/Ø/Ð/°´Ñ@Ô@ˆMØ#3Ð#3°E¸=Ñ#IÔ#IÑ ˆE�=Ø!.ˆDÔÐÐð	/ð 	/r   c                 ó`   — | j         rddlm}  ||| j        ¦  «         d S 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   sJ   € ØÔð 	LØDÐDÐDÐDÐDÐDàˆI�e˜TÔ/Ñ0Ô0Ð0Ð0Ð0åÐJÑKÔKÐKr   Úreturnc                 ó   — dS )NF© ©r   s    r   Úis_trainablezAutoRoundQuantizer.is_trainableA   s   € àˆur   c                 ó   — dS )NTr/   r0   s    r   Úis_serializablez"AutoRoundQuantizer.is_serializableE   s   € àˆtr   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationr
   r   r   r(   r,   ÚpropertyÚboolr1   r3   Ú__classcell__)r   s   @r   r   r      sÈ   ø€ € € € € ðð ð
  Ðð8Ð,Cð 8ð 8ð 8ð 8ð 8ð 8ðð ð ð/ð /ð /ð /ðLð Lð Lð Lð ð˜dð ð ð ñ „Xððð ð ð ð ð ð r   r   N)Útypingr   Úbaser   Úmodeling_utilsr   Úutilsr   r	   Úutils.quantization_configr
   Ú
get_loggerr4   r"   r   r/   r   r   ú<module>rB      s¹   ðð !Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð ð ð 1Ø0Ð0Ð0Ð0Ð0Ð0à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð 
ˆÔ	˜HÑ	%Ô	%€ð*ð *ð *ð *ð *˜ñ *ô *ð *ð *ð *r   