sagemath/sage

Obliterate sage/matrix/misc.pyx

Closed this issue · 3 comments

Header of sage/matrix/misc.py says:

NOTE: The whole problem of avoiding circular imports -- the reason for
existence of this file -- is now a non-issue, since some bugs in
Cython were fixed.  Probably all this code should be moved into the
relevant classes and this file deleted.

So I did. After a suitable deprecation period, the file can be obliterated. Here's the overview:

Functions leaving sage/matrix/misc.py. Originals have all been deprecated.

  • cmp_pivots

    Existing duplicate already existed in matrix/matrix2.pyx.

  • hadamard_row_bound_mpfr

    Moved to matrix/matrix2.pyx near where it was called, right by another similar helper function. Converted to an underscore method, therefore. Already has protection on base ring of the matrix (RR).

  • matrix_integer_sparse_rational_reconstruction

    Moved into content of sage.matrix.matrix_integer_sparse.Matrix_integer_sparse.rational_reconstruction which was just a one-line stub calling the function from sage/matrix/misc.pyx.

  • matrix_integer_dense_rational_reconstruction

    Moved into content of sage.matrix.matrix_integer_dense.Matrix_integer_dense.rational_reconstruction which was just a one-line stub calling the function from sage/matrix/misc.pyx. Adjusted a call in matrix_cyclo_dense to call this new method.

  • matrix_rational_echelon_form_multimodular

    "Works" for sparse and dense matrices (see MAX_MODULUS) so added this to matrix2.pyx class as sage.matrix.matrix2.Matrix._echelon_form_multimodular_rational. Added protection to ensure base ring is rationals.

Almost all code changes are just to fit into new locations. A bit of documentation clean-up where needed.

This passes all tests, but should be reviewed by somebody with significant Cython and/or sage/matrix experience.

CC: @williamstein @robertwb

Component: linear algebra

Author: Rob Beezer

Issue created by migration from https://trac.sagemath.org/ticket/10765

comment:1

Attachment: trac_10765-matrix-misc-routines.patch.gz

Two questions for veterans of the matrix code:

  1. Should the new _echelon_form_multimodular_rational in matrix2.py be an underscore method (which is what was done)?

  2. Header of misc.py still has a stanza about mod_int and MOD_INT_OVERFLOW. I'm guessing it should follow the multimodular echelon form into the top of matrix2.pyx but am not certain. Advice?

Author: Rob Beezer

comment:2

This will not apply on 4.7.alpha1, and will rot further after #10752 goes in, so I'm going to orphan it for now.