Skip to content

Commit

Permalink
sagemathgh-38203: Change inheritance order in UniqueRepresentation
Browse files Browse the repository at this point in the history
    
<!-- ^ 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
Release Manager committed Jul 30, 2024
2 parents 7619ec5 + 9adc348 commit a5182de
Showing 0 changed files with 0 additions and 0 deletions.

0 comments on commit a5182de

Please sign in to comment.