Ë
    HêñiÝ
  ã                   ó¸   — d dl mZ ddlmZ erddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZ dd	lmZ  e«       rd d
lZ ej"                  e«      Z G d„ de«      Zy
)é    )ÚTYPE_CHECKINGé   )ÚHfQuantizeré   )ÚPreTrainedModel)Ú
SpQRConfig)Úreplace_with_spqr_linear)Úis_accelerate_availableÚis_spqr_availableÚis_torch_availableÚlogging)ÚQuantizationConfigMixinNc                   óh   ‡ — e Zd ZU dZdZded<   defˆ fd„Zd„ Zdd„Z		 	 dd„Z
ed	„ «       Zd
„ Zˆ xZS )ÚSpQRHfQuantizerzS
    Quantizer of the SpQR method. Enables the loading of prequantized models.
    Tr   Úquantization_configc                 ó&   •— t        ‰| �  |fi |¤Ž y )N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €úh/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_spqr.pyr   zSpQRHfQuantizer.__init__*   s   ø€ Ü‰ÑÐ,Ñ7°Ó7ó    c                 óª   — t         j                  j                  «       st        d«      ‚t	        «       st        d«      ‚t        «       st        d«      ‚y )Nz,GPU is required to run SpQR quantized model.zGUsing `spqr` quantization requires Accelerate: `pip install accelerate`zFUsing `spqr` quantization requires SpQR: `pip install spqr_quant[gpu]`)ÚtorchÚcudaÚis_availableÚRuntimeErrorr
   ÚImportErrorr   )r   Úargsr   s      r   Úvalidate_environmentz$SpQRHfQuantizer.validate_environment-   sG   € Ü�z‰z×&Ñ&Ô(ÜÐMÓNÐNä&Ô(ÜÐgÓhÐhä Ô"ÜÐfÓgÐgð #r   c                 óB   — |t         j                  k7  rt        d«      ‚|S )NzdYou cannot use any type other than torch.float16 for SpQR. Please set it totorch.float16 explicitly.)r   Úfloat16Ú
ValueError)r   Údtypes     r   Úupdate_dtypezSpQRHfQuantizer.update_dtype7   s%   € Ø”E—M‘MÒ!ÜØvóð ð ˆr   c                 ó´   — | j                  || j                  j                  |j                  «      | _        t	        || j                  | j                  ¬«       y )N)r   Úmodules_to_not_convert)Úget_modules_to_not_convertr   r(   Ú_keep_in_fp32_modulesr	   )r   Úmodelr   s      r   Ú$_process_model_before_weight_loadingz4SpQRHfQuantizer._process_model_before_weight_loading>   sO   € ð
 '+×&EÑ&EØ�4×+Ñ+×BÑBÀE×D_ÑD_ó'
ˆÔ#ô 	!ØØ $× 8Ñ 8Ø#'×#>Ñ#>ö	
r   c                  ó   — y)NF© ©r   s    r   Úis_trainablezSpQRHfQuantizer.is_trainableL   s   € àr   c                  ó   — y)NTr.   r/   s    r   Úis_serializablezSpQRHfQuantizer.is_serializableP   s   € Ør   )r%   útorch.dtypeÚreturnr3   )r+   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   r!   r&   r,   Úpropertyr0   r2   Ú__classcell__)r   s   @r   r   r   "   sT   ø… ñð  ÐØ%Ó%ð8Ð,Cõ 8òhóð
à ó
ð ñó ðör   r   )Útypingr   Úbaser   Úmodeling_utilsr   Úutils.quantization_configr   Úintegrationsr	   Úutilsr
   r   r   r   r   r   Ú
get_loggerr5   Úloggerr   r.   r   r   ú<module>rE      sM   ðõ !å ñ Ý0Ý6å 3ß [Ó [Ý ?ñ ÔÛà	ˆ×	Ñ	˜HÓ	%€ô/�kõ /r   