Ë
    T^(hl  ã                   óÄ   — d dl Z d dl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 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)é    N)ÚTYPE_CHECKINGÚOptional)Úversioné   )ÚHfQuantizeré   )ÚPreTrainedModel)Úreplace_with_aqlm_linear)Úis_accelerate_availableÚis_aqlm_availableÚis_torch_availableÚlogging)ÚQuantizationConfigMixinc                   ó~   ‡ — e Zd ZdZdZdgZdZdefˆ fd„Zd„ Z	dd„Z
	 	 dd„Zdd„Zedd	ed
   fd„«       Zdd„Zˆ xZS )ÚAqlmHfQuantizerzS
    Quantizer of the AQLM method. Enables the loading of prequantized models.
    TÚaqlmNÚquantization_configc                 ó4   •— t        ‰| �  |fi |¤Ž || _        y ©N)ÚsuperÚ__init__r   )Úselfr   ÚkwargsÚ	__class__s      €úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_aqlm.pyr   zAqlmHfQuantizer.__init__-   s   ø€ Ü‰ÑÐ,Ñ7°Ò7Ø#6ˆÕ ó    c                 óX   — t        «       st        d«      ‚t        «       st        d«      ‚y )NzGUsing `aqlm` quantization requires Accelerate: `pip install accelerate`zDUsing `aqlm` quantization requires AQLM: `pip install aqlm[gpu,cpu]`)r   ÚImportErrorr   )r   Úargsr   s      r   Úvalidate_environmentz$AqlmHfQuantizer.validate_environment1   s+   € Ü&Ô(ÜÐgÓhÐhä Ô"ÜÐdÓeÐeð #r   c                 óÞ   — |€jt         j                  j                  «       r't         j                  }t        j                  d«       |S t         j                  }t        j                  d«       |S )Nz…CUDA available. Assuming AQLM inference on GPU and loading the model in `torch.float16`. To overwrite it, set `torch_dtype` manually.zŠCUDA is unavailable. Assuming AQLM inference on CPU and loading the model in `torch.float32`. To overwrite it, set `torch_dtype` manually.)ÚtorchÚcudaÚis_availableÚfloat16ÚloggerÚinfoÚfloat32)r   Útorch_dtypes     r   Úupdate_torch_dtypez"AqlmHfQuantizer.update_torch_dtype8   s`   € ØÐÜ�z‰z×&Ñ&Ô(Ü#Ÿm™m�Ü—‘ð \ôð Ðô	 $Ÿm™m�Ü—‘ð aôð Ðr   Úmodelr	   c                 ó’   — t        || j                  | j                  j                  ¬«       | j                  |j                  _        y )N)r   Úlinear_weights_not_to_quantize)r
   r   r-   Úconfig©r   r+   r   s      r   Ú$_process_model_before_weight_loadingz4AqlmHfQuantizer._process_model_before_weight_loadingF   s;   € ô
 	!ØØ $× 8Ñ 8Ø+/×+CÑ+C×+bÑ+bõ	
ð
 ,0×+CÑ+Cˆ�‰Õ(r   c                 ó   — |S r   © r/   s      r   Ú#_process_model_after_weight_loadingz3AqlmHfQuantizer._process_model_after_weight_loadingR   s   € Øˆr   c                 ó  — t        j                  t        j                  j                  d«      «      t        j                  d«      k\  }|ryt        j                  dt        j                  j                  d«      › d�«       y)Nr   z1.0.2Tz$Currently installed `aqlm` version (zw) doesn't support training. If you wish to train a quantized model, please update `aqlm` with `pip install aqlm>=1.0.2`F)r   ÚparseÚ	importlibÚmetadatar&   Úwarning)r   r+   Úaqlm_supports_trainings      r   Úis_trainablezAqlmHfQuantizer.is_trainableU   sr   € ä!(§¡¬y×/AÑ/A×/IÑ/IÈ&Ó/QÓ!RÔV]×VcÑVcÐdkÓVlÑ!lÐÙ!Øä�N‰NØ6´y×7IÑ7I×7QÑ7QÐRXÓ7YÐ6Zð  [Rð  Sôð r   c                  ó   — y)NTr2   )r   Úsafe_serializations     r   Úis_serializablezAqlmHfQuantizer.is_serializable`   s   € Ør   )r)   útorch.dtypeÚreturnr>   )r+   r	   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚrequired_packagesÚoptimum_quantizerr   r   r    r*   r0   r3   Úpropertyr   r:   r=   Ú__classcell__)r   s   @r   r   r   $   sp   ø„ ñð  ÐØ˜ÐØÐð7Ð,Cõ 7òfóð
Dà ó
Dóð ñ (Ð+<Ñ"=ò ó ð÷r   r   )r6   Útypingr   r   Ú	packagingr   Úbaser   Úmodeling_utilsr	   Úintegrationsr
   Úutilsr   r   r   r   Úutils.quantization_configr   r"   Ú
get_loggerr@   r&   r   r2   r   r   ú<module>rQ      sP   ðó ß *å å ñ Ý0å 3ß [Ó [Ý ?ñ ÔÛà	ˆ×	Ñ	˜HÓ	%€ô=�kõ =r   