+
    œ°³jf  ã                   óæ   € ^ RI Ht ^RIHt ^RIHt ]'       d   ^RIHt ^RIH	t	 ^RI
HtHtHtHtHtHtHtHtHt ]! 4       '       d   ^ RIt^RIHt ]P.                  ! ]4      t ! R	 R
]4      tR# )é    )ÚTYPE_CHECKING)ÚHfQuantizer)Úget_module_from_name)ÚPreTrainedModel)ÚBitsAndBytesConfig)	ÚACCELERATE_MIN_VERSIONÚBITSANDBYTES_MIN_VERSIONÚis_accelerate_availableÚis_bitsandbytes_availableÚis_torch_availableÚis_torch_hpu_availableÚis_torch_npu_availableÚis_torch_xpu_availableÚloggingN)ÚWeightConverterc                   óê   a a€ ] tR t^-t oRtRtV 3R ltR tV3R lV 3R lltV3R lR lt	V3R	 lR
 lt
R tV3R lR ltV3R lR ltR t]V3R lR l4       tRR ltR tR tV3R ltRtVtV ;t# )ÚBnb4BitHfQuantizerz:
4-bit quantization from bitsandbytes quantization method
Fc                ó*   <€ \         SV `  ! V3/ VB  R # ©N)ÚsuperÚ__init__)ÚselfÚquantization_configÚkwargsÚ	__class__s   &&,€Úk/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/quantizers/quantizer_bnb_4bit.pyr   ÚBnb4BitHfQuantizer.__init__5   s   ø€ Ü‰ÒÐ,Ñ7°Ô7ó    c                ó¶  € \        4       '       g   \        R \         R24      h\        4       '       g   \        R\         R24      h^RIHp V! RR7       VP                  R4      pV P                  P                  '       gW   \        V\        4      '       d?   \        VP                  4       4      pVR08w  d   RV9   g   R	V9   d   \        R
4      hR# R# R# R# )zWUsing `bitsandbytes` 4-bit quantization requires accelerate: `pip install 'accelerate>=z'`z]Using `bitsandbytes` 4-bit quantization requires bitsandbytes: `pip install -U bitsandbytes>=Ú`)Ú!validate_bnb_backend_availabilityT)Úraise_exceptionÚ
device_mapÚcpuÚdiska¾  Some modules are dispatched on the CPU or the disk. Make sure you have enough GPU RAM to fit the quantized model. If you want to dispatch the model on the CPU or the disk while keeping these modules in 32-bit, you need to set `llm_int8_enable_fp32_cpu_offload=True` and pass a custom `device_map` to `from_pretrained`. Check https://huggingface.co/docs/transformers/main/en/main_classes/quantization#offload-between-cpu-and-gpu for more details. N)r
   ÚImportErrorr   r   r	   Úintegrationsr!   Úgetr   Ú llm_int8_enable_fp32_cpu_offloadÚ
isinstanceÚdictÚsetÚvaluesÚ
ValueError)r   Úargsr   r!   r#   r-   s   &*,   r   Úvalidate_environmentÚ'Bnb4BitHfQuantizer.validate_environment8   s÷   € Ü&×(Ò(ÜØiô  kAð  jBð  BDð  Eóð ô )×*Ò*ÜØoô  qIð  pJð  JKð  Lóð õ 	Eá)¸$Õ?à—Z‘Z Ó-ˆ
Ø×'Ñ'×H×HÐHÌZÐXbÔdh×MiÒMiÜ˜×*Ñ*Ó,Ó-ˆFØ˜%˜Ô  e¨v¤o¸À6Ô9IÜ ð)óð ñ :JÑ ñ NjÑHr   c                ó.   <€ V ^8„  d   QhRRRS[ RRRS[/# )é   Úmodelr   Ú
param_nameÚparamztorch.TensorÚreturn)ÚstrÚfloat)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚBnb4BitHfQuantizer.__annotate__S   s2   ø€ ÷ Dñ DÐ(9ð DÁsð DÐSað DÑfkñ Dr   c                óV   <€ V P                  W4      '       d   R# \        SV `	  WV4      # )z4Return the element size (in bytes) for `param_name`.g      à?)Úparam_needs_quantizationr   Úparam_element_size)r   r4   r5   r6   r   s   &&&&€r   r@   Ú%Bnb4BitHfQuantizer.param_element_sizeS   s)   ø€ à×(Ñ(¨×;Ò;áä‰wÑ)¨%¸UÓCÐCr   c                ó*   <€ V ^8„  d   QhRRRS[ RS[/# )r3   r4   r   r5   r7   )r8   Úbool)r:   r;   s   "€r   r<   r=   [   s)   ø€ ÷ Hñ HÐ.?ð HÉSð HÑ_cñ Hr   c                ó|   € ^ RI p\        W4      w  rV\        WTP                  P                  4      ;'       d    VR8g  # )r   NÚbias)Úbitsandbytesr   r*   ÚnnÚ
Linear4bit)r   r4   r5   r   ÚbnbÚmoduleÚnames   &&&,   r   r?   Ú+Bnb4BitHfQuantizer.param_needs_quantization[   s2   € Û"ä+¨EÓ>‰ˆÜ˜&§&¡&×"3Ñ"3Ó4×GÐG¸À¹ÐGr   c                ór   <€ V ^8„  d   QhRS[ S[S[S[,          3,          RS[ S[S[S[,          3,          /# )r3   Ú
max_memoryr7   )r+   r8   Úint)r:   r;   s   "€r   r<   r=   a   s6   ø€ ÷ ñ ©D±±c¹Cµi°Õ,@ð ÁTÉ#ÉsÑUXÍyÈ.ÕEYñ r   c                óf   € VP                  4        UUu/ uF  w  r#W#R ,          bK  	  pppV# u uppi )gÍÌÌÌÌÌì?)Úitems)r   rN   ÚkeyÚvals   &&  r   Úadjust_max_memoryÚ$Bnb4BitHfQuantizer.adjust_max_memorya   s5   € à6@×6FÑ6FÔ6HÔIÑ6H©(¨#�c �:’oÑ6Hˆ
ÑIØÐùó Js   ”-c                ó^  € VEf(   \         P                  P                  4       '       d"   R\         P                  P                  4       /pMÉ\	        4       '       d;   \        \         R4      '       d%   RR\         P                  P                  4        2/pM\        4       '       d;   \        \         R4      '       d%   RR\         P                  P                  4        2/pM5\        4       '       d"   R\         P                  P                  4       /pMRR/p\        P                  RV R24       V# )	NÚ Únpuznpu:Úhpuzhpu:r$   z:The device_map was not initialized. Setting device_map to zL. If you want to use the model for inference, please set device_map ='auto' )ÚtorchÚcudaÚis_availableÚcurrent_devicer   ÚhasattrrX   r   rY   r   ÚxpuÚloggerÚinfo)r   r#   s   &&r   Úupdate_device_mapÚ$Bnb4BitHfQuantizer.update_device_mapf   sí   € ØÓÜ�z‰z×&Ñ&×(Ò(Ø ¤%§*¡*×";Ñ";Ó"=Ð>‘
Ü'×)Ò)¬g´e¸U×.CÒ.CØ  D¬¯©×)AÑ)AÓ)CÐ(DÐ"EÐF‘
Ü'×)Ò)¬g´e¸U×.CÒ.CØ  D¬¯©×)AÑ)AÓ)CÐ(DÐ"EÐF‘
Ü'×)Ò)Ø ¤%§)¡)×":Ñ":Ó"<Ð=‘
à  %˜[�
Ü�K‰Kð)Ø)3¨ð 5]ð]ôð
 Ðr   c                ó   <€ V ^8„  d   QhRR/# ©r3   r4   r   © )r:   r;   s   "€r   r<   r=   y   s   ø€ ÷ 
ñ 
à ñ
r   c                óÎ  € ^RI Hp V P                  WP                  P                  VP
                  4      V n        V P                  P                  '       d^   \        V\        4      '       dH   VP                  4        UUu. uF  w  rVVR9   g   K  VNK  	  pppV P                  P                  V4       V! VV P                  V P                  V P                  R7      pR# u uppi )r3   )Úreplace_with_bnb_linear)Úmodules_to_not_convertr   Úpre_quantizedN)r%   r$   )r'   rh   Úget_modules_to_not_convertr   Úllm_int8_skip_modulesÚ_keep_in_fp32_modulesri   r)   r*   r+   rQ   Úextendrj   )r   r4   r#   r   rh   rR   ÚvalueÚkeys_on_cpus   &&&,    r   Ú$_process_model_before_weight_loadingÚ7Bnb4BitHfQuantizer._process_model_before_weight_loadingy   s¿   € õ 	;à&*×&EÑ&EØ×+Ñ+×AÑAÀ5×C^ÑC^ó'
ˆÔ#ð ×#Ñ#×D×DÐDÜ˜*¤d×+Ò+Ø5?×5EÑ5EÔ5GÔdÑ5G¡z sÈ5ÐTcÑKcŸs˜sÑ5G�ÑdØ×+Ñ+×2Ñ2°;Ô?á'ØØ#'×#>Ñ#>Ø $× 8Ñ 8Ø×,Ñ,ô	
Šùó es   ÂC!ÂC!c                ó   <€ V ^8„  d   QhRR/# re   rf   )r:   r;   s   "€r   r<   r=   ‘   s   ø€ ÷ ñ Ð9Jñ r   c                óV   € \        VR R4       \        VRV P                  4       4       V# )Úis_loaded_in_4bitTÚis_4bit_serializable)ÚsetattrÚis_serializable)r   r4   r   s   &&,r   Ú#_process_model_after_weight_loadingÚ6Bnb4BitHfQuantizer._process_model_after_weight_loading‘   s*   € Ü�Ð*¨DÔ1Ü�Ð-¨t×/CÑ/CÓ/EÔFØˆr   c                ó   € R # ©Trf   ©r   s   &r   rx   Ú"Bnb4BitHfQuantizer.is_serializable–   s   € Ùr   c                ó    <€ V ^8„  d   QhRS[ /# )r3   r7   )rC   )r:   r;   s   "€r   r<   r=   š   s   ø€ ÷ ñ ™dñ r   c                ó   € R # r|   rf   r}   s   &r   Úis_trainableÚBnb4BitHfQuantizer.is_trainable™   s   € ár   c                ó:   € ^RI Hp V! WP                  VR7      pV# )r3   )Údequantize_and_replace)r   Údtype)r'   r„   r   )r   r4   r…   r„   s   &&& r   Ú_dequantizeÚBnb4BitHfQuantizer._dequantize�   s   € Ý9á& u×BZÑBZÐbgÔhˆØˆr   c                ó   € ^RI Hp V! V 4      # )r3   )ÚBnb4bitQuantize)Úintegrations.bitsandbytesr‰   )r   r‰   s   & r   Úget_quantize_opsÚ#Bnb4BitHfQuantizer.get_quantize_ops£   s   € Ý?á˜tÓ$Ð$r   c                óf   € ^RI Hp V P                  '       d   \        . RORV! V 4      .R7      .# . # )r3   )ÚBnb4bitDeserializeÚweight)Úsource_patternsÚtarget_patternsÚ
operations)zweight.nested_absmaxzweight.nested_quant_mapzweight.quant_mapzweight.absmaxz$weight.quant_state.bitsandbytes__nf4z$weight.quant_state.bitsandbytes__fp4r�   )rŠ   rŽ   rj   r   )r   rŽ   s   & r   Úget_weight_conversionsÚ)Bnb4BitHfQuantizer.get_weight_conversions¨   s?   € ÝBà××Ðäò%ð %-Ù 2°4Ó 8Ð9ôðð ð ˆ	r   c                ó$   <€ V ^8„  d   Qh/ R;R&   # )r3   r   r   rf   )r:   r;   s   "€r   r<   r=   -   s   ø‡ ‚ ð .Ñ-ò r   )ri   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úrequires_calibrationr   r0   r@   r?   rT   rb   rq   ry   rx   Úpropertyr�   r†   r‹   r“   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   r;   s   @@r   r   r   -   s‡   ù‡ € ñð !Ðõ8ò÷6Dó D÷Hð H÷ð ò
÷&
ð 
÷0ð ò
ð ÷ó ðôò%ò
÷w … r   r   )Útypingr   Úbaser   Úquantizers_utilsr   Úmodeling_utilsr   Úutils.quantization_configr   Úutilsr   r	   r
   r   r   r   r   r   r   rZ   Úcore_model_loadingr   Ú
get_loggerr–   r`   r   rf   r   r   Ú<module>r©      sY   ðõ !å Ý 2÷ Ý0Ý>÷
÷ 
õ 
ñ ×ÒÛå4à	×	Ò	˜HÓ	%€ôN˜ö Nr   