From 9ce9f067061b9a144520230c004bfd173c64fe2d Mon Sep 17 00:00:00 2001 From: David Schaefer <david.schaefer@ufz.de> Date: Mon, 21 Nov 2022 13:54:40 +0100 Subject: [PATCH] implement an abstract translatro interface --- saqc/core/translation/__init__.py | 1 + saqc/core/translation/basescheme.py | 27 ++++++++++++++++++----- saqc/core/translation/dmpscheme.py | 4 ++-- saqc/core/translation/positionalscheme.py | 4 ++-- tests/core/test_translator.py | 4 ++-- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/saqc/core/translation/__init__.py b/saqc/core/translation/__init__.py index 45aa07796..c2db9856f 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 1b42a8eff..511fc92d0 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 f5354871f..f56762398 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 1fb581d56..32ffdd09f 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 61d789e40..0a84a5f88 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 -- GitLab