From b70e9bd2c4ac2f44d702054cf16224aefea88298 Mon Sep 17 00:00:00 2001 From: Martin Lange <martin.lange@ufz.de> Date: Sat, 26 Nov 2022 23:49:00 +0100 Subject: [PATCH] set up basic benchmarks --- .gitlab-ci.yml | 6 ++ benchmarks/data/test_tools.py | 136 ++++++++++++++++++++++++++++++++++ pyproject.toml | 5 +- 3 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 benchmarks/data/test_tools.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 18f2b866..b75b5cbf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,6 +31,12 @@ test: paths: - cov +benchmark: + stage: test + script: + - pip3 install --editable .[test] + - python -m pytest -v benchmarks/ + doctest: stage: test script: diff --git a/benchmarks/data/test_tools.py b/benchmarks/data/test_tools.py new file mode 100644 index 00000000..6b8d61d4 --- /dev/null +++ b/benchmarks/data/test_tools.py @@ -0,0 +1,136 @@ +import datetime as dt +import unittest + +import pytest + +import finam as fm +from finam.data import ( + assign_time, + check, + full, + get_time, + get_units, + has_time, + strip_data, + strip_time, + to_units, + to_xarray, +) + + +class TestCheckXarray(unittest.TestCase): + @pytest.fixture(autouse=True) + def setupBenchmark(self, benchmark): + self.benchmark = benchmark + + def test_check_xarray_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, "test", info, time) + _result = self.benchmark(check, xdata=xdata, name="test", info=info, time=time) + + def test_check_xarray_02_128x64(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((128, 64)), units="m") + xdata = full(0.0, "test", info, time) + _result = self.benchmark(check, xdata=xdata, name="test", info=info, time=time) + + +class TestToXarray(unittest.TestCase): + @pytest.fixture(autouse=True) + def setupBenchmark(self, benchmark): + self.benchmark = benchmark + + def test_to_xarray_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, "test", info, time) + data = strip_data(xdata) + _result = self.benchmark( + to_xarray, data=data, name="test", info=info, time=time + ) + + def test_to_xarray_02_128x64(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((128, 64)), units="m") + xdata = full(0.0, "test", info, time) + data = strip_data(xdata) + _result = self.benchmark( + to_xarray, data=data, name="test", info=info, time=time + ) + + def test_to_xarray_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, "test", info, time) + data = strip_data(xdata) + _result = self.benchmark( + to_xarray, data=data, name="test", info=info, time=time + ) + + +class TestTimeTools(unittest.TestCase): + @pytest.fixture(autouse=True) + def setupBenchmark(self, benchmark): + self.benchmark = benchmark + + 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, "test", info, time) + _result = self.benchmark(strip_time, xdata=xdata) + + def test_assign_time_update(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m") + xdata = full(0.0, "test", info, time) + _result = self.benchmark(assign_time, xdata=xdata, time=dt.datetime(2000, 1, 2)) + + def test_assign_time_add(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m") + xdata = full(0.0, "test", info, time) + xdata = strip_time(xdata) + _result = self.benchmark(assign_time, xdata=xdata, time=dt.datetime(2000, 1, 2)) + + def test_get_time(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m") + xdata = full(0.0, "test", info, time) + _result = self.benchmark(get_time, xdata=xdata) + + def test_has_time(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m") + xdata = full(0.0, "test", info, time) + _result = self.benchmark(has_time, xdata=xdata) + + +class TestUnitsTools(unittest.TestCase): + @pytest.fixture(autouse=True) + def setupBenchmark(self, benchmark): + self.benchmark = benchmark + + 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, "test", info, time) + _result = self.benchmark(get_units, xdata=xdata) + + def test_to_units_2x1(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="m") + xdata = full(0.0, "test", info, time) + _result = self.benchmark(to_units, xdata=xdata, units="in") + + def test_to_units_128x64(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((128, 64)), units="m") + xdata = full(0.0, "test", info, time) + _result = self.benchmark(to_units, xdata=xdata, units="in") + + def test_to_units_2048x1024(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m") + xdata = full(0.0, "test", info, time) + _result = self.benchmark(to_units, xdata=xdata, units="in") diff --git a/pyproject.toml b/pyproject.toml index d89c0ccb..c564e04d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,7 +65,10 @@ doc = [ "docutils>=0.18", # mdinclude with myst "matplotlib>=3", ] -test = ["pytest-cov>=3"] +test = [ + "pytest-cov>=3", + "pytest-benchmark>=4.0", +] [tool.setuptools] license-files = ["LICENSE"] -- GitLab