Automorphism Invariant Decomposition Algorithm
AIDA is a C++ library and tool for decomposing finitely presented multiparameter persistence modules into indecomposable summands. It implements the algorithm described in Dey, Jendrysiak, Kerber (2025) with significant optimizations for practical computation.
-
Decomposes all finitely presented multiparameter persistence modules (not limited to distinctly graded generators/relations)
-
Fixed-parameter tractable with respect to the maximal number of relations of the same degree
-
Optimized hom-space calculations for faster computation for modules with low layer-thickness (pointwise dimension of indecomposable summands)
-
Runtime and statistical analysis tools
-
Missing features: O(n³) algorithm for interval-decomposable modules
- CMake ≥ 3.12
- C++17 compatible compiler
- Boost libraries (timer, chrono)
- Persistence-Algebra library
- Clone both repositories into the same parent directory:
git clone https://github.com/JanJend/AIDA.git
git clone https://github.com/JanJend/Persistence-Algebra.gitYour directory structure should look like:
parent-dir/
├── AIDA/
└── Persistence-Algebra/
- Build AIDA:
cd AIDA
mkdir build && cd build
cmake ..
make- (Optional) Install system-wide:
sudo make installThis installs:
- Static library
libaida.ato/usr/local/lib - Executables to
/usr/local/bin
Note for library users: If you want to use AIDA as a library in another CMake project, the install step above is required — not optional. Without it,
libaida.aonly exists inside the build directory and other programs will not be able to find it. The recommended way to install is:sudo cmake --install buildRun this from the
AIDA/directory after building. You can also specify a custom install prefix:cmake --install build --prefix /your/custom/pathAfter installing to a custom prefix, make sure to add the
lib/subdirectory to your linker search path (e.g. viaLD_LIBRARY_PATHor your project'sCMAKE_PREFIX_PATH).
AIDA should compile on Linux, Windows, and macOS. It has been primarily tested on Linux and Mac.
aida <input_file> [options]Input format: Minimized presentation in .scc (scc2020) or .firep format
Example:
aida tests/test_presentations/two_circles.scc -o saves the output as two_circles.sccsum or use
aida tests/test_presentations/two_circles.scc -o path/output.sccsumto indicate the output path yourself
aida: Main decomposition tool (optimized, no statistics)aida_with_stats: Same with indecomposable statistics enabledgenerate_decompositions: Utility for generating decomposition lists
-h, --help- Display help message-v, --version- Display version information-o, --output [path]- Write output to file (default: stdout)-p, --progress- Show progress bar-l, --less_console- Suppress console output
-b, --bruteforce- Use brute-force mode (stops hom-space optimization)-s, --sort- Lexicographically sort input relations-e, --exhaustive- Iterate over all decompositions-c, --basechange- Save base change matrix-f, --alpha- Enable alpha-homs computation
-t, --statistics- Show indecomposable summand statistics-r, --runtime- Display runtime statistics and timers
-j, --no_hom_opt- Disable optimized hom-space calculation-w, --no_col_sweep- Disable column sweep optimization
-m, --compare_b- Compare with brute-force at runtime-a, --compare_e- Compare exhaustive vs brute-force-i, --compare_hom- Compare optimized vs non-optimized hom calculation
AIDA outputs .sccsum files with the following structure:
sccsum
<number_of_indecomposables>
<type>
<summand_1_in_scc_format>
<type>
<summand_2_in_scc_format>
...
Indecomposable types:
free: Module with one generator and no relationscyclic: One generator, not freeinterval: Non-cyclic interval modulenon-interval: All other modules
# With statistics and runtime info and a progress bar
./aida_with_stats tests/test_presentations/two_circles.scc -t -r -pAIDA can be used as a static library. Link against libaida.a and include headers from include/ and src/ (!) in future versions you should only have to link the include folder:
#include <aida_interface.hpp>
// Your code hereImportant: Before using AIDA as a library in another project, make sure you have run sudo cmake --install build as described in the Installation section above. This places libaida.a and the headers in system-wide locations so your project's build system can find them.
Test presentations are available in tests/test_presentations/. Any .scc file can be used for testing:
./aida tests/test_presentations/davids_annulus_min.scc@software{Jendrysiak_AIDA_2024,
author = {Jendrysiak, Jan},
title = {{AIDA}: Automorphism Invariant Decomposition Algorithm},
year = {2024},
doi = {10.4230/artifacts.23282},
url = {https://github.com/JanJend/AIDA},
version = {0.2},
license = {LGPL-3.0-or-later}
}If you use AIDA in your research, please also cite the accompanying paper:
@InProceedings{djk25,
author = {Dey, Tamal K. and Jendrysiak, Jan and Kerber, Michael},
title = {{Decomposing Multiparameter Persistence Modules}},
booktitle = {41st International Symposium on Computational Geometry (SoCG 2025)},
pages = {41:1--41:19},
series = {Leibniz International Proceedings in Informatics (LIPIcs)},
ISBN = {978-3-95977-370-6},
ISSN = {1868-8969},
year = {2025},
volume = {332},
editor = {Aichholzer, Oswin and Wang, Haitao},
publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
address = {Dagstuhl, Germany},
doi = {10.4230/LIPIcs.SoCG.2025.41},
}Software DOI: 10.4230/artifacts.23282
AIDA is licensed under the LGPL-3.0-or-later license.
- Jan Jendrysiak (TU Graz) - ORCID
Current version: 0.2.1 (Released: 2024-10-01)
For questions, issues, or contributions, please open an issue on the repository.