Commit
1 year ago
gh-37692: `matrix`, `Graph.incidence_matrix`, `LinearMatroid.representation`: Support constructing `Hom(CombinatorialFreeModule)` elements <!-- ^ 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 #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 #12345". --> We use morphisms of `CombinatorialFreeModule`s (each of which has a distinguished finite or enumerated basis indexed by arbitrary objects) as matrices whose rows and columns are indexed by arbitrary objects (`row_keys`, `column_keys`). Example: ``` sage: M = matrix([[1,2,3], [4,5,6]], ....: column_keys=['a','b','c'], row_keys=['u','v']); M Generic morphism: From: Free module generated by {'a', 'b', 'c'} over Integer Ring To: Free module generated by {'u', 'v'} over Integer Ring ``` Example application done here on the PR: The incidence matrix of a graph or digraph. Returning it as a morphism instead of a matrix has the benefit of keeping the vertices and edges with the result. This new behavior is activated by special values for the existing parameters `vertices` and `edges`. ``` sage: D12 = posets.DivisorLattice(12).hasse_diagram() sage: phi_VE = D12.incidence_matrix(vertices=True, edges=True); phi_VE Generic morphism: From: Free module generated by {(1, 2), (1, 3), (2, 4), (2, 6), (3, 6), (4, 12), (6, 12)} over Integer Ring To: Free module generated by {1, 2, 3, 4, 6, 12} over Integer Ring sage: print(phi_VE._unicode_art_matrix()) (1, 2) (1, 3) (2, 4) (2, 6) (3, 6) (4, 12) (6, 12) 1⎛ -1 -1 0 0 0 0 0⎞ 2⎜ 1 0 -1 -1 0 0 0⎟ 3⎜ 0 1 0 0 -1 0 0⎟ 4⎜ 0 0 1 0 0 -1 0⎟ 6⎜ 0 0 0 1 1 0 -1⎟ 12⎝ 0 0 0 0 0 1 1⎠ ``` ### :memo: 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. - [ ] I have linked a relevant issue or discussion. - [ ] 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. For example, --> <!-- - #12345: short description why this is a dependency --> <!-- - #34567: ... --> - Depends on #37607 - Depends on #37514 - Depends on #37606 - Depends on #37646 URL: https://github.com/sagemath/sage/pull/37692 Reported by: Matthias Köppe Reviewer(s): gmou3
Author
Release Manager
Loading