§
    ‚Štj0  ã                   ó–   — d dl mZ ddl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  e¦   «         rd d
lZ G d„ de¦  «        Zd
S )é    )ÚTYPE_CHECKINGé   )Úis_fouroversix_availableé   )ÚHfQuantizer)Úget_module_from_name)ÚPreTrainedModel)ÚFourOverSixConfig)Úis_torch_availableNc                   óª   ‡ — e Zd ZU dZdZded<   ˆ fd„Zd„ Zddd	ed
dde	fˆ fd„Z
ddd	edefd„Z	 	 dd„Zdd„Zd„ Zedefd„¦   «         Zd„ Zd„ Zˆ xZS )ÚFourOverSixHfQuantizerz,
    FP4 quantization with fouroversix.
    Fr
   Úquantization_configc                 ó<   •—  t          ¦   «         j        |fi |¤Ž d S ©N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_fouroversix.pyr   zFourOverSixHfQuantizer.__init__   s)   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7Ð7Ð7ó    c                 ó@   — t          ¦   «         st          d¦  «        ‚d S )NzXUsing `fouroversix` requires fouroversix: `pip install fouroversix --no-build-isolation`)r   ÚImportError)r   Úargsr   s      r   Úvalidate_environmentz+FourOverSixHfQuantizer.validate_environment    s/   € Ý'Ñ)Ô)ð 	ÝØjñô ð ð	ð 	r   Úmodelr	   Ú
param_nameÚparamztorch.TensorÚreturnc                 óê   •— ddl m} t          ||¦  «        \  }}|                     t	          |¦  «        ¦  «        r|                     |¦  «        S t          ¦   «                              |||¦  «        S ©Nr   )ÚQuantizedModule)Úfouroversixr"   r   Úis_quantized_module_typeÚtypeÚget_element_sizer   Úparam_element_size)r   r   r   r   r"   ÚmoduleÚtensor_namer   s          €r   r'   z)FourOverSixHfQuantizer.param_element_size&   sw   ø€ ð 	0Ð/Ð/Ð/Ð/Ð/å2°5¸*ÑEÔEÑˆ�à×3Ò3µD¸±L´LÑAÔAð 	8Ø×*Ò*¨;Ñ7Ô7Ð7å‰wŒw×)Ò)¨%°¸UÑCÔCÐCr   c                 óŠ   — ddl m} t          ||¦  «        \  }}|                     t	          |¦  «        ¦  «        o||j        v S r!   )r#   r"   r   r$   r%   Úparameters_to_quantize)r   r   r   r   r"   r(   r)   s          r   Úparam_needs_quantizationz/FourOverSixHfQuantizer.param_needs_quantization5   sR   € ð 	0Ð/Ð/Ð/Ð/Ð/å2°5¸*ÑEÔEÑˆ�à×7Ò7½¸V¹¼ÑEÔEÐvÈ+ÐY_ÔYvÐJvÐvr   c                 ó0  — ddl m}m} ddlm}  || || j        ¦  «        ¦  «         | j        rb| j        j        sX|                     ¦   «         D ]E\  }}| 	                    t          |¦  «        ¦  «        r|j        D ]}	t          ||	¦  «         ŒŒBd S d S d S )Nr   )r"   Úquantize_modelr   )Úadapt_fouroversix_config)r#   r"   r.   Úintegrations.fouroversixr/   r   Úpre_quantizedÚkeep_master_weightsÚnamed_modulesr$   r%   r+   Údelattr)
r   r   Ú
device_mapr   r"   r.   r/   Ú_r(   Úparameter_names
             r   Ú$_process_model_before_weight_loadingz;FourOverSixHfQuantizer._process_model_before_weight_loadingA   sð   € ð 	@Ð?Ð?Ð?Ð?Ð?Ð?Ð?àGÐGÐGÐGÐGÐGàˆØØ$Ð$ TÔ%=Ñ>Ô>ñ	
ô 	
ð 	
ð Ôð 	8 dÔ&>Ô&Rð 	8Ø"×0Ò0Ñ2Ô2ð 8ð 8‘	��6Ø"×;Ò;½DÀ¹L¼LÑIÔIð 8Ø*0Ô*Gð 8ð 8˜Ý ¨Ñ7Ô7Ð7Ð7øð		8ð 	8ð 	8ð 	8ð8ð 8r   c                 ó   — |S r   © )r   r   r   s      r   Ú#_process_model_after_weight_loadingz:FourOverSixHfQuantizer._process_model_after_weight_loadingX   s   € Øˆr   c                 ó   — dS )NTr:   ©r   s    r   Úis_serializablez&FourOverSixHfQuantizer.is_serializable[   s   € Øˆtr   c                 ó   — | j         j        S r   )r   r2   r=   s    r   Úis_trainablez#FourOverSixHfQuantizer.is_trainable^   s   € àÔ'Ô;Ð;r   c                 ó$   — ddl m}  || ¦  «        S )Nr   )ÚFourOverSixQuantize)r0   rB   )r   rB   s     r   Úget_quantize_opsz'FourOverSixHfQuantizer.get_quantize_opsb   s%   € ØBÐBÐBÐBÐBÐBà"Ð" 4Ñ(Ô(Ð(r   c                 ó‚   — ddl m} t          | j        d¦  «        r#| j        j        }|                     |¦  «        }|S g S )a¾  
        Return weight conversions for loading pre-quantized checkpoints of
        other pre-quantized models (not fouroversix models). After first use,
        the pre_quantized_model_config_type attribute is set to None to ensure
        subsequent calls (e.g., during save_pretrained) return an empty list
        since, by then, the model will be saved with our framework's format
        so weight conversions are no longer needed.
        r   )ÚWeightConversionsÚpre_quantized_model_config_type)r#   rE   Úhasattrr   rF   Úget_weight_conversions)r   rE   Úmodel_config_typeÚweight_conversionss       r   rH   z-FourOverSixHfQuantizer.get_weight_conversionsg   s`   € ð 	2Ð1Ð1Ð1Ð1Ð1õ �4Ô+Ð-NÑOÔOð 	&Ø $Ô 8Ô XÐØ!2×!IÒ!IØ!ñ"ô "Ðð &Ð%àˆ	r   )r   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   ÚstrÚfloatr'   Úboolr,   r8   r;   r>   Úpropertyr@   rC   rH   Ú__classcell__)r   s   @r   r   r      sp  ø€ € € € € € ðð ð !ÐØ,Ð,Ð,Ñ,ð8ð 8ð 8ð 8ð 8ðð ð ðDà ðDð ðDð ð	Dð
 
ðDð Dð Dð Dð Dð Dð
wà ð
wð ð
wð
 
ð
wð 
wð 
wð 
wð8à ð8ð 8ð 8ð 8ð.ð ð ð ðð ð ð ð<˜dð <ð <ð <ñ „Xð<ð)ð )ð )ð
ð ð ð ð ð ð r   r   )Útypingr   Úutils.import_utilsr   Úbaser   Úquantizers_utilsr   Úmodeling_utilsr	   Úutils.quantization_configr
   Úutilsr   Útorchr   r:   r   r   ú<module>r^      só   ðØ  Ð  Ð  Ð  Ð  Ð  à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð ð >Ø0Ð0Ð0Ð0Ð0Ð0Ø=Ð=Ð=Ð=Ð=Ð=ðð ð ð ð ð ð
 ÐÑÔð Ø€L€L€Lðfð fð fð fð f˜[ñ fô fð fð fð fr   