Make Expression.subs() always return a LinExpr instance
[linpy.git] / 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:
         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:
         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)
         symbols = cls._xsymbols(sc_equalities + sc_inequalities)
         islbset = cls._toislbasicset(sc_equalities, sc_inequalities, symbols)
         return cls._fromislbasicset(islbset, symbols)