Skip to content
Snippets Groups Projects
test_shift_inversion_numpy.py 860 B
Newer Older
"""Unit tests for module shift_inversion_numpy"""

import numpy as np
import pytest

from lisainstrument.shift_inversion_numpy import make_shift_inverse_lagrange_numpy


def test_shift_inversion_numpy():
    """Test basic functioning of shift_inversion_numpy on analytic coordinate transform"""
    order = 31
    nsamp = 200
    k_mod = 8 * np.pi
    a_mod = 1e-3
    max_it = 5
    tol = 1e-10

    def dx_from_x(x):
        return np.sin(x * k_mod) * a_mod

    xi, dt = np.linspace(0, 1, nsamp, retstep=True)
    fsample = 1 / dt
    dxi = dx_from_x(xi)

    op_np = make_shift_inverse_lagrange_numpy(order, a_mod * 1.01, max_it, tol / dt)

    ai_np = op_np(dxi, fsample)

    ai_ex = dx_from_x(xi - ai_np)

    valid_range = slice(op_np.margin_left, -op_np.margin_right)
    assert ai_np[valid_range] == pytest.approx(ai_ex[valid_range], abs=tol, rel=0)