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.