On Friday, October 24, 2014 9:45:46 AM UTC-7, Nils Bruin wrote: > There may be a good reason why Sage chooses to call __radd__ manually > rather than let python do the work by returning NotImplemented, but if > there's not perhaps it would be better to stay closer to python's standard? >
The relevant code is in sage/structure/coerce.pyx: if not isinstance(y, Element): op_name = op.__name__ if op_name[0] == 'i': op_name = op_name[1:] mul_method = getattr3(y, '__r%s__'%op_name, None) if mul_method is not None: res = mul_method(x) if res is not None and res is not NotImplemented: return res # We should really include the underlying error. # This causes so much headache. raise TypeError, arith_error_message(x,y,op) Some superficial experimentation suggests that perhaps just if not isinstance(y, Element): return NotImplemented might do. I'm not sure in what edge cases this interferes with the special processing of "op_name[0] == 'i':" though. History is here: http://trac.sagemath.org/ticket/3774 and http://trac.sagemath.org/ticket/5596 . No comments on why we're not just returning NotImplemented to be consistent with python's protocol. Robert? -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.