Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Homa Build

Homa is a C++20 library with two complementary purposes:

  1. 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.

  2. A drop-in SPD linear solver wrapper with a uniform analyze -> factorize -> solve API 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.0rc2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for homapy 0.1.0rc2
File Size Uploaded
homapy-0.1.0rc2.tar.gz 1.5 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for homapy 0.1.0rc2
File
homapy-0.1.0rc2-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
homapy-0.1.0rc2-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
homapy-0.1.0rc2-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
homapy-0.1.0rc2-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
homapy-0.1.0rc2-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
homapy-0.1.0rc2-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
homapy-0.1.0rc2-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
homapy-0.1.0rc2-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.9 GB

Release files / homapy-0.1.0rc2.tar.gz

Download URL homapy-0.1.0rc2.tar.gz
Size 1.5 MB
Tags Source
SHA-256 checksum
How to use checksums
0431b7fc92be8fc7643b083762e78b9c7f6668a8dcd78fdf043b0c3d2e25191e
BLAKE2b-256 checksum
How to use checksums
fd634cf23ded11411a74ea23ea3190a3225fa835e8fa2465b983d644bb87c9b8
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 16, 2026.

Transparency log

Release files / homapy-0.1.0rc2-cp312-cp312-win_amd64.whl

Download URL homapy-0.1.0rc2-cp312-cp312-win_amd64.whl
Size 254.8 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
741e42130d95b26c92eb2f04ec698a172c063062ffecc1a6e7d11ced71813bb1
BLAKE2b-256 checksum
How to use checksums
93fb7fc428f87b45d16420dabea9a65a9422ea5d60b2c518c69ae4c441248f50
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 16, 2026.

Transparency log

Release files / homapy-0.1.0rc2-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL homapy-0.1.0rc2-cp312-cp312-manylinux_2_28_x86_64.whl
Size 207.3 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1c059430314ddc50ffeace3866a9c9bbf3b7b944ee46a6cbdd7e1593999092bc
BLAKE2b-256 checksum
How to use checksums
9d90e58d7153848881f1c017e78fb9dc2d6fe950ffdf792e7427968fbaf80c02
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 16, 2026.

Transparency log

Release files / homapy-0.1.0rc2-cp311-cp311-win_amd64.whl

Download URL homapy-0.1.0rc2-cp311-cp311-win_amd64.whl
Size 254.8 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
c8baacfd72cd207ca728132df98b5510812d673cb0d039caf75fb885472a0c8a
BLAKE2b-256 checksum
How to use checksums
e47ae8d34c13d1b7e14fd789537fda4ae62e1f00d49ddad6a9cd4c0b26825f2a
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 16, 2026.

Transparency log

Release files / homapy-0.1.0rc2-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL homapy-0.1.0rc2-cp311-cp311-manylinux_2_28_x86_64.whl
Size 207.3 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
38085be3fe48394a1705ffd3024a22ad8eaf3fda5c0841c5496462576cbbcc97
BLAKE2b-256 checksum
How to use checksums
8c83821505ded23e79d5b82c44f7c54ab69c1d93fdfb3b86f4d72bad1ea900df
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 16, 2026.

Transparency log

Release files / homapy-0.1.0rc2-cp310-cp310-win_amd64.whl

Download URL homapy-0.1.0rc2-cp310-cp310-win_amd64.whl
Size 254.8 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
d605a5a8198bec5a27e30b99376ca672c5fd42f8b3418da4f9a6f04b19f640c3
BLAKE2b-256 checksum
How to use checksums
1508a5f42e72112bc4985011d0d3f1d2cde826444d043c2b9be625dd1681b968
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 16, 2026.

Transparency log

Release files / homapy-0.1.0rc2-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL homapy-0.1.0rc2-cp310-cp310-manylinux_2_28_x86_64.whl
Size 207.3 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5cda69826919c6fd78ca1f96300c3b7ac502f6bec0bc139fc8259347c0363b4b
BLAKE2b-256 checksum
How to use checksums
58ba32e686298198dcf840bf8d7a86ec6e17fb1103b71f6656ee0df5d6932f9c
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 16, 2026.

Transparency log

Release files / homapy-0.1.0rc2-cp39-cp39-win_amd64.whl

Download URL homapy-0.1.0rc2-cp39-cp39-win_amd64.whl
Size 254.8 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
83e6857944758caea1b27bff9eb50226a851fb28b6d7e8598809b0cf2ef9bc33
BLAKE2b-256 checksum
How to use checksums
bfc5f55d19436caea047565062a528b7916178346aec43bc08d319410ff223f1
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 16, 2026.

Transparency log

Release files / homapy-0.1.0rc2-cp39-cp39-manylinux_2_28_x86_64.whl

Download URL homapy-0.1.0rc2-cp39-cp39-manylinux_2_28_x86_64.whl
Size 207.3 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5fbb3230171f3e08f6187b7ca637e196c9124b80ea7c717bf9efbbc03538059a
BLAKE2b-256 checksum
How to use checksums
319d59262e6620c304692c0ccfd78dc870b7995a05bf41b266355c840c5d365d
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 16, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page