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.0rc1

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.0rc1
File Size Uploaded
homapy-0.1.0rc1.tar.gz 1.5 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for homapy 0.1.0rc1
File
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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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
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