Ë
    Gêñi–  ã                   óx   — 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y)é    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y)
ÚFourOverSixQuantizec                 ó   — || _         y )N)Úhf_quantizer)Úselfr   s     úg/var/www/pod-logistic/pod-ai/venv/lib/python3.12/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        ||«      \  }}|j	                  dd«      d   }t        |j                  «       «      d   }	|	j                  |› d�dd«      }
||	   d   }|j                  |
|«      }t        ||
«      rt        ||
«       |D ]  }|j                  |«       Œ |D �ci c]  }|› d|› �||   “Œ c}S c c}w )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   Ú )r   Úquantization_configÚkeep_master_weightsr   ÚrsplitÚlistÚkeysÚreplaceÚget_quantized_parametersÚhasattrÚdelattrÚdiscard)r   r   r   r   r   ÚkwargsÚmoduleÚ_Úmodule_nameÚfull_parameter_nameÚparameter_nameÚ	parameterÚquantized_parametersÚkeyÚquantized_keys                  r   ÚconvertzFourOverSixQuantize.convert   s  € ð ×Ñ×0Ñ0×DÒDØÐä(¨°Ó@‰	ˆ�Ø%×,Ñ,¨S°!Ó4°QÑ7ˆä" :§?¡?Ó#4Ó5°aÑ8ÐØ,×4Ñ4¸°}ÀAÐ5FÈÈAÓNˆØÐ2Ñ3°AÑ6ˆ	Ø%×>Ñ>¸~ÈyÓYÐô �6˜>Ô*Ü�F˜NÔ+ð ò 	&ˆCØ× Ñ  Õ%ð	&ð
 "6ö
àð ˆm˜1˜]˜OÐ,Ð.BÀ=Ñ.QÑQò
ð 	
ùò 
s   ÃC)NNN)Ú__name__Ú
__module__Ú__qualname__r   ÚdictÚstrÚtorchÚTensorÚnnÚModuler   r.   © r   r   r
   r
      s}   „ ò)ð )-Ø&*Ø)-ñ&
à˜˜eŸl™lÐ*Ñ+ð&
ð �x‰x�‰ Ñ%ð&
ð ˜t™ð	&
ð
 ˜3‘i $Ñ&ð&
ð 
ˆc�5—<‘<ÐÑ	 ô&
r   r
   Úconfigc                 ób  — 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=   r>   r?   r   r@   rA   rB   rC   rD   rE   rF   rG   rH   )r9   s    r   Úadapt_fouroversix_configrI   <   s”   € Ü"Ø×0Ñ0Ø$×:Ñ:Ø�l‰lØ×,Ñ,Ø"×6Ñ6Ø"×6Ñ6Ø×,Ñ,Ø×(Ñ(Ø×0Ñ0Ø×$Ñ$Ø×(Ñ(Ø×.Ñ.Ø ×2Ñ2Ø%×<Ñ<Ø &× >Ñ >ôð r   )r4   Úquantizers.quantizers_utilsr   Úutilsr   Úfouroversixr   Ú&transformers.utils.quantization_configr   Úcore_model_loadingr   r
   rI   r8   r   r   ú<module>rO      s9   ðÛ å >Ý ,ñ ÔÝ3å Då .ô*
˜-ô *
ðZÐ%6ô r   