12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- from sympy.core.numbers import oo, Infinity, NegativeInfinity
- from sympy.core.singleton import S
- from sympy.core import Basic, Expr
- from sympy.multipledispatch import Dispatcher
- from sympy.sets import Interval, FiniteSet
- # XXX: The functions in this module are clearly not tested and are broken in a
- # number of ways.
- _set_add = Dispatcher('_set_add')
- _set_sub = Dispatcher('_set_sub')
- @_set_add.register(Basic, Basic)
- def _(x, y):
- return None
- @_set_add.register(Expr, Expr)
- def _(x, y):
- return x+y
- @_set_add.register(Interval, Interval)
- def _(x, y):
- """
- Additions in interval arithmetic
- https://en.wikipedia.org/wiki/Interval_arithmetic
- """
- return Interval(x.start + y.start, x.end + y.end,
- x.left_open or y.left_open, x.right_open or y.right_open)
- @_set_add.register(Interval, Infinity)
- def _(x, y):
- if x.start is S.NegativeInfinity:
- return Interval(-oo, oo)
- return FiniteSet({S.Infinity})
- @_set_add.register(Interval, NegativeInfinity)
- def _(x, y):
- if x.end is S.Infinity:
- return Interval(-oo, oo)
- return FiniteSet({S.NegativeInfinity})
- @_set_sub.register(Basic, Basic)
- def _(x, y):
- return None
- @_set_sub.register(Expr, Expr)
- def _(x, y):
- return x-y
- @_set_sub.register(Interval, Interval)
- def _(x, y):
- """
- Subtractions in interval arithmetic
- https://en.wikipedia.org/wiki/Interval_arithmetic
- """
- return Interval(x.start - y.end, x.end - y.start,
- x.left_open or y.right_open, x.right_open or y.left_open)
- @_set_sub.register(Interval, Infinity)
- def _(x, y):
- if x.start is S.NegativeInfinity:
- return Interval(-oo, oo)
- return FiniteSet(-oo)
- @_set_sub.register(Interval, NegativeInfinity)
- def _(x, y):
- if x.start is S.NegativeInfinity:
- return Interval(-oo, oo)
- return FiniteSet(-oo)
|