X-Git-Url: https://svn.cri.ensmp.fr/git/linpy.git/blobdiff_plain/37b02d24c845fa3c75c48a99e5e658d772b72289..62d93103f4c154e9c673172af6034ea9a3bf6dac:/pypol/linear.py diff --git a/pypol/linear.py b/pypol/linear.py index bd7037b..845fac3 100644 --- a/pypol/linear.py +++ b/pypol/linear.py @@ -62,7 +62,7 @@ class Expression: for symbol, coefficient in coefficients if coefficient != 0] if len(coefficients) == 0: return Constant(constant) - elif len(coefficients) == 1: + elif len(coefficients) == 1 and constant == 0: symbol, coefficient = coefficients[0] if coefficient == 1: return Symbol(symbol) @@ -135,7 +135,7 @@ class Expression: return False def __bool__(self): - True + return True def __pos__(self): return self @@ -271,7 +271,7 @@ class Expression: self.constant == other.constant def __hash__(self): - return hash((self._coefficients, self._constant)) + return hash((tuple(sorted(self._coefficients.items())), self._constant)) def _toint(self): lcm = functools.reduce(lambda a, b: a*b // gcd(a, b), @@ -355,7 +355,7 @@ class Symbol(Expression): def symbols(names): if isinstance(names, str): names = names.replace(',', ' ').split() - return (symbol(name) for name in names) + return (Symbol(name) for name in names) @_polymorphic_operator