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