
    Ch                        S SK Jr  S SKrS SKrS SKrS SKJr  S SKrS SKJ	r	  S SK
Jr  S SKJr  \(       a  S SKJr  \R                   " \5      r " S S	\5      rg)
    )annotationsN)TYPE_CHECKING)
DataLoader)SentenceEvaluator)batch_to_device)SentenceTransformerc                  V   ^  \ rS rSrSrSSU 4S jjjr S         S	S jjrSrU =r$ )
LabelAccuracyEvaluator   z
Evaluate a model based on its accuracy on a labeled dataset

This requires a model with LossFunction.SOFTMAX

The results are written in a CSV. If a CSV already exists, then values are appended.
c                   > [         TU ]  5         Xl        X l        X0l        U(       a  SU-   nX@l        SU-   S-   U l        / SQU l        SU l        g)zo
Constructs an evaluator for the given dataset

Args:
    dataloader (DataLoader): the data for the evaluation
_accuracy_evaluationz_results.csv)epochstepsaccuracyr   N)	super__init__
dataloadernamesoftmax_model	write_csvcsv_filecsv_headersprimary_metric)selfr   r   r   r   	__class__s        o/var/www/html/shao/venv/lib/python3.13/site-packages/sentence_transformers/evaluation/LabelAccuracyEvaluator.pyr   LabelAccuracyEvaluator.__init__   sR     	$	*:D"-4~E9(    c           	        UR                  5         SnSnUS:w  a  US:X  a  SU S3nOSU SU S3nOSn[        R                  SU R                  -   S	-   U-   5        UR                  U R
                  l        [        U R
                  5       H  u  pU	u  p[        [        U
5      5       H  n[        X   UR                  5      X'   M     UR                  UR                  5      n[        R                  " 5          U R                  U
S S
9u  pS S S 5        UWR!                  S5      -  nU[        R"                  " USS9R%                  U5      R'                  5       R)                  5       -  nM     Xe-  n[        R                  SUS SU SU S35        Ub  U R*                  (       a  [,        R.                  R1                  X R2                  5      n[,        R.                  R5                  U5      (       dZ  [7        USSSS9 n[8        R:                  " U5      nUR=                  U R>                  5        UR=                  X4U/5        S S S 5        O>[7        USSSS9 n[8        R:                  " U5      nUR=                  X4U/5        S S S 5        SU0nU RA                  UU R                  5      nU RC                  UUX45        U$ ! , (       d  f       GN= f! , (       d  f       NU= f! , (       d  f       Nf= f)Nr   z after epoch :z
 in epoch z after z steps:zEvaluation on the z dataset)labels   )dimz
Accuracy: z.4fz (/z)
 wzutf-8)newlinemodeencodingar   )"evalloggerinfor   smart_batching_collater   
collate_fn	enumeraterangelenr   devicetotorchno_gradr   sizeargmaxeqsumitemr   ospathjoinr   isfileopencsvwriterwriterowr   prefix_name_to_metrics store_metrics_in_model_card_data)r   modeloutput_pathr   r   totalcorrectout_txtstepbatchfeatures	label_idsidxr   
predictionr   csv_pathfrD   metricss                       r   __call__LabelAccuracyEvaluator.__call__1   su    	

B;{)%2&ugWUG7CG(4994zAGKL%*%A%A"$T__5KD"'HS]+ /u|| L ,!U\\2I $ 2 28D 2 I ! Z__Q''Eu||JA699)DHHJOOQQG 6 ?j#b	5'EF"t~~ww||K?H77>>(++(BS7Kq ZZ]FOOD$4$45OOU8$<= LK
 (BS7Kq ZZ]FOOU8$<= L x(--gtyyA--eWeK1 ! LK
 LKs%   :KAK*K%
K	
K"%
K3)r   r   r   r   r   r   r   )r'   NT)r   r   r   strr   bool)Nr!   r!   )
rH   r   rI   z
str | Noner   intr   rZ   returnzdict[str, float])	__name__
__module____qualname____firstlineno____doc__r   rV   __static_attributes____classcell__)r   s   @r   r
   r
      sK    ) )* ik.(.7A.QT.be.	. .r   r
   )
__future__r   rC   loggingr>   typingr   r7   torch.utils.datar   2sentence_transformers.evaluation.SentenceEvaluatorr   sentence_transformers.utilr   )sentence_transformers.SentenceTransformerr   	getLoggerr\   r.   r
    r   r   <module>rl      sE    " 
  	    ' P 6M			8	$K. Kr   