예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)