Fast fill-reducing sparse matrix ordering and SPD direct solver (CHOLMOD / MKL / cuDSS)
Project description
Homa 
Homa is a C++20 library with two complementary purposes:
-
A fast fill-reducing ordering for sparse SPD matrices — the reference implementation of the SIGGRAPH 2026 paper Fast Sparse Matrix Permutation for Mesh-Based Direct Solvers [Zarebavani et al. 2026]. Homa builds a mesh-induced patch decomposition, runs recursive nested dissection on the resulting quotient graph, and assembles a fill-reducing permutation bottom-up. The permutation drops into any sparse Cholesky factorization with no solver-side changes.
-
A drop-in SPD linear solver wrapper with a uniform
analyze -> factorize -> solveAPI on top of three state-of-the-art sparse direct solvers: SuiteSparse CHOLMOD, Intel MKL PARDISO, and NVIDIA cuDSS. The user can pick a backend at construction time; the rest of your code stays the same.
The CMake build automatically fetches and configures all three solver backends on both Windows and Linux—no manual dependency setup required.
1. Fast sparse matrix ordering
The standalone ordering API takes the sparsity pattern of a square SPD matrix and returns a fill-reducing permutation (and the elimination tree). It works even when no solver backend is built.
#include "homa/homa.h"
homa::Options opts;
opts.patch_size = 512; // Lloyd / METIS patch target
opts.compute_etree = true; // required if you feed cuDSS
homa::OrderingResult ord = homa::compute_ordering(A, opts);
// ord.perm — permutation of [0, n)
// ord.etree — elimination tree (only when opts.compute_etree)
The user then can hand the permutation to any third-party solver that supports a user ordering.
2. Sparse SPD linear solver
The LinSysSolver interface is a uniform front-end to all three backends, by switching backends through changing the LinSysSolverType argument. LinSysSolver is a class template parameterized on Scalar; both float and double are supported, with convenience aliases homa::LinSysSolverD and homa::LinSysSolverF.
#include "homa/solvers/LinSysSolver.h"
std::unique_ptr<homa::LinSysSolverD> solver(
homa::LinSysSolverD::create(homa::LinSysSolverType::CPU_CHOLMOD));
// ::CPU_MKL
// ::GPU_CUDSS
homa::Options opts;
opts.patch_size = 512;
solver->setMatrix(A); // Eigen::SparseMatrix<double>
solver->ordering(opts); // Homa ordering — skip to use the solver default
solver->analyze_pattern(); // consumes solver-owned ordering state
solver->factorize();
solver->solve(rhs, result);
setMatrix(A) borrows (shallow copy) Eigen's compressed sparse arrays; A must be square,
compressed, and outlive the analysis/factorization/solve using it.
Raw pointer and device-aware view APIs are also available:
solver->setMatrix(p, i, x, n, nnz);
homa::SparseMatrixView<double> Adev{n, n, nnz, d_rowptr, d_colind, d_values,
homa::SparseFormat::CSR,
homa::MemoryLocation::Device};
solver->setMatrix(Adev); // cuDSS only
MKL expects lower-triangular storage:
Eigen::SparseMatrix<double> A_lower = A.triangularView<Eigen::Lower>();
A_lower.makeCompressed();
solver->setMatrix(A_lower);
For building the examples, check examples README. To develop/create the python binding, check python README.
Using Homa in your CMake project (FetchContent)
include(FetchContent)
FetchContent_Declare(homa
GIT_REPOSITORY https://github.com/BehroozZare/fast-permute.git
GIT_TAG main
)
FetchContent_MakeAvailable(homa)
target_link_libraries(my_target PRIVATE Homa::homa)
homa_configure_runtime(my_target)
Call homa_configure_runtime() for executables that link Homa so Windows
DLLs and Linux build RPATHs are set for enabled solver backends.
Citation
If you use Homa's ordering in academic work, please cite:
@inproceedings{Zarebavani:2026:LRA,
title = {Fast Sparse Matrix Permutation for Mesh-Based Direct Solvers},
author = {Zarebavani, Behrooz and Mahmoud, Ahmed H. and Dodik, Ana and Yuan, Changcheng and Porumbescu, Serban D. and Owens, John D. and Mehri Dehnavi, Maryam and Solomon, Justin},
year = {2026},
isbn = {979-8-4007-2554-8/2026/07},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
numpages = {11},
month = jul,
series = {SIGGRAPH Conference Papers '26},
booktitle = {Proceedings of the SIGGRAPH 2026 Conference Papers},
doi = {10.1145/3799902.3811189}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file homapy-0.1.0rc0.tar.gz.
File metadata
- Download URL: homapy-0.1.0rc0.tar.gz
- Upload date:
- Size: 1.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6eaabeed56c02e30a0185931c8d5ca5c5a5f9b8a11bacb8ba96de04f24a5eb59
|
|
| MD5 |
126fc2b63408c764d90488e2bcd0f94e
|
|
| BLAKE2b-256 |
f7083af803f1779974611ec11735e5995a47af9df06bb7af5252300ab0915e54
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0.tar.gz:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0.tar.gz -
Subject digest:
6eaabeed56c02e30a0185931c8d5ca5c5a5f9b8a11bacb8ba96de04f24a5eb59 - Sigstore transparency entry: 2081956324
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file homapy-0.1.0rc0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: homapy-0.1.0rc0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9f01933ee5d1f3688488ce07bbbca39981b63739ffecff67a7fb232ea19615e
|
|
| MD5 |
ef884948a8353f26e4c774c8e87729bd
|
|
| BLAKE2b-256 |
9a706570d0acc16d6899fd3957a7e400bb83409829daca3586342a4c992d47d9
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0-cp312-cp312-win_amd64.whl:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0-cp312-cp312-win_amd64.whl -
Subject digest:
e9f01933ee5d1f3688488ce07bbbca39981b63739ffecff67a7fb232ea19615e - Sigstore transparency entry: 2081956357
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file homapy-0.1.0rc0-cp312-cp312-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homapy-0.1.0rc0-cp312-cp312-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2fdc283258d25603b893b151bd72b4ce797c73da9ed7a517dc64c8ddf74520f9
|
|
| MD5 |
2015d36317fa56afd38f96666fb6695d
|
|
| BLAKE2b-256 |
c469b21397d3b8e661196ef4a16deed88a56e7c273df51a4807b8a5bbbc635fe
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0-cp312-cp312-manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0-cp312-cp312-manylinux_2_28_x86_64.whl -
Subject digest:
2fdc283258d25603b893b151bd72b4ce797c73da9ed7a517dc64c8ddf74520f9 - Sigstore transparency entry: 2081956377
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file homapy-0.1.0rc0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: homapy-0.1.0rc0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bc908c947721dc2d3750ef908e2182aa57e3084e07067a6a33d287db964ef96
|
|
| MD5 |
d6400d6232db411f0291c1f293597d76
|
|
| BLAKE2b-256 |
076afe86af9b192963b16f5fa54762a78063e451efaf476cc463f5543b307ff1
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0-cp311-cp311-win_amd64.whl:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0-cp311-cp311-win_amd64.whl -
Subject digest:
8bc908c947721dc2d3750ef908e2182aa57e3084e07067a6a33d287db964ef96 - Sigstore transparency entry: 2081956392
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file homapy-0.1.0rc0-cp311-cp311-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homapy-0.1.0rc0-cp311-cp311-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d27910c4b6ce9df78f42114a3cf338a0f43fcd8e2ff37f81a6fce6d52c52dcd7
|
|
| MD5 |
f4e24485b144c2555caff1fea326807a
|
|
| BLAKE2b-256 |
90e260b90769eea1238fe9300aa8a8ede57b98c23eb4122d044e209e4aef7a5d
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0-cp311-cp311-manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0-cp311-cp311-manylinux_2_28_x86_64.whl -
Subject digest:
d27910c4b6ce9df78f42114a3cf338a0f43fcd8e2ff37f81a6fce6d52c52dcd7 - Sigstore transparency entry: 2081956340
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file homapy-0.1.0rc0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: homapy-0.1.0rc0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abd83fe4d5258d8af806a444a1799e1b74b9a08e5faafaf3896462f6fa48c185
|
|
| MD5 |
8659dfd8972fec822251714944923e70
|
|
| BLAKE2b-256 |
c9ef03870cb6c8ea87fd05e412f39faa3380983f1292a8dc3b5966b8b53836fc
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0-cp310-cp310-win_amd64.whl:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0-cp310-cp310-win_amd64.whl -
Subject digest:
abd83fe4d5258d8af806a444a1799e1b74b9a08e5faafaf3896462f6fa48c185 - Sigstore transparency entry: 2081956368
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file homapy-0.1.0rc0-cp310-cp310-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homapy-0.1.0rc0-cp310-cp310-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.10, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fdaead4a8cf653753794bc5e090ad8fbd318680148abb6c2c41d78f4ca47a4f
|
|
| MD5 |
393ae54ab8865315fed91cadb19ad2a3
|
|
| BLAKE2b-256 |
9f0bb90ab9fd838822b38194ce42c907e0125d56dae84223fd49dc6f7cb80c79
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0-cp310-cp310-manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0-cp310-cp310-manylinux_2_28_x86_64.whl -
Subject digest:
3fdaead4a8cf653753794bc5e090ad8fbd318680148abb6c2c41d78f4ca47a4f - Sigstore transparency entry: 2081956402
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file homapy-0.1.0rc0-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: homapy-0.1.0rc0-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7dd655eb7e1dcbba11480a90394044bf45fc6059d3fa8f8d1700f593b8a5b96a
|
|
| MD5 |
e037aa9d95b051b2b93e877213bf035f
|
|
| BLAKE2b-256 |
cbef59cb859e31b9f736610bf8fb4274d0931e4f6001966fc0caeac090a16ff3
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0-cp39-cp39-win_amd64.whl:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0-cp39-cp39-win_amd64.whl -
Subject digest:
7dd655eb7e1dcbba11480a90394044bf45fc6059d3fa8f8d1700f593b8a5b96a - Sigstore transparency entry: 2081956411
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file homapy-0.1.0rc0-cp39-cp39-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: homapy-0.1.0rc0-cp39-cp39-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.9, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62e837da956565cd318ab0422fbfce64d114bfc97fbd97bd5cd4be102a07eaf0
|
|
| MD5 |
da10adaf549db6154d49a2b4efa2bbf2
|
|
| BLAKE2b-256 |
f55edca0273090c0924e547a75d7ac0dec8c43a047a492c2919bf01745894f2f
|
Provenance
The following attestation bundles were made for homapy-0.1.0rc0-cp39-cp39-manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on BehroozZare/fast-permute
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homapy-0.1.0rc0-cp39-cp39-manylinux_2_28_x86_64.whl -
Subject digest:
62e837da956565cd318ab0422fbfce64d114bfc97fbd97bd5cd4be102a07eaf0 - Sigstore transparency entry: 2081956417
- Sigstore integration time:
-
Permalink:
BehroozZare/fast-permute@9c912d67684c60537ef6eabc460ba2558455e949 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BehroozZare
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@9c912d67684c60537ef6eabc460ba2558455e949 -
Trigger Event:
workflow_dispatch
-
Statement type: