-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Gauss] incorrect internal representation of sparse matrices over an explicitly specified ring #606
Comments
According to the specification, the ring elements of the argument gap> LoadPackage("gauss", false);
gap> SN := SparseMatrix( 2, 3, [ [ 2 ], [ 3 ] ], [ [ 1 ], [ 2 ] ] * One(GF(3)), GF(3) );
gap> Rank(SN); |
By "specification", do you mean the package documentation? Because I don't see it there, and I assumed from the documentation that there would be automatic type casting when specifying the ring (why else would that option be there?). To be sure, I am aware that type casting is certainly not in the documentation; it's just what I expected to happen. Maybe my problem is that I'm carrying over expectations from other programming languages? 😅 Like, I would expect any constructor to automatically recognize and convert the input to whatever internal representation it uses, or raise an error if it doesn't understand the input data. I do not expect it to quietly go along and cause problems later. 🤔 If performance is an issue, I feel that it would be more appropriate to have a separate I guess my three recent issues (#604, #605, #606) can be marked as duplicates, as they all boil down to a feature request to:
|
This is in fact what I am happy about PR improving the documentation of |
The package
gauss
doesn't seem to always properly store matrices that are constructed over an explicitly specified ring. For example, I thought that the following would be a valid way of constructing a matrix over GF(3):The documentation doesn't specify that this is incorrect, so I assumed that this call would automatically convert the integer entries to elements of GF(3). However, when recovering the matrix from
gauss
, it becomes clear that no conversion has taken place:On rare occasions, this could lead to problems when doing further computations with these sparse matrices. For instance, I have had a case where computing the rank (using the
Rank
function fromgauss
) failed because the algorithm ended up trying to compute-1/3 mod 3
, presumably because earlier steps in the Gaussian elimination algorithm had set that pivot to some rational number (like3
or-1/3
) instead of an element of GF(3). However, I have not been able to produce a small example that exhibits this behaviour, and I am currently not at liberty to share the code that led to a failed rank computation.The text was updated successfully, but these errors were encountered: