Source code for crikit.cri.tests.test_kk_alg
"""
Testing for Kramers-Kronig Phase Retrieval Method
Using the math relation a^2 / (a^2 + x^2) (Lorentz/Cauchy) has an
analytical Hilbert transform: x^2 / (a^2 + x^2)-- and how that plays into
the KK
"""
import numpy as np
from numpy.testing import assert_array_almost_equal
from crikit.cri.algorithms.kk import kkrelation
[docs]def test_kk():
x = np.linspace(-100, 100, 1000)
y = 2/(2**2 + x**2)
hilb_y_analytical = x/(2**2 + x**2)
kkd = kkrelation(0*y + 1, np.exp(2*y), pad_factor=10)
kkd_angle = np.angle(kkd)
assert_array_almost_equal(hilb_y_analytical, kkd_angle, decimal=4)
[docs]def test_kk_no_bg_norm():
x = np.linspace(-100, 100, 1000)
y = 2/(2**2 + x**2)
kkd = kkrelation(0*y + 1, y, norm_by_bg=False)
assert_array_almost_equal(np.abs(kkd), np.sqrt(y))
[docs]def test_kk_3d():
x = np.linspace(-100, 100, 1000)
y = 2/(2**2 + x**2)
y = y[:, None, None]
kkd = kkrelation(0*y + 1, y, norm_by_bg=False)
assert_array_almost_equal(np.abs(kkd), np.sqrt(y))