Мне интересна библиотека Python, которая разрешает символьные манипуляции, где символы и могут быть неизвестными произвольного типа.
Это код, который я хочу написать:
>>> myexpression = symbol("foo") == "bar"
>>> print myexpression
foo == "bar"
>>> print myexpression(foo="quux")
False
>>> myexpression.or_(True)
True
Или какое-то грубое приближение к этому.На самом деле даже не нужно быть таким умным, я был бы достаточно счастлив, вызвав множество дополнительных методов самоанализа, чтобы получить что-то подобное выше (например, даже если логическая тавтология напрямую не упрощена)
Моим первым инстинктом было посмотреть на sympy , но, похоже, библиотека делает сильное предположение, что символические переменные должны быть числами;и я хотел бы по крайней мере оперировать последовательностями и наборами:
>>> myexpression = sympy.Eq(sympy.Symbol("foo"), 5)
>>> myexpression
foo == 5
>>> myexpression = sympy.Eq(sympy.Symbol("foo"), "bar")
Traceback (most recent call last):
...
sympy.core.sympify.SympifyError: SympifyError: 'bar'
Есть ли способ научиться понимать нечисловые переменные или использовать другую библиотеку, которая может делать подобные вещи?