Как мне сделать интервальную арифметику в Sympy 1.3?(в частности, сложение и умножение)
Например, задано:
q1 = Interval(0,255)
q2 = Interval(0,255)
Сложение этих двух интервалов должно составлять Interval(0, 510)
.(Оператор «плюс» перегружен, что означает «объединение», поэтому q1 + q2 дает интервал (0,255).)
Если я попытаюсь Add(q1, q2)
, я получу исключение:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/sympy/core/cache.py", line 93, in wrapper
retval = cfunc(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/compatibility.py", line 850, in wrapper
result = user_function(*args, **kwds)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/operations.py", line 45, in __new__
c_part, nc_part, order_symbols = cls.flatten(args)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/add.py", line 223, in flatten
newseq.append(Mul(c, s))
File "/usr/local/lib/python2.7/dist-packages/sympy/core/cache.py", line 93, in wrapper
retval = cfunc(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/compatibility.py", line 850, in wrapper
result = user_function(*args, **kwds)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/operations.py", line 45, in __new__
c_part, nc_part, order_symbols = cls.flatten(args)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/mul.py", line 186, in flatten
r, b = b.as_coeff_Mul()
AttributeError: 'Interval' object has no attribute 'as_coeff_Mul'
(Я получаю аналогичное исключение для Mul
).
Тем не менее, код для добавления двух интервалов, кажется, находится здесь: https://github.com/sympy/sympy/blob/sympy-1.3/sympy/sets/handlers/add.py#L22
Но механизм диспетчера, похоже, неловить случай Interval + Interval.
Как сделать сложение и умножение на интервалах в sympy?