from . import islhelper
from .islhelper import mainctx, libisl
-from .linexprs import Expression, Constant
+from .linexprs import Expression, Rational
from .domains import Domain
else:
return 'And({})'.format(', '.join(strings))
- @classmethod
- def _fromsympy(cls, expr):
- import sympy
- equalities = []
- inequalities = []
- if expr.func == sympy.And:
- for arg in expr.args:
- arg_eqs, arg_ins = cls._fromsympy(arg)
- equalities.extend(arg_eqs)
- inequalities.extend(arg_ins)
- elif expr.func == sympy.Eq:
- expr = Expression.fromsympy(expr.args[0] - expr.args[1])
- equalities.append(expr)
- else:
- if expr.func == sympy.Lt:
- expr = Expression.fromsympy(expr.args[1] - expr.args[0] - 1)
- elif expr.func == sympy.Le:
- expr = Expression.fromsympy(expr.args[1] - expr.args[0])
- elif expr.func == sympy.Ge:
- expr = Expression.fromsympy(expr.args[0] - expr.args[1])
- elif expr.func == sympy.Gt:
- expr = Expression.fromsympy(expr.args[0] - expr.args[1] - 1)
- else:
- raise ValueError('non-polyhedral expression: {!r}'.format(expr))
- inequalities.append(expr)
- return equalities, inequalities
-
@classmethod
def fromsympy(cls, expr):
- import sympy
- equalities, inequalities = cls._fromsympy(expr)
- return cls(equalities, inequalities)
+ domain = Domain.fromsympy(expr)
+ if not isinstance(domain, Polyhedron):
+ raise ValueError('non-polyhedral expression: {!r}'.format(expr))
+ return domain
def tosympy(self):
import sympy
@functools.wraps(func)
def wrapper(left, right):
if isinstance(left, numbers.Rational):
- left = Constant(left)
+ left = Rational(left)
elif not isinstance(left, Expression):
raise TypeError('left must be a a rational number '
'or a linear expression')
if isinstance(right, numbers.Rational):
- right = Constant(right)
+ right = Rational(right)
elif not isinstance(right, Expression):
raise TypeError('right must be a a rational number '
'or a linear expression')