You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
gh-40579: Row rank profile / row pivots: direct extraction from echelon form over prime fields
Fixes#40572
- ensure the use of the LUdivine / LQUP strategy with the flag
FfpackSlabRecursive
- extract row rank profile using FFPACK's `RankProfileFromLU`
Concerning the first point, this strategy was already the one used in
the single threaded case, since it is the default method in the FFPACK
implementation. However it was not the default in the multi threaded
case, which means there was actually a bug in Sage when calling
`_echelonize_linbox(efd=False)` with 2 or more threads:
```
sage: mat = matrix(GF(3), [[1,0,1,0],[1,0,0,0],[1,0,0,0],[0,1,0,0]])
sage: mat.echelon_form()
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
sage: Parallelism().set("linbox", nproc=2)
sage: mat = matrix(GF(3), [[1,0,1,0],[1,0,0,0],[1,0,0,0],[0,1,0,0]])
sage: mat.echelon_form()
[1 0 0 0]
[0 0 1 0]
[0 1 0 0]
[0 0 0 0]
```
(the latter does not meet Sage's requirements of the reduced row echelon
form)
Some more complete tests concerning the row rank profile are to be done
before merging.
URL: #40579
Reported by: Vincent Neiger
Reviewer(s): Vincent Neiger, Xavier Caruso
0 commit comments