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)