Skip to content Skip to sidebar Skip to footer

Boolean Operation With Symbol In Sympy

Boolean operation of a Boolean variable on a symbol produces TypeError, but the reverse has no problem: >>> from sympy import * >>> x = Symbol('x', bool=True) >

Solution 1:

This is a bug, and it has been fixed in the development version of SymPy, and will be fixed in the next version. If you can't use the git version and can't wait, a workaround would be to monkeypatch __rxor__ (and so on) in sympy.logic.boolalg.Boolean to be equal to sympy.logic.boolalg.Boolean.__xor__.

In [1]: from sympy.logic.boolalg import Boolean

In [2]: Boolean.__rxor__ = Boolean.__xor__

In [3]: True ^ x
Out[3]: ¬ x

By the way, Symbol('x', bool=True) does nothing. It adds the assumption x.is_bool to the Symbol, but since that isn't a real assumption that SymPy knows about, it doesn't do anything.


Solution 2:

This is ugly, but it should do what you want:

expressions = [
  r'S[15] ^ (S[19] & S[72]) ^ S[112]',
]

for e in expressions:
  try:
    eval(e) # Do your thing
  except TypeError:
    pass

Post a Comment for "Boolean Operation With Symbol In Sympy"