X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/blobdiff_plain/2b13a146860ac116ce0388d8f7551044c09c55f7..1044e58e639333d281d47739ba9ecef607ff14e6:/linpy/linexprs.py diff --git a/linpy/linexprs.py b/linpy/linexprs.py index ee6e39e..f361218 100644 --- a/linpy/linexprs.py +++ b/linpy/linexprs.py @@ -306,7 +306,7 @@ class LinExpr: for symbol in substitutions: if not isinstance(symbol, Symbol): raise TypeError('symbols must be Symbol instances') - result = self._constant + result = Rational(self._constant) for symbol, coefficient in self._coefficients.items(): expression = substitutions.get(symbol, symbol) result += coefficient * expression @@ -348,10 +348,10 @@ class LinExpr: # Add implicit multiplication operators, e.g. '5x' -> '5*x'. string = LinExpr._RE_NUM_VAR.sub(r'\1*\2', string) tree = ast.parse(string, 'eval') - expr = cls._fromast(tree) - if not isinstance(expr, cls): + expression = cls._fromast(tree) + if not isinstance(expression, cls): raise SyntaxError('invalid syntax') - return expr + return expression def __repr__(self): string = '' @@ -385,7 +385,7 @@ class LinExpr: return '({})'.format(string) @classmethod - def fromsympy(cls, expr): + def fromsympy(cls, expression): """ Create a linear expression from a SymPy expression. Raise TypeError is the sympy expression is not linear. @@ -393,7 +393,7 @@ class LinExpr: import sympy coefficients = [] constant = 0 - for symbol, coefficient in expr.as_coefficients_dict().items(): + for symbol, coefficient in expression.as_coefficients_dict().items(): coefficient = Fraction(coefficient.p, coefficient.q) if symbol == sympy.S.One: constant = coefficient @@ -405,23 +405,23 @@ class LinExpr: symbol = Symbol(symbol.name) coefficients.append((symbol, coefficient)) else: - raise TypeError('non-linear expression: {!r}'.format(expr)) - expr = LinExpr(coefficients, constant) - if not isinstance(expr, cls): + raise TypeError('non-linear expression: {!r}'.format(expression)) + expression = LinExpr(coefficients, constant) + if not isinstance(expression, cls): raise TypeError('cannot convert to a {} instance'.format(cls.__name__)) - return expr + return expression def tosympy(self): """ Convert the linear expression to a SymPy expression. """ import sympy - expr = 0 + expression = 0 for symbol, coefficient in self.coefficients(): term = coefficient * sympy.Symbol(symbol.name) - expr += term - expr += self.constant - return expr + expression += term + expression += self.constant + return expression class Symbol(LinExpr):