Howell form with fewer rows?
For now Howell form and strong echelon form require at least as many rows as columns (see below). In my application I act on matrices in Howell form by a (matrix)group and put them back in Howell form. Thus the algorithm has to allocate a lot matrices. In my case the Howell form typically has less rows than columns. (For example 2 rows x 17 columns ). If this was allowed I could save some allocations. Would it be possible to allow the number of rows to be smaller than the number of columns?
Strong echelon form and Howell form[¶](https://flintlib.org/doc/nmod_mat.html#strong-echelon-form-and-howell-form)
void nmod_mat_strong_echelon_form([nmod_mat_t](https://flintlib.org/doc/nmod_mat.html#c.nmod_mat_t) A)
...
A must have at least as many rows as columns.
[slong](https://flintlib.org/doc/flint.html#c.slong) nmod_mat_howell_form([nmod_mat_t](https://flintlib.org/doc/nmod_mat.html#c.nmod_mat_t) A)
...
A must have at least as many rows as columns.
No, this is not possible. The Howell form of a 2x17 matrix can be a 17x17 matrix. In general, the Howell form of a matrix will have as many rows as it has columns. Since these are inplace functions mutating the input (and we cannot add additional rows to a matrix), the input matrix must satisfy this assumption.
We could have a version howell_form(target, source), where the Howell form of source is written into target. But then you would have to allocate target. So in the end you would save nothing I think.
P.S.: Maybe you can create directly a 17x17, where the last rows are just zero rows?
Aright, it seems I cannot save much. Maybe the howell_form(target,source) would help. Then I would extract only the non-zero rows with a view.
P.S.: Since I act with a unimodular matrix, I would guess that the new howell form has the same size as the original one?