From: Vivien Maisonneuve <v.maisonneuve@gmail.com>
Date: Tue, 19 Aug 2014 09:47:12 +0000 (+0200)
Subject: Fix LinExpr.subs() implementation
X-Git-Tag: 1.0~54
X-Git-Url: https://scm.cri.minesparis.psl.eu/git/linpy.git/commitdiff_plain/7fda4e3865bb7cc9b6ee15cfd3c62c207f585ec7?ds=sidebyside

Fix LinExpr.subs() implementation
---

diff --git a/linpy/linexprs.py b/linpy/linexprs.py
index a49f90e..b5864e1 100644
--- a/linpy/linexprs.py
+++ b/linpy/linexprs.py
@@ -294,21 +294,16 @@ class LinExpr:
         2*x + y + 1
         """
         if expression is None:
-            if isinstance(symbol, Mapping):
-                symbol = symbol.items()
-            substitutions = symbol
+            substitutions = dict(symbol)
         else:
-            substitutions = [(symbol, expression)]
-        result = self
-        for symbol, expression in substitutions:
+            substitutions = {symbol: expression}
+        for symbol in substitutions:
             if not isinstance(symbol, Symbol):
                 raise TypeError('symbols must be Symbol instances')
-            coefficients = [(othersymbol, coefficient)
-                for othersymbol, coefficient in result._coefficients.items()
-                if othersymbol != symbol]
-            coefficient = result._coefficients.get(symbol, 0)
-            constant = result._constant
-            result = LinExpr(coefficients, constant) + coefficient*expression
+        result = self._constant
+        for symbol, coefficient in self._coefficients.items():
+            expression = substitutions.get(symbol, symbol)
+            result += coefficient * expression
         return result
 
     @classmethod