§
    ‚Štj¤+  ã                   ó  — d dl mZ ddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZ erddlmZ dd	lmZ  e¦   «         rd d
lZ e¦   «         rd dlmZ ed„ ¦   «         Zee_         ej        e¦  «        Z G d„ de	¦  «        Zd
S )é    )ÚTYPE_CHECKINGé   )Úprepare_for_hqq_linear)Úis_hqq_availableÚis_torch_availableÚloggingé   )ÚHfQuantizer)Úget_module_from_name)ÚPreTrainedModel)Ú	HqqConfigN)Ú	HQQLinearc                 óD   — t          j        d| j        | j        ¬¦  «        S )Nr   )ÚdtypeÚdevice)ÚtorchÚemptyÚcompute_dtyper   ©Úselfs    úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_hqq.pyÚweightr   %   s   € åŒ{˜1 DÔ$6¸t¼{ÐKÑKÔKÐKó    c                   óˆ   ‡ — e Zd ZU dZdZded<   ˆ fd„Zd„ Zddd	ed
e	fd„Z
d„ Z	 	 dd„Zdd„Zd„ Zed
e	fd„¦   «         Zˆ xZS )ÚHqqHfQuantizerzŠ
    HQQ quantizer base HF class.
    nn.Linear modules are first tagged with quant_config in _process_model_before_weight_loading().
    Fr   Úquantization_configc                 óè   •— t          ¦   «         st          d¦  «        ‚ t          ¦   «         j        |fi |¤Ž d | _        d| _        t          d d ¦  «                             ¦   «         dhz
  | _        d S )Nz�A valid HQQ version (>=0.2.1) is not available. Please follow the instructions to install it: `https://github.com/mobiusml/hqq/`.FÚbias)	r   ÚImportErrorÚsuperÚ__init__r   Úusing_multi_gpur   Ústate_dict_keysÚhqq_keys)r   r   ÚkwargsÚ	__class__s      €r   r!   zHqqHfQuantizer.__init__7   s‚   ø€ ÝÑ!Ô!ð 	Ýð Tñô ð ð 	�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7ØˆŒ
Ø$ˆÔå! $¨Ñ-Ô-×=Ò=Ñ?Ô?À6À(ÑJˆŒˆˆr   c                 óÊ  — | j         €=d|v r|d         | _         n+t          j        | _         t                               d¦  «         |                     d¦  «        }t          |t          ¦  «        rtd|                     ¦   «         v sd|                     ¦   «         v rt          d¦  «        ‚t          t          |                     ¦   «         ¦  «        ¦  «        dk    | _        d S d S )Nr   zOSetting dtype to torch.float32 as the default value since it was not specified.Ú
device_mapÚcpuÚdiskz­You are attempting to use an HQQ model with a device_map that contains a CPU or disk device. This is not supported. Please remove the CPU or disk device from the device_map.r	   )r   r   Úfloat32ÚloggerÚinfoÚgetÚ
isinstanceÚdictÚvaluesÚ
ValueErrorÚlenÚsetr"   )r   Úargsr%   r(   s       r   Úvalidate_environmentz#HqqHfQuantizer.validate_environmentB   sä   € ØŒ:ÐØ˜&Ð Ð Ø# Gœ_�”
�
å"œ]�”
Ý—’ÐmÑnÔnÐnà—Z’Z Ñ-Ô-ˆ
Ý�j¥$Ñ'Ô'ð 	IØ˜
×)Ò)Ñ+Ô+Ð+Ð+¨v¸×9JÒ9JÑ9LÔ9LÐ/LÐ/LÝ ðhñô ð õ
 (+­3¨z×/@Ò/@Ñ/BÔ/BÑ+CÔ+CÑ'DÔ'DÀqÒ'H�Ô$Ð$Ð$ð	Ið 	Ir   Úmodelr   Ú
param_nameÚreturnc                 óf   — t          ||¦  «        \  }}t          |t          j        j        ¦  «        S ©N)r   r/   r   ÚnnÚLinear)r   r7   r8   r%   ÚmoduleÚ_s         r   Úparam_needs_quantizationz'HqqHfQuantizer.param_needs_quantization’   s+   € Ý(¨°
Ñ;Ô;‰	ˆ�õ ˜&¥%¤(¤/Ñ2Ô2Ð2r   c                 ó&   ‡‡— d„ Šˆˆfd„‰_         ‰S )Nc                 óÊ   — t          j        |                     | j        ¦  «        |                      ¦   «                              ¦   «         ¦  «        }| j        �
|| j        z  }|S r;   )r   ÚmatmulÚtor   Ú
dequantizeÚtr   )r   ÚxÚouts      r   Úforward_with_devicezEHqqHfQuantizer._patch_layer_for_multigpu.<locals>.forward_with_deviceì   sP   € Ý”,˜qŸtšt D¤KÑ0Ô0°$·/²/Ñ2CÔ2C×2EÒ2EÑ2GÔ2GÑHÔHˆCØŒyÐ$Ø�t”yÑ �ØˆJr   c                 ó   •—  ‰‰| ¦  «        S r;   © )rG   rI   Ú	hqq_layers    €€r   ú<lambda>z:HqqHfQuantizer._patch_layer_for_multigpu.<locals>.<lambda>ò   s   ø€ Ð&9Ð&9¸)ÀQÑ&GÔ&G€ r   )Úforward)r   rL   rI   s    `@r   Ú_patch_layer_for_multigpuz(HqqHfQuantizer._patch_layer_for_multigpuë   s0   øø€ ð	ð 	ð 	ð HÐGÐGÐGÐGˆ	ÔØÐr   c                 ó2   — t          || j        ¬¦  «        }d S )N)r   )r   r   ©r   r7   r%   s      r   Ú$_process_model_before_weight_loadingz3HqqHfQuantizer._process_model_before_weight_loadingõ   s   € õ ' uÀ$ÔBZÐ[Ñ[Ô[ˆˆˆr   c                 ón   — t          |dd¦  «         t          |d|                      ¦   «         ¦  «         |S )NÚis_hqq_quantizedTÚis_hqq_serializable)ÚsetattrÚis_serializablerQ   s      r   Ú#_process_model_after_weight_loadingz2HqqHfQuantizer._process_model_after_weight_loadingþ   s9   € Ý�Ð)¨4Ñ0Ô0Ð0Ý�Ð,¨d×.BÒ.BÑ.DÔ.DÑEÔEÐEØˆr   c                 ó   — dS ©NTrK   r   s    r   rW   zHqqHfQuantizer.is_serializable  s   € Øˆtr   c                 ó   — dS rZ   rK   r   s    r   Úis_trainablezHqqHfQuantizer.is_trainable  s   € àˆtr   )r7   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r!   r6   ÚstrÚboolr@   rO   rR   rX   rW   Úpropertyr\   Ú__classcell__)r&   s   @r   r   r   .   s  ø€ € € € € € ðð ð
 !ÐØ$Ð$Ð$Ñ$ð	Kð 	Kð 	Kð 	Kð 	KðIð Ið Ið`3Ð.?ð 3ÈSð 3Ð_cð 3ð 3ð 3ð 3ðrð ð ð\à ð\ð \ð \ð \ðð ð ð ð
ð ð ð ð˜dð ð ð ñ „Xðð ð ð ð r   r   )Útypingr   Úintegrationsr   Úutilsr   r   r   Úbaser
   Úquantizers_utilsr   Úmodeling_utilsr   Úutils.quantization_configr   r   Úhqq.core.quantizer   re   r   Ú
get_loggerr]   r,   r   rK   r   r   ú<module>rp      sR  ðð !Ð  Ð  Ð  Ð  Ð  à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð ð 6Ø0Ð0Ð0Ð0Ð0Ð0Ø5Ð5Ð5Ð5Ð5Ð5ð ÐÑÔð Ø€L€L€LàÐÑÔð 
Ø+Ð+Ð+Ð+Ð+Ð+ð
 ðLð Lñ „XðLð €IÔà	ˆÔ	˜HÑ	%Ô	%€ðZð Zð Zð Zð Z�[ñ Zô Zð Zð Zð Zr   