WebAssembly build of Normaliz, usable from Node.js and the browser.
Normaliz is a tool for computations in affine monoids, vector configurations, lattice polytopes, and rational cones. It supports Hilbert bases, Hilbert series, triangulations, volumes, and much more.
npm install normaliz.wasmimport { Normaliz } from 'normaliz.wasm';
const nmz = await Normaliz.create();
const result = nmz.run(`amb_space 2
cone 2
1 3
2 1
`);
console.log(result.output); // main .out file contents
console.log(result.files); // { out: '...', gen: '...', ext: '...', ... }
console.log(result.console); // verbose log
console.log(result.exitCode); // 0 on success// With CLI flags
const result = nmz.run(input, { flags: ['--verbose', '-a'] });
// Stream console output in real time
const nmz = await Normaliz.create({
onStdout: (line) => process.stdout.write(line + '\n'),
});You can also use the Emscripten module directly:
import createNormaliz from 'normaliz.wasm/dist/normaliz.js';
const m = await createNormaliz();
m.FS.writeFile('test.in', 'amb_space 2\ncone 2\n1 3\n2 1\n');
m.callMain(['test']);
const output = m.FS.readFile('test.out', { encoding: 'utf8' });In the browser, run Normaliz in a Web Worker to avoid blocking the main thread. See the web demo source for a complete example.
| Library | Version | Purpose |
|---|---|---|
| GMP | 6.3.0 | Arbitrary-precision arithmetic |
| MPFR | 4.2.2 | Multi-precision floats |
| FLINT | 3.3.1 | Polynomial arithmetic |
| nauty | 2.9.1 | Automorphism groups |
| hash-library | 8 | SHA-256 hashing |
Prerequisites: Emscripten SDK activated.
source /path/to/emsdk/emsdk_env.sh
npm run buildThis cross-compiles all dependencies and Normaliz to WebAssembly. Output goes to dist/.
GPL-3.0-or-later (same as Normaliz)