$ show MTG/gaia
Gaia is a C++ library for similarity search and classification of audio descriptor data, developed by the Music Technology Group at Universitat Pompeu Fabra. It provides a rich set of algorithms for transforming and analyzing feature collections: normalization, PCA, RCA, SVM training/prediction, feature selection, and cleaning. The library supports both in-memory and 'frozen' (contiguous) data layouts for efficient nearest-neighbor queries with custom distance functions (Euclidean, Cosine, KullbackβLeibler, etc.) and a custom filter language for WHERE-clause predicates. Python bindings via SWIG expose the full API, and a suite of command-line tools (gaiamerge, gaiainfo, gaiafreeze) handle dataset management. A built-in classification framework with scripts for SVM grid search, cross-validation, and confusion-matrix generation complements the library. Although designed for music information retrieval (MIR) workflows in conjunction with Essentia audio extractors, the library could be adapted to any domain requiring distance-based search and transformation pipelines on structured point data. The codebase is predominantly an application-level library, with a strong research flavor due to its MIR focus.
The LLM identified 4 files worth highlighting for reuse:
A generic, header-only templated factory for creating objects by identifier. Supports product registration and layout-aware variants (LayoutAwareFactory). The implementation is clean, self-contained, and can be reused in any C++ project needing a registry-based object creation pattern. It demonstrates non-trivial template metaprogramming while remaining readable.
Implements the TransfoChain class that composes multiple transformation steps (each an Analyzer+Applier pair) and applies them sequentially to a DataSet. Also provides applyTransfoChain which parses a YAML description of an analysis pipeline. The pattern of separating analysis (parameter learning) from application (transforming data) is reusable for any batch processing pipeline that requires training and inference phases.
A custom filter/query parser built with Flex and Lemon, translating string expressions like 'key == C' into an AST of Predicate nodes. Includes evaluation logic against PointLayout and optimized index lookups. While domain-specific to descriptor filtering, the lexer/parser infrastructure and predicate tree pattern could be adapted for other DSL evaluation tasks.
Provides a Python framework for running classification experiments: manages ground truth, splits folds, trains classifiers (SVM, 1NN, SIMCA), and evaluates results using confusion matrices. Uses concurrent.futures for parallelism and supports configurable protocols. This high-level orchestration logic is reusable for any batch classifier evaluation project with similar YAML-based configuration.