Source code for sail_on_client.evaluate.program_metrics

"""Abstract Class for metrics for sail-on."""

import numpy as np
from abc import ABC, abstractmethod
from typing import Dict


[docs]class ProgramMetrics(ABC): """Abstract program metric class."""
[docs] def __init__(self, protocol: str) -> None: """ Initialize. Args: protocol: Name of the protocol. Returns: None """ self.protocol = protocol
[docs] @abstractmethod def m_acc( self, gt_novel: np.ndarray, p_class: np.ndarray, gt_class: np.ndarray, round_size: int, asymptotic_start_round: int, ) -> Dict: """ m_acc abstract function. Args: gt_novel: ground truth detections p_class: class predictions gt_class: ground truth classes round_size: size of the round asymptotic_start_round: asymptotic samples considered for computing metrics Returns: Dictionary containing top1, top3 accuracy over the test, pre and post novelty. """
[docs] @abstractmethod def m_acc_round_wise( self, p_class: np.ndarray, gt_class: np.ndarray, round_id: int ) -> Dict: """ m_acc_round_wise abstract function. Args: p_class: class predictions gt_class: ground truth classes Returns: Dictionary containing top1, top3 accuracy for a round """
[docs] @abstractmethod def m_num(self, p_novel: np.ndarray, gt_novel: np.ndarray) -> Dict: """ m_num abstract function. Args: p_novel: detection predictions gt_novel: ground truth detections Returns: Difference between the novelty introduction and predicting change in world. """
[docs] @abstractmethod def m_num_stats(self, p_novel: np.ndarray, gt_novel: np.ndarray) -> Dict: """ m_num_stats abstract function. Args: p_novel: detection predictions gt_novel: ground truth detections Returns: Dictionary containing indices for novelty introduction and change in world prediction. """
[docs] @abstractmethod def m_ndp(self, p_novel: np.ndarray, gt_novel: np.ndarray) -> Dict: """ m_ndp abstract function. Args: p_novel: detection predictions gt_novel: ground truth detections Returns: Dictionary containing novelty detection performance over the test. """
[docs] @abstractmethod def m_ndp_pre(self, p_novel: np.ndarray, gt_novel: np.ndarray) -> Dict: """ m_ndp_pre abstract function. Args: p_novel: detection predictions gt_novel: ground truth detections Returns: Dictionary containing detection performance pre novelty. """
[docs] @abstractmethod def m_ndp_post(self, p_novel: np.ndarray, gt_novel: np.ndarray) -> Dict: """ m_ndp_post abstract function. Args: p_novel: detection predictions gt_novel: ground truth detections Returns: Dictionary containing detection performance post novelty. """
[docs] @abstractmethod def m_ndp_failed_reaction( self, p_novel: np.ndarray, gt_novel: np.ndarray, p_class: np.ndarray, gt_class: np.ndarray, ) -> Dict: """ m_ndp_failed_reaction abstract function. Args: p_novel: detection predictions gt_novel: ground truth detections p_class: class predictions gt_class: ground truth classes Returns: Dictionary containing TP, FP, TN, FN, top1, top3 accuracy over the test. """
[docs] @abstractmethod def m_accuracy_on_novel( self, p_novel: np.ndarray, gt_class: np.ndarray, gt_novel: np.ndarray ) -> Dict: """ m_accuracy_on_novel abstract function. Args: p_novel: detection predictions gt_class: ground truth classes gt_novel: ground truth detections Returns: Accuracy on novely samples """
[docs] @abstractmethod def m_is_cdt_and_is_early(self, gt_idx: int, ta2_idx: int, test_len: int) -> Dict: """ m_is_cdt_and_is_early abstract function. Args: gt_idx: Index when novelty is introduced ta2_idx: Index when change is detected test_len: Length of test Returns Dictionary containing boolean showing if change was was detected and if it was detected early """