I must admit that I do not understand the philosophy. But apart from that: for classes inheriting from ClonableArray, which have to implement equality (because there is no coercion to a common parent), do they have to implement _richcmp_ or __richcmp__ or _eq_ or __eq__? (The amount of magic in python / sagemath is extremely confusing to me.)
On Tuesday, 13 December 2022 at 01:09:52 UTC+1 Travis Scrimshaw wrote: > +1 on what Nils said; I only find it slightly surprising initially. > Compare this with comparing a list to a Partition as well. Equality is a > bit different as a programming concept than a mathematical one. When you > implement a custom __eq__, then you are separating that class from the > coercion-based equality. > > +1 on removing the parent from the hash of ClonableArray and its family > tree. > > Best, > Travis > > On Tuesday, December 13, 2022 at 1:56:46 AM UTC+9 Nils Bruin wrote: > >> On Monday, 12 December 2022 at 00:22:30 UTC-8 axio...@yahoo.de wrote: >> >>> Ah, thank you so much! >>> >>> Just to make sure that I understand the philosophy: if two elements are >>> supposed to compare equal, they should have parents which can be coerced to >>> a common parent, right? For example, the following (which is current >>> behaviour) is not really what we want: >>> >>> sage: A = SetPartitions(3)([[1,2],[3]]) >>> sage: B = SetPartition([[1,2],[3]]) >>> sage: A == B >>> True >>> sage: coercion_model.common_parent(A, B) >>> >> TypeError: no common canonical parent for objects with parents: 'Set >>> partitions of {1, 2, 3}' and 'Set partitions' >>> >> >>> I think that is a bit surprising, but if SetPartitions don't really >> occur much in binary operations I think it will be a hardly visible quirk. >> One has to be careful generalizing principles about how to implement >> coercion/equality/hashing because we a;ready know that some of the things >> we want lead to inconsistencies. >> >> When in doubt, the safe thing is definitely to NOT install coercions (it >> can always be done later), so I'd hesitate to recommend to change the >> behaviour above. I think you'd want at least a practical use case to >> justify it. >> >> Note that the relevant conversions: A.parent()(B) and B.parent()(A) do >> work. >> >> It seems to me the converse implication, if for two elements the coercion >> framework is happy to find a common parent in which they compare equal, >> then they should be equal in the first place, sounds a little more >> probable, but I suspect one can get problematic situations from that too. >> > -- 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/7a14cd93-e026-4a8d-9c46-cfd35948dcbfn%40googlegroups.com.