gh-36122: Added hash function to elements of the fundamental group of an extended affine Weyl group
This change allows users to compute the python `hash` function for
elements of the (Borovoi) fundamental group of an extended affine Weyl
group, and subsequently for elements of the extended Weyl group itself
if using the `FW` realization. This, in turn, allows to use these
mathematical objects as keys in dictionaries.
<!-- ^^^^^
Please provide a concise, informative and self-explanatory title.
Don't put issue numbers in there, do this in the PR body below.
For example, instead of "Fixes #1234" use "Introduce new method to
calculate 1+1"
-->
<!-- Describe your changes here in detail -->
Fixes #36121 . It adds a `__hash__` function to the class
`FundamentalGroupElement` associated with
`FundamentalGroupOfExtendedAffineWeylGroup`.
SAGE already associates to each element of the fundamental group an
integer, accessible as its `value()` or `_value`. This integer is
unique among other elements of the same fundamental group and thus
suitable as a hash for hashmap applications (e.g. Python dictionaries).
We return the `hash` of that integer, which is the integer itself for
current python implementations.
```
W = ExtendedAffineWeylGroup('A4')
fun = W.fundamental_group().an_element()
w = W.FW().an_element()
hash(fun), {w: 0}
```
yields the following result:
```
(4, {pi[4] * S0*S1*S2*S3*S4: 0})
```
<!-- Why is this change required? What problem does it solve? -->
<!-- If this PR resolves an open issue, please link to it here. For
example "Fixes #12345". -->
<!-- If your change requires a documentation PR, please link it
appropriately. -->
### :memo: Checklist
<!-- Put an `x` in all the boxes that apply. -->
<!-- If your change requires a documentation PR, please link it
appropriately -->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
<!-- Feel free to remove irrelevant items. -->
- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [ ] I have updated the documentation accordingly.
### :hourglass: Dependencies
<!-- List all open PRs that this PR logically depends on
- #12345: short description why this is a dependency
- #34567: ...
-->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
URL: https://github.com/sagemath/sage/pull/36122
Reported by: 65537
Reviewer(s): 65537, Travis Scrimshaw