ó
    qyüiÁ  ã                   óÀ   • S SK Jr  SSKJr  SSKJr  \(       a  SSKJr  SSKJ	r	J
r
JrJr  SSKJr  \" 5       (       a  S S	Kr\R                   " \5      r " S
 S\5      rg	)é    )ÚTYPE_CHECKINGé   )ÚHfQuantizer)Úget_module_from_nameé   )ÚPreTrainedModel)Úis_accelerate_availableÚis_optimum_quanto_availableÚis_torch_availableÚlogging)ÚQuantoConfigNc                   óà   ^ • \ rS rSr% SrSrS\S'   S\4U 4S jjrS r	SS	S
\
S\4S jrS\\
\\
-  4   S\\
\\
-  4   4S jrSS	S
\
SSS\4U 4S jjrSS jr\S\4S j5       rS rS rSrU =r$ )ÚQuantoHfQuantizeré&   z"
Quantizer for the quanto library
Fr   Úquantization_configc                 óŒ   >• [         TU ]  " U40 UD6  SSSSS.nUR                  U R                  R                  S 5      U l        g )Nr   g      à?g      Ð?)Úint8Úfloat8Úint4Úint2)ÚsuperÚ__init__Úgetr   ÚweightsÚquantized_param_size)Úselfr   ÚkwargsÚmap_to_param_sizeÚ	__class__s       €Úe/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/quantizers/quantizer_quanto.pyr   ÚQuantoHfQuantizer.__init__.   sN   ø€ Ü‰ÒÐ,Ñ7°Ò7àØØØñ	
Ðð %6×$9Ñ$9¸$×:RÑ:R×:ZÑ:ZÐ\`Ó$aˆÕ!ó    c                 ó€  • [        5       (       d  [        S5      e[        5       (       d  [        S5      eUR                  S5      n[	        U[
        5      (       aB  [        U5      S:”  a  SUR                  5       ;   d  SUR                  5       ;   a  [        S5      eU R                  R                  b  [        S5      eg )	NzhLoading an optimum-quanto quantized model requires optimum-quanto library (`pip install optimum-quanto`)z`Loading an optimum-quanto quantized model requires accelerate library (`pip install accelerate`)Ú
device_mapr   ÚcpuÚdiskzÜYou are attempting to load an model with a device_map that contains a CPU or disk device.This is not supported with quanto when the model is quantized on the fly. Please remove the CPU or disk device from the device_map.zÂWe don't support quantizing the activations with transformers library.Use quanto library for more complex use cases such as activations quantization, calibration and quantization aware training.)r
   ÚImportErrorr	   r   Ú
isinstanceÚdictÚlenÚvaluesÚ
ValueErrorr   Úactivations)r   Úargsr   r$   s       r    Úvalidate_environmentÚ&QuantoHfQuantizer.validate_environment8   s¿   € Ü*×,Ñ,ÜØzóð ô '×(Ñ(ÜØróð ð —Z‘Z Ó-ˆ
Ü�j¤$×'Ñ'Ü�:‹ Ó" u°
×0AÑ0AÓ0CÓ'CÀvÐQ[×QbÑQbÓQdÓGdÜ ðPóð ð
 ×#Ñ#×/Ñ/Ñ;ÜðOóð ð <r"   Úmodelr   Ú
param_nameÚreturnc                 óx   • SSK Jn  [        X5      u  pV[        XT5      (       a  SU;   a  UR                  (       + $ g)Nr   )ÚQModuleMixinÚweightF)Úoptimum.quantor5   r   r(   Úfrozen)r   r1   r2   r   r5   ÚmoduleÚtensor_names          r    Úparam_needs_quantizationÚ*QuantoHfQuantizer.param_needs_quantizationO   s4   € Ý/ä2°5ÓEÑˆä�f×+Ñ+°¸KÓ0Gà—}‘}Ô$Ð$àr"   Ú
max_memoryc                 ó`   • UR                  5        VVs0 s H
  u  p#X#S-  _M     nnnU$ s  snnf )NgÍÌÌÌÌÌì?)Úitems)r   r=   ÚkeyÚvals       r    Úadjust_max_memoryÚ#QuantoHfQuantizer.adjust_max_memoryZ   s5   € Ø6@×6FÑ6FÔ6HÔIÒ6H©(¨#�c ™:’oÑ6Hˆ
ÑIØÐùó Js   ”*Úparamztorch.Tensorc                 ó‚   >• U R                  X5      (       a  U R                  b  U R                  $ [        TU ]  XU5      $ )z4Return the element size (in bytes) for `param_name`.)r;   r   r   Úparam_element_size)r   r1   r2   rD   r   s       €r    rF   Ú$QuantoHfQuantizer.param_element_size^   s=   ø€ à×(Ñ(¨×;Ñ;À×@YÑ@YÑ@eØ×,Ñ,Ð,ä‰wÑ)¨%¸UÓCÐCr"   c                 ó°   • SSK Jn  U R                  XR                  R                  UR
                  5      U l        U" XR                  U R                  S9ng )Nr   )Úreplace_with_quanto_layers)Úmodules_to_not_convertr   )ÚintegrationsrI   Úget_modules_to_not_convertr   rJ   Ú_keep_in_fp32_modules)r   r1   r   rI   s       r    Ú$_process_model_before_weight_loadingÚ6QuantoHfQuantizer._process_model_before_weight_loadinge   sM   € Ý=à&*×&EÑ&EØ×+Ñ+×BÑBÀE×D_ÑD_ó'
ˆÔ#ñ +Ø×*EÑ*EÐ[_×[sÑ[sñ
‰r"   c                 ó   • g)NT© ©r   s    r    Úis_trainableÚQuantoHfQuantizer.is_trainablep   s   € àr"   c                 ó   • g)NFrQ   rR   s    r    Úis_serializableÚ!QuantoHfQuantizer.is_serializablet   s   € Ør"   c                 ó   • SSK Jn  U" U 5      $ )Nr   )ÚQuantoQuantize)Úintegrations.quantorY   )r   rY   s     r    Úget_quantize_opsÚ"QuantoHfQuantizer.get_quantize_opsw   s   € Ý8á˜dÓ#Ð#r"   )rJ   r   )r1   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   r/   ÚstrÚboolr;   r)   ÚintrB   ÚfloatrF   rN   ÚpropertyrS   rV   r[   Ú__static_attributes__Ú__classcell__)r   s   @r    r   r   &   sË   ø‡ ñð !ÐØ'Ó'ðb¨L÷ bòð.	Ð.?ð 	ÈSð 	Ð_cô 	ð¨D°°c¸C±i°Ñ,@ð ÀTÈ#ÈsÐUXÉyÈ.ÑEYô ðDÐ(9ð DÀsð DÐSað DÐfk÷ Dô	
ð ð˜dó ó ðò÷$ð $r"   r   )Útypingr   Úbaser   Úquantizers_utilsr   Úmodeling_utilsr   Úutilsr	   r
   r   r   Úutils.quantization_configr   ÚtorchÚ
get_loggerr]   Úloggerr   rQ   r"   r    Ú<module>rt      sS   ðõ !å Ý 2ö Ý0÷ó õ 5ñ ×ÑÛà	×	Ò	˜HÓ	%€ôT$˜õ T$r"   