X-Git-Url: https://scm.cri.mines-paristech.fr/git/linpy.git/blobdiff_plain/98d00e8b628b571e133bcfa494c0e8f0ab781234..5516488d4ee3d277632ebbab6c93d45c3802c62e:/pypol/linear.py?ds=sidebyside 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