Module openpack_toolkit.activity
Activity set definitions for OpenPack dataset.
Expand source code
"""Activity set definitions for OpenPack dataset.
"""
from dataclasses import dataclass
from logging import getLogger
from typing import Tuple, Union
import numpy as np
from ..configs import Label
logger = getLogger(__name__)
ActClass = Label
@dataclass
class ActSet():
"""ActSet binds activity classes and proved methods that can be useful when you apply machine
learning approach. Activity class definition of OpenPack dataset will be provided in this
format.
"""
classes: Tuple[ActClass, ...]
def __len__(self) -> int:
return len(self.classes)
def __iter__(self):
self._current = 0
return self
def __next__(self):
if self._current == len(self.classes):
raise StopIteration
cls = self.classes[self._current]
self._current += 1
return cls
def __call__(self, cls_idx: int) -> ActClass:
"""Return ActClass object at index=``cls_idx``.
Args:
cls_idx (int): ckass index
Returns:
ActClass
"""
return self.classes[cls_idx]
def to_tuple(
self, keep_actclass: bool = False,
) -> Union[Tuple[Tuple[int, str], ...], Tuple[ActClass, ...]]:
"""Returns a activity classes as a tuple.
Args:
keep_actclass (bool, optional): If True, return a tuple of ActClass.
Otherwise, return a pure tuple, i.e., ``Tuple[Tuple[id:int, name:str], ...]``.
Defaults to False.
Returns:
Union[Tuple[Tuple[int, str], ...], Tuple[ActClass, ...]]
"""
if keep_actclass:
return self.classes
classes = [(cls.id, cls.name) for cls in self.classes]
return tuple(classes)
def get_ids(self) -> Tuple[int]:
"""Returns a tuple of class IDs.
Returns:
Tuple[int]
"""
return tuple([act.id for act in self.classes])
def get_ignore_class_index(self) -> Union[int, Tuple]:
"""Return the index of ignore classes, i.e., ``is_ignore=True``.
If there are only one ignore class, return the index as int.
When there is no ignore classe, return None.
Returns:
Union[int, Tuple] or None
"""
index = tuple([i for i, act in enumerate(
self.classes) if act.is_ignore])
if len(index) == 0:
return None
if len(index) == 1:
return index[0]
return index
def get_ignore_class_id(self) -> Union[int, Tuple]:
"""Return the ID of ignore classes, i.e., ``is_ignore=True``.
If there are only one ignore class, return the ID as int.
When there is no ignore classe, return None.
Returns:
Union[int, Tuple] or None
"""
ids = tuple([act.id for act in self.classes if act.is_ignore])
if len(ids) == 0:
return None
if len(ids) == 1:
return ids[0]
return ids
def convert_id_to_index(self, ids: np.ndarray) -> np.ndarray:
"""Translate activity ID into activity index.
Args:
ids (np.ndarray): 1d array of activity IDs.
Returns:
np.ndarray: 1d array of activity index.
"""
assert set(ids.ravel()) <= set(self.get_ids()), (
f"expected ID set is {set(self.get_ids())}, "
f"but got ID set={set(ids.ravel())}."
)
index = np.full(ids.shape, -1)
for i, cls in enumerate(self.classes):
index[ids == cls.id] = i
assert index.min() >= 0
return index.astype(np.int64)
def convert_index_to_id(self, index: np.ndarray) -> np.ndarray:
"""Translate activity index into activity ID.
Args:
index (np.ndarray): 1d array of activity index.
Returns:
np.ndarray: 1d array of activity IDs.
"""
assert min(self.get_ids()) >= 0
assert (index.min() >= 0) and (index.max() < len(self.classes)), (
f"given index have out of range value(s)([0, {len(self.classes)}])."
f" index.min()={index.min()}, index.max={index.max()}"
)
ids = np.full(index.shape, -1)
for i, cls in enumerate(self.classes):
ids[index == i] = cls.id
assert ids.min() >= 0
return ids.astype(np.int64)
def id_to_name(self, cls_id: int) -> str:
"""Returns class name of the given class ID.
Args:
cls_id (int): class ID.
Raises:
ValueError: ``class_id`` does not exists in the activity set.
Returns:
str: class name
"""
for cls in self.classes:
if cls.id == cls_id:
return cls.name
raise ValueError(f"got unexpected class id. cls_id={cls_id}")
def name_to_id(self, cls_name: str) -> int:
"""Returns class ID of the given class ID.
Args:
cls_name (str): class name.
Raises:
ValueError: ``class_name`` does not exists in the activity set.
Returns:
int: class id
"""
for cls in self.classes:
if cls.name == cls_name:
return cls.id
raise ValueError(f"got unexpected class name. cls_name={cls_name}")
Classes
class ActSet (classes: Tuple[openpack_toolkit.configs._schema.Label, ...])
-
ActSet binds activity classes and proved methods that can be useful when you apply machine learning approach. Activity class definition of OpenPack dataset will be provided in this format.
Expand source code
@dataclass class ActSet(): """ActSet binds activity classes and proved methods that can be useful when you apply machine learning approach. Activity class definition of OpenPack dataset will be provided in this format. """ classes: Tuple[ActClass, ...] def __len__(self) -> int: return len(self.classes) def __iter__(self): self._current = 0 return self def __next__(self): if self._current == len(self.classes): raise StopIteration cls = self.classes[self._current] self._current += 1 return cls def __call__(self, cls_idx: int) -> ActClass: """Return ActClass object at index=``cls_idx``. Args: cls_idx (int): ckass index Returns: ActClass """ return self.classes[cls_idx] def to_tuple( self, keep_actclass: bool = False, ) -> Union[Tuple[Tuple[int, str], ...], Tuple[ActClass, ...]]: """Returns a activity classes as a tuple. Args: keep_actclass (bool, optional): If True, return a tuple of ActClass. Otherwise, return a pure tuple, i.e., ``Tuple[Tuple[id:int, name:str], ...]``. Defaults to False. Returns: Union[Tuple[Tuple[int, str], ...], Tuple[ActClass, ...]] """ if keep_actclass: return self.classes classes = [(cls.id, cls.name) for cls in self.classes] return tuple(classes) def get_ids(self) -> Tuple[int]: """Returns a tuple of class IDs. Returns: Tuple[int] """ return tuple([act.id for act in self.classes]) def get_ignore_class_index(self) -> Union[int, Tuple]: """Return the index of ignore classes, i.e., ``is_ignore=True``. If there are only one ignore class, return the index as int. When there is no ignore classe, return None. Returns: Union[int, Tuple] or None """ index = tuple([i for i, act in enumerate( self.classes) if act.is_ignore]) if len(index) == 0: return None if len(index) == 1: return index[0] return index def get_ignore_class_id(self) -> Union[int, Tuple]: """Return the ID of ignore classes, i.e., ``is_ignore=True``. If there are only one ignore class, return the ID as int. When there is no ignore classe, return None. Returns: Union[int, Tuple] or None """ ids = tuple([act.id for act in self.classes if act.is_ignore]) if len(ids) == 0: return None if len(ids) == 1: return ids[0] return ids def convert_id_to_index(self, ids: np.ndarray) -> np.ndarray: """Translate activity ID into activity index. Args: ids (np.ndarray): 1d array of activity IDs. Returns: np.ndarray: 1d array of activity index. """ assert set(ids.ravel()) <= set(self.get_ids()), ( f"expected ID set is {set(self.get_ids())}, " f"but got ID set={set(ids.ravel())}." ) index = np.full(ids.shape, -1) for i, cls in enumerate(self.classes): index[ids == cls.id] = i assert index.min() >= 0 return index.astype(np.int64) def convert_index_to_id(self, index: np.ndarray) -> np.ndarray: """Translate activity index into activity ID. Args: index (np.ndarray): 1d array of activity index. Returns: np.ndarray: 1d array of activity IDs. """ assert min(self.get_ids()) >= 0 assert (index.min() >= 0) and (index.max() < len(self.classes)), ( f"given index have out of range value(s)([0, {len(self.classes)}])." f" index.min()={index.min()}, index.max={index.max()}" ) ids = np.full(index.shape, -1) for i, cls in enumerate(self.classes): ids[index == i] = cls.id assert ids.min() >= 0 return ids.astype(np.int64) def id_to_name(self, cls_id: int) -> str: """Returns class name of the given class ID. Args: cls_id (int): class ID. Raises: ValueError: ``class_id`` does not exists in the activity set. Returns: str: class name """ for cls in self.classes: if cls.id == cls_id: return cls.name raise ValueError(f"got unexpected class id. cls_id={cls_id}") def name_to_id(self, cls_name: str) -> int: """Returns class ID of the given class ID. Args: cls_name (str): class name. Raises: ValueError: ``class_name`` does not exists in the activity set. Returns: int: class id """ for cls in self.classes: if cls.name == cls_name: return cls.id raise ValueError(f"got unexpected class name. cls_name={cls_name}")
Class variables
var classes : Tuple[openpack_toolkit.configs._schema.Label, ...]
Methods
def convert_id_to_index(self, ids: numpy.ndarray) ‑> numpy.ndarray
-
Translate activity ID into activity index.
Args
ids
:np.ndarray
- 1d array of activity IDs.
Returns
np.ndarray
- 1d array of activity index.
Expand source code
def convert_id_to_index(self, ids: np.ndarray) -> np.ndarray: """Translate activity ID into activity index. Args: ids (np.ndarray): 1d array of activity IDs. Returns: np.ndarray: 1d array of activity index. """ assert set(ids.ravel()) <= set(self.get_ids()), ( f"expected ID set is {set(self.get_ids())}, " f"but got ID set={set(ids.ravel())}." ) index = np.full(ids.shape, -1) for i, cls in enumerate(self.classes): index[ids == cls.id] = i assert index.min() >= 0 return index.astype(np.int64)
def convert_index_to_id(self, index: numpy.ndarray) ‑> numpy.ndarray
-
Translate activity index into activity ID.
Args
index
:np.ndarray
- 1d array of activity index.
Returns
np.ndarray
- 1d array of activity IDs.
Expand source code
def convert_index_to_id(self, index: np.ndarray) -> np.ndarray: """Translate activity index into activity ID. Args: index (np.ndarray): 1d array of activity index. Returns: np.ndarray: 1d array of activity IDs. """ assert min(self.get_ids()) >= 0 assert (index.min() >= 0) and (index.max() < len(self.classes)), ( f"given index have out of range value(s)([0, {len(self.classes)}])." f" index.min()={index.min()}, index.max={index.max()}" ) ids = np.full(index.shape, -1) for i, cls in enumerate(self.classes): ids[index == i] = cls.id assert ids.min() >= 0 return ids.astype(np.int64)
def get_ids(self) ‑> Tuple[int]
-
Returns a tuple of class IDs.
Returns
Tuple[int]
Expand source code
def get_ids(self) -> Tuple[int]: """Returns a tuple of class IDs. Returns: Tuple[int] """ return tuple([act.id for act in self.classes])
def get_ignore_class_id(self) ‑> Union[int, Tuple]
-
Return the ID of ignore classes, i.e.,
is_ignore=True
. If there are only one ignore class, return the ID as int. When there is no ignore classe, return None.Returns
Union[int, Tuple] or None
Expand source code
def get_ignore_class_id(self) -> Union[int, Tuple]: """Return the ID of ignore classes, i.e., ``is_ignore=True``. If there are only one ignore class, return the ID as int. When there is no ignore classe, return None. Returns: Union[int, Tuple] or None """ ids = tuple([act.id for act in self.classes if act.is_ignore]) if len(ids) == 0: return None if len(ids) == 1: return ids[0] return ids
def get_ignore_class_index(self) ‑> Union[int, Tuple]
-
Return the index of ignore classes, i.e.,
is_ignore=True
. If there are only one ignore class, return the index as int. When there is no ignore classe, return None.Returns
Union[int, Tuple] or None
Expand source code
def get_ignore_class_index(self) -> Union[int, Tuple]: """Return the index of ignore classes, i.e., ``is_ignore=True``. If there are only one ignore class, return the index as int. When there is no ignore classe, return None. Returns: Union[int, Tuple] or None """ index = tuple([i for i, act in enumerate( self.classes) if act.is_ignore]) if len(index) == 0: return None if len(index) == 1: return index[0] return index
def id_to_name(self, cls_id: int) ‑> str
-
Returns class name of the given class ID.
Args
cls_id
:int
- class ID.
Raises
ValueError
class_id
does not exists in the activity set.
Returns
str
- class name
Expand source code
def id_to_name(self, cls_id: int) -> str: """Returns class name of the given class ID. Args: cls_id (int): class ID. Raises: ValueError: ``class_id`` does not exists in the activity set. Returns: str: class name """ for cls in self.classes: if cls.id == cls_id: return cls.name raise ValueError(f"got unexpected class id. cls_id={cls_id}")
def name_to_id(self, cls_name: str) ‑> int
-
Returns class ID of the given class ID.
Args
cls_name
:str
- class name.
Raises
ValueError
class_name
does not exists in the activity set.
Returns
int
- class id
Expand source code
def name_to_id(self, cls_name: str) -> int: """Returns class ID of the given class ID. Args: cls_name (str): class name. Raises: ValueError: ``class_name`` does not exists in the activity set. Returns: int: class id """ for cls in self.classes: if cls.name == cls_name: return cls.id raise ValueError(f"got unexpected class name. cls_name={cls_name}")
def to_tuple(self, keep_actclass: bool = False) ‑> Union[Tuple[Tuple[int, str], ...], Tuple[openpack_toolkit.configs._schema.Label, ...]]
-
Returns a activity classes as a tuple.
Args
keep_actclass
:bool
, optional- If True, return a tuple of ActClass.
Otherwise, return a pure tuple, i.e.,
Tuple[Tuple[id:int, name:str], ...]
. Defaults to False.
Returns
Union[Tuple[Tuple[int, str], …], Tuple[ActClass, …]]
Expand source code
def to_tuple( self, keep_actclass: bool = False, ) -> Union[Tuple[Tuple[int, str], ...], Tuple[ActClass, ...]]: """Returns a activity classes as a tuple. Args: keep_actclass (bool, optional): If True, return a tuple of ActClass. Otherwise, return a pure tuple, i.e., ``Tuple[Tuple[id:int, name:str], ...]``. Defaults to False. Returns: Union[Tuple[Tuple[int, str], ...], Tuple[ActClass, ...]] """ if keep_actclass: return self.classes classes = [(cls.id, cls.name) for cls in self.classes] return tuple(classes)