We are actively developing Super K-Means and accepting contributions! Any kind of PR is welcome.
These are our current priorities:
Features:
- Support
uint64_tfor theassignments. Right now, we are limited to ~4 billion vectors. - Support for different datatypes: 64-bit
double, 16-bithalf, 8-bituint8(experimental). - Support for out-of-core capabilities.
Improvements:
- A proper benchmarking framework for development.
- Regression tests on CI.
- Fork the repository on GitHub and create a feature branch:
git checkout -b my-feature- Make your changes.
- Run the test suite locally before submitting your PR.
- Open a Pull Request (PR) against the
mainbranch.
Important
Let us know in advance if you plan to implement a big feature!
All PRs must pass the full test suite in CI. Before submitting a PR, you should run tests locally:
# C++ tests
cmake . -DSKMEANS_COMPILE_TESTS=ON
make -j$(nproc) tests
ctest .
# Python bindings tests
source venv/bin/activate # If using a venv
pip install .
pytest python/tests/Tests are also prone to bugs. If that is the case, please open an Issue.
- Open your PR against the
mainbranch. - Make sure your branch is rebased on top of
mainbefore submission. - Verify that CI passes.
- Keep PRs focused — small, logical changes are easier to review and merge.
- Function, Class, and Struct names:
PascalCase - Variables and Class/Struct member names:
snake_case - Constants and magic variables:
UPPER_SNAKE_CASE - Avoid
newanddelete - There is a
.clang-formatand a.clang-tidyin the project. Make sure to adhere to it. We have provided scripts to check and format the files within the project:
pip install clang-format==18.1.8
./scripts/format_check.sh # Checks the formatting
./scripts/format.sh # Fix the formatting
./scripts/tidy_check.sh # .clang-tidy checks- Use GitHub Issues for bug reports and feature requests.