def use_rangemedian(request): if request.param == "rangemedian": assert isinstance(step_detect.get_mu_dist([0], [1]), _rangemedian.RangeMedian) return True else: step_detect._rangemedian = None def restore(): if HAVE_RANGEMEDIAN: step_detect._rangemedian = _rangemedian request.addfinalizer(restore) assert isinstance(step_detect.get_mu_dist([0], [1]), L1Dist) return False
def use_rangemedian(request): if request.param == "rangemedian": assert isinstance(step_detect.get_mu_dist([0], [1]), _rangemedian.RangeMedian) return True else: step_detect._rangemedian = None def restore(): if HAVE_RANGEMEDIAN: step_detect._rangemedian = _rangemedian request.addfinalizer(restore) assert isinstance(step_detect.get_mu_dist([0], [1]), L1Dist) return False
def test_l1dist(use_rangemedian): random.seed(1) datasets = [([1, 1, 10, 3, 5, 1, -16, -3, 4, 9], [1] * 10), ([random.gauss(0, 1) for j in range(50)], [1] * 50), ([1, 2, 3, 4], [1, 2, 1, 2])] def median_iter(y, w): if all(ww == w[0] for ww in w): for m, d in rolling_median_dev(y): yield m, d else: for j in range(1, len(y) + 1): m = step_detect.weighted_median(y[:j], w[:j]) d = sum(ww * abs(yy - m) for yy, ww in zip(y[:j], w[:j])) yield m, d for y, w in datasets: dist = step_detect.get_mu_dist(y, w) for i in range(len(y)): for p, (m2, d2) in enumerate(median_iter(y[i:], w[i:])): j = i + p m = dist.mu(i, j) d = dist.dist(i, j) assert m == m2, (i, j) assert abs(d - d2) < 1e-10, (i, j)
def test_l1dist(use_rangemedian): random.seed(1) datasets = [ ([1, 1, 10, 3, 5, 1, -16, -3, 4, 9], [1]*10), ([random.gauss(0, 1) for j in range(50)], [1]*50), ([1, 2, 3, 4], [1, 2, 1, 2]) ] def median_iter(y, w): if all(ww == w[0] for ww in w): for m, d in rolling_median_dev(y): yield m, d else: for j in range(1, len(y) + 1): m = step_detect.weighted_median(y[:j], w[:j]) d = sum(ww*abs(yy - m) for yy, ww in zip(y[:j], w[:j])) yield m, d for y, w in datasets: dist = step_detect.get_mu_dist(y, w) for i in range(len(y)): for p, (m2, d2) in enumerate(median_iter(y[i:], w[i:])): j = i + p m = dist.mu(i, j) d = dist.dist(i, j) assert m == m2, (i, j) assert abs(d - d2) < 1e-10, (i, j)
def test_l1dist(use_rangemedian): random.seed(1) datasets = [[1, 1, 10, 3, 5, 1, -16, -3, 4, 9], [random.gauss(0, 1) for j in range(50)]] for dataset in datasets: dist = step_detect.get_mu_dist(dataset, p=1) dist.precompute(len(dataset) // 2, 0, len(dataset) // 2) for i in range(len(dataset)): for p, (m2, d2) in enumerate(rolling_median_dev(dataset[i:])): j = i + p m = dist.mu(i, j) d = dist.dist(i, j) assert m == m2, (i, j) assert abs(d - d2) < 1e-10, (i, j)
def test_l1dist(use_rangemedian): random.seed(1) datasets = [ [1, 1, 10, 3, 5, 1, -16, -3, 4, 9], [random.gauss(0, 1) for j in range(50)] ] for dataset in datasets: dist = step_detect.get_mu_dist(dataset, p=1) dist.precompute(len(dataset)//2, 0, len(dataset)//2) for i in range(len(dataset)): for p, (m2, d2) in enumerate(rolling_median_dev(dataset[i:])): j = i + p m = dist.mu(i, j) d = dist.dist(i, j) assert m == m2, (i, j) assert abs(d - d2) < 1e-10, (i, j)