From: Vivien Maisonneuve <v.maisonneuve@gmail.com>
Date: Wed, 28 May 2014 16:30:20 +0000 (+0200)
Subject: Better implementation of _polymorphic_operator
X-Git-Tag: 1.0~265
X-Git-Url: https://svn.cri.mines-paristech.fr/git/linpy.git/commitdiff_plain/5516488d4ee3d277632ebbab6c93d45c3802c62e

Better implementation of _polymorphic_operator
---

diff --git a/pypol/linear.py b/pypol/linear.py
index fabf2a2..a5f55fa 100644
--- a/pypol/linear.py
+++ b/pypol/linear.py
@@ -26,13 +26,14 @@ def _polymorphic_method(func):
     return wrapper
 
 def _polymorphic_operator(func):
+    # A polymorphic operator should call a polymorphic method, hence we just
+    # have to test the left operand.
     @functools.wraps(func)
     def wrapper(a, b):
         if isinstance(a, numbers.Rational):
             a = constant(a)
-        if isinstance(b, numbers.Rational):
-            b = constant(b)
-        if isinstance(a, Expression) and isinstance(b, Expression):
+            return func(a, b)
+        elif isinstance(a, Expression):
             return func(a, b)
         raise TypeError('arguments must be linear expressions')
     return wrapper