From dcff8437546393724740d65053d9d902870a770a Mon Sep 17 00:00:00 2001
From: Wolfgang Kastaun <wolfgang.kastaun@aei.mpg.de>
Date: Fri, 13 Dec 2024 15:26:00 +0100
Subject: [PATCH] added unit tests for dynamic shift interpolation

---
 tests/test_dynamic_delay_dask.py | 82 ++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 tests/test_dynamic_delay_dask.py

diff --git a/tests/test_dynamic_delay_dask.py b/tests/test_dynamic_delay_dask.py
new file mode 100644
index 0000000..64eacf5
--- /dev/null
+++ b/tests/test_dynamic_delay_dask.py
@@ -0,0 +1,82 @@
+import numpy as np
+import pytest
+from lisainstrument.dynamic_delay_dask import (
+    make_dynamic_shift_linear_dask,
+    make_dynamic_shift_lagrange_dask,
+    make_dynamic_shift_lagrange_numpy,
+    numpyfy_dask_bivariate,
+    DynShiftBC,
+    make_lagrange_polynomials,
+)
+
+
+def test_dynamic_shift_linear_dask():
+    t, dt = np.linspace(-5.345, 10.345, 103, retstep=True)
+
+    def g(x):
+        return 4.32546 + 3.34324 * x
+
+    y = g(t)
+
+    d = (0.93456456 + 0.0235345 * np.cos(4.3354 * t)) / dt
+
+    # ~ print(y[0], t[0], d[0])
+
+    op_da = make_dynamic_shift_linear_dask(
+        d.min(), d.max(), DynShiftBC.FLAT, DynShiftBC.EXCEPTION
+    )
+    op_np = numpyfy_dask_bivariate(op_da, chunks=19)
+
+    s_da = op_np(y, d)
+    s_ex = g(np.maximum(t[0], t - d * dt))
+
+    assert s_ex == pytest.approx(s_da, abs=1e-15, rel=1e-14)
+
+def test_dynamic_shift_lagrange_dask():
+    order = 4
+    length = order + 1
+    
+    t, dt = np.linspace(-5.345, 10.345, 1003, retstep=True)
+
+    def g(x):
+        n = x / 10.
+        return 4.32546 + 3.34324 * x + 4.342 * x**2 + 0.46 * x**3 + 1.43598 * x**4
+
+    y = g(t)
+
+    d = (0.93456456 + 0.0235345 * np.cos(4.3354 * t)) / dt
+
+    # ~ print(y[0], t[0], d[0])
+    
+    op_da = make_dynamic_shift_lagrange_dask(length,
+        d.min(), d.max(), DynShiftBC.FLAT, DynShiftBC.EXCEPTION
+    )
+    op_na = numpyfy_dask_bivariate(op_da, chunks=19)
+
+    s_da = op_na(y, d)
+    s_ex = g(np.maximum(t[0], t - d * dt))
+
+    assert s_ex[op_da.margin_left:] == pytest.approx(s_da[op_da.margin_left:], abs=1e-15, rel=1e-14)
+    
+    
+    op_np = make_dynamic_shift_lagrange_numpy(length,
+        d.min(), d.max(), DynShiftBC.FLAT, DynShiftBC.EXCEPTION
+    )
+    
+    s_np = op_np(y,d)
+    
+    assert np.all(s_np == s_da)
+    
+
+
+def test_lagrange_polynomials():
+    length = 11
+    d = -(length//2)
+    lagps = make_lagrange_polynomials(length,d)
+    for j,p in enumerate(lagps):
+        for x in range(d,d+length):
+            if x-d == j:
+                assert p(x) == pytest.approx(1, abs=0, rel=1e-12)
+            else:
+                assert p(x) == pytest.approx(0, abs=1e-11, rel=0)
+    
-- 
GitLab