#10130: Revamp __hash__, __cmp__ and __richcmp__
-------------------------------+------------------------
       Reporter:  roed         |        Owner:  robertwb
           Type:  enhancement  |       Status:  new
       Priority:  major        |    Milestone:  sage-6.4
      Component:  coercion     |   Resolution:
       Keywords:               |    Merged in:
        Authors:               |    Reviewers:
Report Upstream:  N/A          |  Work issues:
         Branch:               |       Commit:
   Dependencies:               |     Stopgaps:
-------------------------------+------------------------
Description changed by jdemeyer:

Old description:

> There are a number of confusing and non-optimal features of the way Sage
> currently handles hashing and comparison.
>
>  * Because of Python, if you're writing a Cython class and you override
> one of these functions, you must redefine the others as well.  This is
> easy to forget and confuses new users.
>  * The comparison infrastructure in sage.structure.element predates
> cpdef, and could be made far less confusing with cpdef.
>  * hashes of parents are used extensively in the coercion framework, so
> speed is quite important.  But since parents are usually written in
> Python, the current model will always have at least a dictionary lookup
> (for example, in finding a cached `self.__hash`).  And often parents
> don't override the default hashing code and they fall back to slow
> `__repr__` methods.

New description:

 There are a number of confusing and non-optimal features of the way Sage
 currently handles hashing and comparison.

  * Because of Python, if you override one of these functions, you must
 redefine the others as well.  This is easy to forget and confuses new
 users.
  * The comparison infrastructure in sage.structure.element predates cpdef,
 and could be made far less confusing with cpdef => see #17890.
  * hashes of parents are used extensively in the coercion framework, so
 speed is quite important.  But since parents are usually written in
 Python, the current model will always have at least a dictionary lookup
 (for example, in finding a cached `self.__hash`).  And often parents don't
 override the default hashing code and they fall back to slow `__repr__`
 methods.

--

--
Ticket URL: <http://trac.sagemath.org/ticket/10130#comment:12>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to