diff --git a/saqc/core/translation/__init__.py b/saqc/core/translation/__init__.py index 45aa077963b0f90265238a23bb945aa58a2b79e8..c2db9856fcc5b3cefa80ff358de92f02ef37473b 100644 --- a/saqc/core/translation/__init__.py +++ b/saqc/core/translation/__init__.py @@ -8,6 +8,7 @@ from saqc.core.translation.basescheme import ( FloatScheme, SimpleScheme, + MappingScheme, TranslationScheme, ) from saqc.core.translation.dmpscheme import DmpScheme diff --git a/saqc/core/translation/basescheme.py b/saqc/core/translation/basescheme.py index 1b42a8effeb2aa52e3706ef4b6e02add7deb1282..511fc92d01534f8ba32baa783990f1498f7346ac 100644 --- a/saqc/core/translation/basescheme.py +++ b/saqc/core/translation/basescheme.py @@ -7,6 +7,7 @@ # -*- coding: utf-8 -*- from __future__ import annotations +from abc import abstractmethod from typing import Any, Dict @@ -16,13 +17,27 @@ import pandas as pd from dios import DictOfSeries from saqc.constants import BAD, FILTER_ALL, GOOD, UNFLAGGED from saqc.core.flags import Flags -from saqc.lib.types import ExternalFlag +from saqc.lib.types import ExternalFlag, PandasLike ForwardMap = Dict[ExternalFlag, float] BackwardMap = Dict[float, ExternalFlag] - class TranslationScheme: + + @abstractmethod + def __call__(self, ExternalFlag) -> float: + pass + + @abstractmethod + def forward(self, PandasLike) -> Flags: + pass + + @abstractmethod + def backward(self, Flags) -> DictOfSeries: + pass + + +class MappingScheme(TranslationScheme): """ This class provides the basic translation mechanism and should serve as a base class for every other translation scheme. @@ -81,7 +96,7 @@ class TranslationScheme: @staticmethod def _translate( - flags: Flags | pd.DataFrame | pd.Series, + flags: Flags | pd.DataFrame | pd.Series | DictOfSeries, trans_map: ForwardMap | BackwardMap, ) -> DictOfSeries: """ @@ -130,7 +145,7 @@ class TranslationScheme: return float(flag) return self._forward[flag] - def forward(self, flags: pd.DataFrame) -> Flags: + def forward(self, flags: pd.DataFrame | DictOfSeries | pd.Series) -> Flags: """ Translate from 'external flags' to 'internal flags' @@ -177,7 +192,7 @@ class TranslationScheme: return out -class FloatScheme(TranslationScheme): +class FloatScheme(MappingScheme): """ Acts as the default Translator, provides a changeable subset of the @@ -193,7 +208,7 @@ class FloatScheme(TranslationScheme): super().__init__(self._MAP, self._MAP) -class SimpleScheme(TranslationScheme): +class SimpleScheme(MappingScheme): """ Acts as the default Translator, provides a changeable subset of the diff --git a/saqc/core/translation/dmpscheme.py b/saqc/core/translation/dmpscheme.py index f5354871f0fc7c6fef8de603b57708b6875f5d6d..f567623988a4cd2a87c1954118a3e42659ce69ff 100644 --- a/saqc/core/translation/dmpscheme.py +++ b/saqc/core/translation/dmpscheme.py @@ -17,7 +17,7 @@ import pandas as pd from saqc.constants import BAD, DOUBTFUL, GOOD, UNFLAGGED from saqc.core.flags import Flags from saqc.core.history import History -from saqc.core.translation.basescheme import BackwardMap, ForwardMap, TranslationScheme +from saqc.core.translation.basescheme import BackwardMap, ForwardMap, MappingScheme _QUALITY_CAUSES = [ "", @@ -40,7 +40,7 @@ _QUALITY_LABELS = [ ] -class DmpScheme(TranslationScheme): +class DmpScheme(MappingScheme): """ Implements the translation from and to the flagging scheme implemented in diff --git a/saqc/core/translation/positionalscheme.py b/saqc/core/translation/positionalscheme.py index 1fb581d56a45f620ce79c5bfdafcf5ba42e41363..32ffdd09f5e02b2fc7a96e467ed6525c12865368 100644 --- a/saqc/core/translation/positionalscheme.py +++ b/saqc/core/translation/positionalscheme.py @@ -12,10 +12,10 @@ import pandas as pd from saqc.constants import BAD, DOUBTFUL, GOOD, UNFLAGGED from saqc.core.flags import Flags, History -from saqc.core.translation.basescheme import BackwardMap, ForwardMap, TranslationScheme +from saqc.core.translation.basescheme import BackwardMap, ForwardMap, MappingScheme -class PositionalScheme(TranslationScheme): +class PositionalScheme(MappingScheme): """ Implements the translation from and to the flagging scheme implemented by CHS diff --git a/tests/core/test_translator.py b/tests/core/test_translator.py index 61d789e405b33bcaa1c70eaf02227ba71f59cdd3..0a84a5f884c07163ea9144f4c81ea2fb4edc021e 100644 --- a/tests/core/test_translator.py +++ b/tests/core/test_translator.py @@ -16,7 +16,7 @@ import pytest from saqc.constants import BAD, DOUBTFUL, FILTER_NONE, UNFLAGGED from saqc.core.core import SaQC from saqc.core.flags import Flags -from saqc.core.translation import DmpScheme, PositionalScheme, TranslationScheme +from saqc.core.translation import DmpScheme, PositionalScheme, MappingScheme from tests.common import initData @@ -27,7 +27,7 @@ def _genTranslators(): dtype(-1): BAD, **{dtype(f * 10): float(f) for f in range(10)}, } - scheme = TranslationScheme(flags, {v: k for k, v in flags.items()}) + scheme = MappingScheme(flags, {v: k for k, v in flags.items()}) yield flags, scheme