frederic-mahe / mumu

C++ implementation of lulu, a R package for post-clustering curation of metabarcoding data
GNU General Public License v3.0
7 stars 0 forks source link

mumu

C/C++ CI coverage

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.

Getting Started

git clone https://github.com/frederic-mahe/mumu.git
cd ./mumu/
make
make check
make install  # as root or sudo
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.

wrapper

Roadmap

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.

mumu releases follow the Semantic Versioning 2.0.0 rules.