Hi Jean-Pierre,

I'm currently wrapping FLINT fq modules into new Sage classes for finite 
> fiels and got strange coercion errors when running non trivial code.
> Indeed, the polynomial ring constructors use a dictionary and so relies on 
> the hash of finite fields (the parents).
> By some chance, the hashes of two previous implementations of finite 
> fields using PARI where different because some variable name was replaced 
> by something else in some object and this prevented this problem to occur.
>
> I read 
> http://www.sagemath.org/doc/developer/coding_in_python.html#the-hash-special-method
>  
> but would welcome any advice.
>
> Though (non-prime) finite fields with the same order and defining 
> polynomial are considered equal, I'd say the hashes should be different.
> So, let's add the string of the implementation of the finite field into 
> it's hash (which is cached by the way).
> Does that seem sensible?
>
> Or should I modify the finite field code so that these hashes are equal 
> whatever the implementation is?
> Then we'd need coercion between all of the implementations (which is not 
> currently the case but should be done anyway), but that would surely yield 
> a non-negligible speed penalty, and you'll never know what the 
> implementation of the base ring of the polynomial ring will be as it will 
> depend on the order finite fields and their polynomial rings are created.
>
> Or should we modify the caching system of the polynomial rings not to use 
> hashes but ids?
>

I'm not sure I understand correctly; do you mean that the problem is caused 
by fields comparing equal even if the implementations are different?  I 
think we should in any case make FiniteField inherit from WithEqualityById, 
so two instances compare equal if and only if they are identical.  Would 
this be enough?

Peter

-- 
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