a
    h	                     @  sT   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	 G dd deZ
dS )	    )annotations)Iterable)TYPE_CHECKING)SentenceEvaluator)SentenceTransformerc                      sF   e Zd ZdZdd fdd fddZdd
dddddddZ  ZS )SequentialEvaluatora'  
    This evaluator allows that multiple sub-evaluators are passed. When the model is evaluated,
    the data is passed sequentially to all sub-evaluators.

    All scores are passed to 'main_score_function', which derives one final score value

    Args:
        evaluators (Iterable[SentenceEvaluator]): A collection of SentenceEvaluator objects.
        main_score_function (function, optional): A function that takes a list of scores and returns the main score.
            Defaults to selecting the last score in the list.

    Example:
        ::

            evaluator1 = BinaryClassificationEvaluator(...)
            evaluator2 = InformationRetrievalEvaluator(...)
            evaluator3 = MSEEvaluator(...)
            seq_evaluator = SequentialEvaluator([evaluator1, evaluator2, evaluator3])
    c                 C  s   | d S )N )scoresr	   r	   p/var/www/html/assistant/venv/lib/python3.9/site-packages/sentence_transformers/evaluation/SequentialEvaluator.py<lambda>!       zSequentialEvaluator.<lambda>zIterable[SentenceEvaluator])
evaluatorsc                   s   t    || _|| _d S )N)super__init__r   main_score_function)selfr   r   	__class__r	   r   r   !   s    
zSequentialEvaluator.__init__Nr   r   z
str | Noneintzdict[str, float])modeloutput_pathepochstepsreturnc                 C  s   g }g }t | jD ]z\}}|||||}	t|	tsL||	 d| |	i}	n6t|drh||	|j  n||	t|	 d   ||	 qd| _| 	|}
dd |D }|
|d< |S )NZ
evaluator_primary_metricr   Zsequential_scorec                 S  s$   i | ]}|  D ]\}}||qqS r	   )items).0
evaluationkeyvaluer	   r	   r   
<dictcomp>;   r   z0SequentialEvaluator.__call__.<locals>.<dictcomp>)
	enumerater   
isinstancedictappendhasattrr   listkeysr   )r   r   r   r   r   Zevaluationsr
   Zevaluator_idxZ	evaluatorr   Z
main_scoreresultsr	   r	   r   __call__&   s     



zSequentialEvaluator.__call__)Nr   r   )__name__
__module____qualname____doc__r   r*   __classcell__r	   r	   r   r   r      s    r   N)
__future__r   collections.abcr   typingr   Z2sentence_transformers.evaluation.SentenceEvaluatorr   Z)sentence_transformers.SentenceTransformerr   r   r	   r	   r	   r   <module>   s   