We need to get away from the __cmp__ to make the transition easier. Plus I 
would think most parents are not totally ordered.

Best,
Travis


On Sunday, October 26, 2014 3:08:15 AM UTC-7, Volker Braun wrote:
>
> Right now: only implement __cmp__ following what is written in 
> sage/structure/element.pyx, and not __eq__ and friends. You can play some 
> tricks with the __richcmp__ hook but its probably best to stick to a single 
> kind of comparison if you want your stuff to transition easily to python3.
>
>
> On Sunday, October 26, 2014 9:57:49 AM UTC, Eric Gourgoulhon wrote:
>>
>> 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