fast and robust C++ implementation of lulu, a R package for post-clustering curation of metabarcoding data
mumu is not a strict lulu clone. There is a bug in lulu that prevents some merging from happening. Additionaly, mumu can chain merges, not lulu. This results in slightly more merging with mumu (by a few percent).
mumu is fully tested, with 146 carefully crafted individual
black-box tests, covering 100% of the application-specific C++
code. Tests are written using common Unix/Linux shell utilities. Some
C++ internal tests are also used (assertions), but these are only
active at compile-time, or at runtime when compiling with the debug
flag.
mumu uses C++20 features to make the code simpler, easier to maintain and to port to other systems. The downside is that using mumu requires a recent C++ compiler (GCC 10 or more recent, clang 17 or more recent). If your system only provides an older compiler, a recipe for a singularity/Apptainer/docker image is available.
About the name of the project, m is simply the next letter after l, hence mumu. Any similarity to actual words is purely coincidental.
git clone https://github.com/frederic-mahe/mumu.git
cd ./mumu/
make
make check
make install # as root or sudo
dependencies are minimal:
make
(version 4 or more recent),run (see mumu --help
and man mumu
for details):
mumu \
--otu_table OTU.table \
--match_list matches.list \
--log /dev/null \
--new_otu_table new_OTU.table
# build image with singularity 3.8.5
# (Alpine edge with GCC 11.2 [2022-02-25])
singularity \
build \
--fakeroot \
--force mumu-alpine.sif \
mumu-alpine.recipe
# test (image is appr. 4 MB)
singularity run mumu-alpine.sif --help
Native compilation on Windows machine, as well as BSD systems is a work in progress.
mumu
on
phyloseq objects (R).mumu is currently feature-complete (nothing is missing), but refactoring will continue and new versions will be released as soon as more C++ features (C++20 modules, C++23 ranges, etc.) are standardized and supported by compilers.
std::ranges
is not supported in clang-16),std::format
(in 2025),getopt.h
) ,mumu releases follow the Semantic Versioning 2.0.0 rules.