m2m模型翻译
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

150 lines
4.1 KiB

from sympy.core.symbol import Symbol
from sympy.plotting.intervalmath import interval
from sympy.plotting.intervalmath.interval_membership import intervalMembership
from sympy.plotting.experimental_lambdify import experimental_lambdify
from sympy.testing.pytest import raises
def test_creation():
assert intervalMembership(True, True)
raises(TypeError, lambda: intervalMembership(True))
raises(TypeError, lambda: intervalMembership(True, True, True))
def test_getitem():
a = intervalMembership(True, False)
assert a[0] is True
assert a[1] is False
raises(IndexError, lambda: a[2])
def test_str():
a = intervalMembership(True, False)
assert str(a) == 'intervalMembership(True, False)'
assert repr(a) == 'intervalMembership(True, False)'
def test_equivalence():
a = intervalMembership(True, True)
b = intervalMembership(True, False)
assert (a == b) is False
assert (a != b) is True
a = intervalMembership(True, False)
b = intervalMembership(True, False)
assert (a == b) is True
assert (a != b) is False
def test_not():
x = Symbol('x')
r1 = x > -1
r2 = x <= -1
i = interval
f1 = experimental_lambdify((x,), r1)
f2 = experimental_lambdify((x,), r2)
tt = i(-0.1, 0.1, is_valid=True)
tn = i(-0.1, 0.1, is_valid=None)
tf = i(-0.1, 0.1, is_valid=False)
assert f1(tt) == ~f2(tt)
assert f1(tn) == ~f2(tn)
assert f1(tf) == ~f2(tf)
nt = i(0.9, 1.1, is_valid=True)
nn = i(0.9, 1.1, is_valid=None)
nf = i(0.9, 1.1, is_valid=False)
assert f1(nt) == ~f2(nt)
assert f1(nn) == ~f2(nn)
assert f1(nf) == ~f2(nf)
ft = i(1.9, 2.1, is_valid=True)
fn = i(1.9, 2.1, is_valid=None)
ff = i(1.9, 2.1, is_valid=False)
assert f1(ft) == ~f2(ft)
assert f1(fn) == ~f2(fn)
assert f1(ff) == ~f2(ff)
def test_boolean():
# There can be 9*9 test cases in full mapping of the cartesian product.
# But we only consider 3*3 cases for simplicity.
s = [
intervalMembership(False, False),
intervalMembership(None, None),
intervalMembership(True, True)
]
# Reduced tests for 'And'
a1 = [
intervalMembership(False, False),
intervalMembership(False, False),
intervalMembership(False, False),
intervalMembership(False, False),
intervalMembership(None, None),
intervalMembership(None, None),
intervalMembership(False, False),
intervalMembership(None, None),
intervalMembership(True, True)
]
a1_iter = iter(a1)
for i in range(len(s)):
for j in range(len(s)):
assert s[i] & s[j] == next(a1_iter)
# Reduced tests for 'Or'
a1 = [
intervalMembership(False, False),
intervalMembership(None, False),
intervalMembership(True, False),
intervalMembership(None, False),
intervalMembership(None, None),
intervalMembership(True, None),
intervalMembership(True, False),
intervalMembership(True, None),
intervalMembership(True, True)
]
a1_iter = iter(a1)
for i in range(len(s)):
for j in range(len(s)):
assert s[i] | s[j] == next(a1_iter)
# Reduced tests for 'Xor'
a1 = [
intervalMembership(False, False),
intervalMembership(None, False),
intervalMembership(True, False),
intervalMembership(None, False),
intervalMembership(None, None),
intervalMembership(None, None),
intervalMembership(True, False),
intervalMembership(None, None),
intervalMembership(False, True)
]
a1_iter = iter(a1)
for i in range(len(s)):
for j in range(len(s)):
assert s[i] ^ s[j] == next(a1_iter)
# Reduced tests for 'Not'
a1 = [
intervalMembership(True, False),
intervalMembership(None, None),
intervalMembership(False, True)
]
a1_iter = iter(a1)
for i in range(len(s)):
assert ~s[i] == next(a1_iter)
def test_boolean_errors():
a = intervalMembership(True, True)
raises(ValueError, lambda: a & 1)
raises(ValueError, lambda: a | 1)
raises(ValueError, lambda: a ^ 1)