Traktor/myenv/Lib/site-packages/sympy/sets/handlers/add.py
2024-05-26 05:12:46 +02:00

80 lines
1.8 KiB
Python

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)