def test_Eq(): assert Eq(Interval(0, 1), Interval(0, 1)) assert Eq(Interval(0, 1), Union(Interval(2, 3), Interval(4, 5))).is_Equality assert Eq(Interval(0, 1), Interval(0, 2)) is S.false s1 = FiniteSet(0, 1) s2 = FiniteSet(1, 2) assert Eq(s1, s1) assert Eq(s1, s2) is S.false assert Eq(FiniteSet(1, 2), FiniteSet(3, 4, 5)) is S.false assert Eq(s1*s2, s1*s2) assert Eq(s1*s2, s2*s1) is S.false p1 = ProductSet(FiniteSet(1), FiniteSet(2)) assert Eq(p1, s1).is_Equality p2 = ProductSet(FiniteSet(1), FiniteSet(2), FiniteSet(3)) assert Eq(p1, p2) is S.false
def test_union(): assert Union(Interval(1, 2), Interval(2, 3)) == Interval(1, 3) assert Union(Interval(1, 2), Interval(2, 3, True)) == Interval(1, 3) assert Union(Interval(1, 3), Interval(2, 4)) == Interval(1, 4) assert Union(Interval(1, 2), Interval(1, 3)) == Interval(1, 3) assert Union(Interval(1, 3), Interval(1, 2)) == Interval(1, 3) assert Union(Interval(1, 3, False, True), Interval(1, 2)) == \ Interval(1, 3, False, True) assert Union(Interval(1, 3), Interval(1, 2, False, True)) == Interval(1, 3) assert Union(Interval(1, 2, True), Interval(1, 3)) == Interval(1, 3) assert Union(Interval(1, 2, True), Interval(1, 3, True)) == \ Interval(1, 3, True) assert Union(Interval(1, 2, True), Interval(1, 3, True, True)) == \ Interval(1, 3, True, True) assert Union(Interval(1, 2, True, True), Interval(1, 3, True)) == \ Interval(1, 3, True) assert Union(Interval(1, 3), Interval(2, 3)) == Interval(1, 3) assert Union(Interval(1, 3, False, True), Interval(2, 3)) == \ Interval(1, 3) assert Union(Interval(1, 2, False, True), Interval(2, 3, True)) != \ Interval(1, 3) assert Union(Interval(1, 2), S.EmptySet) == Interval(1, 2) assert Union(S.EmptySet) == S.EmptySet assert Union(Interval(0, 1), [FiniteSet(1.0/n) for n in range(1, 10)]) == \ Interval(0, 1) assert Interval(1, 2).union(Interval(2, 3)) == \ Interval(1, 2) + Interval(2, 3) assert Interval(1, 2).union(Interval(2, 3)) == Interval(1, 3) assert Union(Set()) == Set() assert FiniteSet(1) + FiniteSet(2) + FiniteSet(3) == FiniteSet(1, 2, 3) assert FiniteSet('ham') + FiniteSet('eggs') == FiniteSet('ham', 'eggs') assert FiniteSet(1, 2, 3) + S.EmptySet == FiniteSet(1, 2, 3) assert FiniteSet(1, 2, 3) & FiniteSet(2, 3, 4) == FiniteSet(2, 3) assert FiniteSet(1, 2, 3) | FiniteSet(2, 3, 4) == FiniteSet(1, 2, 3, 4) assert S.EmptySet | FiniteSet(x, FiniteSet(y, z)) == \ FiniteSet(x, FiniteSet(y, z)) # Test that Intervals and FiniteSets play nicely assert Interval(1, 3) + FiniteSet(2) == Interval(1, 3) assert Interval(1, 3, True, True) + FiniteSet(3) == \ Interval(1, 3, True, False) X = Interval(1, 3) + FiniteSet(5) Y = Interval(1, 2) + FiniteSet(3) XandY = X.intersection(Y) assert 2 in X and 3 in X and 3 in XandY assert XandY.is_subset(X) and XandY.is_subset(Y) pytest.raises(TypeError, lambda: Union(1, 2, 3)) assert X.is_iterable is False Z = Union(FiniteSet(1, 2)*FiniteSet(3, 4), FiniteSet(1, 2, 3, 4)) assert Z.is_iterable # issue sympy/sympy#7843 assert Union(S.EmptySet, FiniteSet(-sqrt(-I), sqrt(-I))) == FiniteSet(-sqrt(-I), sqrt(-I)) assert Union(ProductSet(FiniteSet(1), FiniteSet(2)), Interval(0, 1)).is_Union assert Union(ProductSet(FiniteSet(1), FiniteSet(2)), ProductSet(FiniteSet(1), FiniteSet(2), FiniteSet(3))).is_Union assert list(Union(FiniteSet(1, 2), FiniteSet(3, 4), evaluate=False)) == [1, 3, 2, 4] pytest.raises(TypeError, lambda: iter(Union(FiniteSet(1, 2), Interval(0, 1)))) assert (Union(FiniteSet(E), FiniteSet(pi), evaluate=False).evalf() == FiniteSet(Float('2.7182818284590451', prec=15), Float('3.1415926535897931', prec=15)))
def test_ProductSet_iter(): pytest.raises(TypeError, lambda: iter(ProductSet(Set(1), Set(2))))
def test_pow_args(): pytest.raises(ValueError, lambda: Interval(0, 1)**-1) pytest.raises(TypeError, lambda: ProductSet(2))
def test_ProductSet_of_single_arg_is_arg(): assert ProductSet(Interval(0, 1)) == Interval(0, 1)
def test_intersection(): pytest.raises(TypeError, lambda: Intersection(1)) pytest.raises(TypeError, lambda: Intersection()) assert Interval(0, 2).intersection(Interval(1, 2)) == Interval(1, 2) assert Interval(0, 2).intersection(Interval(1, 2, True)) == \ Interval(1, 2, True) assert Interval(0, 2, True).intersection(Interval(1, 2)) == \ Interval(1, 2, False, False) assert Interval(0, 2, True, True).intersection(Interval(1, 2)) == \ Interval(1, 2, False, True) assert Interval(0, 2).intersection(Union(Interval(0, 1), Interval(2, 3))) == \ Union(Interval(0, 1), Interval(2, 2)) x = Symbol('x') assert Intersection(Interval(0, 1), FiniteSet(x)).is_iterable assert not Intersection(Interval(0, 1), Interval(0, x)).is_iterable assert FiniteSet(1, 2, x).intersection(FiniteSet(x)) == FiniteSet(x) assert FiniteSet('ham', 'eggs').intersection(FiniteSet('ham')) == \ FiniteSet('ham') assert FiniteSet(1, 2, 3, 4, 5).intersection(S.EmptySet) == S.EmptySet assert Interval(0, 5).intersection(FiniteSet(1, 3)) == FiniteSet(1, 3) assert Interval(0, 1, True, True).intersection(FiniteSet(1)) == S.EmptySet assert Union(Interval(0, 1), Interval(2, 3)).intersection(Interval(1, 2)) == \ Union(Interval(1, 1), Interval(2, 2)) assert Union(Interval(0, 1), Interval(2, 3)).intersection(Interval(0, 2)) == \ Union(Interval(0, 1), Interval(2, 2)) assert Union(Interval(0, 1), Interval(2, 3)).intersection(Interval(1, 2, True, True)) == \ S.EmptySet assert Union(Interval(0, 1), Interval(2, 3)).intersection(S.EmptySet) == \ S.EmptySet assert Union(Interval(0, 5), FiniteSet('ham')).intersection(FiniteSet(2, 3, 4, 5, 6)) == \ Union(FiniteSet(2, 3, 4, 5), Intersection(FiniteSet(6), Union(Interval(0, 5), FiniteSet('ham')))) # issue sympy/sympy#8217 assert Intersection(FiniteSet(x), FiniteSet(y)) == \ Intersection(FiniteSet(x), FiniteSet(y), evaluate=False) assert FiniteSet(x).intersection(S.Reals) == \ Intersection(S.Reals, FiniteSet(x), evaluate=False) # tests for the intersection alias assert Interval(0, 5).intersection(FiniteSet(1, 3)) == FiniteSet(1, 3) assert Interval(0, 1, True, True).intersection(FiniteSet(1)) == S.EmptySet assert Union(Interval(0, 1), Interval(2, 3)).intersection(Interval(1, 2)) == \ Union(Interval(1, 1), Interval(2, 2)) assert ProductSet(FiniteSet(1), FiniteSet(2)).intersection(Interval(1, 2)).is_Intersection # iterable i = Intersection(FiniteSet(1, 2, 3), Interval(2, 5), evaluate=False) assert i.is_iterable assert set(i) == {Integer(2), Integer(3)} # challenging intervals x = Symbol('x', extended_real=True) i = Intersection(Interval(0, 3), Interval(x, 6)) assert (5 in i) is False pytest.raises(TypeError, lambda: 2 in i) # Singleton special cases assert Intersection(Interval(0, 1), S.EmptySet) == S.EmptySet assert Intersection(S.Reals, Interval(-oo, x, True)) == Interval(-oo, x, True) # Products line = Interval(0, 5) i = Intersection(line**2, line**3, evaluate=False) assert (2, 2) not in i assert (2, 2, 2) not in i pytest.raises(ValueError, lambda: list(i)) assert (Intersection(Intersection(S.Integers, S.Naturals, evaluate=False), S.Reals, evaluate=False) == Intersection(S.Integers, S.Naturals, S.Reals, evaluate=False)) assert (imageset(Lambda(x, x**2), Intersection(FiniteSet(1, 2), FiniteSet(2, 3), evaluate=False)) == FiniteSet(4))