Sets¶
Set¶
-
class
sympy.sets.sets.
Set
[source]¶ The base class for any kind of set.
This is not meant to be used directly as a container of items. It does not behave like the builtin
set
; seeFiniteSet
for that.Real intervals are represented by the
Interval
class and unions of sets by theUnion
class. The empty set is represented by theEmptySet
class and available as a singleton asS.EmptySet
.Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet -
boundary
¶ The boundary or frontier of a set
A point x is on the boundary of a set S if
- x is in the closure of S. I.e. Every neighborhood of x contains a point in S.
- x is not in the interior of S. I.e. There does not exist an open set centered on x contained entirely within S.
There are the points on the outer rim of S. If S is open then these points need not actually be contained within S.
For example, the boundary of an interval is its start and end points. This is true regardless of whether or not the interval is open.
Examples
>>> from sympy import Interval >>> Interval(0, 1).boundary {0, 1} >>> Interval(0, 1, True, False).boundary {0, 1}
-
complement
(universe)[source]¶ The complement of ‘self’ w.r.t the given the universe.
Examples
>>> from sympy import Interval, S >>> Interval(0, 1).complement(S.Reals) (-oo, 0) U (1, oo)
>>> Interval(0, 1).complement(S.UniversalSet) UniversalSet() \ [0, 1]
-
contains
(other)[source]¶ Returns True if ‘other’ is contained in ‘self’ as an element.
As a shortcut it is possible to use the ‘in’ operator:
Examples
>>> from sympy import Interval >>> Interval(0, 1).contains(0.5) True >>> 0.5 in Interval(0, 1) True
-
inf
¶ The infimum of ‘self’
Examples
>>> from sympy import Interval, Union >>> Interval(0, 1).inf 0 >>> Union(Interval(0, 1), Interval(2, 3)).inf 0
-
intersect
(other)[source]¶ Returns the intersection of ‘self’ and ‘other’.
>>> from sympy import Interval
>>> Interval(1, 3).intersect(Interval(1, 2)) [1, 2]
>>> from sympy import imageset, Lambda, symbols, S >>> n, m = symbols('n m') >>> a = imageset(Lambda(n, 2*n), S.Integers) >>> a.intersect(imageset(Lambda(m, 2*m + 1), S.Integers)) EmptySet()
-
intersection
(other)[source]¶ Alias for
intersect()
-
is_disjoint
(other)[source]¶ Returns True if ‘self’ and ‘other’ are disjoint
References
[R436] http://en.wikipedia.org/wiki/Disjoint_sets Examples
>>> from sympy import Interval >>> Interval(0, 2).is_disjoint(Interval(1, 2)) False >>> Interval(0, 2).is_disjoint(Interval(3, 4)) True
-
is_proper_subset
(other)[source]¶ Returns True if ‘self’ is a proper subset of ‘other’.
Examples
>>> from sympy import Interval >>> Interval(0, 0.5).is_proper_subset(Interval(0, 1)) True >>> Interval(0, 1).is_proper_subset(Interval(0, 1)) False
-
is_proper_superset
(other)[source]¶ Returns True if ‘self’ is a proper superset of ‘other’.
Examples
>>> from sympy import Interval >>> Interval(0, 1).is_proper_superset(Interval(0, 0.5)) True >>> Interval(0, 1).is_proper_superset(Interval(0, 1)) False
-
is_subset
(other)[source]¶ Returns True if ‘self’ is a subset of ‘other’.
Examples
>>> from sympy import Interval >>> Interval(0, 0.5).is_subset(Interval(0, 1)) True >>> Interval(0, 1).is_subset(Interval(0, 1, left_open=True)) False
-
is_superset
(other)[source]¶ Returns True if ‘self’ is a superset of ‘other’.
Examples
>>> from sympy import Interval >>> Interval(0, 0.5).is_superset(Interval(0, 1)) False >>> Interval(0, 1).is_superset(Interval(0, 1, left_open=True)) True
-
isdisjoint
(other)[source]¶ Alias for
is_disjoint()
-
issubset
(other)[source]¶ Alias for
is_subset()
-
issuperset
(other)[source]¶ Alias for
is_superset()
-
measure
¶ The (Lebesgue) measure of ‘self’
Examples
>>> from sympy import Interval, Union >>> Interval(0, 1).measure 1 >>> Union(Interval(0, 1), Interval(2, 3)).measure 2
-
powerset
()[source]¶ Find the Power set of ‘self’.
References
[R437] http://en.wikipedia.org/wiki/Power_set Examples
>>> from sympy import FiniteSet, EmptySet >>> A = EmptySet() >>> A.powerset() {EmptySet()} >>> A = FiniteSet(1, 2) >>> a, b, c = FiniteSet(1), FiniteSet(2), FiniteSet(1, 2) >>> A.powerset() == FiniteSet(a, b, c, EmptySet()) True
-
sup
¶ The supremum of ‘self’
Examples
>>> from sympy import Interval, Union >>> Interval(0, 1).sup 1 >>> Union(Interval(0, 1), Interval(2, 3)).sup 3
-
union
(other)[source]¶ Returns the union of ‘self’ and ‘other’.
Examples
As a shortcut it is possible to use the ‘+’ operator:
>>> from sympy import Interval, FiniteSet >>> Interval(0, 1).union(Interval(2, 3)) [0, 1] U [2, 3] >>> Interval(0, 1) + Interval(2, 3) [0, 1] U [2, 3] >>> Interval(1, 2, True, True) + FiniteSet(2, 3) (1, 2] U {3}
Similarly it is possible to use the ‘-‘ operator for set differences:
>>> Interval(0, 2) - Interval(0, 1) (1, 2] >>> Interval(1, 3) - FiniteSet(2) [1, 2) U (2, 3]
-
-
sympy.sets.sets.
imageset
(*args)[source]¶ Return an image of the set under transformation
f
.If this function can’t compute the image, it returns an unevaluated ImageSet object.
\[{ f(x) | x \in self }\]See also
Examples
>>> from sympy import S, Interval, Symbol, imageset, sin, Lambda >>> from sympy.abc import x, y
>>> imageset(x, 2*x, Interval(0, 2)) [0, 4]
>>> imageset(lambda x: 2*x, Interval(0, 2)) [0, 4]
>>> imageset(Lambda(x, sin(x)), Interval(-2, 1)) ImageSet(Lambda(x, sin(x)), [-2, 1])
>>> imageset(sin, Interval(-2, 1)) ImageSet(Lambda(x, sin(x)), [-2, 1]) >>> imageset(lambda y: x + y, Interval(-2, 1)) ImageSet(Lambda(_x, _x + x), [-2, 1])
Expressions applied to the set of Integers are simplified to show as few negatives as possible and linear expressions are converted to a canonical form. If this is not desirable then the unevaluated ImageSet should be used.
>>> imageset(x, -2*x + 5, S.Integers) ImageSet(Lambda(x, 2*x + 1), Integers())
Elementary Sets¶
Interval¶
-
class
sympy.sets.sets.
Interval
[source]¶ Represents a real interval as a Set.
- Usage:
Returns an interval with end points “start” and “end”.
For left_open=True (default left_open is False) the interval will be open on the left. Similarly, for right_open=True the interval will be open on the right.
Notes
- Only real end points are supported
- Interval(a, b) with a > b will return the empty set
- Use the evalf() method to turn an Interval into an mpmath ‘mpi’ interval instance
References
[R438] http://en.wikipedia.org/wiki/Interval_%28mathematics%29 Examples
>>> from sympy import Symbol, Interval >>> Interval(0, 1) [0, 1] >>> Interval(0, 1, False, True) [0, 1) >>> Interval.Ropen(0, 1) [0, 1) >>> Interval.Lopen(0, 1) (0, 1] >>> Interval.open(0, 1) (0, 1)
>>> a = Symbol('a', real=True) >>> Interval(0, a) [0, a]
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet -
end
¶ The right end point of ‘self’.
This property takes the same value as the ‘sup’ property.
Examples
>>> from sympy import Interval >>> Interval(0, 1).end 1
-
is_left_unbounded
¶ Return
True
if the left endpoint is negative infinity.
-
is_right_unbounded
¶ Return
True
if the right endpoint is positive infinity.
-
left
¶ The left end point of ‘self’.
This property takes the same value as the ‘inf’ property.
Examples
>>> from sympy import Interval >>> Interval(0, 1).start 0
-
left_open
¶ True if ‘self’ is left-open.
Examples
>>> from sympy import Interval >>> Interval(0, 1, left_open=True).left_open True >>> Interval(0, 1, left_open=False).left_open False
-
right
¶ The right end point of ‘self’.
This property takes the same value as the ‘sup’ property.
Examples
>>> from sympy import Interval >>> Interval(0, 1).end 1
-
right_open
¶ True if ‘self’ is right-open.
Examples
>>> from sympy import Interval >>> Interval(0, 1, right_open=True).right_open True >>> Interval(0, 1, right_open=False).right_open False
-
start
¶ The left end point of ‘self’.
This property takes the same value as the ‘inf’ property.
Examples
>>> from sympy import Interval >>> Interval(0, 1).start 0
FiniteSet¶
-
class
sympy.sets.sets.
FiniteSet
[source]¶ Represents a finite set of discrete numbers
References
[R439] http://en.wikipedia.org/wiki/Finite_set Examples
>>> from sympy import FiniteSet >>> FiniteSet(1, 2, 3, 4) {1, 2, 3, 4} >>> 3 in FiniteSet(1, 2, 3, 4) True
>>> members = [1, 2, 3, 4] >>> FiniteSet(*members) {1, 2, 3, 4}
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet
Compound Sets¶
Union¶
-
class
sympy.sets.sets.
Union
[source]¶ Represents a union of sets as a
Set
.See also
References
[R440] http://en.wikipedia.org/wiki/Union_%28set_theory%29 Examples
>>> from sympy import Union, Interval >>> Union(Interval(1, 2), Interval(3, 4)) [1, 2] U [3, 4]
The Union constructor will always try to merge overlapping intervals, if possible. For example:
>>> Union(Interval(1, 2), Interval(2, 3)) [1, 3]
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet
Intersection¶
-
class
sympy.sets.sets.
Intersection
[source]¶ Represents an intersection of sets as a
Set
.See also
References
[R441] http://en.wikipedia.org/wiki/Intersection_%28set_theory%29 Examples
>>> from sympy import Intersection, Interval >>> Intersection(Interval(1, 3), Interval(2, 4)) [2, 3]
We often use the .intersect method
>>> Interval(1,3).intersect(Interval(2,4)) [2, 3]
Attributes
is_Complement is_EmptySet is_UniversalSet -
static
reduce
(args)[source]¶ Return a simplified intersection by applying rules.
We first start with global rules like ‘if any empty sets, return empty set’ and ‘distribute unions’.
Then we iterate through all pairs and ask the constituent sets if they can simplify themselves with any other constituent
-
static
ProductSet¶
-
class
sympy.sets.sets.
ProductSet
[source]¶ Represents a Cartesian Product of Sets.
Returns a Cartesian product given several sets as either an iterable or individual arguments.
Can use ‘*’ operator on any sets for convenient shorthand.
Notes
- Passes most operations down to the argument sets
- Flattens Products of ProductSets
References
[R442] http://en.wikipedia.org/wiki/Cartesian_product Examples
>>> from sympy import Interval, FiniteSet, ProductSet >>> I = Interval(0, 5); S = FiniteSet(1, 2, 3) >>> ProductSet(I, S) [0, 5] x {1, 2, 3}
>>> (2, 2) in ProductSet(I, S) True
>>> Interval(0, 1) * Interval(0, 1) # The unit square [0, 1] x [0, 1]
>>> coin = FiniteSet('H', 'T') >>> set(coin**2) set([(H, H), (H, T), (T, H), (T, T)])
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet
Complement¶
-
class
sympy.sets.sets.
Complement
[source]¶ Represents the set difference or relative complement of a set with another set.
\(A - B = \{x \in A| x \notin B\}\)
See also
References
[R443] http://mathworld.wolfram.com/ComplementSet.html Examples
>>> from sympy import Complement, FiniteSet >>> Complement(FiniteSet(0, 1, 2), FiniteSet(1)) {0, 2}
Attributes
is_EmptySet is_Intersection is_UniversalSet -
static
reduce
(A, B)[source]¶ Simplify a
Complement
.
-
static
Singleton Sets¶
EmptySet¶
-
class
sympy.sets.sets.
EmptySet
[source]¶ Represents the empty set. The empty set is available as a singleton as S.EmptySet.
See also
References
[R444] http://en.wikipedia.org/wiki/Empty_set Examples
>>> from sympy import S, Interval >>> S.EmptySet EmptySet()
>>> Interval(1, 2).intersect(S.EmptySet) EmptySet()
Attributes
is_Complement is_Intersection is_UniversalSet
UniversalSet¶
-
class
sympy.sets.sets.
UniversalSet
[source]¶ Represents the set of all things. The universal set is available as a singleton as S.UniversalSet
See also
References
[R445] http://en.wikipedia.org/wiki/Universal_set Examples
>>> from sympy import S, Interval >>> S.UniversalSet UniversalSet()
>>> Interval(1, 2).intersect(S.UniversalSet) [1, 2]
Attributes
is_Complement is_EmptySet is_Intersection
Special Sets¶
Naturals¶
-
class
sympy.sets.fancysets.
Naturals
[source]¶ Represents the natural numbers (or counting numbers) which are all positive integers starting from 1. This set is also available as the Singleton, S.Naturals.
See also
Examples
>>> from sympy import S, Interval, pprint >>> 5 in S.Naturals True >>> iterable = iter(S.Naturals) >>> next(iterable) 1 >>> next(iterable) 2 >>> next(iterable) 3 >>> pprint(S.Naturals.intersect(Interval(0, 10))) {1, 2, ..., 10}
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet
Naturals0¶
Integers¶
-
class
sympy.sets.fancysets.
Integers
[source]¶ Represents all integers: positive, negative and zero. This set is also available as the Singleton, S.Integers.
Examples
>>> from sympy import S, Interval, pprint >>> 5 in S.Naturals True >>> iterable = iter(S.Integers) >>> next(iterable) 0 >>> next(iterable) 1 >>> next(iterable) -1 >>> next(iterable) 2
>>> pprint(S.Integers.intersect(Interval(-4, 4))) {-4, -3, ..., 4}
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet
ImageSet¶
-
class
sympy.sets.fancysets.
ImageSet
[source]¶ Image of a set under a mathematical function. The transformation must be given as a Lambda function which has as many arguments as the elements of the set upon which it operates, e.g. 1 argument when acting on the set of integers or 2 arguments when acting on a complex region.
This function is not normally called directly, but is called from \(imageset\).
See also
Examples
>>> from sympy import Symbol, S, ImageSet, FiniteSet, Lambda
>>> x = Symbol('x') >>> N = S.Naturals >>> squares = ImageSet(Lambda(x, x**2), N) # {x**2 for x in N} >>> 4 in squares True >>> 5 in squares False
>>> FiniteSet(0, 1, 2, 3, 4, 5, 6, 7, 9, 10).intersect(squares) {1, 4, 9}
>>> square_iterable = iter(squares) >>> for i in range(4): ... next(square_iterable) 1 4 9 16
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet
Range¶
-
class
sympy.sets.fancysets.
Range
[source]¶ Represents a range of integers. Can be called as Range(stop), Range(start, stop), or Range(start, stop, step); when stop is not given it defaults to 1.
\(Range(stop)\) is the same as \(Range(0, stop, 1)\) and the stop value (juse as for Python ranges) is not included in the Range values.
>>> from sympy import Range >>> list(Range(3)) [0, 1, 2]
The step can also be negative:
>>> list(Range(10, 0, -2)) [10, 8, 6, 4, 2]
The stop value is made canonical so equivalent ranges always have the same args:
>>> Range(0, 10, 3) Range(0, 12, 3)
Infinite ranges are allowed. If the starting point is infinite, then the final value is
stop - step
. To iterate such a range, it needs to be reversed:>>> from sympy import oo >>> r = Range(-oo, 1) >>> r[-1] 0 >>> next(iter(r)) Traceback (most recent call last): ... ValueError: Cannot iterate over Range with infinite start >>> next(iter(r.reversed)) 0
Although Range is a set (and supports the normal set operations) it maintains the order of the elements and can be used in contexts where \(range\) would be used.
>>> from sympy import Interval >>> Range(0, 10, 2).intersect(Interval(3, 7)) Range(4, 8, 2) >>> list(_) [4, 6]
Athough slicing of a Range will always return a Range – possibly empty – an empty set will be returned from any intersection that is empty:
>>> Range(3)[:0] Range(0, 0, 1) >>> Range(3).intersect(Interval(4, oo)) EmptySet() >>> Range(3).intersect(Range(4, oo)) EmptySet()
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet -
reversed
¶ Return an equivalent Range in the opposite order.
Examples
>>> from sympy import Range >>> Range(10).reversed Range(9, -1, -1)
-
ComplexRegion¶
-
class
sympy.sets.fancysets.
ComplexRegion
[source]¶ Represents the Set of all Complex Numbers. It can represent a region of Complex Plane in both the standard forms Polar and Rectangular coordinates.
- Polar Form Input is in the form of the ProductSet or Union of ProductSets of the intervals of r and theta, & use the flag polar=True.
Z = {z in C | z = r*[cos(theta) + I*sin(theta)], r in [r], theta in [theta]}
- Rectangular Form Input is in the form of the ProductSet or Union of ProductSets of interval of x and y the of the Complex numbers in a Plane. Default input type is in rectangular form.
Z = {z in C | z = x + I*y, x in [Re(z)], y in [Im(z)]}
See also
Reals
Examples
>>> from sympy.sets.fancysets import ComplexRegion >>> from sympy.sets import Interval >>> from sympy import S, I, Union >>> a = Interval(2, 3) >>> b = Interval(4, 6) >>> c = Interval(1, 8) >>> c1 = ComplexRegion(a*b) # Rectangular Form >>> c1 ComplexRegion([2, 3] x [4, 6], False)
- c1 represents the rectangular region in complex plane surrounded by the coordinates (2, 4), (3, 4), (3, 6) and (2, 6), of the four vertices.
>>> c2 = ComplexRegion(Union(a*b, b*c)) >>> c2 ComplexRegion([2, 3] x [4, 6] U [4, 6] x [1, 8], False)
- c2 represents the Union of two rectangular regions in complex plane. One of them surrounded by the coordinates of c1 and other surrounded by the coordinates (4, 1), (6, 1), (6, 8) and (4, 8).
>>> 2.5 + 4.5*I in c1 True >>> 2.5 + 6.5*I in c1 False
>>> r = Interval(0, 1) >>> theta = Interval(0, 2*S.Pi) >>> c2 = ComplexRegion(r*theta, polar=True) # Polar Form >>> c2 # unit Disk ComplexRegion([0, 1] x [0, 2*pi), True)
- c2 represents the region in complex plane inside the Unit Disk centered at the origin.
>>> 0.5 + 0.5*I in c2 True >>> 1 + 2*I in c2 False
>>> 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) >>> intersection = unit_disk.intersect(upper_half_unit_disk) >>> intersection ComplexRegion([0, 1] x [0, pi], True) >>> intersection == upper_half_unit_disk True
Attributes
is_Complement is_EmptySet is_Intersection is_UniversalSet -
a_interval
¶ Return the union of intervals of \(x\) when, self is in rectangular form, or the union of intervals of \(r\) when self is in polar form.
Examples
>>> from sympy import Interval, ComplexRegion, Union >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> c = Interval(1, 7) >>> C1 = ComplexRegion(a*b) >>> C1.a_interval [2, 3] >>> C2 = ComplexRegion(Union(a*b, b*c)) >>> C2.a_interval [2, 3] U [4, 5]
-
b_interval
¶ Return the union of intervals of \(y\) when, self is in rectangular form, or the union of intervals of \(theta\) when self is in polar form.
Examples
>>> from sympy import Interval, ComplexRegion, Union >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> c = Interval(1, 7) >>> C1 = ComplexRegion(a*b) >>> C1.b_interval [4, 5] >>> C2 = ComplexRegion(Union(a*b, b*c)) >>> C2.b_interval [1, 7]
-
polar
¶ Returns True if self is in polar form.
Examples
>>> from sympy import Interval, ComplexRegion, Union, S >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> theta = Interval(0, 2*S.Pi) >>> C1 = ComplexRegion(a*b) >>> C1.polar False >>> C2 = ComplexRegion(a*theta, polar=True) >>> C2.polar True
-
psets
¶ Return a tuple of sets (ProductSets) input of the self.
Examples
>>> from sympy import Interval, ComplexRegion, Union >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> c = Interval(1, 7) >>> C1 = ComplexRegion(a*b) >>> C1.psets ([2, 3] x [4, 5],) >>> C2 = ComplexRegion(Union(a*b, b*c)) >>> C2.psets ([2, 3] x [4, 5], [4, 5] x [1, 7])
-
sets
¶ Return raw input sets to the self.
Examples
>>> from sympy import Interval, ComplexRegion, Union >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> c = Interval(1, 7) >>> C1 = ComplexRegion(a*b) >>> C1.sets [2, 3] x [4, 5] >>> C2 = ComplexRegion(Union(a*b, b*c)) >>> C2.sets [2, 3] x [4, 5] U [4, 5] x [1, 7]
-
sympy.sets.fancysets.
normalize_theta_set
(theta)[source]¶ Normalize a Real Set \(theta\) in the Interval [0, 2*pi). It returns a normalized value of theta in the Set. For Interval, a maximum of one cycle [0, 2*pi], is returned i.e. for theta equal to [0, 10*pi], returned normalized value would be [0, 2*pi). As of now intervals with end points as non-multiples of \(pi\) is not supported.
Raises: NotImplementedError
The algorithms for Normalizing theta Set are not yet implemented.
ValueError
The input is not valid, i.e. the input is not a real set.
RuntimeError
It is a bug, please report to the github issue tracker.
Examples
>>> from sympy.sets.fancysets import normalize_theta_set >>> from sympy import Interval, FiniteSet, pi >>> normalize_theta_set(Interval(9*pi/2, 5*pi)) [pi/2, pi] >>> normalize_theta_set(Interval(-3*pi/2, pi/2)) [0, 2*pi) >>> normalize_theta_set(Interval(-pi/2, pi/2)) [0, pi/2] U [3*pi/2, 2*pi) >>> normalize_theta_set(Interval(-4*pi, 3*pi)) [0, 2*pi) >>> normalize_theta_set(Interval(-3*pi/2, -pi/2)) [pi/2, 3*pi/2] >>> normalize_theta_set(FiniteSet(0, pi, 3*pi)) {0, pi}