From: Vivien Maisonneuve 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://scm.cri.ensmp.fr/git/linpy.git/commitdiff_plain/5516488d4ee3d277632ebbab6c93d45c3802c62e?ds=inline;hp=98d00e8b628b571e133bcfa494c0e8f0ab781234 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