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.

Reply via email to