Skip to content

Commit

Permalink
sagemathgh-37784: Speed up symmetric group simple_module_rank()
Browse files Browse the repository at this point in the history
    
<!-- ^ Please provide a concise and informative title. -->
<!-- ^ 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". -->

Since we are going to work with a matrix $f^{\lambda} \times
f^{\lambda}$ (recall $f^{\lambda}$ is the number of standard Young
tableaux of shape $\lambda$), then we should just store the list of
standard tableaux rather than iterating over them repeatedly. This
results in a major speedup:
```
sage: from sage.combinat.specht_module import simple_module_rank
sage: %time simple_module_rank([5,3,2], GF(2))
CPU times: user 1.34 s, sys: 35.7 ms, total: 1.38 s
Wall time: 1.38 s
200
```
versus before
```
sage: %time simple_module_rank([5,3,2], GF(2))
CPU times: user 4.97 s, sys: 65 ms, total: 5.03 s
Wall time: 5.06 s
200
```

### 📝 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.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation accordingly.

### ⌛ 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#37784
Reported by: Travis Scrimshaw
Reviewer(s): Darij Grinberg
  • Loading branch information
Release Manager committed Apr 20, 2024
2 parents ca4ec76 + 19d6ce3 commit 6d2394f
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/sage/combinat/specht_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -1352,12 +1352,12 @@ def tabloid_gram_matrix(la, base_ring):
[4 1 1 2 4]
"""
from sage.combinat.tableau import StandardTableaux
ST = StandardTableaux(la)
ST = list(StandardTableaux(la))

def bilinear_form(p1, p2):
if len(p2) < len(p1):
p1, p2 = p2, p1
return sum(c1 * p2.get(T1, 0) for T1, c1 in p1.items() if c1)
return sum(c1 * p2[T1] for T1, c1 in p1.items() if c1 and T1 in p2)

PT = {T: polytabloid(T) for T in ST}
gram_matrix = [[bilinear_form(PT[T1], PT[T2]) for T1 in ST] for T2 in ST]
Expand Down

0 comments on commit 6d2394f

Please sign in to comment.