def test_hypercontractivity_coefficient_tensorization(dist1, dist2): """ Test tensorization: hc(X X' : Y Y') = max(hc(X:Y), hc(X', Y')) """ import dit dit.ditParams['repr.print'] = True mixed = dist1.__matmul__(dist2) hc_mixed = hypercontractivity_coefficient(mixed, [[0, 2], [1, 3]]) hc_a = hypercontractivity_coefficient(dist1, [[0], [1]]) hc_b = hypercontractivity_coefficient(dist2, [[0], [1]]) assert hc_mixed == pytest.approx(max(hc_a, hc_b), abs=1e-2)
def test_hypercontractivity_coefficient2(): """ Test against a known value. """ d = Distribution(['00', '01', '10', '11'], [1 / 4] * 4) hc = hypercontractivity_coefficient(d, [[0], [1]]) assert hc == pytest.approx(0.0)
def test_mi_hc(dist): """ given U - X - Y: I[U:Y] <= s*(X||Y)*I[U:X] """ a = I(dist, [[0], [2]]) b = hypercontractivity_coefficient(dist, [[1], [2]], niter=20) c = I(dist, [[0], [1]]) assert a <= b * c + epsilon
def test_mi_hc(dist): """ given U - X - Y: I[U:Y] <= s*(X||Y)*I[U:X] """ a = I(dist, [[0], [2]]) b = hypercontractivity_coefficient(dist, [[1], [2]], niter=20) c = I(dist, [[0], [1]]) assert a <= b*c + epsilon
def test_hypercontractivity_coefficient_failure(rvs): """ Test that hypercontractivity_coefficient fails with len(rvs) != 2 """ with pytest.raises(ditException): hypercontractivity_coefficient(dyadic, rvs)
def test_hypercontractivity_coefficient(dist, rvs): """ Test against known values """ assert hypercontractivity_coefficient(dist, rvs) == pytest.approx(1.0)