Skip to content
Snippets Groups Projects
test_generic.py 1.72 KiB
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd

from .testfuncs import initData

from dsl import evalExpression
from flagger import SimpleFlagger


def test_ismissing():

    nodata = -9999

    data = initData()
    data.iloc[:len(data)//2, 0] = np.nan
    data.iloc[(len(data)//2)+1:, 0] = nodata

    flagger = SimpleFlagger()
    flags = flagger.emptyFlags(data)

    var1, var2, *_ = data.columns

    idx = evalExpression("ismissing({:})".format(var1),
                         flagger,
                         data, flags,
                         var2,
                         nodata=nodata)

    fdata = data.loc[idx, var1]
    assert (pd.isnull(fdata) | (fdata == nodata)).all()


def test_isflagged():

    flagger = SimpleFlagger()
    data = initData()
    flags = flagger.emptyFlags(data, 0)
    var1, var2, *_ = data.columns

    flags.iloc[::2, 0] = flagger.setFlag(flags.iloc[::2, 0])

    idx = evalExpression("isflagged({:})".format(var1),
                         flagger,
                         data, flags,
                         var2)

    flagged = flagger.isFlagged(flags[var1])
    assert (flagged == idx).all


def test_isflagged_nonstandard():

    flagger = SimpleFlagger()
    data = initData()
    flags = flagger.emptyFlags(data, 0)
    var1, var2, *_ = data.columns

    flags.iloc[::2, 0] = flagger.setFlag(flags.iloc[::2, 0], -9)

    idx = evalExpression("isflagged({:}, -9)".format(var1),
                         flagger,
                         data, flags,
                         var2)

    flagged = flagger.isFlagged(flags[var1], -9)
    assert (flagged == idx).all


if __name__ == "__main__":
    test_ismissing()
    test_isflagged()
    test_isflagged_nonstandard()