# 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; see FiniteSet for that.

Real intervals are represented by the Interval class and unions of sets by the Union class. The empty set is represented by the EmptySet class and available as a singleton as S.EmptySet.

Attributes

 is_Complement is_EmptySet is_Intersection is_UniversalSet
boundary[source]

The boundary or frontier of a set

A point x is on the boundary of a set S if

1. x is in the closure of S. I.e. Every neighborhood of x contains a point in S.
2. 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[source]

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

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[source]

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

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[source]

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]

Image of set under transformation f.

If this function can’t compute the image, it returns an unevaluated ImageSet object.

${ f(x) | x \in self }$

Examples

>>> from sympy import Interval, Symbol, imageset, sin, Lambda
>>> x = Symbol('x')

>>> 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])


## 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

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
classmethod Lopen(a, b)[source]

Return an interval not including the left boundary.

classmethod Ropen(a, b)[source]

Return an interval not including the right boundary.

as_relational(x)[source]

Rewrite an interval in terms of inequalities and logic operators.

end[source]

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[source]

Return True if the left endpoint is negative infinity.

is_right_unbounded[source]

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[source]

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

classmethod open(a, b)[source]

Return an interval including neither boundary.

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[source]

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[source]

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

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
as_relational(symbol)[source]

Rewrite a FiniteSet in terms of equalities and logic operators.

## Union¶

class sympy.sets.sets.Union[source]

Represents a union of sets as a Set.

Intersection

References

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
as_relational(symbol)[source]

Rewrite a Union in terms of equalities and logic operators.

static reduce(args)[source]

Simplify a Union using known rules

Then we iterate through all pairs and ask the constituent sets if they can simplify themselves with any other constituent

## Intersection¶

class sympy.sets.sets.Intersection[source]

Represents an intersection of sets as a Set.

Union

References

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
as_relational(symbol)[source]

Rewrite an Intersection in terms of equalities and logic operators

static reduce(args)[source]

Simplify an intersection using known rules

We first start with global rules like ‘if any empty sets return empty set’ and ‘distribute any unions’

Then we iterate through all pairs and ask the constituent sets if they can simplify themselves with any other constituent

## 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

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\}$$

References

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.

## EmptySet¶

class sympy.sets.sets.EmptySet[source]

Represents the empty set. The empty set is available as a singleton as S.EmptySet.

UniversalSet

References

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

EmptySet

References

Examples

>>> from sympy import S, Interval
>>> S.UniversalSet
UniversalSet()

>>> Interval(1, 2).intersect(S.UniversalSet)
[1, 2]


Attributes

 is_Complement is_EmptySet is_Intersection

## 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.

Naturals0
non-negative integers (i.e. includes 0, too)
Integers
also includes negative integers

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¶

class sympy.sets.fancysets.Naturals0[source]

Represents the whole numbers which are all the non-negative integers, inclusive of zero.

Naturals
positive integers; does not include 0
Integers
also includes the negative integers

Attributes

 is_Complement is_EmptySet is_Intersection is_UniversalSet

## Integers¶

class sympy.sets.fancysets.Integers[source]

Represents all integers: positive, negative and zero. This set is also available as the Singleton, S.Integers.

Naturals0
non-negative integers
Integers
positive and negative integers and zero

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

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.

Examples

>>> from sympy import Range
>>> list(Range(5)) # 0 to 5
[0, 1, 2, 3, 4]
>>> list(Range(10, 15)) # 10 to 15
[10, 11, 12, 13, 14]
>>> list(Range(10, 20, 2)) # 10 to 20 in steps of 2
[10, 12, 14, 16, 18]
>>> list(Range(20, 10, -2)) # 20 to 10 backward in steps of 2
[12, 14, 16, 18, 20]


Attributes

 is_Complement is_EmptySet is_Intersection is_UniversalSet

## 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)]}

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[source]

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[source]

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[source]

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[source]

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[source]

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}