def test_issue_11730(): unit = Interval(0, 1) square = ComplexRegion(unit**2) assert Union(S.Complexes, FiniteSet(oo)) != S.Complexes assert Union(S.Complexes, FiniteSet(eye(4))) != S.Complexes assert Union(unit, square) == square assert Intersection(S.Reals, square) == unit
def test_issue_11938(): unit = Interval(0, 1) ival = Interval(1, 2) cr1 = ComplexRegion(ival * unit) assert Intersection(cr1, S.Reals) == ival assert Intersection(cr1, unit) == FiniteSet(1) arg1 = Interval(0, S.Pi) arg2 = FiniteSet(S.Pi) arg3 = Interval(S.Pi / 4, 3 * S.Pi / 4) cp1 = ComplexRegion(unit * arg1, polar=True) cp2 = ComplexRegion(unit * arg2, polar=True) cp3 = ComplexRegion(unit * arg3, polar=True) assert Intersection(cp1, S.Reals) == Interval(-1, 1) assert Intersection(cp2, S.Reals) == Interval(-1, 0) assert Intersection(cp3, S.Reals) == FiniteSet(0)
def _(self, other): if other.is_ComplexRegion: # self in rectangular form if (not self.polar) and (not other.polar): return ComplexRegion(Intersection(self.sets, other.sets)) # self in polar form elif self.polar and other.polar: r1, theta1 = self.a_interval, self.b_interval r2, theta2 = other.a_interval, other.b_interval new_r_interval = Intersection(r1, r2) new_theta_interval = Intersection(theta1, theta2) # 0 and 2*Pi means the same if ((2 * S.Pi in theta1 and S.Zero in theta2) or (2 * S.Pi in theta2 and S.Zero in theta1)): new_theta_interval = Union(new_theta_interval, FiniteSet(0)) return ComplexRegion(new_r_interval * new_theta_interval, polar=True) if other.is_subset(S.Reals): new_interval = [] x = symbols("x", cls=Dummy, real=True) # self in rectangular form if not self.polar: for element in self.psets: if S.Zero in element.args[1]: new_interval.append(element.args[0]) new_interval = Union(*new_interval) return Intersection(new_interval, other) # self in polar form elif self.polar: for element in self.psets: if S.Zero in element.args[1]: new_interval.append(element.args[0]) if S.Pi in element.args[1]: new_interval.append( ImageSet(Lambda(x, -x), element.args[0])) if S.Zero in element.args[0]: new_interval.append(FiniteSet(0)) new_interval = Union(*new_interval) return Intersection(new_interval, other)
def test_Complex(): assert 5 in S.Complexes assert 5 + 4 * I in S.Complexes assert S.Pi in S.Complexes assert -sqrt(2) in S.Complexes assert -I in S.Complexes assert sqrt(-1) in S.Complexes assert S.Complexes.intersect(S.Reals) == S.Reals # assert S.Complexes.union(S.Reals) == S.Complexes assert S.Complexes == ComplexRegion(S.Reals * S.Reals)
def test_ImageSet(): raises(ValueError, lambda: ImageSet(x, S.Integers)) assert ImageSet(Lambda(x, 1), S.Integers) == FiniteSet(1) assert ImageSet(Lambda(x, y), S.Integers) == {y} assert ImageSet(Lambda(x, 1), S.EmptySet) == S.EmptySet empty = Intersection(FiniteSet(log(2) / pi), S.Integers) assert unchanged(ImageSet, Lambda(x, 1), empty) # issue #17471 squares = ImageSet(Lambda(x, x**2), S.Naturals) assert 4 in squares assert 5 not in squares assert FiniteSet(*range(10)).intersect(squares) == FiniteSet(1, 4, 9) assert 16 not in squares.intersect(Interval(0, 10)) si = iter(squares) a, b, c, d = next(si), next(si), next(si), next(si) assert (a, b, c, d) == (1, 4, 9, 16) harmonics = ImageSet(Lambda(x, 1 / x), S.Naturals) assert Rational(1, 5) in harmonics assert Rational(.25) in harmonics assert 0.25 not in harmonics assert Rational(.3) not in harmonics assert (1, 2) not in harmonics assert harmonics.is_iterable assert imageset(x, -x, Interval(0, 1)) == Interval(-1, 0) assert ImageSet(Lambda(x, x**2), Interval(0, 2)).doit() == Interval(0, 4) c = ComplexRegion(Interval(1, 3) * Interval(1, 3)) assert Tuple(2, 6) in ImageSet(Lambda((x, y), (x, 2 * y)), c) assert Tuple(2, S.Half) in ImageSet(Lambda((x, y), (x, 1 / y)), c) assert Tuple(2, -2) not in ImageSet(Lambda((x, y), (x, y**2)), c) assert Tuple(2, -2) in ImageSet(Lambda((x, y), (x, -2)), c) c3 = Interval(3, 7) * Interval(8, 11) * Interval(5, 9) assert Tuple(8, 3, 9) in ImageSet(Lambda((t, y, x), (y, t, x)), c3) assert Tuple(Rational(1, 8), 3, 9) in ImageSet(Lambda((t, y, x), (1 / y, t, x)), c3) assert 2 / pi not in ImageSet(Lambda((x, y), 2 / x), c) assert 2 / S(100) not in ImageSet(Lambda((x, y), 2 / x), c) assert Rational(2, 3) in ImageSet(Lambda((x, y), 2 / x), c) assert imageset(lambda x, y: x + y, S.Integers, S.Naturals).base_set == ProductSet(S.Integers, S.Naturals) # Passing a set instead of a FiniteSet shouldn't raise assert unchanged(ImageSet, Lambda(x, x**2), {1, 2, 3}) raises(TypeError, lambda: ImageSet(Lambda(x, x**2), 1))
def test_ComplexRegion_contains(): # contains in ComplexRegion a = Interval(2, 3) b = Interval(4, 6) c = Interval(7, 9) c1 = ComplexRegion(a * b) c2 = ComplexRegion(Union(a * b, c * a)) assert 2.5 + 4.5 * I in c1 assert 2 + 4 * I in c1 assert 3 + 4 * I in c1 assert 8 + 2.5 * I in c2 assert 2.5 + 6.1 * I not in c1 assert 4.5 + 3.2 * I not in c1 r1 = Interval(0, 1) theta1 = Interval(0, 2 * S.Pi) c3 = ComplexRegion(r1 * theta1, polar=True) assert 0.5 + 0.6 * I in c3 assert I in c3 assert 1 in c3 assert 0 in c3 assert 1 + I not in c3 assert 1 - I not in c3
def test_ImageSet(): raises(ValueError, lambda: ImageSet(x, S.Integers)) assert ImageSet(Lambda(x, 1), S.Integers) == FiniteSet(1) assert ImageSet(Lambda(x, y), S.Integers) == {y} squares = ImageSet(Lambda(x, x**2), S.Naturals) assert 4 in squares assert 5 not in squares assert FiniteSet(*range(10)).intersect(squares) == FiniteSet(1, 4, 9) assert 16 not in squares.intersect(Interval(0, 10)) si = iter(squares) a, b, c, d = next(si), next(si), next(si), next(si) assert (a, b, c, d) == (1, 4, 9, 16) harmonics = ImageSet(Lambda(x, 1 / x), S.Naturals) assert Rational(1, 5) in harmonics assert Rational(.25) in harmonics assert 0.25 not in harmonics assert Rational(.3) not in harmonics assert (1, 2) not in harmonics assert harmonics.is_iterable assert imageset(x, -x, Interval(0, 1)) == Interval(-1, 0) assert ImageSet(Lambda(x, x**2), Interval(0, 2)).doit() == Interval(0, 4) c = ComplexRegion(Interval(1, 3) * Interval(1, 3)) assert Tuple(2, 6) in ImageSet(Lambda((x, y), (x, 2 * y)), c) assert Tuple(2, S.Half) in ImageSet(Lambda((x, y), (x, 1 / y)), c) assert Tuple(2, -2) not in ImageSet(Lambda((x, y), (x, y**2)), c) assert Tuple(2, -2) in ImageSet(Lambda((x, y), (x, -2)), c) c3 = Interval(3, 7) * Interval(8, 11) * Interval(5, 9) assert Tuple(8, 3, 9) in ImageSet(Lambda((t, y, x), (y, t, x)), c3) assert Tuple(S(1) / 8, 3, 9) in ImageSet(Lambda((t, y, x), (1 / y, t, x)), c3) assert 2 / pi not in ImageSet(Lambda((x, y), 2 / x), c) assert 2 / S(100) not in ImageSet(Lambda((x, y), 2 / x), c) assert 2 / S(3) in ImageSet(Lambda((x, y), 2 / x), c) assert imageset(lambda x, y: x + y, S.Integers, S.Naturals).base_set == ProductSet(S.Integers, S.Naturals)
def test_ComplexRegion_union(): # Polar form c1 = ComplexRegion(Interval(0, 1) * Interval(0, 2 * S.Pi), polar=True) c2 = ComplexRegion(Interval(0, 1) * Interval(0, S.Pi), polar=True) c3 = ComplexRegion(Interval(0, oo) * Interval(0, S.Pi), polar=True) c4 = ComplexRegion(Interval(0, oo) * Interval(S.Pi, 2 * S.Pi), polar=True) p1 = Union( Interval(0, 1) * Interval(0, 2 * S.Pi), Interval(0, 1) * Interval(0, S.Pi)) p2 = Union( Interval(0, oo) * Interval(0, S.Pi), Interval(0, oo) * Interval(S.Pi, 2 * S.Pi)) assert c1.union(c2) == ComplexRegion(p1, polar=True) assert c3.union(c4) == ComplexRegion(p2, polar=True) # Rectangular form c5 = ComplexRegion(Interval(2, 5) * Interval(6, 9)) c6 = ComplexRegion(Interval(4, 6) * Interval(10, 12)) c7 = ComplexRegion(Interval(0, 10) * Interval(-10, 0)) c8 = ComplexRegion(Interval(12, 16) * Interval(14, 20)) p3 = Union( Interval(2, 5) * Interval(6, 9), Interval(4, 6) * Interval(10, 12)) p4 = Union( Interval(0, 10) * Interval(-10, 0), Interval(12, 16) * Interval(14, 20)) assert c5.union(c6) == ComplexRegion(p3) assert c7.union(c8) == ComplexRegion(p4) assert c1.union(Interval(2, 4)) == Union(c1, Interval(2, 4), evaluate=False) assert c5.union(Interval(2, 4)) == Union(c5, Interval(2, 4), evaluate=False)
def test_ComplexRegion_intersect(): # Polar form X_axis = ComplexRegion(Interval(0, oo) * FiniteSet(0, S.Pi), polar=True) unit_disk = ComplexRegion(Interval(0, 1) * Interval(0, 2 * S.Pi), polar=True) upper_half_unit_disk = ComplexRegion(Interval(0, 1) * Interval(0, S.Pi), polar=True) upper_half_disk = ComplexRegion(Interval(0, oo) * Interval(0, S.Pi), polar=True) lower_half_disk = ComplexRegion(Interval(0, oo) * Interval(S.Pi, 2 * S.Pi), polar=True) right_half_disk = ComplexRegion(Interval(0, oo) * Interval(-S.Pi / 2, S.Pi / 2), polar=True) first_quad_disk = ComplexRegion(Interval(0, oo) * Interval(0, S.Pi / 2), polar=True) assert upper_half_disk.intersect(unit_disk) == upper_half_unit_disk assert right_half_disk.intersect(first_quad_disk) == first_quad_disk assert upper_half_disk.intersect(right_half_disk) == first_quad_disk assert upper_half_disk.intersect(lower_half_disk) == X_axis c1 = ComplexRegion(Interval(0, 4) * Interval(0, 2 * S.Pi), polar=True) assert c1.intersect(Interval(1, 5)) == Interval(1, 4) assert c1.intersect(Interval(4, 9)) == FiniteSet(4) assert c1.intersect(Interval(5, 12)) is S.EmptySet # Rectangular form X_axis = ComplexRegion(Interval(-oo, oo) * FiniteSet(0)) unit_square = ComplexRegion(Interval(-1, 1) * Interval(-1, 1)) upper_half_unit_square = ComplexRegion(Interval(-1, 1) * Interval(0, 1)) upper_half_plane = ComplexRegion(Interval(-oo, oo) * Interval(0, oo)) lower_half_plane = ComplexRegion(Interval(-oo, oo) * Interval(-oo, 0)) right_half_plane = ComplexRegion(Interval(0, oo) * Interval(-oo, oo)) first_quad_plane = ComplexRegion(Interval(0, oo) * Interval(0, oo)) assert upper_half_plane.intersect(unit_square) == upper_half_unit_square assert right_half_plane.intersect(first_quad_plane) == first_quad_plane assert upper_half_plane.intersect(right_half_plane) == first_quad_plane assert upper_half_plane.intersect(lower_half_plane) == X_axis c1 = ComplexRegion(Interval(-5, 5) * Interval(-10, 10)) assert c1.intersect(Interval(2, 7)) == Interval(2, 5) assert c1.intersect(Interval(5, 7)) == FiniteSet(5) assert c1.intersect(Interval(6, 9)) is S.EmptySet # unevaluated object C1 = ComplexRegion(Interval(0, 1) * Interval(0, 2 * S.Pi), polar=True) C2 = ComplexRegion(Interval(-1, 1) * Interval(-1, 1)) assert C1.intersect(C2) == Intersection(C1, C2, evaluate=False)
def test_ComplexRegion_from_real(): c1 = ComplexRegion(Interval(0, 1) * Interval(0, 2 * S.Pi), polar=True) raises(ValueError, lambda: c1.from_real(c1)) assert c1.from_real(Interval(-1, 1)) == ComplexRegion( Interval(-1, 1) * FiniteSet(0), False)