
    +sg6
                    Z    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e      Z
y)	    )annotations)Iterable)TYPE_CHECKING)SentenceEvaluator)SentenceTransformerc                  H     e Zd ZdZd fd fdZ	 d	 	 	 	 	 	 	 	 	 ddZ x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                    | d   S )N )scoress    g/var/www/html/venv/lib/python3.12/site-packages/sentence_transformers/evaluation/SequentialEvaluator.py<lambda>zSequentialEvaluator.<lambda>   s    cijlcm     c                >    t         |           || _        || _        y)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__
evaluatorsmain_score_function)selfr   r   	__class__s      r   r   zSequentialEvaluator.__init__   s    " 	$#6 r   c                $   g }g }t        | j                        D ]  \  }} |||||      }	t        |	t              s|j	                  |	       d| |	i}	nYt        |d      r|j	                  |	|j                            n.|j	                  |	t        |	j                               d             |j	                  |	        d| _        | j                  |      }
|D 	ci c]  }	|	j                         D ]  \  }}||
  }}}	}|
|d<   |S c c}}}	w )N
evaluator_primary_metricr   sequential_score)	enumerater   
isinstancedictappendhasattrr   listkeysr   items)r   modeloutput_pathepochstepsevaluationsr   evaluator_idx	evaluator
evaluation
main_scorekeyvalueresultss                 r   __call__zSequentialEvaluator.__call__)   s    (1$//(B 	+$M9"5+ueDJj$/j) *=/:JG
9&67MM*Y-E-E"FGMM*T*//2C-DQ-G"HIz*	+ 1--f5
0;aa*jN^N^N`a
U3:a3aa&0"# bs   "D)r   zIterable[SentenceEvaluator])Nr   r   )
r$   r   r%   strr&   intr'   r2   returnzdict[str, float])__name__
__module____qualname____doc__r   r0   __classcell__)r   s   @r   r	   r	      sH     Un 7, bd(7:JM[^	r   r	   N)
__future__r   collections.abcr   typingr   2sentence_transformers.evaluation.SentenceEvaluatorr   )sentence_transformers.SentenceTransformerr   r	   r   r   r   <module>r>      s$    " $   PM4+ 4r   