
    Ngq                        d dl mZ d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZ erd dlmZ  ej        e          Z G d d	e          ZdS )
    )annotationsN)TYPE_CHECKING)
DataLoader)SentenceEvaluator)batch_to_device)SentenceTransformerc                  2     e Zd ZdZdd fdZ	 dddZ xZS )LabelAccuracyEvaluatorz
    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.
     NT
dataloaderr   namestr	write_csvboolc                    t                                                       || _        || _        || _        |rd|z   }|| _        d|z   dz   | _        g d| _        d| _        dS )z
        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__r   r   softmax_modelr   csv_filecsv_headersprimary_metric)selfr   r   r   r   	__class__s        s/var/www/html/ai-engine/env/lib/python3.11/site-packages/sentence_transformers/evaluation/LabelAccuracyEvaluator.pyr   zLabelAccuracyEvaluator.__init__   sv     	$	* 	:D"-4~E999(    modelr   output_pathr   intr   returndict[str, float]c           	        |                                  d}d}|dk    r|dk    rd| d}nd| d| d}nd}t                              d| j        z   d	z   |z              |j        | j        _        t          | j                  D ]\  }}	|	\  }
}t          t          |
                    D ] }t          |
|         |j                  |
|<   !|                    |j                  }t          j                    5  |                     |
d 
          \  }}d d d            n# 1 swxY w Y   ||                    d          z  }|t          j        |d                              |                                                                          z  }||z  }t                              d|dd| d| d           || j        rt,          j                            || j                  }t,          j                            |          srt7          |ddd          5 }t9          j        |          }|                    | j                   |                    |||g           d d d            n# 1 swxY w Y   nWt7          |ddd          5 }t9          j        |          }|                    |||g           d d d            n# 1 swxY w Y   d|i}|                      || j                  }| !                    ||           |S )Nr   r!   z after epoch :z
 in epoch z after z steps:zEvaluation on the z dataset)labels   )dimz
Accuracy: z.4fz (/z)
r   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   r"   r#   r   r   totalcorrectout_txtstepbatchfeatures	label_idsidxr   
predictionr   csv_pathfrI   metricss                       r   __call__zLabelAccuracyEvaluator.__call__1   s    	

B;;{{2%222CuCCUCCCG(494zAGKLLL%*%A"$T_55 		R 		RKD%"'HiS]]++ M M /u| L L!U\22I J J $ 2 28D 2 I I:J J J J J J J J J J J J J J J Z__Q'''Eu|JA66699)DDHHJJOOQQQGGU?EEEEEE5EEEFFF"t~"w||K??H7>>(++ >(BS7KKK >q Z]]FOOD$4555OOUE8$<===> > > > > > > > > > > > > > >
 (BS7KKK >q Z]]FOOUE8$<===> > > > > > > > > > > > > > > x(--gtyAA--eW===s7   :D!!D%	(D%	"AI55I9<I9-KKK)r   NT)r   r   r   r   r   r   )Nr!   r!   )
r"   r   r#   r   r   r$   r   r$   r%   r&   )__name__
__module____qualname____doc__r   rY   __classcell__)r   s   @r   r
   r
      sl         ) ) ) ) ) ) )* bd. . . . . . . . .r    r
   )
__future__r   rH   loggingrC   typingr   r<   torch.utils.datar   2sentence_transformers.evaluation.SentenceEvaluatorr   sentence_transformers.utilr   )sentence_transformers.SentenceTransformerr   	getLoggerrZ   r3   r
    r    r   <module>rh      s    " " " " " " 



  				              ' ' ' ' ' ' P P P P P P 6 6 6 6 6 6 NMMMMMM		8	$	$K K K K K. K K K K Kr    