Hi, When implementing some algebra element class, I faced the following issue: the class inherits from sage.structure.element.CommutativeAlgebraElement and I've implemented the __eq__() and __ne__() methods, but not __cmp__() because my algebra is not an ordered set. Everything works well (the test suite for commutative algebras is passed by the parent), but if I construct matrices from algebra elements f1,...,f4, via a = matrix([[f1,f2], [f3,f4]]) and compare them by a == b, the following error appears:
NotImplementedError: BUG: sort algorithm for elements of 'algebra of scalar fields on the 2-dimensional manifold 'M'' not implemented This is triggered by the lack of method __cmp__() in the algebra element class. Adding such method via def __cmp__(self, other): if self.__eq__(other): return 0 else: return -1 fixes the problem. Hence the question: shall __cmp__() be always implemented in element classes, even if the parent is not an ordered set ? If yes, what shall it return when the two elements differ ? -1 as above ? Shall __eq__() be implemented as well ? I've noticed that in line 919 of file src/sage/structure/element.pyx, it is written; # For a *Python* class just define __cmp__ as always. I've also noticed that in the example provided in the tutorial How to implement new algebraic structures in Sage <http://sagemath.org/doc/thematic_tutorials/coercion_and_categories.html>, only __cmp__() is implemented, not __eq__(). On the other side, __cmp__() has been withdrawn in Python 3 and only the rich comparison methods, like __eq__(), remain. Thanks for your advice on this. Eric. -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.