Macaulay2 Engine
Loading...
Searching...
No Matches
mutable-matrix.h File Reference

Engine-boundary C API for the engine's in-place MutableMatrix, including dense linear algebra. More...

Go to the source code of this file.

Functions

MutableMatrixIM2_MutableMatrix_identity (const Ring *R, int nrows, M2_bool prefer_dense)
MutableMatrixIM2_MutableMatrix_make (const Ring *R, int nrows, int ncols, M2_bool prefer_dense)
MutableMatrixIM2_MutableMatrix_from_matrix (const Matrix *M, M2_bool prefer_dense)
const MatrixIM2_MutableMatrix_to_matrix (const MutableMatrix *M)
M2_string IM2_MutableMatrix_to_string (const MutableMatrix *M)
unsigned int rawMutableMatrixHash (const MutableMatrix *M)
int IM2_MutableMatrix_n_rows (const MutableMatrix *M)
int IM2_MutableMatrix_n_cols (const MutableMatrix *M)
void rawMutableMatrixFillRandomDensity (MutableMatrix *M, double density, int special_type)
void rawMutableMatrixFillRandom (MutableMatrix *M, long nelems)
MutableMatrixrawMutableMatrixPromote (const Ring *R, const MutableMatrix *f)
MutableMatrixrawMutableMatrixLift (int *success_return, const Ring *R, const MutableMatrix *f)
const RingElementIM2_MutableMatrix_get_entry (const MutableMatrix *M, int r, int c)
engine_RawRingElementArrayArrayOrNull IM2_MutableMatrix_get_entries (const MutableMatrix *M)
M2_bool IM2_MutableMatrix_set_entry (MutableMatrix *M, int r, int c, const RingElement *a)
M2_bool IM2_MutableMatrix_row_swap (MutableMatrix *M, int i, int j)
M2_bool IM2_MutableMatrix_column_swap (MutableMatrix *M, int i, int j)
M2_bool IM2_MutableMatrix_row_operation (MutableMatrix *M, int i, const RingElement *r, int j, M2_bool opposite_mult)
M2_bool IM2_MutableMatrix_column_operation (MutableMatrix *M, int i, const RingElement *r, int j, M2_bool opposite_mult)
M2_bool IM2_MutableMatrix_row_scale (MutableMatrix *M, const RingElement *r, int i, M2_bool opposite_mult)
M2_bool IM2_MutableMatrix_column_scale (MutableMatrix *M, const RingElement *r, int i, M2_bool opposite_mult)
M2_bool IM2_MutableMatrix_insert_columns (MutableMatrix *M, int i, int n_to_add)
M2_bool IM2_MutableMatrix_insert_rows (MutableMatrix *M, int i, int n_to_add)
M2_bool IM2_MutableMatrix_delete_columns (MutableMatrix *M, int i, int j)
M2_bool IM2_MutableMatrix_delete_rows (MutableMatrix *M, int i, int j)
M2_bool IM2_MutableMatrix_column_2by2 (MutableMatrix *M, int c1, int c2, const RingElement *a1, const RingElement *a2, const RingElement *b1, const RingElement *b2, M2_bool opposite_mult)
M2_bool IM2_MutableMatrix_row_2by2 (MutableMatrix *M, int r1, int r2, const RingElement *a1, const RingElement *a2, const RingElement *b1, const RingElement *b2, M2_bool opposite_mult)
M2_bool IM2_MutableMatrix_sort_columns (MutableMatrix *M, int lo, int hi)
M2_bool IM2_MutableMatrix_row_permute (MutableMatrix *M, int start, M2_arrayint perm)
M2_bool IM2_MutableMatrix_column_permute (MutableMatrix *M, int start, M2_arrayint perm)
const RingElementIM2_Matrix_dot_product (const MutableMatrix *M, int c1, int c2)
M2_bool rawMutableMatrixIsDense (const MutableMatrix *M)
M2_bool IM2_MutableMatrix_is_zero (const MutableMatrix *M)
M2_bool IM2_MutableMatrix_is_equal (const MutableMatrix *M, const MutableMatrix *N)
MutableMatrixIM2_MutableMatrix_copy (MutableMatrix *M, M2_bool prefer_dense)
M2_bool IM2_MutableMatrix_set_values (MutableMatrix *M, M2_arrayint rows, M2_arrayint cols, engine_RawRingElementArray values)
MutableMatrixIM2_MutableMatrix_submatrix (const MutableMatrix *M, M2_arrayint rows, M2_arrayint cols)
MutableMatrixIM2_MutableMatrix_submatrix1 (const MutableMatrix *M, M2_arrayint cols)
M2_bool IM2_MutableMatrix_reduce_by_pivots (MutableMatrix *M)
MutableMatrixrawMutableMatrixTranspose (MutableMatrix *A)
M2_arrayintOrNull IM2_FF_LU (MutableMatrix *M)
M2_bool rawLLL (MutableMatrix *M, MutableMatrix *U, gmp_QQ threshold, int strategy)
M2_bool IM2_SmithNormalForm (MutableMatrix *M)
M2_bool IM2_HermiteNormalForm (MutableMatrix *M)
M2_arrayintOrNull rawLU (const MutableMatrix *A, MutableMatrix *L, MutableMatrix *U)
M2_arrayintOrNull rawLUincremental (M2_arrayintOrNull P, MutableMatrix *LU, const MutableMatrix *v, int m)
void rawTriangularSolve (MutableMatrix *Lv, MutableMatrix *x, int m, int strategy)
M2_bool rawEigenvalues (MutableMatrix *A, MutableMatrix *eigenvalues, M2_bool isHermitian)
M2_bool rawEigenvectors (MutableMatrix *A, MutableMatrix *eigenvalues, MutableMatrix *eigenvectors, M2_bool isHermitian)
M2_bool rawSVD (MutableMatrix *A, MutableMatrix *Sigma, MutableMatrix *U, MutableMatrix *VT, M2_bool use_divide_and_conquer)
M2_bool rawLeastSquares (MutableMatrix *A, MutableMatrix *b, MutableMatrix *x, M2_bool assume_full_rank)
M2_bool rawQR (const MutableMatrix *A, MutableMatrix *Q, MutableMatrix *R, M2_bool return_QR)
long rawLinAlgRank (MutableMatrix *M)
const RingElementrawLinAlgDeterminant (MutableMatrix *A)
MutableMatrixrawLinAlgInverse (MutableMatrix *A)
MutableMatrixrawLinAlgRREF (MutableMatrix *A)
M2_arrayintOrNull rawLinAlgRankProfile (MutableMatrix *A, M2_bool row_profile)
MutableMatrixrawLinAlgNullSpace (MutableMatrix *A)
MutableMatrixrawLinAlgSolve (const MutableMatrix *A, const MutableMatrix *B, int *success)
MutableMatrixrawLinAlgSolveInvertible (const MutableMatrix *A, const MutableMatrix *B, int *success)
M2_bool rawLinAlgAddMult (MutableMatrix *C, const MutableMatrix *A, const MutableMatrix *B)
M2_bool rawLinAlgSubMult (MutableMatrix *C, const MutableMatrix *A, const MutableMatrix *B)
MutableMatrixrawLinAlgMult (const MutableMatrix *A, const MutableMatrix *B)
engine_RawRingElementArrayOrNull rawLinAlgCharPoly (MutableMatrix *A)
engine_RawRingElementArrayOrNull rawLinAlgMinPoly (MutableMatrix *A)
engine_RawArrayIntPairOrNull rawLQUPFactorization (MutableMatrix *A)
const MatrixrawMatrixClean (gmp_RR epsilon, const Matrix *M)
const RingElementrawRingElementClean (gmp_RR epsilon, const RingElement *f)
MutableMatrixrawMutableMatrixClean (gmp_RR epsilon, MutableMatrix *M)
gmp_RRorNull rawMatrixNorm (gmp_RR p, const Matrix *M)
gmp_RRorNull rawRingElementNorm (gmp_RR p, const RingElement *f)
gmp_RRorNull rawMutableMatrixNorm (gmp_RR p, const MutableMatrix *M)

Detailed Description

Engine-boundary C API for the engine's in-place MutableMatrix, including dense linear algebra.

Note
AI-generated documentation. Verify against the source before relying on it.

Declares the extern "C" entry points the M2 interpreter routes to the engine's mutable matrix type. Construction (IM2_MutableMatrix_make, IM2_MutableMatrix_identity, IM2_MutableMatrix_from_matrix, with prefer_dense choosing dense vs. sparse storage) is paired with the standard read-only queries (IM2_MutableMatrix_to_matrix snapshots back into an immutable Matrix, plus dimension, entry, ring, and string accessors); in-place mutation covers single-entry set, row / column swap, scale, and elementary row / column operations. The dense linear-algebra surface lives on the rawLinAlg* family: rawLinAlgRank, rawLinAlgDeterminant, rawLinAlgInverse, rawLinAlgRREF, rawLinAlgRankProfile, rawLinAlgNullSpace, rawLinAlgSolve, rawLinAlgSolveInvertible, rawLinAlgAddMult / _SubMult / _Mult, and rawLinAlgCharPoly / rawLinAlgMinPoly. Separate rawLU / rawLUincremental provide LU under a LAPACK-style shape, rawFFLU is the fraction-free path, rawLLL runs lattice reduction, rawReduceByPivots does pivot-based row elimination, and rawEigenvalues / rawEigenvectors cover the RR / CC spectral path.

Each linear-algebra entry dispatches inside the engine through the templated DMat<R> family to the back end best suited for the coefficient ring — FFLAS-FFPACK for Z/p (small p), FLINT for ZZ/QQ/GF, Eigen3 for RR/CC (per eigen.hpp), MPFI on the interval side, generic otherwise — so the interpreter never picks the algorithm itself. The mutable / immutable boundary is the standard "snapshot" model: an immutable Matrix is copied in, the algorithm rewrites the mutable buffer, and the caller converts back if it wants an immutable result.

See also
mutable-matrix.cpp
matrix.h
engine-includes.hpp

Definition in file mutable-matrix.h.