X-Git-Url: https://scm.cri.mines-paristech.fr/git/linpy.git/blobdiff_plain/4162c0430092e0ba2b8d8d62b5de24cdd71abe3b..23922aa39e585f1e6b11f3479da002c92bebf2a1:/linpy/polyhedra.py?ds=sidebyside diff --git a/linpy/polyhedra.py b/linpy/polyhedra.py index 1ccbe9c..820b014 100644 --- a/linpy/polyhedra.py +++ b/linpy/polyhedra.py @@ -94,15 +94,23 @@ class Polyhedron(Domain): sc_equalities = [] if equalities is not None: for equality in equalities: - if not isinstance(equality, LinExpr): - raise TypeError('equalities must be linear expressions') - sc_equalities.append(equality.scaleint()) + if isinstance(equality, LinExpr): + sc_equalities.append(equality.scaleint()) + elif isinstance(equality, numbers.Rational): + sc_equalities.append(Rational(equality).scaleint()) + else: + raise TypeError('equalities must be linear expressions ' + 'or rational numbers') sc_inequalities = [] if inequalities is not None: for inequality in inequalities: - if not isinstance(inequality, LinExpr): - raise TypeError('inequalities must be linear expressions') - sc_inequalities.append(inequality.scaleint()) + if isinstance(inequality, LinExpr): + sc_inequalities.append(inequality.scaleint()) + elif isinstance(inequality, numbers.Rational): + sc_inequalities.append(Rational(inequality).scaleint()) + else: + raise TypeError('inequalities must be linear expressions ' + 'or rational numbers') symbols = cls._xsymbols(sc_equalities + sc_inequalities) islbset = cls._toislbasicset(sc_equalities, sc_inequalities, symbols) return cls._fromislbasicset(islbset, symbols) @@ -214,6 +222,10 @@ class Polyhedron(Domain): @classmethod def _fromislbasicset(cls, islbset, symbols): + if bool(libisl.isl_basic_set_is_empty(islbset)): + return Empty + if bool(libisl.isl_basic_set_is_universe(islbset)): + return Universe islconstraints = islhelper.isl_basic_set_constraints(islbset) equalities = [] inequalities = []