From: Vivien Maisonneuve 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.ensmp.fr/git/linpy.git/commitdiff_plain/7fda4e3865bb7cc9b6ee15cfd3c62c207f585ec7?hp=4af78812d25b28cee283e671c0bd5944133b6ce5 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