Ë
    l^(hó  ã                  óž   — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z
d dlmZ erd dlmZ  ej                  e«      Z G d„ de«      Zy)	é    )ÚannotationsN)Únullcontext)ÚTYPE_CHECKING)ÚSentenceEvaluator)ÚSentenceTransformerc                  óx   ‡ — e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z	 d	 	 	 	 	 	 	 	 	 dd„Zed	d„«       Zˆ xZS )
ÚMSEEvaluatorFromDataFrameu«  
    Computes the mean squared error (x100) between the computed sentence embedding and some target sentence embedding.

    Args:
        dataframe (List[Dict[str, str]]): It must have the following format. Rows contains different, parallel sentences.
            Columns are the respective language codes::

            [{'en': 'My sentence in English', 'es': 'OraciÃ³n en espaÃ±ol', 'fr': 'Phrase en franÃ§ais'...},
             {'en': 'My second sentence', ...}]
        teacher_model (SentenceTransformer): The teacher model used to compute the sentence embeddings.
        combinations (List[Tuple[str, str]]): Must be of the format ``[('en', 'es'), ('en', 'fr'), ...]``.
            First entry in a tuple is the source language. The sentence in the respective language will be fetched from
            the dataframe and passed to the teacher model. Second entry in a tuple the the target language. Sentence
            will be fetched from the dataframe and passed to the student model
        batch_size (int, optional): The batch size to compute sentence embeddings. Defaults to 8.
        name (str, optional): The name of the evaluator. Defaults to "".
        write_csv (bool, optional): Whether to write the results to a CSV file. Defaults to True.
        truncate_dim (Optional[int], optional): The dimension to truncate sentence embeddings to. If None, uses the model's
            current truncation dimension. Defaults to None.
    c                ó¦  •— t         ‰| �  «        || _        || _        || _        |rd|z   }d|z   dz   | _        ddg| _        d| _        || _        || _	        i | _
        t        j                  d«       t        «       }| j                  D ]­  \  }	}
g }g }|D ]l  }||	   j                  «       dk7  sŒ||
   j                  «       dk7  sŒ1|j                  ||	   «       |j!                  ||	   «       |j!                  ||
   «       Œn ||f| j                  |	|
f<   | j                  j!                  |	› d	|
› �«       Œ¯ t#        |«      }| j                  €
t%        «       n|j'                  | j                  «      5  |j)                  || j                  ¬
«      }d d d «       t+        |«      D ��ci c]  \  }}||“Œ
 c}}| _        y # 1 sw Y   Œ/xY wc c}}w )NÚ_Úmse_evaluationz_results.csvÚepochÚstepsÚnegative_msezCompute teacher embeddingsÚ ú-©Ú
batch_size)ÚsuperÚ__init__ÚcombinationsÚnamer   Úcsv_fileÚcsv_headersÚprimary_metricÚ	write_csvÚtruncate_dimÚdataÚloggerÚinfoÚsetÚstripÚaddÚappendÚlistr   Útruncate_sentence_embeddingsÚencodeÚzipÚteacher_embeddings)ÚselfÚ	dataframeÚteacher_modelr   r   r   r   r   Úall_source_sentencesÚsrc_langÚtrg_langÚsrc_sentencesÚtrg_sentencesÚrowÚall_src_embeddingsÚsentÚembÚ	__class__s                    €úx/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentence_transformers/evaluation/MSEEvaluatorFromDataFrame.pyr   z"MSEEvaluatorFromDataFrame.__init__)   sê  ø€ ô 	‰ÑÔØ(ˆÔØˆŒ	Ø$ˆŒáØ˜‘:ˆDà(¨4Ñ/°.Ñ@ˆŒØ# WÐ-ˆÔØ,ˆÔØ"ˆŒØ(ˆÔØˆŒ	ä�‰Ð0Ô1Ü"›uÐØ"&×"3Ñ"3ò 	>ÑˆH�hØˆMØˆMà ò 8�Ø�x‘=×&Ñ&Ó(¨BÓ.°3°x±=×3FÑ3FÓ3HÈBÓ3NØ(×,Ñ,¨S°©]Ô;Ø!×(Ñ(¨¨X©Ô7Ø!×(Ñ(¨¨X©Õ7ð	8ð 0=¸mÐ.LˆD�I‰I�x Ð*Ñ+Ø×Ñ×#Ñ# x j°°(°Ð$<Õ=ð	>ô  $Ð$8Ó9Ðð × Ñ Ð(ô ŒMà×;Ñ;¸D×<MÑ<MÓNñ	hð
 "/×!5Ñ!5Ð6JÐW[×WfÑWfÐ!5Ó!gÐ÷	hô ?BÐBVÐXjÓ>k×"l±°°s 4¨¡9Ó"lˆÕ÷	hð 	hüó #ms   Å5GÆ*GÇG
c           
     óì  — |j                  «        g }| j                  D �]"  \  }}| j                  ||f   \  }}	t        j                  |D �
cg c]  }
| j
                  |
   ‘Œ c}
«      }| j                  €
t        «       n|j                  | j                  «      5  t        j                  |j                  |	| j                  ¬«      «      }d d d «       |z
  dz  j                  «       }|dz  }|j                  |«       t        j                  d| j                  › d|› d|› d�«       t        j                  d|d	›�«       �Œ% |�¹| j                   r­t"        j$                  j'                  || j(                  «      }t"        j$                  j+                  |«      }t-        |d
|rdndd¬«      5 }t/        j0                  |«      }|s|j3                  | j4                  «       |j3                  ||g|z   «       d d d «       dt        j                  |«      j7                  «        i}| j9                  || j                  «      }| j;                  ||||«       |S c c}
w # 1 sw Y   �Œ“xY w# 1 sw Y   ŒsxY w)Nr   é   éd   zMSE evaluation on z dataset - r   ú:zMSE (*100):	Ú4fr   ÚaÚwzutf-8)ÚnewlineÚmodeÚencodingr   )Úevalr   r   ÚnpÚasarrayr(   r   r   r%   r&   r   Úmeanr#   r   r   r   r   ÚosÚpathÚjoinr   ÚisfileÚopenÚcsvÚwriterÚwriterowr   ÚitemÚprefix_name_to_metricsÚ store_metrics_in_model_card_data)r)   ÚmodelÚoutput_pathr   r   Ú
mse_scoresr-   r.   r/   r0   r3   Úsrc_embeddingsÚtrg_embeddingsÚmseÚcsv_pathÚoutput_file_existsÚfrK   Úmetricss                      r6   Ú__call__z"MSEEvaluatorFromDataFrame.__call__Z   s(  € ð 	�
‰
Œàˆ
Ø"&×"3Ñ"3ó 	2ÑˆH�hØ+/¯9©9°hÀÐ5IÑ+JÑ(ˆM˜=äŸZ™ZÐS`Ö(aÈ4¨×)@Ñ)@ÀÓ)FÒ(aÓbˆNØ"&×"3Ñ"3Ð";””À×AcÑAcÐdh×duÑduÓAvñ eÜ!#§¡¨E¯L©L¸ÐSW×SbÑSb¨LÓ,cÓ!d�÷eð # ^Ñ3¸Ñ9×?Ñ?ÓAˆCØ�3‰JˆCØ×Ñ˜cÔ"ä�K‰KÐ,¨T¯Y©Y¨K°{À8À*ÈAÈhÈZÐWXÐYÔZÜ�K‰K˜-¨¨B xÐ0Ö1ð	2ð Ð" t§~¢~Ü—w‘w—|‘| K°·±Ó?ˆHÜ!#§¡§¡°Ó!9ÐÜ�h¨Ñ8J±ÐPSÐ^eÔfð =ÐjkÜŸ™ A›�Ù)Ø—O‘O D×$4Ñ$4Ô5à—‘ ¨ °Ñ ;Ô<÷=ð "¤B§G¡G¨JÓ$7×$<Ñ$<Ó$>Ð#>Ð?ˆØ×-Ñ-¨g°t·y±yÓAˆØ×-Ñ-¨e°W¸eÀUÔKØˆùò3 )b÷eñ eú÷=ð =ús   ÁI
Â1IÆ/A	I*ÉI'	É*I3c                 ó   — y)NzKnowledge Distillation© )r)   s    r6   Údescriptionz%MSEEvaluatorFromDataFrame.description~   s   € à'ó    )é   r   TN)r*   zlist[dict[str, str]]r+   r   r   zlist[tuple[str, str]]r   Úintr   Ústrr   Úboolr   z
int | None)Néÿÿÿÿrc   )
rP   r   rQ   ra   r   r`   r   r`   Úreturnzdict[str, float])rd   ra   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rZ   Úpropertyr]   Ú__classcell__)r5   s   @r6   r	   r	      s±   ø„ ñð4 ØØØ#'ð/mà'ð/mð +ð/mð ,ð	/mð
 ð/mð ð/mð ð/mð !õ/mðd bdð"Ø(ð"Ø7:ð"ØJMð"Ø[^ð"à	ó"ðH ò(ó ô(r^   r	   )Ú
__future__r   rJ   ÚloggingrE   Ú
contextlibr   Útypingr   ÚnumpyrB   Ú2sentence_transformers.evaluation.SentenceEvaluatorr   Ú)sentence_transformers.SentenceTransformerr   Ú	getLoggerre   r   r	   r\   r^   r6   ú<module>rs      sD   ðÝ "ã 
Û Û 	Ý "Ý  ã å PáÝMà	ˆ×	Ñ	˜8Ó	$€ôm(Ð 1õ m(r^   