Is there any sense to define a new class of UniqueRepresentation with the same characteristics and other name with the switch of order?
El miércoles, 13 de marzo de 2024 a las 16:58:49 UTC+1, Travis Scrimshaw escribió: > Hi everyone, > On https://github.com/sagemath/sage/pull/37128, we find it useful to > swap the order of the base classes for UniqueRepresentation. Thus, it > becomes > > class UniqueRepresentation(WithEqualityById, CachedRepresentation): > > I believe this is very reasonable since we want to have objects' > (typically parents, but not limited to them) comparison and hashing be > first in the MRO. In particular, this is important if we have the following > setup: > > class Foo(CachedRepresentation): > pass > > class Bar(UniqueRepresentation, Foo): > pass > > That way Bar gets the main benefits of being a UR (fast equality and > hashing). With the current way, there is no way (that I know) to simply > have the corresponding methods at the Cython level (at best, there is a > Python redirect that has to be manually implemented) since WithEqualityById > is a Cython cdef class. > > However, we then have a problem with unpickling, but I suspect it is a > bigger issue. From combinat/root_system/cartan_type.py, the last line fails > with an incompatible class order: > > sage: pg_CartanType_simple_finite = > unpickle_global('sage.combinat.root_system.cartan_type', > 'CartanType_simple_finite') > sage: si1 = unpickle_newobj(pg_CartanType_simple_finite, ()) > sage: from sage.misc.fpickle import unpickleModule > sage: pg_make_integer = unpickle_global('sage.rings.integer', > 'make_integer') > sage: si2 = pg_make_integer('4') > sage: unpickle_build(si1, > {'tools':unpickleModule('sage.combinat.root_system.type_A'), 't':['A', > si2], 'letter':'A', 'n':si2}) > > Mainly, the last line does a self.__class__ = UR.__class__, where UR is an > instance of a UniqueRepresentation. Granted, this is a very old pickle, but > I am worried it isn't a problem with this specific pickle. > > This is beyond my knowledge of Cython. Any thoughts or advice about this > issue would be appreciated. > > Thank you, > Travis > > -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/00d93dad-e13c-4eae-9c50-5b131f8cfdean%40googlegroups.com.