Ticket #10626 (closed defect: fixed)
Route sparse integer matrices to a working Smith form
| Reported by: | rbeezer | Owned by: | jason, was |
|---|---|---|---|
| Priority: | minor | Milestone: | sage-4.6.2 |
| Component: | linear algebra | Keywords: | Smith form |
| Cc: | ddrake, jthurber | Work issues: | |
| Report Upstream: | N/A | Reviewers: | David Loeffler |
| Authors: | Rob Beezer | Merged in: | sage-4.6.2.alpha3 |
| Dependencies: | Stopgaps: |
Description
Sparse integer matrices get sent to the generic Smith form routine, where they fail (see #10625). They should instead get dense-ified and routed to the integer-only version. This solves some failures on #10604.
sage: A = matrix(2, range(4), sparse=True) sage: A.smith_form() --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /home/sage/sage-4.6.1.alpha2/devel/sage-main/<ipython console> in <module>() /home/sage/sage-4.6.1.alpha2/local/lib/python2.6/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2.Matrix.smith_form (sage/matrix/matrix2.c:37477)() /home/sage/sage-4.6.1.alpha2/local/lib/python2.6/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2._smith_onestep (sage/matrix/matrix2.c:42366)() /home/sage/sage-4.6.1.alpha2/local/lib/python2.6/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2._smith_onestep (sage/matrix/matrix2.c:42181)() /home/sage/sage-4.6.1.alpha2/local/lib/python2.6/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2._generic_clear_column (sage/matrix/matrix2.c:41049)() /home/sage/sage-4.6.1.alpha2/local/lib/python2.6/site-packages/sage/rings/integer.so in sage.rings.integer.Integer.inverse_mod (sage/rings/integer.c:28740)() /home/sage/sage-4.6.1.alpha2/local/lib/python2.6/site-packages/sage/rings/integer.so in sage.rings.integer.as_Integer (sage/rings/integer.c:6052)() /home/sage/sage-4.6.1.alpha2/local/lib/python2.6/site-packages/sage/rings/integer.so in sage.rings.integer.Integer.__init__ (sage/rings/integer.c:7312)() TypeError: unable to coerce <class 'sage.rings.ideal.Ideal_pid'> to an integer
Attachments
Change History
comment:1 Changed 2 years ago by rbeezer
- Cc ddrake, jthurber added
- Status changed from new to needs_review
- Authors set to Rob Beezer
Patch mirrors docstring for dense matrices and just ships off a dense version of the matrix to that code. matrix/matrix_integer_sparse.pyx is not included into the documentation, so I've added that chore to my list.
comment:2 Changed 2 years ago by davidloeffler
- Keywords Smith form added
- Reviewers set to David Loeffler
- Status changed from needs_review to positive_review
I've just uploaded a patch at #10625, which makes the examples here work. That said, densifying a matrix and calculating Smith form of that using integer-specific routines is going to be much faster than calling a slow generic routine; so this patch should still be applied. Applies fine to 4.6.2.alpha0 and all doctests pass, so positive review.

