Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sagemathgh-38203: Change inheritance order in UniqueRepresentation
<!-- ^ Don't put issue numbers in the title, do this in the PR description below. --> <!-- ^ For example, instead of "Fixes sagemath#12345" use "Introduce new method to calculate 1 + 2". --> <!-- v Describe your changes below in detail. --> <!-- v Why is this change required? What problem does it solve? --> <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> Currently in `UniqueRepresentation`, the MRO is constructed by ```class UniqueRepresentation(CachedRepresentation, WithEqualityById):``` However, in order to maximize the utility of the `WithEqualityById` class, in particular with subclasses of `UniqueRepresentation`, we should place it *first* in the MRO. This is useful in sagemath#37128, where this resolves MRO resolution issues and not having to reimplement (or set aliases) the behavior of `WithEqualityById`. However, this change, while seemingly innocuous, does cause a problem with one doctest dealing with very old pickles (Sage version <= 4.0) in `combinat/root_system/cartan_type.py` concerning `class CartanType_simple_finite:`. Currently, it is unclear why this change is resulting in the error: ``` 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}) Traceback (most recent call last): File "/sage/src/sage/doctest/forker.py", line 715, in _run self.compile_and_execute(example, compiler, test.globs) File "/sage/src/sage/doctest/forker.py", line 1147, in compile_and_execute exec(compiled, globs) File "<doctest sage.combinat.root_system.cartan_type.CartanType_simple _finite.__setstate__[5]>", line 1, in <module> unpickle_build(si1, {'tools':unpickleModule('sage.combinat.root_system.type_A'), 't':['A', si2], 'letter':'A', 'n':si2}) File "/sage/src/sage/misc/explain_pickle.py", line 2442, in unpickle_build setstate(state) File "/sage/src/sage/combinat/root_system/cartan_type.py", line 3106, in __setstate__ self.__class__ = T.__class__ TypeError: __class__ assignment: 'CartanType' object layout differs from 'CartanType_simple_finite' ``` However, since these are very old pickles and we cannot reproduce the failure otherwise, we feel that it is prudent to drop support for this and remove the corresponding class. ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [x] I have updated the documentation and checked the documentation preview. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on. For example, --> <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> URL: sagemath#38203 Reported by: Enrique Manuel Artal Bartolo Reviewer(s): Travis Scrimshaw
- Loading branch information