§
    ‚Štj–  ã                   ó†   — d dl 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
  G d„ d	e
¦  «        Zd
efd„ZdS )é    Né   )Úget_module_from_name)Úis_fouroversix_available)ÚModelQuantizationConfig)ÚFourOverSixConfig)ÚConversionOpsc                   óž   — e Zd Zd„ Z	 	 	 d	deeej        f         dej        j	        dz  dedz  de
e         dz  deeej        f         f
d„ZdS )
ÚFourOverSixQuantizec                 ó   — || _         d S )N)Úhf_quantizer)Úselfr   s     úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/integrations/fouroversix.pyÚ__init__zFourOverSixQuantize.__init__   s   € Ø(ˆÔÐÐó    NÚ
input_dictÚmodelÚfull_layer_nameÚmissing_keysÚreturnc                 óæ  ‡‡— | j         j        j        r|S t          ||¦  «        \  }}|                     dd¦  «        d         Št          |                     ¦   «         ¦  «        d         }|                     ‰› d�dd¦  «        }	||         d         }
|                     |	|
¦  «        Št          ||	¦  «        rt          ||	¦  «         |D ]}|                     |¦  «         Œˆˆfd„‰D ¦   «         S )aZ  
        We need to store some parameters to create the quantized weight. For example, fouroversix
        requires 4 values that are stored in the checkpoint to recover the quantized weight. So we
        store them in a dict that is stored in hf_quantizer for now as we can't save it in the op
        since we create an op per tensor.
        ú.é   r   Ú c                 ó,   •— i | ]}‰› d |› �‰|         “ŒS )r   © )Ú.0Úquantized_keyÚmodule_nameÚquantized_parameterss     €€r   ú
<dictcomp>z/FourOverSixQuantize.convert.<locals>.<dictcomp>6   s?   ø€ ð 
ð 
ð 
àð Ð,Ð,˜]Ð,Ð,Ð.BÀ=Ô.Qð
ð 
ð 
r   )r   Úquantization_configÚkeep_master_weightsr   ÚrsplitÚlistÚkeysÚreplaceÚget_quantized_parametersÚhasattrÚdelattrÚdiscard)r   r   r   r   r   ÚkwargsÚmoduleÚ_Úfull_parameter_nameÚparameter_nameÚ	parameterÚkeyr   r   s               @@r   ÚconvertzFourOverSixQuantize.convert   s)  øø€ ð ÔÔ0ÔDð 	ØÐå(¨°Ñ@Ô@‰	ˆ�Ø%×,Ò,¨S°!Ñ4Ô4°QÔ7ˆå" :§?¢?Ñ#4Ô#4Ñ5Ô5°aÔ8ÐØ,×4Ò4¸Ð5FÐ5FÐ5FÈÈAÑNÔNˆØÐ2Ô3°AÔ6ˆ	Ø%×>Ò>¸~ÈyÑYÔYÐõ �6˜>Ñ*Ô*ð 	,Ý�F˜NÑ+Ô+Ð+ð ð 	&ð 	&ˆCØ× Ò  Ñ%Ô%Ð%Ð%ð
ð 
ð 
ð 
ð 
à!5ð
ñ 
ô 
ð 	
r   )NNN)Ú__name__Ú
__module__Ú__qualname__r   ÚdictÚstrÚtorchÚTensorÚnnÚModuler$   r2   r   r   r   r
   r
      s¥   € € € € € ð)ð )ð )ð )-Ø&*Ø)-ð&
ð &
à˜˜eœlÐ*Ô+ð&
ð ŒxŒ Ñ%ð&
ð ˜t™ð	&
ð
 ˜3”i $Ñ&ð&
ð 
ˆc�5”<ÐÔ	 ð&
ð &
ð &
ð &
ð &
ð &
r   r
   Úconfigc                 óÔ   — t          | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        | j        | j        ¬¦  «        S )N)Úactivation_dtypeÚactivation_scale_ruleÚdtypeÚgradient_dtypeÚgradient_scale_ruler"   Úmatmul_backendÚoutput_dtypeÚquantize_backendÚ
scale_ruleÚweight_dtypeÚweight_scale_2dÚweight_scale_ruleÚmodules_to_not_convertÚmodule_config_overrides)r   r>   r?   r@   rA   rB   r"   rC   rD   rE   rF   rG   rH   rI   rJ   rK   )r<   s    r   Úadapt_fouroversix_configrL   <   sr   € Ý"ØÔ0Ø$Ô:ØŒlØÔ,Ø"Ô6Ø"Ô6ØÔ,ØÔ(ØÔ0ØÔ$ØÔ(ØÔ.Ø Ô2Ø%Ô<Ø &Ô >ðñ ô ð r   )r8   Úquantizers.quantizers_utilsr   Úutilsr   Úfouroversixr   Ú&transformers.utils.quantization_configr   Úcore_model_loadingr   r
   rL   r   r   r   ú<module>rR      sÌ   ðØ €€€à >Ð >Ð >Ð >Ð >Ð >Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð ÐÑÔð 4Ø3Ð3Ð3Ð3Ð3Ð3à DÐ DÐ DÐ DÐ DÐ Dà .Ð .Ð .Ð .Ð .Ð .ð*
ð *
ð *
ð *
ð *
˜-ñ *
ô *
ð *
ðZÐ%6ð ð ð ð ð ð r   