2016-07-25 11 views
0

Недавно я работаю с булевой сетью, и я использую sympy для управления булевыми функциями. Я думаю, что это может быть очень простой вопрос, но я не мог найти подсказки.В sympy, как функциональное выражение может быть переведено в перегруженное выражение оператора?

Следующая линия работает хорошо.

>>>from sympy import * 
>>>x,y = symbols("x y") 
>>>(x | y) & x 
And(Or(x, y), x) 

Здесь у меня очень простой вопрос. Как выражение 'And (Or (x, y), x)' может быть выражено как '(x | y) & x'?

Благодаря

ответ

0

SymPy широко использует Python оператора перегрузки возможностей. В Python каждый класс может определить, как любой математический оператор вступит в силу, определив методы со специальными именами - эти методы всегда имеют префикс и с пометкой __ и описаны в Python Data Model.

Символы и выражения Sympy - это объекты, которые переопределяют все связанные с оператором методы для выполнения операции, возвращающей объект выражения Sympy вместо числового результата.

Таким образом, операторы bynary и & dbinary или | только одна часть того, что делает SymPy, и длинные английские версии And и Or вызовы функций также предоставляются для удобства ввода и читаемость в определенных контекстах.

+0

Спасибо за добрый подробный ответ. Есть ли какая-либо простая функция для перевода строковой переменной «И (Or (x, y), x)» в строковую переменную '(x | y) & x'? Если решение не просто, то можете ли вы дать какой-то намек на это? –

0

Если вы хотите более хороший печать, вы можете запустить

init_printing() 

и он будет печатать его с помощью Unicode символов, или даже LaTeX, если он доступен (например, в записной книжке Jupyter)

In [1]: (x | y) & x 
Out[1]: x ∧ (x ∨ y) 

Вы также можете использовать функцию pprint(), чтобы получить это прямо.

Похоже, по умолчанию SymPy принтеры используют And и Or вместо из & и | символов для печати логических выражений, так что если вы явно хотите те, вам нужно будет создать подкласс sympy.printing.str.StrPrinter и переопределить _print_And и _print_Or (см current implementation в получить представление о том, как это будет работать).

+0

Я открыл проблему для изменения печати по умолчанию в SymPy https://github.com/sympy/sympy/issues/11435 – asmeurer

+0

Я нашел это хорошим решением для моей проблемы. Спасибо за хороший намек. –