LinExpr() accepts rational numbers
authorVivien Maisonneuve <v.maisonneuve@gmail.com>
Tue, 9 Sep 2014 08:59:10 +0000 (10:59 +0200)
committerVivien Maisonneuve <v.maisonneuve@gmail.com>
Tue, 9 Sep 2014 09:08:10 +0000 (11:08 +0200)
linpy/polyhedra.py

index 1ccbe9c..ead9b83 100644 (file)
@@ -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)