Skip to content
Snippets Groups Projects
common.py 2.6 KiB
Newer Older
#! /usr/bin/env python

# SPDX-FileCopyrightText: 2021 Helmholtz-Zentrum für Umweltforschung GmbH - UFZ
#
# SPDX-License-Identifier: GPL-3.0-or-later

# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd
import dios
from saqc.constants import *
from saqc.core import Flags
David Schäfer's avatar
David Schäfer committed
from saqc.core.history import History, createHistoryFromData
def flagAll(data, field, flags, **kwargs):
    # NOTE: remember to rename flag -> flag_values
    flags.copy()
    flags[:, field] = BAD
    return data, flags
def initData(
Bert Palm's avatar
Bert Palm committed
    cols=2, start_date="2017-01-01", end_date="2017-12-31", freq=None, rows=None
Bert Palm's avatar
Bert Palm committed
    if rows is None:
David Schäfer's avatar
David Schäfer committed
        freq = freq or "1h"
Bert Palm's avatar
Bert Palm committed

Bert Palm's avatar
Bert Palm committed
    di = dios.DictOfSeries(itype=dios.DtItype)
Bert Palm's avatar
Bert Palm committed
    dates = pd.date_range(start=start_date, end=end_date, freq=freq, periods=rows)
    dummy = np.arange(len(dates))
Bert Palm's avatar
Bert Palm committed

    for col in range(1, cols + 1):
Bert Palm's avatar
Bert Palm committed
        di[f"var{col}"] = pd.Series(data=dummy * col, index=dates)

    return di
def dummyHistory(hist: pd.DataFrame = None, meta: list = None):
David Schäfer's avatar
David Schäfer committed
    if hist is None:
        return History()

    if meta is None:
        meta = [{}] * len(hist.columns)

    return createHistoryFromData(hist, meta, copy=True)
David Schäfer's avatar
David Schäfer committed


def writeIO(content):
    f = io.StringIO()
    f.write(content)
    f.seek(0)
    return f
def checkDataFlagsInvariants(data, flags, field, identical=True):
    """
    Check all invariants that must hold at any point for
        * field
        * data
        * flags[field].index
        * between data and flags
        * between data[field] and flags[field]

    Parameters
    ----------
    data : dios.DictOfSeries
        data container
        flags container
    field : str
        the field in question
    identical : bool, default True
        whether to check indexes of data and flags to be
        identical (True, default) of just for equality.
    """
    assert isinstance(data, dios.DictOfSeries)
    # all columns in data are in flags
    assert data.columns.difference(flags.columns).empty

    # ------------------------------------------------------------------------
    # below here, we just check on and with field
    # ------------------------------------------------------------------------
    assert field in data

    # `pd.Index.identical` also check index attributes like `freq`
    if identical:
        assert data[field].index.identical(flags[field].index)
        assert data[field].index.equals(flags[field].index)