
    Ch	                    d    S SK Jr  S SKJr  S SKJr  S SKJr  \(       a  S SKJ	r	   " S S\5      r
g)	    )annotations)Iterable)TYPE_CHECKING)SentenceEvaluator)SentenceTransformerc                  Z   ^  \ rS rSrSrS 4SU 4S jjjr S         S	S jjrSrU =r$ )
SequentialEvaluator   a  
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                    U S   $ )N )scoress    l/var/www/html/shao/venv/lib/python3.13/site-packages/sentence_transformers/evaluation/SequentialEvaluator.py<lambda>SequentialEvaluator.<lambda>!   s    cijlcm    c                :   > [         TU ]  5         Xl        X l        g )N)super__init__
evaluatorsmain_score_function)selfr   r   	__class__s      r   r   SequentialEvaluator.__init__!   s    $#6 r   c                4   / n/ n[        U R                  5       H  u  pxU" XX45      n	[        U	[        5      (       d  UR	                  U	5        SU 3U	0n	O][        US5      (       a  UR	                  XR                     5        O.UR	                  U	[        U	R                  5       5      S      5        UR	                  U	5        M     SU l        U R                  U5      n
U V	VVs0 sH  oR                  5        H  u  pX_M	     M     nnn	nXS'   U$ s  snnn	f )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__SequentialEvaluator.__call__&   s    (1$//(B$M"5uDJj$//j) *=/:JG
9&677MM*-E-E"FGMM*T*//2C-DQ-G"HIz* )C 1--f5
0;a*N^N^N`
3:N`3a&0"# bs   &#D)r   r   r   )r   zIterable[SentenceEvaluator])Nr   r   )
r'   r   r(   z
str | Noner)   intr*   r5   returnzdict[str, float])	__name__
__module____qualname____firstlineno____doc__r   r3   __static_attributes____classcell__)r   s   @r   r	   r	      sR    ( Un 7 7 ik(7AQTbe	 r   r	   N)
__future__r   collections.abcr   typingr   2sentence_transformers.evaluation.SentenceEvaluatorr   )sentence_transformers.SentenceTransformerr   r	   r   r   r   <module>rC      s$    " $   PM1+ 1r   