-
-
Notifications
You must be signed in to change notification settings - Fork 401
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added hash function to elements of the fundamental group of an extended affine Weyl group #36122
Conversation
Calculates the hash from its value, which is an integer uniquely determining the fundamental group element
Maybe Linter likes me now
Documentation preview for this PR (built with commit 8e9c87a; changes) is ready! 🎉 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for noticing and fixing this.
For next time, please be sure to add a doctest showing the issue is fixed (also, all methods need to have at least one doctest).
Co-authored-by: Travis Scrimshaw <clfrngrown@aol.com>
Dear Travis, thank you for reviewing and improving my pull request. I was following the (mathematically very similar) class WeylGroupElement whose hash function has neither a docstring nor a test, but I will make sure to always include them in future pull requests. Best, Felix |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed, that is generally a good idea. Unfortunately in this case that is some fairly old code that was included before we developed our modern practices. Thank you for adding it. LGTM.
|
@65537 Sorry, I didn’t check the doctest carefully. Please change |
Test for __hash__ should succeed now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Testing for value()
is correct, as long as you are testing on FundamentalGroupElement
s, which was the main culprit here
Ah, indeed. |
…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 sagemath#1234" use "Introduce new method to calculate 1+1" --> <!-- Describe your changes here in detail --> Fixes sagemath#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 sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 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. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#36122 Reported by: 65537 Reviewer(s): 65537, Travis Scrimshaw
@vbraun Has this been merged? If so, should we close this? |
…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 sagemath#1234" use "Introduce new method to calculate 1+1" --> <!-- Describe your changes here in detail --> Fixes sagemath#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 sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 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. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#36122 Reported by: 65537 Reviewer(s): 65537, Travis Scrimshaw
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 theFW
realization. This, in turn, allows to use these mathematical objects as keys in dictionaries.Fixes #36121 . It adds a
__hash__
function to the classFundamentalGroupElement
associated withFundamentalGroupOfExtendedAffineWeylGroup
.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 thehash
of that integer, which is the integer itself for current python implementations.yields the following result:
📝 Checklist
⌛ Dependencies