Dear Enrique,
   No, that would just duplicate functionality and make things more 
complicated.

To Cython and/or Python experts,
   It would be great if someone could give some comments about this. This 
feels like a very natural thing to do, but it might lead to a very subtle 
breakage in the wild. If there is anything additional I can provide, please 
just ask.

Thank you,
Travis

On Monday, March 18, 2024 at 1:15:18 AM UTC+9 enriqu...@gmail.com wrote:

> 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/0966e7ed-6875-4e4a-89bc-eb043f3d9efbn%40googlegroups.com.

Reply via email to