def test_walkers_dependent_subtle(): nwalkers, ndim = 30, 10 w = np.random.randn(nwalkers, ndim) assert walkers_independent(w) # random unit vector p = np.random.randn(ndim) p /= np.sqrt(np.dot(p, p)) # project away the direction of p w -= np.sum(p[None, :] * w, axis=1)[:, None] * p[None, :] assert not walkers_independent(w) # shift away from the origin w += p[None, :] assert not walkers_independent(w)
def test_walkers_almost_dependent(): nwalkers, ndim = 30, 10 squash = 1e-8 w = np.random.randn(nwalkers, ndim) assert walkers_independent(w) # random unit vector p = np.random.randn(ndim) p /= np.sqrt(np.dot(p, p)) # project away the direction of p proj = np.sum(p[None, :] * w, axis=1)[:, None] * p[None, :] w -= proj w += squash * proj assert not walkers_independent(w)
def test_walkers_independent_scaled(): # Some of these scales will overflow if squared, hee hee scales = np.array([1, 1e10, 1e100, 1e200, 1e-10, 1e-100, 1e-200]) ndim = len(scales) nwalkers = 5 * ndim w = np.random.randn(nwalkers, ndim) * scales[None, :] assert walkers_independent(w)
def test_walkers_independent_randn_offset_longdouble(nwalkers, ndim, offset): assert walkers_independent( np.random.randn(nwalkers, ndim) + np.ones((nwalkers, ndim), dtype=np.longdouble) * offset)
def test_walkers_dependent_big_offset(): nwalkers, ndim = 30, 10 offset = 10 / np.finfo(float).eps assert not walkers_independent( np.random.randn(nwalkers, ndim) + np.ones((nwalkers, ndim)) * offset)
def test_walkers_independent_randn_offset(nwalkers, ndim, offset): assert walkers_independent( np.random.randn(nwalkers, ndim) + np.ones((nwalkers, ndim)) * offset)
def test_walkers_independent_randn(nwalkers, ndim): assert walkers_independent(np.random.randn(nwalkers, ndim))
def test_walkers_dependent_toofew(nwalkers, ndim): assert not walkers_independent(np.random.randn(nwalkers, ndim))
def test_walkers_dependent_ones(nwalkers, ndim): assert not walkers_independent(np.ones((nwalkers, ndim)))