from copy import copy
import pytest
import numpy as np

from mdevaluate import utils


@pytest.fixture
def logdata(request):
    xdata = np.logspace(-1, 3, 50)
    ydata = np.exp(-((xdata) ** 0.7))
    return xdata, ydata


def test_filon_fourier_transformation(logdata):
    xdata, ydata = logdata

    xdata_zero = copy(xdata)
    xdata_zero[0] = 0
    _, filon = utils.filon_fourier_transformation(xdata_zero, ydata)
    assert not np.isnan(filon).any(), "There are NaN values in the filon result!"

    freqs = np.logspace(-4, 1)
    filon_freqs, filon_imag = utils.filon_fourier_transformation(
        xdata, xdata, frequencies=freqs, derivative="linear", imag=True
    )

    assert (freqs == filon_freqs).all()

    freqs, filon_real = utils.filon_fourier_transformation(
        xdata, xdata, frequencies=freqs, derivative="linear", imag=False
    )
    assert np.isclose(filon_imag.real, filon_real).all()
