def test_small_w(): eps = np.finfo('f8').eps t = TDigest() t.update(gamma, eps) assert t.size() == 0 assert len(t.centroids()) == 0 t = TDigest() t.add(1, eps) assert t.size() == 0 assert len(t.centroids()) == 0
def test_single(): t = TDigest() t.add(10) assert t.min() == 10 assert t.max() == 10 assert t.size() == 1 assert t.quantile(0) == 10 assert t.quantile(0.5) == 10 assert t.quantile(1) == 10 assert t.cdf(9) == 0 assert t.cdf(10) == 0.5 assert t.cdf(11) == 1
def test_weights(): t = TDigest() t.add(1, 10) assert t.size() == 10 x = np.arange(5) w = np.array([1, 2, 1, 2, 1]) t = TDigest() t.update(x, 10) assert t.size() == len(x) * 10 t = TDigest() t.update(x, w) assert t.size() == w.sum()
def test_update_non_numeric_errors(): data = np.array(['foo', 'bar', 'baz']) t = TDigest() with pytest.raises(TypeError): t.update(data) with pytest.raises(TypeError): t.update(1, data) with pytest.raises(TypeError): t.add('foo') with pytest.raises(TypeError): t.add(1, 'foo')
def test_histogram_small_n(): t = TDigest() t.add(1) hist, bins = t.histogram(10) assert len(hist) == 10 assert len(bins) == 11 assert bins[0] == 0.5 assert bins[-1] == 1.5 assert hist.sum() == 1 t.add(2) hist, bins = t.histogram(10) assert hist.sum() == 2 assert bins[0] == 1 assert bins[-1] == 2 hist, bins = t.histogram(range=(-5, -3)) assert hist.sum() == 0
def test_nonfinite(): t = TDigest() data = gamma.copy() data[::10] = np.nan data[::7] = np.inf t.update(data) finite = data[np.isfinite(data)] assert t.size() == len(finite) assert t.min() == finite.min() assert t.max() == finite.max() t = TDigest() t.add(np.nan) t.add(np.inf) t.add(-np.inf) assert t.size() == 0 for w in [np.inf, -np.inf, np.nan]: t = TDigest() with pytest.raises(ValueError): t.add(1, w) w = np.array([1, 2, w, 3, 4]) t = TDigest() with pytest.raises(ValueError): t.update(np.ones(5), w)