normaliz.wasm
v1.0.1
Published
WebAssembly build of Normaliz
Maintainers
Readme
normaliz.wasm
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.
Installation
npm install normaliz.wasmUsage (Node.js)
import { 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 successOptions
// 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'),
});Low-level API
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' });Browser usage
In the browser, run Normaliz in a Web Worker to avoid blocking the main thread. See the web demo source for a complete example.
Cross-compiled dependencies
| 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 |
Building from source
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/.
License
GPL-3.0-or-later (same as Normaliz)
