Hi, I think this question is almost certainly for Robert Bradshaw, but I'd be 
happy to get an answer anywhere!  :)

I'm rewriting some of the polynomial __hash__ functions to respect the == 
operator with (some of) the inclusions amongst polynomial rings and 
mpolynomial rings.  To this end, I want to implement __hash__ in the 
class "Polynomial" (polynomial_element.pyx) and "MPolynomial" 
(multi_polynomial.pyx) and have the rest of the polynomials inherit this 
implementation.  However, I'm getting an error message "unhashable type" on 
some of the derived classes.  It seems like a build error, but I've touched 
all the *.pyx files in the sage/rings/*/* directories and rebuilt and the 
error persists.

Strangely (very strangely, indeed, to me), some of the subclasses cooperate 
just fine, but some of them do not:  The following give the error message 
unhashable type when I call hash(x) where x is of the type listed:
MPolynomial_libsingular
Polynomial_generic_dense
But, the following types work perfectly fine:
MPolynomial_polydict
Polynomial_integer_dense_ntl
Note that 'Polynomial_integer_dense_ntl' is cython so a totally cython-ed 
inheritance works at least one place.

Questions:  Should inheriting __hash__ implementations in a cython class work?  
Would C++/C differences matter (there's a smattering of both in these 
classes)?  A patch against 2.8.12 is at 
http://kiwistrawberry.us/research/hash-patch-2_8_12.patch
if you want to see actual code.

As for the implementation, I'll note that one of my concerns is that I was 
going to have to write really nasty low level code to make this fast, but it 
turns out that my implementation is already faster than the current 2.8.12 
and the code is quite decent (i.e. more pythonic than c-like).  Actual speed 
comparisons vary greatly amongst classes, but it's clear that there's more 
optimizations to do around the corners in the poly classes (in particular 
some of the __getitem__ implementations are pretty slow).

--
Joel

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to