|
Macaulay2 Engine
|
DMatLinAlg<ARingZZpFFPACK> and the ffpackInterface namespace — FFLAS-FFPACK-backed Z/p linear algebra. More...
Go to the source code of this file.
Classes | |
| class | DMatLinAlg< M2::ARingZZpFFPACK > |
| Specialisation of DMatLinAlg for ARingZZpFFPACK dense matrices, delegating rank / determinant / kernel / solve / inverse to the FFPACK library's tuned Z/p routines. More... | |
Namespaces | |
| namespace | ffpackInterface |
Functions | |
| size_t | ffpackInterface::rank (const DMatZZpFFPACK &A) |
| void | ffpackInterface::determinant (const DMatZZpFFPACK &A, ZZpFFPACK::ElementType &result_det) |
| M2_arrayintOrNull | ffpackInterface::rankProfile (const DMatZZpFFPACK &A, bool row_profile) |
| void | ffpackInterface::rankProfile (const DMatZZpFFPACK &A, bool row_profile, std::vector< size_t > &result_profile) |
| bool | ffpackInterface::solveLinear (const DMatZZpFFPACK &A, const DMatZZpFFPACK &B, DMatZZpFFPACK &X) |
| bool | ffpackInterface::inverse (const DMatZZpFFPACK &A, DMatZZpFFPACK &result_inv) |
| size_t | ffpackInterface::nullSpace (const DMatZZpFFPACK &A, DMatZZpFFPACK &result_nullspace) |
DMatLinAlg<ARingZZpFFPACK> and the ffpackInterface namespace — FFLAS-FFPACK-backed Z/p linear algebra.
Declares the ffpackInterface namespace whose free functions (rank, determinant, two rankProfile overloads, solveLinear, inverse, nullSpace) operate on DMatZZpFFPACK — the declarations are here so callers include only this header, while the bodies live in dmat.cpp to keep the FFLAS-FFPACK include surface contained. Each entry point delegates to FFLAS-FFPACK, which represents Z/p entries as doubles and reinterprets the matrix so multiplications dispatch into BLAS; the result is reduced modulo p afterwards. For primes whose intermediate products fit in the 53-bit mantissa (roughly p <= 2^25 at typical matrix sizes), this is by far the fastest dense Z/p path in the engine.
The same file defines the DMatLinAlg<M2::ARingZZpFFPACK> specialisation: rank / determinant / columnRankProfile / solve / solveInvertible / inverse / kernel forward directly to ffpackInterface, while matrixPLU falls back to a generic DMatLUinPlace<RingType> + LUUtil::setUpperLower to split L and U (FFPACK does not return an "honest" LU).
Definition in file dmat-lu-zzp-ffpack.hpp.