Esempio n. 1
0
class Equilibrium(object):

    gauge = None
    speed = None

    def __init__(self, medium, speed):
        self.speed = speed
        self.medium = medium

    @property
    def medium(self):
        return self._medium

    @medium.setter
    def medium(self, medium, at=None):
        at = now_or(at)
        self._medium = medium
        if self.gauge is None:
            self.gauge = Gauge(medium, medium, medium)
            return
        value = self.gauge.clear_momenta(at)
        if value == medium:
            self.gauge._set_limits(medium, medium, at=at)
            return
        if value < medium:
            self.gauge.set_max(medium, at=at)
            velocity = +self.speed
        elif value > medium:
            self.gauge.set_min(medium, at=at)
            velocity = -self.speed
        self.gauge.add_momentum(velocity, since=at)
Esempio n. 2
0
class Equilibrium(object):

    gauge = None
    speed = None

    def __init__(self, medium, speed):
        self.speed = speed
        self.medium = medium

    @property
    def medium(self):
        return self._medium

    @medium.setter
    def medium(self, medium, at=None):
        at = now_or(at)
        self._medium = medium
        if self.gauge is None:
            self.gauge = Gauge(medium, medium, medium)
            return
        value = self.gauge.clear_momenta(at)
        if value == medium:
            self.gauge._set_limits(medium, medium, at=at)
            return
        if value < medium:
            self.gauge.set_max(medium, at=at)
            velocity = +self.speed
        elif value > medium:
            self.gauge.set_min(medium, at=at)
            velocity = -self.speed
        self.gauge.add_momentum(velocity, since=at)
Esempio n. 3
0
def test_case1():
    g = Gauge(0, 5, at=0)
    g.add_momentum(+1)
    g.add_momentum(-2, since=1, until=3)
    g.add_momentum(+1, since=5, until=7)
    assert g.determination == [
        (0, 0), (1, 1), (2, 0), (3, 0), (5, 2), (6.5, 5), (7, 5)]
Esempio n. 4
0
def test_set_min_max():
    # without momentum
    g = Gauge(5, 10)
    assert g.get_max() == 10
    assert g.get_min() == 0
    assert g.get() == 5
    g.set_range(max=100, min=10)
    assert g.get_max() == 100
    assert g.get_min() == 10
    assert g.get() == 10
    g.set_min(10)
    assert g.get() == 10
    g.set_min(5)
    assert g.get() == 10
    g.set_range(max=5, min=0)
    assert g.get_max() == 5
    assert g.get_min() == 0
    assert g.get() == 5
    # with momentum
    g = Gauge(5, 10, at=0)
    g.add_momentum(+1)
    assert g.determination == [(0, 5), (5, 10)]
    g.set_max(50, at=0)
    assert g.determination == [(0, 5), (45, 50)]
    g.set_min(40, at=0)
    assert g.determination == [(0, 40), (10, 50)]
Esempio n. 5
0
def test_case1():
    g = Gauge(0, 5, at=0)
    g.add_momentum(+1)
    g.add_momentum(-2, since=1, until=3)
    g.add_momentum(+1, since=5, until=7)
    assert g.determination == [(0, 0), (1, 1), (2, 0), (3, 0), (5, 2),
                               (6.5, 5), (7, 5)]
Esempio n. 6
0
def test_in_range():
    g = Gauge(20, 10, at=0)
    assert not g.in_range(0)
    assert not g.in_range(20)
    g.add_momentum(-1)
    assert not g.in_range(0)
    assert g.in_range(20)
Esempio n. 7
0
def test_hypergauge_hybrid1():
    # hybrid 1: same velocity of `g` and `g.max_gauge`.
    # (suggested by @hybrid0)
    g = Gauge(0, Gauge(1, 5, at=0), at=0)
    g.add_momentum(+1)
    g.max_gauge.add_momentum(+1, since=1)
    assert g.determination == [(0, 0), (1, 1), (5, 5)]
Esempio n. 8
0
def test_hypergauge_hybrid1():
    # hybrid 1: same velocity of `g` and `g.max_gauge`.
    # (suggested by @hybrid0)
    g = Gauge(0, Gauge(1, 5, at=0), at=0)
    g.add_momentum(+1)
    g.max_gauge.add_momentum(+1, since=1)
    assert g.determination == [(0, 0), (1, 1), (5, 5)]
Esempio n. 9
0
def test_set_min_max():
    # without momentum
    g = Gauge(5, 10)
    assert g.get_max() == 10
    assert g.get_min() == 0
    assert g.get() == 5
    g.set_range(max=100, min=10)
    assert g.get_max() == 100
    assert g.get_min() == 10
    assert g.get() == 10
    g.set_min(10)
    assert g.get() == 10
    g.set_min(5)
    assert g.get() == 10
    g.set_range(max=5, min=0)
    assert g.get_max() == 5
    assert g.get_min() == 0
    assert g.get() == 5
    # with momentum
    g = Gauge(5, 10, at=0)
    g.add_momentum(+1)
    assert g.determination == [(0, 5), (5, 10)]
    g.set_max(50, at=0)
    assert g.determination == [(0, 5), (45, 50)]
    g.set_min(40, at=0)
    assert g.determination == [(0, 40), (10, 50)]
Esempio n. 10
0
def test_in_range():
    g = Gauge(20, 10, at=0)
    assert not g.in_range(0)
    assert not g.in_range(20)
    g.add_momentum(-1)
    assert not g.in_range(0)
    assert g.in_range(20)
Esempio n. 11
0
def test_make_momentum():
    g = Gauge(0, 10, at=0)
    m = g.add_momentum(+1)
    assert isinstance(m, Momentum)
    with pytest.raises(TypeError):
        g.add_momentum(m, since=1)
    with pytest.raises(TypeError):
        g.add_momentum(m, until=2)
Esempio n. 12
0
def test_intersection_of_vertical_segment_reversed():
    f = FakeGauge([(0, 0), (1e-309, -1)])
    g = Gauge(-2.5, 0, f, at=-1)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert \
        round_determination(g.determination, precision=1) == \
        [(-1, -2.5), (0, -0.5), (0.5, 0)]
Esempio n. 13
0
def test_intersection_of_vertical_segment_reversed():
    f = FakeGauge([(0, 0), (1e-309, -1)])
    g = Gauge(-2.5, 0, f, at=-1)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert \
        round_determination(g.determination, precision=1) == \
        [(-1, -2.5), (0, -0.5), (0.5, 0)]
Esempio n. 14
0
def test_make_momentum():
    g = Gauge(0, 10, at=0)
    m = g.add_momentum(+1)
    assert isinstance(m, Momentum)
    with pytest.raises(TypeError):
        g.add_momentum(m, since=1)
    with pytest.raises(TypeError):
        g.add_momentum(m, until=2)
Esempio n. 15
0
def test_hypergauge_case2():
    g = Gauge(12, 100, at=0)
    g.add_momentum(+1, since=1, until=6)
    g.add_momentum(-1, since=3, until=8)
    g.set_max(Gauge(15, 15, at=0), at=0)
    g.max_gauge.add_momentum(-1, until=4)
    g.max_gauge.add_momentum(+1, since=4, until=6)
    assert g.determination == [
        (0, 12), (1, 12), (2, 13), (3, 12), (4, 11), (6, 11), (8, 9)]
Esempio n. 16
0
def test_hypergauge_with_different_base_time():
    g = Gauge(0, Gauge(10, 100, at=100), at=0)
    g.add_momentum(+1)
    assert g.max_gauge.get(0) == 10
    assert g.get(10) == 10
    g = Gauge(0, Gauge(10, 100, at=0), at=100)
    g.add_momentum(+1)
    assert g.max_gauge.get(100) == 10
    assert g.get(110) == 10
Esempio n. 17
0
def test_thin_momenta():
    g = Gauge(0, 100, at=0)
    for x in range(1000):
        g.add_momentum(+1000000000, since=x, until=x + 1e-10)
    assert_all_in_range(g)
    assert g.get(0) == 0
    assert g.get(1001) == 100
    for x, y in zip(range(9999), range(1, 10000)):
        assert 0 <= g.get(x / 10.) <= g.get(y / 10.) <= 100
Esempio n. 18
0
def test_hypergauge_with_different_base_time():
    g = Gauge(0, Gauge(10, 100, at=100), at=0)
    g.add_momentum(+1)
    assert g.max_gauge.get(0) == 10
    assert g.get(10) == 10
    g = Gauge(0, Gauge(10, 100, at=0), at=100)
    g.add_momentum(+1)
    assert g.max_gauge.get(100) == 10
    assert g.get(110) == 10
Esempio n. 19
0
def test_thin_momenta():
    g = Gauge(0, 100, at=0)
    for x in range(1000):
        g.add_momentum(+1000000000, since=x, until=x + 1e-10)
    assert_all_in_range(g)
    assert g.get(0) == 0
    assert g.get(1001) == 100
    for x, y in zip(range(9999), range(1, 10000)):
        assert 0 <= g.get(x / 10.) <= g.get(y / 10.) <= 100
Esempio n. 20
0
def test_hypergauge_case2():
    g = Gauge(12, 100, at=0)
    g.add_momentum(+1, since=1, until=6)
    g.add_momentum(-1, since=3, until=8)
    g.set_max(Gauge(15, 15, at=0), at=0)
    g.max_gauge.add_momentum(-1, until=4)
    g.max_gauge.add_momentum(+1, since=4, until=6)
    assert g.determination == [(0, 12), (1, 12), (2, 13), (3, 12), (4, 11),
                               (6, 11), (8, 9)]
Esempio n. 21
0
def random_gauge2(random=random, far=1000, near=1, until=20):
    # 0 <= g <= (near ~ far)
    g_max = Gauge(random.uniform(near, far), far, near, at=0)
    value = random.uniform(0, g_max.max_value)
    g = Gauge(value, g_max, at=0)
    for x in range(0, until, 5):
        g_max.add_momentum(random.uniform(-far, +far), since=x, until=x + 5)
    for x in range(0, until, 2):
        g.add_momentum(random.uniform(-far, +far), since=x, until=x + 2)
    return g
Esempio n. 22
0
def test_pickle():
    g = Gauge(0, 10, at=0)
    r = Random(17171771)
    for x in range(10000):
        since = r.randrange(1000)
        until = since + 1 + r.randrange(1000)
        g.add_momentum(r.uniform(-10, +10), since=since, until=until)
    data = pickle.dumps(g)
    g2 = pickle.loads(data)
    assert g.determination == g2.determination
Esempio n. 23
0
def random_gauge2(random=random, far=1000, near=1, until=20):
    # 0 <= g <= (near ~ far)
    g_max = Gauge(random.uniform(near, far), far, near, at=0)
    value = random.uniform(0, g_max.max_value)
    g = Gauge(value, g_max, at=0)
    for x in range(0, until, 5):
        g_max.add_momentum(random.uniform(-far, +far), since=x, until=x + 5)
    for x in range(0, until, 2):
        g.add_momentum(random.uniform(-far, +far), since=x, until=x + 2)
    return g
Esempio n. 24
0
def test_pickle():
    g = Gauge(0, 10, at=0)
    r = Random(17171771)
    for x in range(10000):
        since = r.randrange(1000)
        until = since + 1 + r.randrange(1000)
        g.add_momentum(r.uniform(-10, +10), since=since, until=until)
    data = pickle.dumps(g)
    g2 = pickle.loads(data)
    assert g.determination == g2.determination
Esempio n. 25
0
def test_decr_max_hyper():
    g = Gauge(0, Gauge(10, 100, at=0), at=0)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert g.base[TIME] == 0
    assert g.get(10) == 10
    g.max_gauge.decr(5, at=10)
    assert g.base[TIME] == 10
    assert g.get(10) == 5
    assert g.get(20) == 5
Esempio n. 26
0
def test_decr_max_hyper():
    g = Gauge(0, Gauge(10, 100, at=0), at=0)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert g.base[TIME] == 0
    assert g.get(10) == 10
    g.max_gauge.decr(5, at=10)
    assert g.base[TIME] == 10
    assert g.get(10) == 5
    assert g.get(20) == 5
Esempio n. 27
0
def test_set_range():
    g = Gauge(0, 100, at=0)
    g.add_momentum(+1)
    assert g.determination == [(0, 0), (100, 100)]
    g.set_range(Gauge(100, 100, at=0), Gauge(0, 100, at=0), at=0)
    g.max_gauge.add_momentum(-1, until=40)
    g.min_gauge.add_momentum(+1, until=40)
    assert g.determination == [(0, 0), (60, 60)]
    g.clear_momenta(at=30)
    g.add_momentum(-1)
    assert g.determination == [(30, 30), (40, 40)]
Esempio n. 28
0
def test_hypergauge_case3():
    g = Gauge(12, 100, at=0)
    g.add_momentum(+1, since=1, until=6)
    g.add_momentum(-1, since=3, until=8)
    g.set_max(10, at=0)
    g.set(12, outbound=OK, at=0)
    assert g.determination == [(0, 12), (1, 12), (3, 12), (5, 10), (6, 10),
                               (8, 8)]
    g.set_max(Gauge(10, 100, at=0), at=0)
    assert g.determination == [(0, 12), (1, 12), (3, 12), (5, 10), (6, 10),
                               (8, 8)]
Esempio n. 29
0
def test_same_determination():
    g = Gauge(10, 100, at=0)
    g.add_momentum(+1, since=5, until=10)
    g.add_momentum(+1, since=20, until=30)
    g.add_momentum(-2, since=50, until=60)
    fg = FrozenGauge(g)
    assert fg.get(0) == g.get(0) == 10
    assert fg.get(10) == g.get(10) == 15
    assert fg.get(30) == g.get(30) == 25
    assert fg.get(60) == g.get(60) == 5
    assert fg.get(100) == g.get(100) == 5
Esempio n. 30
0
def test_set_range():
    g = Gauge(0, 100, at=0)
    g.add_momentum(+1)
    assert g.determination == [(0, 0), (100, 100)]
    g.set_range(Gauge(100, 100, at=0), Gauge(0, 100, at=0), at=0)
    g.max_gauge.add_momentum(-1, until=40)
    g.min_gauge.add_momentum(+1, until=40)
    assert g.determination == [(0, 0), (60, 60)]
    g.clear_momenta(at=30)
    g.add_momentum(-1)
    assert g.determination == [(30, 30), (40, 40)]
Esempio n. 31
0
def test_hypergauge_case3():
    g = Gauge(12, 100, at=0)
    g.add_momentum(+1, since=1, until=6)
    g.add_momentum(-1, since=3, until=8)
    g.set_max(10, at=0)
    g.set(12, outbound=OK, at=0)
    assert g.determination == [
        (0, 12), (1, 12), (3, 12), (5, 10), (6, 10), (8, 8)]
    g.set_max(Gauge(10, 100, at=0), at=0)
    assert g.determination == [
        (0, 12), (1, 12), (3, 12), (5, 10), (6, 10), (8, 8)]
Esempio n. 32
0
def test_same_determination():
    g = Gauge(10, 100, at=0)
    g.add_momentum(+1, since=5, until=10)
    g.add_momentum(+1, since=20, until=30)
    g.add_momentum(-2, since=50, until=60)
    fg = FrozenGauge(g)
    assert fg.get(0) == g.get(0) == 10
    assert fg.get(10) == g.get(10) == 15
    assert fg.get(30) == g.get(30) == 25
    assert fg.get(60) == g.get(60) == 5
    assert fg.get(100) == g.get(100) == 5
Esempio n. 33
0
def test_intersection_of_vertical_segment():
    assert 0 != 1e-309
    assert math.isinf(1 / 1e-309)
    f = FakeGauge([(0, 0), (1e-309, 1)])
    assert f.get(0.000000000000000000000) == 0
    assert f.get(0.000000000000000000001) == 1
    g = Gauge(2.5, f, at=-1)
    g.add_momentum(-2)
    g.add_momentum(+1)
    assert \
        round_determination(g.determination, precision=1) == \
        [(-1, 2.5), (0, 0.5), (0.5, 0)]
Esempio n. 34
0
def test_case8_simple():
    max_ = Gauge(10, 10, at=0)
    max_.add_momentum(-1)

    g = Gauge(10, max_, at=0)

    max_.forget_past(at=2)

    with pytest.raises(ValueError):
        max_.forget_past(at=1)  # forget older past.

    assert g.get(99999) == approx(0)
Esempio n. 35
0
def test_intersection_of_vertical_segment():
    assert 0 != 1e-309
    assert math.isinf(1 / 1e-309)
    f = FakeGauge([(0, 0), (1e-309, 1)])
    assert f.get(0.000000000000000000000) == 0
    assert f.get(0.000000000000000000001) == 1
    g = Gauge(2.5, f, at=-1)
    g.add_momentum(-2)
    g.add_momentum(+1)
    assert \
        round_determination(g.determination, precision=1) == \
        [(-1, 2.5), (0, 0.5), (0.5, 0)]
Esempio n. 36
0
def test_decr_max_normal():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert g.base[TIME] == 0
    assert g.get(10) == 10
    g.set_max(5, at=10)
    g.set(10, outbound=OK, at=10)
    assert g.base[TIME] == 10
    assert g.get(10) == 10
    assert g.get(15) == 5
    assert g.get(20) == 5
Esempio n. 37
0
def zigzag():
    g = Gauge(1, Gauge(2, 3, 2, at=0), Gauge(1, 1, 0, at=0), at=0)
    for x in range(6):
        g.max_gauge.add_momentum(+1, since=x * 2, until=x * 2 + 1)
        g.max_gauge.add_momentum(-1, since=x * 2 + 1, until=x * 2 + 2)
        g.min_gauge.add_momentum(-1, since=x * 2, until=x * 2 + 1)
        g.min_gauge.add_momentum(+1, since=x * 2 + 1, until=x * 2 + 2)
    for x in range(3):
        t = sum(y * 2 for y in range(x + 1))
        g.add_momentum(+1, since=t, until=t + (x + 1))
        g.add_momentum(-1, since=t + (x + 1), until=t + 2 * (x + 1))
    return g
Esempio n. 38
0
def test_decr_max_before_base_time():
    # decr max earlier than the gauge's base time.
    g = Gauge(0, Gauge(10, 100, at=10), at=5)
    g.add_momentum(+1)
    assert g.determination == [(5, 0), (15, 10)]

    with pytest.raises(ValueError):
        g.max_gauge.decr(5, at=0)
    assert g.determination == [(5, 0), (15, 10)]

    g.max_gauge.incr(10, at=10)
    assert g.determination == [(10, 5), (25, 20)]
Esempio n. 39
0
def test_decr_max_before_base_time():
    # decr max earlier than the gauge's base time.
    g = Gauge(0, Gauge(10, 100, at=10), at=5)
    g.add_momentum(+1)
    assert g.determination == [(5, 0), (15, 10)]

    with pytest.raises(ValueError):
        g.max_gauge.decr(5, at=0)
    assert g.determination == [(5, 0), (15, 10)]

    g.max_gauge.incr(10, at=10)
    assert g.determination == [(10, 5), (25, 20)]
Esempio n. 40
0
def test_decr_max_normal():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert g.base[TIME] == 0
    assert g.get(10) == 10
    g.set_max(5, at=10)
    g.set(10, outbound=OK, at=10)
    assert g.base[TIME] == 10
    assert g.get(10) == 10
    assert g.get(15) == 5
    assert g.get(20) == 5
Esempio n. 41
0
def test_case8_simple():
    max_ = Gauge(10, 10, at=0)
    max_.add_momentum(-1)

    g = Gauge(10, max_, at=0)

    max_.forget_past(at=2)

    with pytest.raises(ValueError):
        max_.forget_past(at=1)  # forget older past.

    assert g.get(99999) == approx(0)
Esempio n. 42
0
def zigzag():
    g = Gauge(1, Gauge(2, 3, 2, at=0), Gauge(1, 1, 0, at=0), at=0)
    for x in range(6):
        g.max_gauge.add_momentum(+1, since=x * 2, until=x * 2 + 1)
        g.max_gauge.add_momentum(-1, since=x * 2 + 1, until=x * 2 + 2)
        g.min_gauge.add_momentum(-1, since=x * 2, until=x * 2 + 1)
        g.min_gauge.add_momentum(+1, since=x * 2 + 1, until=x * 2 + 2)
    for x in range(3):
        t = sum(y * 2 for y in range(x + 1))
        g.add_momentum(+1, since=t, until=t + (x + 1))
        g.add_momentum(-1, since=t + (x + 1), until=t + 2 * (x + 1))
    return g
Esempio n. 43
0
def test_case3():
    g = Gauge(0, 10, at=0)
    assert g.get(0) == 0
    g.add_momentum(+1, since=0)
    assert g.get(10) == 10
    g.incr(3, outbound=OK, at=11)
    assert g.get(11) == 13
    g.add_momentum(-1, since=13)
    assert g.get(13) == 13
    assert g.get(14) == 12
    assert g.get(15) == 11
    assert g.get(16) == 10
    assert g.get(17) == 10
Esempio n. 44
0
def test_momenta_order():
    g = Gauge(0, 50, at=0)
    g.add_momentum(+3, since=0, until=5)
    g.add_momentum(+2, since=1, until=4)
    g.add_momentum(+1, since=2, until=3)
    assert g.get(0) == 0
    assert g.get(1) == 3
    assert g.get(2) == 8
    assert g.get(3) == 14
    g.decr(1, at=3)
    assert g.get(3) == 13
    assert g.get(4) == 18
    assert g.get(5) == 21
Esempio n. 45
0
def test_momenta_order():
    g = Gauge(0, 50, at=0)
    g.add_momentum(+3, since=0, until=5)
    g.add_momentum(+2, since=1, until=4)
    g.add_momentum(+1, since=2, until=3)
    assert g.get(0) == 0
    assert g.get(1) == 3
    assert g.get(2) == 8
    assert g.get(3) == 14
    g.decr(1, at=3)
    assert g.get(3) == 13
    assert g.get(4) == 18
    assert g.get(5) == 21
Esempio n. 46
0
def test_case3():
    g = Gauge(0, 10, at=0)
    assert g.get(0) == 0
    g.add_momentum(+1, since=0)
    assert g.get(10) == 10
    g.incr(3, outbound=OK, at=11)
    assert g.get(11) == 13
    g.add_momentum(-1, since=13)
    assert g.get(13) == 13
    assert g.get(14) == 12
    assert g.get(15) == 11
    assert g.get(16) == 10
    assert g.get(17) == 10
Esempio n. 47
0
def test_hypergauge_zigzag2():
    g = Gauge(2, Gauge(3, 5, 3, at=0), Gauge(2, 2, 0, at=0), at=0)
    for x in range(5):
        g.max_gauge.add_momentum(+1, since=x * 4, until=x * 4 + 2)
        g.max_gauge.add_momentum(-1, since=x * 4 + 2, until=x * 4 + 4)
        g.min_gauge.add_momentum(-1, since=x * 4, until=x * 4 + 2)
        g.min_gauge.add_momentum(+1, since=x * 4 + 2, until=x * 4 + 4)
    for x in range(4):
        t = sum(y * 2 for y in range(x + 1))
        g.add_momentum(+1, since=t, until=t + (x + 1))
        g.add_momentum(-1, since=t + (x + 1), until=t + 2 * (x + 1))
    assert g.determination == [(0, 2), (1, 3), (2, 2), (3.5, 3.5), (4, 3),
                               (6, 1), (8, 3), (9, 4), (11.5, 1.5), (12, 2),
                               (14.5, 4.5), (16, 3), (18.5, 0.5), (20, 2)]
Esempio n. 48
0
def shift_gauge(gauge, delta=0):
    """Adds the given delta to a gauge."""
    if gauge.max_gauge is None:
        max_ = gauge.max_value + delta
    else:
        max_ = shift_gauge(gauge.max_gauge, delta)
    if gauge.min_gauge is None:
        min_ = gauge.min_value + delta
    else:
        min_ = shift_gauge(gauge.min_gauge, delta)
    g = Gauge(gauge.base[VALUE] + delta, max_, min_, gauge.base[TIME])
    for momentum in gauge.momenta:
        g.add_momentum(momentum)
    return g
Esempio n. 49
0
def test_velocity():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+1, since=2)
    g.add_momentum(+1, since=4, until=6)
    assert g.velocity(at=0) == 0
    assert g.velocity(at=2) == +1
    assert g.velocity(at=3) == +1
    assert g.velocity(at=4) == +2
    assert g.velocity(at=5) == +2
    assert g.velocity(at=6) == +1
    assert g.velocity(at=7) == +1
    assert g.velocity(at=8) == +1
    assert g.velocity(at=9) == +1
    assert g.velocity(at=10) == 0
Esempio n. 50
0
def test_hypergauge_zigzag2():
    g = Gauge(2, Gauge(3, 5, 3, at=0), Gauge(2, 2, 0, at=0), at=0)
    for x in range(5):
        g.max_gauge.add_momentum(+1, since=x * 4, until=x * 4 + 2)
        g.max_gauge.add_momentum(-1, since=x * 4 + 2, until=x * 4 + 4)
        g.min_gauge.add_momentum(-1, since=x * 4, until=x * 4 + 2)
        g.min_gauge.add_momentum(+1, since=x * 4 + 2, until=x * 4 + 4)
    for x in range(4):
        t = sum(y * 2 for y in range(x + 1))
        g.add_momentum(+1, since=t, until=t + (x + 1))
        g.add_momentum(-1, since=t + (x + 1), until=t + 2 * (x + 1))
    assert g.determination == [
        (0, 2), (1, 3), (2, 2), (3.5, 3.5), (4, 3), (6, 1), (8, 3), (9, 4),
        (11.5, 1.5), (12, 2), (14.5, 4.5), (16, 3), (18.5, 0.5), (20, 2)]
Esempio n. 51
0
def shift_gauge(gauge, delta=0):
    """Adds the given delta to a gauge."""
    if gauge.max_gauge is None:
        max_ = gauge.max_value + delta
    else:
        max_ = shift_gauge(gauge.max_gauge, delta)
    if gauge.min_gauge is None:
        min_ = gauge.min_value + delta
    else:
        min_ = shift_gauge(gauge.min_gauge, delta)
    g = Gauge(gauge.base[VALUE] + delta, max_, min_, gauge.base[TIME])
    for momentum in gauge.momenta:
        g.add_momentum(momentum)
    return g
Esempio n. 52
0
def test_velocity():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+1, since=2)
    g.add_momentum(+1, since=4, until=6)
    assert g.velocity(at=0) == 0
    assert g.velocity(at=2) == +1
    assert g.velocity(at=3) == +1
    assert g.velocity(at=4) == +2
    assert g.velocity(at=5) == +2
    assert g.velocity(at=6) == +1
    assert g.velocity(at=7) == +1
    assert g.velocity(at=8) == +1
    assert g.velocity(at=9) == +1
    assert g.velocity(at=10) == 0
Esempio n. 53
0
def test_life():
    with t(0):
        life = Gauge(100, 100)
        life.add_momentum(-1)
        assert life.get() == 100
    with t(1):
        assert life.get() == 99
    with t(2):
        assert life.get() == 98
    with t(10):
        assert life.get() == 90
        life.incr(1)
        assert life.get() == 91
    with t(11):
        assert life.get() == 90
Esempio n. 54
0
def test_clear_momenta():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+1)
    g.clear_momenta(at=5)
    assert g.get(5) == 5
    assert g.determination == [(5, 5)]
    # clear momenta when the value is out of the range
    g.add_momentum(+1)
    g.set(15, outbound=OK, at=10)
    g.clear_momenta(at=10)
    assert g.get(10) == 15
    assert g.determination == [(10, 15)]
    # rebase by Gauge.clear_momenta()
    g.clear_momenta(100)
    assert g.get() == 100
Esempio n. 55
0
def test_life():
    with t(0):
        life = Gauge(100, 100)
        life.add_momentum(-1)
        assert life.get() == 100
    with t(1):
        assert life.get() == 99
    with t(2):
        assert life.get() == 98
    with t(10):
        assert life.get() == 90
        life.incr(1)
        assert life.get() == 91
    with t(11):
        assert life.get() == 90
Esempio n. 56
0
def test_clear_momenta():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+1)
    g.clear_momenta(at=5)
    assert g.get(5) == 5
    assert g.determination == [(5, 5)]
    # clear momenta when the value is out of the range
    g.add_momentum(+1)
    g.set(15, outbound=OK, at=10)
    g.clear_momenta(at=10)
    assert g.get(10) == 15
    assert g.determination == [(10, 15)]
    # rebase by Gauge.clear_momenta()
    g.clear_momenta(100)
    assert g.get() == 100
Esempio n. 57
0
def test_permanent():
    g = Gauge(10, 10, at=0)
    g.add_momentum(-1)
    assert g.determination == [(0, 10), (10, 0)]
    g = Gauge(0, 10, at=0)
    g.add_momentum(+1)
    assert g.determination == [(0, 0), (10, 10)]
    g = Gauge(12, 10, at=0)
    g.add_momentum(-1)
    assert g.determination == [(0, 12), (2, 10), (12, 0)]
    g = Gauge(5, 10, at=0)
    g.add_momentum(+1, since=3)
    assert g.determination == [(0, 5), (3, 5), (8, 10)]
    g = Gauge(5, 10, at=0)
    g.add_momentum(+1, until=8)
    assert g.determination == [(0, 5), (5, 10), (8, 10)]
Esempio n. 58
0
def test_permanent():
    g = Gauge(10, 10, at=0)
    g.add_momentum(-1)
    assert g.determination == [(0, 10), (10, 0)]
    g = Gauge(0, 10, at=0)
    g.add_momentum(+1)
    assert g.determination == [(0, 0), (10, 10)]
    g = Gauge(12, 10, at=0)
    g.add_momentum(-1)
    assert g.determination == [(0, 12), (2, 10), (12, 0)]
    g = Gauge(5, 10, at=0)
    g.add_momentum(+1, since=3)
    assert g.determination == [(0, 5), (3, 5), (8, 10)]
    g = Gauge(5, 10, at=0)
    g.add_momentum(+1, until=8)
    assert g.determination == [(0, 5), (5, 10), (8, 10)]
Esempio n. 59
0
def test_clear_momentum_events():
    g = Gauge(0, 10, at=0)
    m = g.add_momentum(+1, since=10, until=20)
    assert list(g.momentum_events()) == \
        [(0, NONE, None), (10, ADD, m), (20, REMOVE, m), (+inf, NONE, None)]
    # assert len(g._events) == 2
    g.remove_momentum(m)
    assert list(g.momentum_events()) == [(0, NONE, None), (+inf, NONE, None)]
Esempio n. 60
0
def test_clear_momentum_events():
    g = Gauge(0, 10, at=0)
    m = g.add_momentum(+1, since=10, until=20)
    assert list(g.momentum_events()) == \
        [(0, NONE, None), (10, ADD, m), (20, REMOVE, m), (+inf, NONE, None)]
    # assert len(g._events) == 2
    g.remove_momentum(m)
    assert list(g.momentum_events()) == [(0, NONE, None), (+inf, NONE, None)]