Source code for otx.api.entities.scored_label

# Copyright (C) 2021-2022 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#

"""This module define the scored label entity."""

import datetime
import math
from dataclasses import dataclass
from typing import Optional

from otx.api.entities.color import Color
from otx.api.entities.id import ID
from otx.api.entities.label import Domain, LabelEntity


[docs] @dataclass class LabelSource: """This dataclass contains information about the source of a scored label. For annotations, the id of the user who created the label and for predictions, the id and model storage id of the model that created the prediction. When a user has accepted a predictions as is, both the user id of the user who accepted and the model/model storage id of the model that predicted should be filled in. """ user_id: str = "" model_id: ID = ID() model_storage_id: ID = ID()
[docs] class ScoredLabel: """This represents a label along with a probability. This is used inside `Annotation` class. Args: label (LabelEntity): Label entity to which probability and source are attached. probability (float): a float denoting the probability of the shape belonging to the label. label_source (LabelSource): a LabelSource dataclass containing the id of the user who created or the model that predicted this label. """ def __init__( self, label: LabelEntity, probability: float = 0.0, label_source: Optional[LabelSource] = None, ): if math.isnan(probability) or (not 0 <= probability <= 1.0): raise ValueError(f"Probability should be in range [0, 1], {probability} is given") self.label = label self.probability = probability self.label_source = label_source if label_source is not None else LabelSource() @property def name(self) -> str: """Name of the label.""" return self.label.name @property def id_(self) -> ID: """Returns the label id.""" return self.label.id_ @property def id(self) -> ID: """DEPRECATED.""" return self.label.id @property def color(self) -> Color: """Color of the label.""" return self.label.color @property def hotkey(self) -> str: """Hotkey of the label.""" return self.label.hotkey @property def domain(self) -> Domain: """Domain of the label.""" return self.label.domain @property def is_empty(self) -> bool: """Check if the label is empty.""" return self.label.is_empty @property def creation_date(self) -> datetime.datetime: """Creation data of the label.""" return self.label.creation_date
[docs] def get_label(self) -> LabelEntity: """Gets the label that the ScoredLabel object was initialized with.""" return self.label
def __repr__(self): """String representation of the label.""" return ( f"ScoredLabel({self.id_}, name={self.name}, probability={self.probability}, " f"domain={self.domain}, color={self.color}, hotkey={self.hotkey}, " f"label_source={self.label_source})" ) def __eq__(self, other: object) -> bool: """Checks if the label is equal to the other label. Args: other (ScoredLabel): Label to compare with Returns: bool: True if the labels are equal, False otherwise """ if isinstance(other, ScoredLabel): return ( self.id_ == other.id_ and self.name == other.name and self.color == other.color and self.hotkey == other.hotkey and self.probability == other.probability and self.domain == other.domain and self.label_source == other.label_source ) return False def __hash__(self): """Returns hash of the label.""" return hash(str(self))