def test_logsumexp_converged_geometric_series(): data = np.ascontiguousarray(np.arange(10000)[::-1].astype(np.float64)) assert_almost_equal(util.logsumexp(-data, inplace=False, sort_array=False, use_kahan=False), 0.45867514538708193, decimal=15) assert_almost_equal(util.logsumexp(-data, inplace=False, sort_array=False, use_kahan=True), 0.45867514538708193, decimal=15) assert_almost_equal(util.logsumexp(-data, inplace=False, sort_array=True, use_kahan=False), 0.45867514538708193, decimal=15) assert_almost_equal(util.logsumexp(-data, inplace=False, sort_array=True, use_kahan=True), 0.45867514538708193, decimal=15) assert_almost_equal(util.logsumexp(-data, inplace=True, sort_array=True, use_kahan=True), 0.45867514538708193, decimal=15)
def test_logsumexp_truncated_diverging_geometric_series(): data = np.ascontiguousarray(np.arange(10000)[::-1].astype(np.float64)) assert_almost_equal(util.logsumexp(data, inplace=False, sort_array=False, use_kahan=False), 9999.4586751453862, decimal=15) assert_almost_equal(util.logsumexp(data, inplace=False, sort_array=False, use_kahan=True), 9999.4586751453862, decimal=15) assert_almost_equal(util.logsumexp(data, inplace=False, sort_array=True, use_kahan=False), 9999.4586751453862, decimal=15) assert_almost_equal(util.logsumexp(data, inplace=False, sort_array=True, use_kahan=True), 9999.4586751453862, decimal=15) assert_almost_equal(util.logsumexp(data, inplace=True, sort_array=True, use_kahan=True), 9999.4586751453862, decimal=15)
def test_logsumexp_zeros(): N = 10000 data = np.zeros(shape=(N, ), dtype=np.float64) assert_almost_equal(util.logsumexp(data, inplace=False), np.log(N), decimal=15) assert_almost_equal(util.logsumexp(-data, inplace=False), np.log(N), decimal=15)
def test_logsumexp_truncated_diverging_geometric_series(): data = np.ascontiguousarray(np.arange(10000)[::-1].astype(np.float64)) assert_almost_equal( util.logsumexp(data, inplace=False, sort_array=False, use_kahan=False), 9999.4586751453862, decimal=15) assert_almost_equal( util.logsumexp(data, inplace=False, sort_array=False, use_kahan=True), 9999.4586751453862, decimal=15) assert_almost_equal( util.logsumexp(data, inplace=False, sort_array=True, use_kahan=False), 9999.4586751453862, decimal=15) assert_almost_equal( util.logsumexp(data, inplace=False, sort_array=True, use_kahan=True), 9999.4586751453862, decimal=15) assert_almost_equal( util.logsumexp(data, inplace=True, sort_array=True, use_kahan=True), 9999.4586751453862, decimal=15)
def test_logsumexp_converged_geometric_series(): data = np.ascontiguousarray(np.arange(10000)[::-1].astype(np.float64)) assert_almost_equal( util.logsumexp(-data, inplace=False, sort_array=False, use_kahan=False), 0.45867514538708193, decimal=15) assert_almost_equal( util.logsumexp(-data, inplace=False, sort_array=False, use_kahan=True), 0.45867514538708193, decimal=15) assert_almost_equal( util.logsumexp(-data, inplace=False, sort_array=True, use_kahan=False), 0.45867514538708193, decimal=15) assert_almost_equal( util.logsumexp(-data, inplace=False, sort_array=True, use_kahan=True), 0.45867514538708193, decimal=15) assert_almost_equal( util.logsumexp(-data, inplace=True, sort_array=True, use_kahan=True), 0.45867514538708193, decimal=15)
def validate_thermodynamics(obj, estimator, strict=True): pi = [estimator.pi_full_state[s].sum() for s in obj.metastable_sets] f = [-logsumexp((-1.0) * estimator.f_full_state[s]) for s in obj.metastable_sets] if strict: npt.assert_allclose(pi, obj.pi, rtol=0.1, atol=0.2) npt.assert_allclose(f, obj.f, rtol=0.3, atol=0.5) else: npt.assert_allclose(pi, obj.pi, rtol=0.3, atol=0.4) npt.assert_allclose(f, obj.f, rtol=0.5, atol=0.7)
def test_logsumexp_zeros(): N = 10000 data = np.zeros(shape=(N,), dtype=np.float64) assert_almost_equal(util.logsumexp(data, inplace=False), np.log(N), decimal=15) assert_almost_equal(util.logsumexp(-data, inplace=False), np.log(N), decimal=15)