U
    <Af	                     @   sD   d dl mZmZmZ d dlmZ er0d dlmZ G dd deZdS )    )TYPE_CHECKINGDictIterable)SentenceEvaluator)SentenceTransformerc                       sR   e Zd ZdZdd fee d fddZdd	eeee	ee
f d
ddZ  ZS )SequentialEvaluatorz
    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
    c                 C   s   | d S )N )scoresr	   r	   X/tmp/pip-unpacked-wheel-i7fohqg6/sentence_transformers/evaluation/SequentialEvaluator.py<lambda>       zSequentialEvaluator.<lambda>)
evaluatorsc                    s   t    || _|| _dS )a  
        Initializes a SequentialEvaluator object.

        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])
        N)super__init__r   main_score_function)selfr   r   	__class__r	   r   r      s    
zSequentialEvaluator.__init__Nr   r   )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>;   s
     
   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   r   strintr   floatr)   __classcell__r	   r	   r   r   r   	   s           
r   N)	typingr   r   r   Z2sentence_transformers.evaluation.SentenceEvaluatorr   Z)sentence_transformers.SentenceTransformerr   r   r	   r	   r	   r   <module>   s   