mapml is a experimental maple interface to the libraries flint and pml, developed jointly with pml. See [Hyun, Neiger, Schost 2019].
Problem and bug reports may be sent to gilles.villard@ens-lyon.fr
Currently developed and tested with macOS >= 15.5 or linux, typically, and the compilers
# clang version 17.0.0 (clang-1700.0.13.3) # Target: arm64-apple-darwin24.4.0 # gcc version 12.2.0 (Debian 12.2.0-14) # Target: x86_64-linux-gnu
Should operate more generally.
(currently tested with:)
- GNU MP (6.3.0): http://gmplib.org
- For FLINT: MPFR (4.2.2): http://www.mpfr.org
- FLINT (3.3.0-dev is used currently, see e.g. nmod_poly_mat_transpose): https://flintlib.org. Currently, pml+mapml requires building FLINT with support for AVX2 or NEON instructions.
Download from pml GitHub repository.
Go to the pml directory:
./bootstrap.sh ./configure make make install
If gmp or flint are installed under non-standard directories you can specify their locations by using configure with the options --with-gmp, --with-flint. By default, make install installs files under /usr/local, you can specify another installation directory by giving ./configure the option --prefix=dirname. Run ./configure --help for further details.
Another example:
./autogen.sh --with-gmp=/opt/homebrew --with-flint=/usr/local make sudo make install make check
Do the above, specifying at the same time the maple directories in order to find maple include directory and maple library:
./bootstrap.sh ./configure --with-gmp=/opt/homebrew --with-flint=/usr/local \ --with-maplec=/Library/Frameworks/Maple.framework/Versions/2025/extern \ --with-maplelib=/Library/Frameworks/Maple.framework/Versions/2025/bin.APPLE_ARM64_MACOS make make install
Another example:
./autogen.sh --with-gmp=/opt/homebrew \ --with-maplec=/Library/Frameworks/Maple.framework/Versions/2025/extern \ --with-maplelib=/Library/Frameworks/Maple.framework/Versions/2025/bin.APPLE_ARM64_MACOS make sudo make install
mapml routines are then available by reading from maple the file mapml.mpl found in the pml include directory determined by pml installation (see --prefix). The default is:
read("/usr/local/include/pml/mapml.mpl");
For example, see the maple worksheet maple_check.mw from the pml examples directory. By specifying an appropriate directory for the mapml.mpl file, it should execute correctly.
Routines to manipulate matrices with univariate polynomial entries in Maple, in line with the LinearAlgebra package. Currently, these routines are global (not private to the mapml module).
Please note: the inputs mod q must be in maple positive representation (the ulong type for integers mod q is used in C++).
MDeterminant(A, x) mod q; WeakPopov(A, x, shift) mod q; unimodular column transformation, shift is a list of integers, of length the row dimension of A RowWeakPopov(A, x, shift) mod q; unimodular row transformation, shift is a list of integers, of length the column dimension of A PMBasis(A, x, shift, sigma) mod q; approximant basis B and resulting defects such that A.B has order at lest sigma shift is a list of integers, of length the column dimension of A RowPMBasis(A, x, shift, sigma) mod q; approximant basis B and resulting defects such that B.A has order at lest sigma shift is a list of integers, of length the row dimension of A MBasis(A, x, shift, sigma) mod q; approximant basis B and resulting defects such that A.B has order at lest sigma shift is a list of integers, of length the column dimension of A RowMBasis(A, x, shift, sigma) mod q; approximant basis B and resulting defects such that B.A has order at lest sigma shift is a list of integers, of length the row dimension of A RightDescription(M, x, d) mod q; M is a matrix of rational fractions in x, with power series expansion at x=0 tries computes a matrix fraction description P,Q of degree at most d (reduced) such that M=PQ^(-1) LeftDescription(M, x, d) mod q; M is a matrix of rational fractions in x, with power series expansion at x=0 tries to compute a matrix fraction description Q,P of degree at most d (reduced) such that M=Q^(-1)P