This release is a pre-release and may not be stable for production use.
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}
}
Metadata
Release files for homapy 0.1.0rc1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| homapy-0.1.0rc1.tar.gz | 1.5 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| homapy-0.1.0rc1-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| homapy-0.1.0rc1-cp312-cp312-manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.28+ x86-64 | Details |
| homapy-0.1.0rc1-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| homapy-0.1.0rc1-cp311-cp311-manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.28+ x86-64 | Details |
| homapy-0.1.0rc1-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| homapy-0.1.0rc1-cp310-cp310-manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.28+ x86-64 | Details |
| homapy-0.1.0rc1-cp39-cp39-win_amd64.whl | CPython 3.9 | CPython 3.9 | Windows x86-64 | Details |
| homapy-0.1.0rc1-cp39-cp39-manylinux_2_28_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.28+ x86-64 | Details |
Total release size: 1.4 GB
Release files / homapy-0.1.0rc1.tar.gz
| Download URL | homapy-0.1.0rc1.tar.gz |
|---|---|
| Size | 1.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3291dd494db7829389ec6bc340f1dd35020683ee414bc5aa9e345c2ce2c58e4d
|
|
BLAKE2b-256 checksum How to use checksums |
6918a326753a7e2d5baaeafd0f1c4672bce7727fe7f35e6d868e04b7a7a55550
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / homapy-0.1.0rc1-cp312-cp312-win_amd64.whl
| Download URL | homapy-0.1.0rc1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 254.8 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7bc5a9c53c9e8a78908c659e3c243f3c1011aae8a374bc312ed3f9d2e54a22f9
|
|
BLAKE2b-256 checksum How to use checksums |
995c9dd1dd95e27f961645c59150fdaca688a5d2c83608390d085e1a09232e61
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / homapy-0.1.0rc1-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | homapy-0.1.0rc1-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 87.6 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
03ad0fef23b3e57ad0470c86b18710cfee7d0344dd3237deadb1ccb439128d52
|
|
BLAKE2b-256 checksum How to use checksums |
ad82f2a00bd95cf8541861f31fa00de38479e48cc4523235efa21e69e78cb57e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / homapy-0.1.0rc1-cp311-cp311-win_amd64.whl
| Download URL | homapy-0.1.0rc1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 254.8 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
246885adc62e84e8d493d1f2a7db6d6b2f6d2df3581e4de69772e15a8348c2df
|
|
BLAKE2b-256 checksum How to use checksums |
b6a9fc21ec25f6b94ad88de7d99a039579eba13409f4cf1c49d12b3aac510b38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / homapy-0.1.0rc1-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | homapy-0.1.0rc1-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 87.6 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e938525b5cc5bbfe81677eb11d9e91c06ae8fe4fab8185e2f18b087196d408a2
|
|
BLAKE2b-256 checksum How to use checksums |
40acdd08f50477f9b5563b0d48b1663e4cf844cd83b620d7ac3c7c8efed2246b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / homapy-0.1.0rc1-cp310-cp310-win_amd64.whl
| Download URL | homapy-0.1.0rc1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 254.8 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8fd613c07dd1ca4f147e7644acd7552fd69ff174e11951a40f51f2414b9099b7
|
|
BLAKE2b-256 checksum How to use checksums |
3eb7954d24a0f55dab18dcc44c230b3cf8c0c7230643a76a143f8605249bd7ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / homapy-0.1.0rc1-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | homapy-0.1.0rc1-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 87.6 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
b8e284c54b856925cf9df17feaacfc641fa4f97c69cd7ab6e6a45b53fda591f6
|
|
BLAKE2b-256 checksum How to use checksums |
91dbf2cf44c5cfe53e0bcc2074003ceba0a367e00c69681c216f10e4bf139fb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / homapy-0.1.0rc1-cp39-cp39-win_amd64.whl
| Download URL | homapy-0.1.0rc1-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 254.8 MB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ad5e915c7d77a5155ed79020ccef9a34b647b849e556ebb809e377b9786e9a60
|
|
BLAKE2b-256 checksum How to use checksums |
71e38d57039555949661afa9abfc760acbecad5b086bebf01eb6431d229b6aed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / homapy-0.1.0rc1-cp39-cp39-manylinux_2_28_x86_64.whl
| Download URL | homapy-0.1.0rc1-cp39-cp39-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 87.6 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
3540f23f89e34f9b7ec66630390ec66b6f2bc34322b0cff931037c99b5f6e65d
|
|
BLAKE2b-256 checksum How to use checksums |
f2e9e49aba97477505c487b24dc29369371fd2e6f4db1de07cad6b6192cfddd5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency log