123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- from sympy.plotting.intervalmath import interval
- from sympy.testing.pytest import raises
- def test_interval():
- assert (interval(1, 1) == interval(1, 1, is_valid=True)) == (True, True)
- assert (interval(1, 1) == interval(1, 1, is_valid=False)) == (True, False)
- assert (interval(1, 1) == interval(1, 1, is_valid=None)) == (True, None)
- assert (interval(1, 1.5) == interval(1, 2)) == (None, True)
- assert (interval(0, 1) == interval(2, 3)) == (False, True)
- assert (interval(0, 1) == interval(1, 2)) == (None, True)
- assert (interval(1, 2) != interval(1, 2)) == (False, True)
- assert (interval(1, 3) != interval(2, 3)) == (None, True)
- assert (interval(1, 3) != interval(-5, -3)) == (True, True)
- assert (
- interval(1, 3, is_valid=False) != interval(-5, -3)) == (True, False)
- assert (interval(1, 3, is_valid=None) != interval(-5, 3)) == (None, None)
- assert (interval(4, 4) != 4) == (False, True)
- assert (interval(1, 1) == 1) == (True, True)
- assert (interval(1, 3, is_valid=False) == interval(1, 3)) == (True, False)
- assert (interval(1, 3, is_valid=None) == interval(1, 3)) == (True, None)
- inter = interval(-5, 5)
- assert (interval(inter) == interval(-5, 5)) == (True, True)
- assert inter.width == 10
- assert 0 in inter
- assert -5 in inter
- assert 5 in inter
- assert interval(0, 3) in inter
- assert interval(-6, 2) not in inter
- assert -5.05 not in inter
- assert 5.3 not in inter
- interb = interval(-float('inf'), float('inf'))
- assert 0 in inter
- assert inter in interb
- assert interval(0, float('inf')) in interb
- assert interval(-float('inf'), 5) in interb
- assert interval(-1e50, 1e50) in interb
- assert (
- -interval(-1, -2, is_valid=False) == interval(1, 2)) == (True, False)
- raises(ValueError, lambda: interval(1, 2, 3))
- def test_interval_add():
- assert (interval(1, 2) + interval(2, 3) == interval(3, 5)) == (True, True)
- assert (1 + interval(1, 2) == interval(2, 3)) == (True, True)
- assert (interval(1, 2) + 1 == interval(2, 3)) == (True, True)
- compare = (1 + interval(0, float('inf')) == interval(1, float('inf')))
- assert compare == (True, True)
- a = 1 + interval(2, 5, is_valid=False)
- assert a.is_valid is False
- a = 1 + interval(2, 5, is_valid=None)
- assert a.is_valid is None
- a = interval(2, 5, is_valid=False) + interval(3, 5, is_valid=None)
- assert a.is_valid is False
- a = interval(3, 5) + interval(-1, 1, is_valid=None)
- assert a.is_valid is None
- a = interval(2, 5, is_valid=False) + 1
- assert a.is_valid is False
- def test_interval_sub():
- assert (interval(1, 2) - interval(1, 5) == interval(-4, 1)) == (True, True)
- assert (interval(1, 2) - 1 == interval(0, 1)) == (True, True)
- assert (1 - interval(1, 2) == interval(-1, 0)) == (True, True)
- a = 1 - interval(1, 2, is_valid=False)
- assert a.is_valid is False
- a = interval(1, 4, is_valid=None) - 1
- assert a.is_valid is None
- a = interval(1, 3, is_valid=False) - interval(1, 3)
- assert a.is_valid is False
- a = interval(1, 3, is_valid=None) - interval(1, 3)
- assert a.is_valid is None
- def test_interval_inequality():
- assert (interval(1, 2) < interval(3, 4)) == (True, True)
- assert (interval(1, 2) < interval(2, 4)) == (None, True)
- assert (interval(1, 2) < interval(-2, 0)) == (False, True)
- assert (interval(1, 2) <= interval(2, 4)) == (True, True)
- assert (interval(1, 2) <= interval(1.5, 6)) == (None, True)
- assert (interval(2, 3) <= interval(1, 2)) == (None, True)
- assert (interval(2, 3) <= interval(1, 1.5)) == (False, True)
- assert (
- interval(1, 2, is_valid=False) <= interval(-2, 0)) == (False, False)
- assert (interval(1, 2, is_valid=None) <= interval(-2, 0)) == (False, None)
- assert (interval(1, 2) <= 1.5) == (None, True)
- assert (interval(1, 2) <= 3) == (True, True)
- assert (interval(1, 2) <= 0) == (False, True)
- assert (interval(5, 8) > interval(2, 3)) == (True, True)
- assert (interval(2, 5) > interval(1, 3)) == (None, True)
- assert (interval(2, 3) > interval(3.1, 5)) == (False, True)
- assert (interval(-1, 1) == 0) == (None, True)
- assert (interval(-1, 1) == 2) == (False, True)
- assert (interval(-1, 1) != 0) == (None, True)
- assert (interval(-1, 1) != 2) == (True, True)
- assert (interval(3, 5) > 2) == (True, True)
- assert (interval(3, 5) < 2) == (False, True)
- assert (interval(1, 5) < 2) == (None, True)
- assert (interval(1, 5) > 2) == (None, True)
- assert (interval(0, 1) > 2) == (False, True)
- assert (interval(1, 2) >= interval(0, 1)) == (True, True)
- assert (interval(1, 2) >= interval(0, 1.5)) == (None, True)
- assert (interval(1, 2) >= interval(3, 4)) == (False, True)
- assert (interval(1, 2) >= 0) == (True, True)
- assert (interval(1, 2) >= 1.2) == (None, True)
- assert (interval(1, 2) >= 3) == (False, True)
- assert (2 > interval(0, 1)) == (True, True)
- a = interval(-1, 1, is_valid=False) < interval(2, 5, is_valid=None)
- assert a == (True, False)
- a = interval(-1, 1, is_valid=None) < interval(2, 5, is_valid=False)
- assert a == (True, False)
- a = interval(-1, 1, is_valid=None) < interval(2, 5, is_valid=None)
- assert a == (True, None)
- a = interval(-1, 1, is_valid=False) > interval(-5, -2, is_valid=None)
- assert a == (True, False)
- a = interval(-1, 1, is_valid=None) > interval(-5, -2, is_valid=False)
- assert a == (True, False)
- a = interval(-1, 1, is_valid=None) > interval(-5, -2, is_valid=None)
- assert a == (True, None)
- def test_interval_mul():
- assert (
- interval(1, 5) * interval(2, 10) == interval(2, 50)) == (True, True)
- a = interval(-1, 1) * interval(2, 10) == interval(-10, 10)
- assert a == (True, True)
- a = interval(-1, 1) * interval(-5, 3) == interval(-5, 5)
- assert a == (True, True)
- assert (interval(1, 3) * 2 == interval(2, 6)) == (True, True)
- assert (3 * interval(-1, 2) == interval(-3, 6)) == (True, True)
- a = 3 * interval(1, 2, is_valid=False)
- assert a.is_valid is False
- a = 3 * interval(1, 2, is_valid=None)
- assert a.is_valid is None
- a = interval(1, 5, is_valid=False) * interval(1, 2, is_valid=None)
- assert a.is_valid is False
- def test_interval_div():
- div = interval(1, 2, is_valid=False) / 3
- assert div == interval(-float('inf'), float('inf'), is_valid=False)
- div = interval(1, 2, is_valid=None) / 3
- assert div == interval(-float('inf'), float('inf'), is_valid=None)
- div = 3 / interval(1, 2, is_valid=None)
- assert div == interval(-float('inf'), float('inf'), is_valid=None)
- a = interval(1, 2) / 0
- assert a.is_valid is False
- a = interval(0.5, 1) / interval(-1, 0)
- assert a.is_valid is None
- a = interval(0, 1) / interval(0, 1)
- assert a.is_valid is None
- a = interval(-1, 1) / interval(-1, 1)
- assert a.is_valid is None
- a = interval(-1, 2) / interval(0.5, 1) == interval(-2.0, 4.0)
- assert a == (True, True)
- a = interval(0, 1) / interval(0.5, 1) == interval(0.0, 2.0)
- assert a == (True, True)
- a = interval(-1, 0) / interval(0.5, 1) == interval(-2.0, 0.0)
- assert a == (True, True)
- a = interval(-0.5, -0.25) / interval(0.5, 1) == interval(-1.0, -0.25)
- assert a == (True, True)
- a = interval(0.5, 1) / interval(0.5, 1) == interval(0.5, 2.0)
- assert a == (True, True)
- a = interval(0.5, 4) / interval(0.5, 1) == interval(0.5, 8.0)
- assert a == (True, True)
- a = interval(-1, -0.5) / interval(0.5, 1) == interval(-2.0, -0.5)
- assert a == (True, True)
- a = interval(-4, -0.5) / interval(0.5, 1) == interval(-8.0, -0.5)
- assert a == (True, True)
- a = interval(-1, 2) / interval(-2, -0.5) == interval(-4.0, 2.0)
- assert a == (True, True)
- a = interval(0, 1) / interval(-2, -0.5) == interval(-2.0, 0.0)
- assert a == (True, True)
- a = interval(-1, 0) / interval(-2, -0.5) == interval(0.0, 2.0)
- assert a == (True, True)
- a = interval(-0.5, -0.25) / interval(-2, -0.5) == interval(0.125, 1.0)
- assert a == (True, True)
- a = interval(0.5, 1) / interval(-2, -0.5) == interval(-2.0, -0.25)
- assert a == (True, True)
- a = interval(0.5, 4) / interval(-2, -0.5) == interval(-8.0, -0.25)
- assert a == (True, True)
- a = interval(-1, -0.5) / interval(-2, -0.5) == interval(0.25, 2.0)
- assert a == (True, True)
- a = interval(-4, -0.5) / interval(-2, -0.5) == interval(0.25, 8.0)
- assert a == (True, True)
- a = interval(-5, 5, is_valid=False) / 2
- assert a.is_valid is False
- def test_hashable():
- '''
- test that interval objects are hashable.
- this is required in order to be able to put them into the cache, which
- appears to be necessary for plotting in py3k. For details, see:
- https://github.com/sympy/sympy/pull/2101
- https://github.com/sympy/sympy/issues/6533
- '''
- hash(interval(1, 1))
- hash(interval(1, 1, is_valid=True))
- hash(interval(-4, -0.5))
- hash(interval(-2, -0.5))
- hash(interval(0.25, 8.0))
|