From 9f17f6758fd898dc211518a9a5ab3a7d106bab37 Mon Sep 17 00:00:00 2001 From: David Schaefer <david.schaefer@ufz.de> Date: Mon, 6 May 2024 10:00:02 +0200 Subject: [PATCH] fix linting issues from ruff --- saqc/__init__.py | 21 +++++++++++++++++--- saqc/__main__.py | 8 ++++---- saqc/core/__init__.py | 13 +++++++++++- saqc/core/core.py | 4 ++-- saqc/core/flags.py | 3 +-- saqc/core/translation/__init__.py | 10 ++++++++++ saqc/core/translation/dmpscheme.py | 2 -- saqc/funcs/changepoints.py | 4 +--- saqc/funcs/flagtools.py | 3 +-- saqc/funcs/generic.py | 2 +- saqc/funcs/interpolation.py | 3 --- saqc/funcs/noise.py | 8 +------- saqc/funcs/outliers.py | 3 +-- saqc/funcs/resampling.py | 10 ++++------ saqc/funcs/residuals.py | 2 +- saqc/funcs/rolling.py | 7 +------ saqc/funcs/scores.py | 5 ++--- saqc/funcs/tools.py | 1 - saqc/funcs/transformation.py | 2 +- saqc/lib/plotting.py | 1 - saqc/lib/tools.py | 2 +- saqc/lib/ts_operators.py | 3 --- saqc/lib/types.py | 10 +--------- saqc/parsing/environ.py | 2 -- tests/core/test_core.py | 3 ++- tests/funcs/test_constants_detection.py | 4 ++-- tests/funcs/test_functions.py | 5 ++--- tests/funcs/test_generic_config_functions.py | 5 +++-- tests/funcs/test_outlier_detection.py | 4 ++-- tests/funcs/test_pattern_rec.py | 4 ++-- tests/funcs/test_proc_functions.py | 4 ++-- tests/funcs/test_resampling.py | 2 +- tests/fuzzy/lib.py | 4 ++-- 33 files changed, 81 insertions(+), 83 deletions(-) diff --git a/saqc/__init__.py b/saqc/__init__.py index a801471cf..254c45622 100644 --- a/saqc/__init__.py +++ b/saqc/__init__.py @@ -7,8 +7,25 @@ """The System for automated Quality Control package.""" +__all__ = [ + "BAD", + "DOUBTFUL", + "GOOD", + "UNFLAGGED", + "FILTER_ALL", + "FILTER_NONE", + "Flags", + "DictOfSeries", + "SaQC", + "DmpScheme", + "FloatScheme", + "PositionalScheme", + "SimpleScheme", + "AnnotatedFloatScheme", + "fromConfig", +] + from saqc.constants import BAD, DOUBTFUL, FILTER_ALL, FILTER_NONE, GOOD, UNFLAGGED -from saqc.exceptions import ParsingError from saqc.core import Flags, DictOfSeries, SaQC from saqc.core.translation import ( DmpScheme, @@ -18,8 +35,6 @@ from saqc.core.translation import ( AnnotatedFloatScheme, ) from saqc.parsing.reader import fromConfig -from saqc.version import __version__ - from . import _version __version__ = _version.get_versions()["version"] diff --git a/saqc/__main__.py b/saqc/__main__.py index d5da00363..be2263500 100644 --- a/saqc/__main__.py +++ b/saqc/__main__.py @@ -136,10 +136,10 @@ def main( config = str(config) cr = _ConfigReader(data=data, scheme=scheme) if config.endswith("json"): - f = None - if json_field is not None: - f = lambda j: j[str(json_field)] - cr = cr.readJson(config, unpack=f) + cr = cr.readJson( + config, + unpack=lambda j: j[str(json_field)] if json_field is not None else None, + ) else: cr = cr.readCsv(config) diff --git a/saqc/core/__init__.py b/saqc/core/__init__.py index 1fbe7e27c..bd5ac9dc6 100644 --- a/saqc/core/__init__.py +++ b/saqc/core/__init__.py @@ -4,8 +4,19 @@ # -*- coding: utf-8 -*- # isort: skip_file + +__all__ = [ + "DictOfSeries", + "History", + "Flags", + "SaQC", + "flagging", + "processing", + "register", +] + from saqc.core.frame import DictOfSeries from saqc.core.history import History -from saqc.core.flags import Flags, initFlagsLike +from saqc.core.flags import Flags from saqc.core.register import flagging, processing, register from saqc.core.core import SaQC diff --git a/saqc/core/core.py b/saqc/core/core.py index c669da567..952b2ed8c 100644 --- a/saqc/core/core.py +++ b/saqc/core/core.py @@ -12,7 +12,7 @@ import warnings from copy import copy as shallowcopy from copy import deepcopy from functools import partial -from typing import Any, Hashable, Iterable, MutableMapping +from typing import Any, Hashable, Iterable import numpy as np import pandas as pd @@ -332,7 +332,7 @@ class SaQC(FunctionsMixin): def _castData(self, data) -> DictOfSeries: if isinstance(data, pd.Series): if not isinstance(data.name, str): - raise ValueError(f"Cannot init from unnamed pd.Series") + raise ValueError("Cannot init from unnamed pd.Series") data = data.to_frame() if isinstance(data, pd.DataFrame): for idx in [data.index, data.columns]: diff --git a/saqc/core/flags.py b/saqc/core/flags.py index e597e0ee1..fc1684193 100644 --- a/saqc/core/flags.py +++ b/saqc/core/flags.py @@ -7,7 +7,6 @@ from __future__ import annotations import typing -import warnings from typing import DefaultDict, Dict, Iterable, Mapping, Tuple, Type, Union, overload import numpy as np @@ -243,7 +242,7 @@ class Flags: if history.empty: return history - errm = f"History " + errm = "History " if colname: errm += f"of column {colname} " diff --git a/saqc/core/translation/__init__.py b/saqc/core/translation/__init__.py index 7549e43c5..1aaca2982 100644 --- a/saqc/core/translation/__init__.py +++ b/saqc/core/translation/__init__.py @@ -5,6 +5,16 @@ # SPDX-License-Identifier: GPL-3.0-or-later # -*- coding: utf-8 -*- +__all__ = [ + "MappingScheme", + "TranslationScheme", + "DmpScheme", + "AnnotatedFloatScheme", + "FloatScheme", + "PositionalScheme", + "SimpleScheme", +] + from saqc.core.translation.basescheme import MappingScheme, TranslationScheme from saqc.core.translation.dmpscheme import DmpScheme from saqc.core.translation.floatscheme import AnnotatedFloatScheme, FloatScheme diff --git a/saqc/core/translation/dmpscheme.py b/saqc/core/translation/dmpscheme.py index fb68713d5..f80267c93 100644 --- a/saqc/core/translation/dmpscheme.py +++ b/saqc/core/translation/dmpscheme.py @@ -9,7 +9,6 @@ from __future__ import annotations import json -from functools import reduce import numpy as np import pandas as pd @@ -18,7 +17,6 @@ from saqc import BAD, DOUBTFUL, GOOD, UNFLAGGED from saqc.core import Flags, History from saqc.core.frame import DictOfSeries from saqc.core.translation.basescheme import BackwardMap, ForwardMap, MappingScheme -from saqc.lib.tools import getUnionIndex _QUALITY_CAUSES = [ "", diff --git a/saqc/funcs/changepoints.py b/saqc/funcs/changepoints.py index ff706f691..b0ce725b3 100644 --- a/saqc/funcs/changepoints.py +++ b/saqc/funcs/changepoints.py @@ -13,13 +13,11 @@ import numpy as np import pandas as pd from saqc import BAD, UNFLAGGED -from saqc.core import DictOfSeries, Flags, flagging, register +from saqc.core import flagging, register from saqc.lib.checking import ( - isInBounds, validateCallable, validateChoice, validateMinPeriods, - validateValueBounds, validateWindow, ) diff --git a/saqc/funcs/flagtools.py b/saqc/funcs/flagtools.py index d7ea5015a..f57822e35 100644 --- a/saqc/funcs/flagtools.py +++ b/saqc/funcs/flagtools.py @@ -17,7 +17,6 @@ from typing_extensions import Literal from saqc import BAD, FILTER_ALL, UNFLAGGED from saqc.core import DictOfSeries, flagging, register -from saqc.core.flags import Flags from saqc.core.history import History from saqc.lib.checking import validateChoice, validateWindow from saqc.lib.tools import ( @@ -446,7 +445,7 @@ class FlagtoolsMixin: fields, targets, broadcasting = multivariateParameters(field, target) meta = { - "func": f"transferFlags", + "func": "transferFlags", "args": (), "kwargs": { "field": field, diff --git a/saqc/funcs/generic.py b/saqc/funcs/generic.py index ad8b20067..4973883db 100644 --- a/saqc/funcs/generic.py +++ b/saqc/funcs/generic.py @@ -267,7 +267,7 @@ class GenericMixin: ) if not result.empty and not isAllBoolean(result): - raise TypeError(f"generic expression does not return a boolean array") + raise TypeError("generic expression does not return a boolean array") # update flags & data for i, col in enumerate(targets): diff --git a/saqc/funcs/interpolation.py b/saqc/funcs/interpolation.py index 481c87d72..65501df34 100644 --- a/saqc/funcs/interpolation.py +++ b/saqc/funcs/interpolation.py @@ -7,7 +7,6 @@ # -*- coding: utf-8 -*- from __future__ import annotations -import warnings from typing import TYPE_CHECKING, Callable, Tuple, Union import numpy as np @@ -18,8 +17,6 @@ from saqc import UNFLAGGED from saqc.core import register from saqc.core.history import History from saqc.lib.checking import ( - isValidChoice, - validateCallable, validateChoice, validateFuncSelection, validateMinPeriods, diff --git a/saqc/funcs/noise.py b/saqc/funcs/noise.py index 7e18add8f..db60bf214 100644 --- a/saqc/funcs/noise.py +++ b/saqc/funcs/noise.py @@ -13,16 +13,10 @@ from typing import TYPE_CHECKING, Callable, Literal import numpy as np import pandas as pd -from scipy.stats import median_abs_deviation from saqc.constants import BAD from saqc.core.register import flagging -from saqc.lib.checking import ( - isCallable, - validateFuncSelection, - validateMinPeriods, - validateWindow, -) +from saqc.lib.checking import validateFuncSelection, validateMinPeriods, validateWindow from saqc.lib.tools import isunflagged, statPass from saqc.parsing.environ import ENV_OPERATORS diff --git a/saqc/funcs/outliers.py b/saqc/funcs/outliers.py index 5ea2e2dda..ab8782402 100644 --- a/saqc/funcs/outliers.py +++ b/saqc/funcs/outliers.py @@ -10,7 +10,7 @@ from __future__ import annotations import uuid import warnings -from typing import TYPE_CHECKING, Callable, List, Optional, Sequence, Tuple +from typing import TYPE_CHECKING, Callable, Sequence, Tuple import numpy as np import numpy.polynomial.polynomial as poly @@ -27,7 +27,6 @@ from saqc.lib.checking import ( validateChoice, validateFraction, validateFrequency, - validateFuncSelection, validateMinPeriods, validateValueBounds, validateWindow, diff --git a/saqc/funcs/resampling.py b/saqc/funcs/resampling.py index 168d16fc0..fb803e26c 100644 --- a/saqc/funcs/resampling.py +++ b/saqc/funcs/resampling.py @@ -7,11 +7,10 @@ # -*- coding: utf-8 -*- from __future__ import annotations -import re import typing import uuid import warnings -from typing import TYPE_CHECKING, Callable, Union +from typing import TYPE_CHECKING, Callable import numpy as np import pandas as pd @@ -21,10 +20,9 @@ import saqc.constants from saqc.constants import UNFLAGGED from saqc.core import register from saqc.core.history import History -from saqc.funcs.interpolation import DATA_REINDEXER from saqc.lib.checking import validateChoice, validateFuncSelection from saqc.lib.docs import DOC_TEMPLATES -from saqc.lib.tools import filterKwargs, getFreqDelta +from saqc.lib.tools import getFreqDelta from saqc.lib.ts_operators import isValid if TYPE_CHECKING: @@ -288,10 +286,10 @@ class ResamplingMixin: done = True if len(stack) == 0: - raise ValueError(f"Could not find no last reindexing to invert") + raise ValueError("Could not find no last reindexing to invert") reindex_method = METHODINVERTS.get(stack[-1], False) - if reindex_method == False: + if reindex_method is False: raise ValueError(f"cant invert {stack[-1]}") return reindex_method diff --git a/saqc/funcs/residuals.py b/saqc/funcs/residuals.py index 5ef4a6a40..0ba870798 100644 --- a/saqc/funcs/residuals.py +++ b/saqc/funcs/residuals.py @@ -7,7 +7,7 @@ # -*- coding: utf-8 -*- from __future__ import annotations -from typing import TYPE_CHECKING, Callable, Optional, Union +from typing import TYPE_CHECKING, Callable import numpy as np import pandas as pd diff --git a/saqc/funcs/rolling.py b/saqc/funcs/rolling.py index dfcdfd23c..77a9d9985 100644 --- a/saqc/funcs/rolling.py +++ b/saqc/funcs/rolling.py @@ -14,12 +14,7 @@ import pandas as pd import saqc from saqc.core import DictOfSeries, Flags, register -from saqc.lib.checking import ( - validateCallable, - validateFuncSelection, - validateMinPeriods, - validateWindow, -) +from saqc.lib.checking import validateFuncSelection, validateMinPeriods, validateWindow from saqc.lib.tools import getFreqDelta if TYPE_CHECKING: diff --git a/saqc/funcs/scores.py b/saqc/funcs/scores.py index f72e2362f..aacc76eb3 100644 --- a/saqc/funcs/scores.py +++ b/saqc/funcs/scores.py @@ -7,14 +7,13 @@ # -*- coding: utf-8 -*- from __future__ import annotations -from typing import TYPE_CHECKING, Callable, Optional, Sequence, Tuple, Union +from typing import TYPE_CHECKING, Callable, Optional, Sequence, Tuple import numpy as np import pandas as pd from sklearn.neighbors import LocalOutlierFactor from typing_extensions import Literal -from saqc import UNFLAGGED from saqc.core import register from saqc.lib.checking import ( validateChoice, @@ -25,7 +24,7 @@ from saqc.lib.checking import ( from saqc.lib.docs import DOC_TEMPLATES from saqc.lib.tools import getApply, toSequence from saqc.lib.ts_operators import kNN -from saqc.parsing.environ import ENV_OPERATORS, ENV_TRAFOS +from saqc.parsing.environ import ENV_OPERATORS if TYPE_CHECKING: from saqc import SaQC diff --git a/saqc/funcs/tools.py b/saqc/funcs/tools.py index 453d28d88..5038df629 100644 --- a/saqc/funcs/tools.py +++ b/saqc/funcs/tools.py @@ -9,7 +9,6 @@ from __future__ import annotations import pickle import tkinter as tk -import warnings from typing import TYPE_CHECKING import matplotlib as mpl diff --git a/saqc/funcs/transformation.py b/saqc/funcs/transformation.py index 2b2d6db44..cfc4d226a 100644 --- a/saqc/funcs/transformation.py +++ b/saqc/funcs/transformation.py @@ -7,7 +7,7 @@ # -*- coding: utf-8 -*- from __future__ import annotations -from typing import TYPE_CHECKING, Callable, Optional, Union +from typing import TYPE_CHECKING, Callable import numpy as np import pandas as pd diff --git a/saqc/lib/plotting.py b/saqc/lib/plotting.py index 5dd0e944b..41a5b5a53 100644 --- a/saqc/lib/plotting.py +++ b/saqc/lib/plotting.py @@ -9,7 +9,6 @@ from __future__ import annotations import itertools -from collections import OrderedDict import matplotlib as mpl import matplotlib.pyplot as plt diff --git a/saqc/lib/tools.py b/saqc/lib/tools.py index 72c201c8f..7fd671036 100644 --- a/saqc/lib/tools.py +++ b/saqc/lib/tools.py @@ -442,7 +442,7 @@ def getApply(in_obj, apply_obj, attr_access="__name__", attr_or="apply") -> pd.S try: # let's try to run it somewhat optimized out = getattr(in_obj, attr_or)(apply_obj, raw=True) - except: + except Exception: # did't work out, fallback out = getattr(in_obj, attr_or)(apply_obj) diff --git a/saqc/lib/ts_operators.py b/saqc/lib/ts_operators.py index c983a314f..4b0c4ad44 100644 --- a/saqc/lib/ts_operators.py +++ b/saqc/lib/ts_operators.py @@ -9,10 +9,7 @@ """ The module gathers all kinds of timeseries tranformations. """ -import re import sys -import warnings -from typing import Literal, Union import numpy as np import numpy.polynomial.polynomial as poly diff --git a/saqc/lib/types.py b/saqc/lib/types.py index 8b5b6e5fa..c5e784527 100644 --- a/saqc/lib/types.py +++ b/saqc/lib/types.py @@ -8,20 +8,12 @@ from __future__ import annotations import abc -from typing import Any, Dict, TypeVar, Union +from typing import TypeVar, Union import numpy as np import pandas as pd from typing_extensions import Protocol -__all__ = [ - "T", - "ArrayLike", - "CurveFitter", - "ExternalFlag", - "OptionalNone", -] - T = TypeVar("T") ArrayLike = TypeVar("ArrayLike", np.ndarray, pd.Series, pd.DataFrame) diff --git a/saqc/parsing/environ.py b/saqc/parsing/environ.py index a3095b363..d494ed666 100644 --- a/saqc/parsing/environ.py +++ b/saqc/parsing/environ.py @@ -7,8 +7,6 @@ # -*- coding: utf-8 -*- import numpy as np -import pandas as pd -import scipy.stats as st import saqc.lib.ts_operators as ts_ops from saqc import BAD, DOUBTFUL, FILTER_ALL, FILTER_NONE, GOOD, UNFLAGGED diff --git a/tests/core/test_core.py b/tests/core/test_core.py index 4109eb6e4..b5062f33f 100644 --- a/tests/core/test_core.py +++ b/tests/core/test_core.py @@ -13,7 +13,8 @@ import pandas as pd import pytest from saqc import BAD, FILTER_ALL, FILTER_NONE, UNFLAGGED, SaQC -from saqc.core import DictOfSeries, Flags, flagging, initFlagsLike, processing, register +from saqc.core import DictOfSeries, Flags, flagging, processing, register +from saqc.core.flags import initFlagsLike from saqc.lib.types import OptionalNone from tests.common import initData diff --git a/tests/funcs/test_constants_detection.py b/tests/funcs/test_constants_detection.py index 8cbf3290d..a6ec79792 100644 --- a/tests/funcs/test_constants_detection.py +++ b/tests/funcs/test_constants_detection.py @@ -9,8 +9,8 @@ import numpy as np import pytest -from saqc import BAD, UNFLAGGED -from saqc.core import SaQC, initFlagsLike +from saqc import BAD, UNFLAGGED, SaQC +from saqc.core.flags import initFlagsLike from tests.common import initData diff --git a/tests/funcs/test_functions.py b/tests/funcs/test_functions.py index d956e39b1..8a3e14a53 100644 --- a/tests/funcs/test_functions.py +++ b/tests/funcs/test_functions.py @@ -10,9 +10,8 @@ import numpy as np import pandas as pd import pytest -import saqc -from saqc import BAD, DOUBTFUL, UNFLAGGED, SaQC -from saqc.core import DictOfSeries, initFlagsLike +from saqc import BAD, DOUBTFUL, UNFLAGGED, DictOfSeries, SaQC +from saqc.core.flags import initFlagsLike from tests.common import initData from tests.fixtures import char_dict, course_1 # noqa, todo: fix fixtures diff --git a/tests/funcs/test_generic_config_functions.py b/tests/funcs/test_generic_config_functions.py index f19342a39..d9af808da 100644 --- a/tests/funcs/test_generic_config_functions.py +++ b/tests/funcs/test_generic_config_functions.py @@ -12,8 +12,9 @@ import numpy as np import pandas as pd import pytest -from saqc import BAD, UNFLAGGED, SaQC -from saqc.core import DictOfSeries, Flags, initFlagsLike, register +from saqc import BAD, UNFLAGGED, DictOfSeries, Flags, SaQC +from saqc.core import register +from saqc.core.flags import initFlagsLike from saqc.funcs.generic import _execGeneric from saqc.parsing.reader import _ConfigReader from saqc.parsing.visitor import ConfigFunctionParser diff --git a/tests/funcs/test_outlier_detection.py b/tests/funcs/test_outlier_detection.py index 81bd0ec28..61953bcd0 100644 --- a/tests/funcs/test_outlier_detection.py +++ b/tests/funcs/test_outlier_detection.py @@ -13,8 +13,8 @@ import pandas as pd import pytest import saqc -from saqc import BAD, UNFLAGGED -from saqc.core import DictOfSeries, SaQC, initFlagsLike +from saqc import BAD, UNFLAGGED, DictOfSeries, SaQC +from saqc.core.flags import initFlagsLike from tests.fixtures import char_dict, course_1, course_2, course_3, course_4 diff --git a/tests/funcs/test_pattern_rec.py b/tests/funcs/test_pattern_rec.py index 6b96ee0ca..b2be3a634 100644 --- a/tests/funcs/test_pattern_rec.py +++ b/tests/funcs/test_pattern_rec.py @@ -9,8 +9,8 @@ import pandas as pd import pytest -from saqc import BAD, UNFLAGGED, SaQC -from saqc.core import DictOfSeries, initFlagsLike +from saqc import BAD, UNFLAGGED, DictOfSeries, SaQC +from saqc.core.flags import initFlagsLike from tests.common import initData diff --git a/tests/funcs/test_proc_functions.py b/tests/funcs/test_proc_functions.py index df960969b..b2f097060 100644 --- a/tests/funcs/test_proc_functions.py +++ b/tests/funcs/test_proc_functions.py @@ -14,8 +14,8 @@ import pandas as pd import pytest import saqc -from saqc import UNFLAGGED, SaQC -from saqc.core import DictOfSeries, initFlagsLike +from saqc import UNFLAGGED, DictOfSeries, SaQC +from saqc.core.flags import initFlagsLike from saqc.lib.ts_operators import linearInterpolation, polynomialInterpolation from tests.fixtures import char_dict, course_3, course_5 # noqa, todo: fix fixtures diff --git a/tests/funcs/test_resampling.py b/tests/funcs/test_resampling.py index b765c074f..f077c283b 100644 --- a/tests/funcs/test_resampling.py +++ b/tests/funcs/test_resampling.py @@ -14,7 +14,7 @@ import pandas as pd import pytest from saqc import SaQC -from saqc.core import initFlagsLike +from saqc.core.flags import initFlagsLike from saqc.funcs.resampling import ( _aggregationGrouper, _constructAggregationReindexer, diff --git a/tests/fuzzy/lib.py b/tests/fuzzy/lib.py index a70a159f3..e0b30cac9 100644 --- a/tests/fuzzy/lib.py +++ b/tests/fuzzy/lib.py @@ -23,8 +23,8 @@ from hypothesis.strategies import ( ) from hypothesis.strategies._internal.types import _global_type_lookup -from saqc import BAD -from saqc.core import DictOfSeries, initFlagsLike +from saqc import BAD, DictOfSeries +from saqc.core.flags import initFlagsLike from saqc.core.register import FUNC_MAP MAX_EXAMPLES = 50 -- GitLab