import numpy as np
import numpy.testing as npt
from statsmodels.tools import sequences
def test_discrepancy():
space_0 = [[0.1, 0.5], [0.2, 0.4], [0.3, 0.3], [0.4, 0.2], [0.5, 0.1]]
space_1 = [[1, 3], [2, 6], [3, 2], [4, 5], [5, 1], [6, 4]]
space_2 = [[1, 5], [2, 4], [3, 3], [4, 2], [5, 1], [6, 6]]
corners = np.array([[0.5, 0.5], [6.5, 6.5]])
npt.assert_allclose(sequences.discrepancy(space_0), 0.1353, atol=1e-4)
# From Fang et al. Design and modeling for computer experiments, 2006
npt.assert_allclose(sequences.discrepancy(space_1, corners), 0.0081, atol=1e-4)
npt.assert_allclose(sequences.discrepancy(space_2, corners), 0.0105, atol=1e-4)
def test_van_der_corput():
sample = sequences.van_der_corput(10)
out = [0., 0.5, 0.25, 0.75, 0.125, 0.625, 0.375, 0.875, 0.0625, 0.5625]
npt.assert_almost_equal(sample, out)
sample = sequences.van_der_corput(5, start_index=3)
out = [0.75, 0.125, 0.625, 0.375, 0.875]
npt.assert_almost_equal(sample, out)
def test_primes():
primes = sequences.primes_from_2_to(50)
out = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
npt.assert_allclose(primes, out)
def test_halton():
corners = np.array([[0, 2], [10, 5]])
sample = sequences.halton(dim=2, n_sample=5, bounds=corners)
out = np.array([[5., 3.], [2.5, 4.], [7.5, 2.3], [1.25, 3.3], [6.25, 4.3]])
npt.assert_almost_equal(sample, out, decimal=1)
sample = sequences.halton(dim=2, n_sample=3, bounds=corners, start_index=2)
out = np.array([[7.5, 2.3], [1.25, 3.3], [6.25, 4.3]])
npt.assert_almost_equal(sample, out, decimal=1)