Skip to content

frederic-mahe/mumu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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. Additionaly, mumu can chain merges, not lulu. This results in slightly more merging with mumu (by a few percent).

mumu is fully tested, with 145 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 compiler and C++ libraries (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
  • dependencies are minimal:

    • a GNU/Linux 64-bit system,
    • make (version 4 or more recent),
    • a recent GCC compiler (GCC 10 or more recent, clang 17 or more recent),
    • GNU Awk and other GNU tools for testing
  • 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
  • alternatively, build an Apptainer (ex-singularity) image for systems with older compilers:
# 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

  • Adrien Taudière (@adrientaudiere) published mumu_pq, a wrapper that allows to use mumu on phyloseq objects (R).

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.

  • replicate lulu's results,
  • fix lulu's bug,
  • allow chained merges,
  • high software quality score (softwipe),
  • allow empty input files,
  • allow process substitutions (input/output),
  • compile without warnings with GCC 10,
  • compile without warnings with GCC 11,
  • compile without warnings with GCC 12.2,
  • compile without warnings with GCC 12.3 and GCC 13,
  • compile without warnings with GCC 14 (alpha)
  • compile with clang-17, 18 and 19 (std::ranges is not supported in clang-16),
  • investigate the five minor failed tests when running on Alpine (as root),
  • add a row of column header to the log file? (see issue #4)
  • allow named pipes (input/output),
  • test performances on ARM64 GNU/Linux (Raspberry),
  • faster output with std::format (in 2024),
  • native compilation on Windows (issue with getopt.h) ,
  • native compilation on BSD (issue with the Makefile),
  • native compilation on macOS

mumu releases follow the Semantic Versioning 2.0.0 rules.

About

C++ implementation of lulu, a R package for post-clustering curation of metabarcoding data

Resources

License

Stars

Watchers

Forks

Packages

No packages published