123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- from sympy.external import import_module
- from sympy.plotting.intervalmath import (
- Abs, acos, acosh, And, asin, asinh, atan, atanh, ceil, cos, cosh,
- exp, floor, imax, imin, interval, log, log10, Or, sin, sinh, sqrt,
- tan, tanh,
- )
- np = import_module('numpy')
- if not np:
- disabled = True
- #requires Numpy. Hence included in interval_functions
- def test_interval_pow():
- a = 2**interval(1, 2) == interval(2, 4)
- assert a == (True, True)
- a = interval(1, 2)**interval(1, 2) == interval(1, 4)
- assert a == (True, True)
- a = interval(-1, 1)**interval(0.5, 2)
- assert a.is_valid is None
- a = interval(-2, -1) ** interval(1, 2)
- assert a.is_valid is False
- a = interval(-2, -1) ** (1.0 / 2)
- assert a.is_valid is False
- a = interval(-1, 1)**(1.0 / 2)
- assert a.is_valid is None
- a = interval(-1, 1)**(1.0 / 3) == interval(-1, 1)
- assert a == (True, True)
- a = interval(-1, 1)**2 == interval(0, 1)
- assert a == (True, True)
- a = interval(-1, 1) ** (1.0 / 29) == interval(-1, 1)
- assert a == (True, True)
- a = -2**interval(1, 1) == interval(-2, -2)
- assert a == (True, True)
- a = interval(1, 2, is_valid=False)**2
- assert a.is_valid is False
- a = (-3)**interval(1, 2)
- assert a.is_valid is False
- a = (-4)**interval(0.5, 0.5)
- assert a.is_valid is False
- assert ((-3)**interval(1, 1) == interval(-3, -3)) == (True, True)
- a = interval(8, 64)**(2.0 / 3)
- assert abs(a.start - 4) < 1e-10 # eps
- assert abs(a.end - 16) < 1e-10
- a = interval(-8, 64)**(2.0 / 3)
- assert abs(a.start - 4) < 1e-10 # eps
- assert abs(a.end - 16) < 1e-10
- def test_exp():
- a = exp(interval(-np.inf, 0))
- assert a.start == np.exp(-np.inf)
- assert a.end == np.exp(0)
- a = exp(interval(1, 2))
- assert a.start == np.exp(1)
- assert a.end == np.exp(2)
- a = exp(1)
- assert a.start == np.exp(1)
- assert a.end == np.exp(1)
- def test_log():
- a = log(interval(1, 2))
- assert a.start == 0
- assert a.end == np.log(2)
- a = log(interval(-1, 1))
- assert a.is_valid is None
- a = log(interval(-3, -1))
- assert a.is_valid is False
- a = log(-3)
- assert a.is_valid is False
- a = log(2)
- assert a.start == np.log(2)
- assert a.end == np.log(2)
- def test_log10():
- a = log10(interval(1, 2))
- assert a.start == 0
- assert a.end == np.log10(2)
- a = log10(interval(-1, 1))
- assert a.is_valid is None
- a = log10(interval(-3, -1))
- assert a.is_valid is False
- a = log10(-3)
- assert a.is_valid is False
- a = log10(2)
- assert a.start == np.log10(2)
- assert a.end == np.log10(2)
- def test_atan():
- a = atan(interval(0, 1))
- assert a.start == np.arctan(0)
- assert a.end == np.arctan(1)
- a = atan(1)
- assert a.start == np.arctan(1)
- assert a.end == np.arctan(1)
- def test_sin():
- a = sin(interval(0, np.pi / 4))
- assert a.start == np.sin(0)
- assert a.end == np.sin(np.pi / 4)
- a = sin(interval(-np.pi / 4, np.pi / 4))
- assert a.start == np.sin(-np.pi / 4)
- assert a.end == np.sin(np.pi / 4)
- a = sin(interval(np.pi / 4, 3 * np.pi / 4))
- assert a.start == np.sin(np.pi / 4)
- assert a.end == 1
- a = sin(interval(7 * np.pi / 6, 7 * np.pi / 4))
- assert a.start == -1
- assert a.end == np.sin(7 * np.pi / 6)
- a = sin(interval(0, 3 * np.pi))
- assert a.start == -1
- assert a.end == 1
- a = sin(interval(np.pi / 3, 7 * np.pi / 4))
- assert a.start == -1
- assert a.end == 1
- a = sin(np.pi / 4)
- assert a.start == np.sin(np.pi / 4)
- assert a.end == np.sin(np.pi / 4)
- a = sin(interval(1, 2, is_valid=False))
- assert a.is_valid is False
- def test_cos():
- a = cos(interval(0, np.pi / 4))
- assert a.start == np.cos(np.pi / 4)
- assert a.end == 1
- a = cos(interval(-np.pi / 4, np.pi / 4))
- assert a.start == np.cos(-np.pi / 4)
- assert a.end == 1
- a = cos(interval(np.pi / 4, 3 * np.pi / 4))
- assert a.start == np.cos(3 * np.pi / 4)
- assert a.end == np.cos(np.pi / 4)
- a = cos(interval(3 * np.pi / 4, 5 * np.pi / 4))
- assert a.start == -1
- assert a.end == np.cos(3 * np.pi / 4)
- a = cos(interval(0, 3 * np.pi))
- assert a.start == -1
- assert a.end == 1
- a = cos(interval(- np.pi / 3, 5 * np.pi / 4))
- assert a.start == -1
- assert a.end == 1
- a = cos(interval(1, 2, is_valid=False))
- assert a.is_valid is False
- def test_tan():
- a = tan(interval(0, np.pi / 4))
- assert a.start == 0
- # must match lib_interval definition of tan:
- assert a.end == np.sin(np.pi / 4)/np.cos(np.pi / 4)
- a = tan(interval(np.pi / 4, 3 * np.pi / 4))
- #discontinuity
- assert a.is_valid is None
- def test_sqrt():
- a = sqrt(interval(1, 4))
- assert a.start == 1
- assert a.end == 2
- a = sqrt(interval(0.01, 1))
- assert a.start == np.sqrt(0.01)
- assert a.end == 1
- a = sqrt(interval(-1, 1))
- assert a.is_valid is None
- a = sqrt(interval(-3, -1))
- assert a.is_valid is False
- a = sqrt(4)
- assert (a == interval(2, 2)) == (True, True)
- a = sqrt(-3)
- assert a.is_valid is False
- def test_imin():
- a = imin(interval(1, 3), interval(2, 5), interval(-1, 3))
- assert a.start == -1
- assert a.end == 3
- a = imin(-2, interval(1, 4))
- assert a.start == -2
- assert a.end == -2
- a = imin(5, interval(3, 4), interval(-2, 2, is_valid=False))
- assert a.start == 3
- assert a.end == 4
- def test_imax():
- a = imax(interval(-2, 2), interval(2, 7), interval(-3, 9))
- assert a.start == 2
- assert a.end == 9
- a = imax(8, interval(1, 4))
- assert a.start == 8
- assert a.end == 8
- a = imax(interval(1, 2), interval(3, 4), interval(-2, 2, is_valid=False))
- assert a.start == 3
- assert a.end == 4
- def test_sinh():
- a = sinh(interval(-1, 1))
- assert a.start == np.sinh(-1)
- assert a.end == np.sinh(1)
- a = sinh(1)
- assert a.start == np.sinh(1)
- assert a.end == np.sinh(1)
- def test_cosh():
- a = cosh(interval(1, 2))
- assert a.start == np.cosh(1)
- assert a.end == np.cosh(2)
- a = cosh(interval(-2, -1))
- assert a.start == np.cosh(-1)
- assert a.end == np.cosh(-2)
- a = cosh(interval(-2, 1))
- assert a.start == 1
- assert a.end == np.cosh(-2)
- a = cosh(1)
- assert a.start == np.cosh(1)
- assert a.end == np.cosh(1)
- def test_tanh():
- a = tanh(interval(-3, 3))
- assert a.start == np.tanh(-3)
- assert a.end == np.tanh(3)
- a = tanh(3)
- assert a.start == np.tanh(3)
- assert a.end == np.tanh(3)
- def test_asin():
- a = asin(interval(-0.5, 0.5))
- assert a.start == np.arcsin(-0.5)
- assert a.end == np.arcsin(0.5)
- a = asin(interval(-1.5, 1.5))
- assert a.is_valid is None
- a = asin(interval(-2, -1.5))
- assert a.is_valid is False
- a = asin(interval(0, 2))
- assert a.is_valid is None
- a = asin(interval(2, 5))
- assert a.is_valid is False
- a = asin(0.5)
- assert a.start == np.arcsin(0.5)
- assert a.end == np.arcsin(0.5)
- a = asin(1.5)
- assert a.is_valid is False
- def test_acos():
- a = acos(interval(-0.5, 0.5))
- assert a.start == np.arccos(0.5)
- assert a.end == np.arccos(-0.5)
- a = acos(interval(-1.5, 1.5))
- assert a.is_valid is None
- a = acos(interval(-2, -1.5))
- assert a.is_valid is False
- a = acos(interval(0, 2))
- assert a.is_valid is None
- a = acos(interval(2, 5))
- assert a.is_valid is False
- a = acos(0.5)
- assert a.start == np.arccos(0.5)
- assert a.end == np.arccos(0.5)
- a = acos(1.5)
- assert a.is_valid is False
- def test_ceil():
- a = ceil(interval(0.2, 0.5))
- assert a.start == 1
- assert a.end == 1
- a = ceil(interval(0.5, 1.5))
- assert a.start == 1
- assert a.end == 2
- assert a.is_valid is None
- a = ceil(interval(-5, 5))
- assert a.is_valid is None
- a = ceil(5.4)
- assert a.start == 6
- assert a.end == 6
- def test_floor():
- a = floor(interval(0.2, 0.5))
- assert a.start == 0
- assert a.end == 0
- a = floor(interval(0.5, 1.5))
- assert a.start == 0
- assert a.end == 1
- assert a.is_valid is None
- a = floor(interval(-5, 5))
- assert a.is_valid is None
- a = floor(5.4)
- assert a.start == 5
- assert a.end == 5
- def test_asinh():
- a = asinh(interval(1, 2))
- assert a.start == np.arcsinh(1)
- assert a.end == np.arcsinh(2)
- a = asinh(0.5)
- assert a.start == np.arcsinh(0.5)
- assert a.end == np.arcsinh(0.5)
- def test_acosh():
- a = acosh(interval(3, 5))
- assert a.start == np.arccosh(3)
- assert a.end == np.arccosh(5)
- a = acosh(interval(0, 3))
- assert a.is_valid is None
- a = acosh(interval(-3, 0.5))
- assert a.is_valid is False
- a = acosh(0.5)
- assert a.is_valid is False
- a = acosh(2)
- assert a.start == np.arccosh(2)
- assert a.end == np.arccosh(2)
- def test_atanh():
- a = atanh(interval(-0.5, 0.5))
- assert a.start == np.arctanh(-0.5)
- assert a.end == np.arctanh(0.5)
- a = atanh(interval(0, 3))
- assert a.is_valid is None
- a = atanh(interval(-3, -2))
- assert a.is_valid is False
- a = atanh(0.5)
- assert a.start == np.arctanh(0.5)
- assert a.end == np.arctanh(0.5)
- a = atanh(1.5)
- assert a.is_valid is False
- def test_Abs():
- assert (Abs(interval(-0.5, 0.5)) == interval(0, 0.5)) == (True, True)
- assert (Abs(interval(-3, -2)) == interval(2, 3)) == (True, True)
- assert (Abs(-3) == interval(3, 3)) == (True, True)
- def test_And():
- args = [(True, True), (True, False), (True, None)]
- assert And(*args) == (True, False)
- args = [(False, True), (None, None), (True, True)]
- assert And(*args) == (False, None)
- def test_Or():
- args = [(True, True), (True, False), (False, None)]
- assert Or(*args) == (True, True)
- args = [(None, None), (False, None), (False, False)]
- assert Or(*args) == (None, None)
|