使用 Python 包
sympy
(1.12 版)我有几个 FiniteSet
和一个我想简化/优化的表达式。
举个例子说千言万语:
from sympy import Symbol, FiniteSet, simplify_logic, Contains
a = Symbol("a")
x = FiniteSet("1", "2")
y = FiniteSet("2", "3")
z = FiniteSet("3", "4")
>>> simplify_logic(Contains(a, x) & Contains(a, z))
Returned: Contains(a, {1, 2}) & Contains(a, {3, 4})
Expected: False
>>> simplify_logic(Contains(a, x) & Contains(a, y))
Returned: Contains(a, {1, 2}) & Contains(a, {2, 3})
Expected: Contains(a, {2})
>>> simplify_logic(Contains(a, x) | Contains(a, y))
Returned: Contains(a, {1, 2}) & Contains(a, {2, 3})
Expected: Contains(a, {1, 2, 3})
>>> simplify_logic(Contains(a, x) | Contains(a, z))
Returned: Contains(a, {1, 2}) | Contains(a, {3, 4})
Expected: Contains(a, {1, 2, 3, 4})
为清楚起见,在附加符号
b = Symbol("b")
的情况下,预计会出现以下情况:
>>> simplify_logic(Contains(a, x) & Contains(b, x))
Returned/Expected: Contains(a, {1, 2}) & Contains(b, {1, 2})
>>> simplify_logic(Contains(a, x) | Contains(b, x))
Returned/Expected: Contains(a, {1, 2}) | Contains(b, {1, 2})
似乎
sympy
没有处理这样的简化(还)。
对于我的特定用例,上面给出的示例/简化已经涵盖了我的用例,因为我的应用程序仅使用FiniteSet
s.
问题: 是否已经有办法让
sympy
直接开箱即用地进行如上所示的简化?如果没有,是否有可能(以及如何)例如扩展 FiniteSet
类以涵盖此类情况?注意:要玩,需要使用当前的主人作为最近的错误防止
Contains
被简化已被修复(谢谢!)