Skip to content
Snippets Groups Projects
test_tools.py 13.56 KiB
import datetime as dt
import unittest

import numpy as np
import pytest

import finam as fm
from finam.data.tools import (
    check,
    compatible_units,
    equivalent_units,
    full,
    full_like,
    get_magnitude,
    get_units,
    is_quantified,
    prepare,
    strip_time,
    to_units,
)


class TestCheck(unittest.TestCase):
    @pytest.fixture(autouse=True)
    def setupBenchmark(self, benchmark):
        self.benchmark = benchmark

    @pytest.mark.benchmark(group="data-tools")
    def test_check_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(check, xdata=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools")
    def test_check_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(check, xdata=xdata, info=info)


class TestPrepare(unittest.TestCase):
    @pytest.fixture(autouse=True)
    def setupBenchmark(self, benchmark):
        self.benchmark = benchmark

    def copy_numpy_prepare(self, data, info):
        return prepare(np.copy(data), info=info)

    @pytest.mark.benchmark(group="data-tools")
    def test_prepare_np_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools")
    def test_prepare_np_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools")
    def test_prepare_np_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools")
    def test_prepare_np_units_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools")
    def test_prepare_np_units_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools")
    def test_prepare_np_units_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_cp_prepare_np_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(self.copy_numpy_prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_cp_prepare_np_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(self.copy_numpy_prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_cp_prepare_np_03_1024x512(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((1024, 512)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(self.copy_numpy_prepare, data=xdata, info=info)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_cp_prepare_np_04_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(self.copy_numpy_prepare, data=xdata, info=info)


class TestFull(unittest.TestCase):
    @pytest.fixture(autouse=True)
    def setupBenchmark(self, benchmark):
        self.benchmark = benchmark

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_full_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        _result = self.benchmark(full, value=0.0, info=info)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_full_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        _result = self.benchmark(full, value=0.0, info=info)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_full_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        _result = self.benchmark(full, value=0.0, info=info)


class TestFullLike(unittest.TestCase):
    @pytest.fixture(autouse=True)
    def setupBenchmark(self, benchmark):
        self.benchmark = benchmark

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_full_like_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(full_like, xdata=xdata, value=0.0)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_full_like_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(full_like, xdata=xdata, value=0.0)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_full_like_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(full_like, xdata=xdata, value=0.0)


class TestTimeTools(unittest.TestCase):
    @pytest.fixture(autouse=True)
    def setupBenchmark(self, benchmark):
        self.benchmark = benchmark

    @pytest.mark.benchmark(group="data-tools")
    def test_strip_time(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(strip_time, xdata=xdata, grid=info.grid)


class TestUnitsTools(unittest.TestCase):
    @pytest.fixture(autouse=True)
    def setupBenchmark(self, benchmark):
        self.benchmark = benchmark

    @pytest.mark.benchmark(group="data-tools")
    def test_get_units(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(get_units, xdata=xdata)

    @pytest.mark.benchmark(group="data-tools")
    def test_is_quantified(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(is_quantified, xdata=xdata)

    @pytest.mark.benchmark(group="data-tools")
    def test_equivalent_units_true(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="mm")
        xdata = full(0.0, info)
        _result = equivalent_units(xdata, fm.UNITS.Unit("L/m^2"))
        result = self.benchmark(
            equivalent_units, unit1=xdata, unit2=fm.UNITS.Unit("L/m^2")
        )
        self.assertTrue(result)

    @pytest.mark.benchmark(group="data-tools")
    def test_equivalent_units_false(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="mm")
        xdata = full(0.0, info)
        _result = equivalent_units(xdata, fm.UNITS.meter)
        result = self.benchmark(equivalent_units, unit1=xdata, unit2=fm.UNITS.meter)
        self.assertFalse(result)

    @pytest.mark.benchmark(group="data-tools")
    def test_compatible_units(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="mm")
        xdata = full(0.0, info)
        _result = compatible_units(xdata, fm.UNITS.kilometer)
        _result = self.benchmark(
            compatible_units, unit1=xdata, unit2=fm.UNITS.kilometer
        )

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_to_units_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(to_units, xdata=xdata, units="in")

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_to_units_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(to_units, xdata=xdata, units="in")

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_to_units_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(to_units, xdata=xdata, units="in")

    @pytest.mark.benchmark(group="data-tools")
    def test_to_units_noop_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(to_units, xdata=xdata, units="m")

    @pytest.mark.benchmark(group="data-tools")
    def test_to_units_noop_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(to_units, xdata=xdata, units="m")

    @pytest.mark.benchmark(group="data-tools")
    def test_to_units_noop_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(to_units, xdata=xdata, units="m")

    @pytest.mark.benchmark(group="data-tools")
    def test_get_magnitude_01_2x1(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(get_magnitude, xdata=xdata)

    @pytest.mark.benchmark(group="data-tools")
    def test_get_magnitude_02_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(get_magnitude, xdata=xdata)

    @pytest.mark.benchmark(group="data-tools")
    def test_get_magnitude_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info)
        _result = self.benchmark(get_magnitude, xdata=xdata)

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_set_units_mul_01_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m"))

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_set_units_mul_02_1024x512(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((1024, 512)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m"))

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_set_units_mul_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m"))

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_set_units_quant_01_512x256(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m"))

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_set_units_quant_02_1024x512(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((1024, 512)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m"))

    @pytest.mark.benchmark(group="data-tools-slow")
    def test_set_units_quant_03_2048x1024(self):
        time = dt.datetime(2000, 1, 1)
        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
        xdata = full(0.0, info).magnitude
        _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m"))


def set_units_mul(data, units):
    return units * data


def set_units_qua(data, units):
    return fm.UNITS.Quantity(data, units)