Skip to main content

cholrot

DOI

cholrot is a small experimental NumPy package for rank-one Cholesky updates/downdates, implicit modified-factor products, and rank-one modified Cholesky solves.

The package is intentionally narrower than MATLAB-style cholupdate: besides returning the modified Cholesky factor, it exposes operations that avoid forming intermediate matrices when you only need a product or a solve.

Why this exists

Suppose R is a Cholesky factor of a positive definite matrix A:

  • upper convention: A = R.T @ R, or
  • lower convention: A = L @ L.T.

After a rank-one modification

A_new = A + alpha * z z.T,       alpha in {+1, -1}

it is often wasteful to build A_new, recompute its Cholesky factor, and then multiply or solve. cholrot provides:

  • update(...): materialize the modified Cholesky factor D.
  • downdate(...): convenience wrapper for alpha=-1.
  • matvec(...): compute D @ v directly, without materializing D.
  • cholsolve(...): solve (A + alpha*z*z.T) x = b without materializing A_new or D.
  • logdet_rank1(...): compute the modified log determinant.

The public API is Python, but the package is designed around compiled kernels. When the pybind11 extension is available, update(...), matvec(...), and cholsolve(...) dispatch to C++ implementations; otherwise they fall back to the reference NumPy/Python implementation. cholsolve(...) uses triangular solves and the rank-one inverse identity, so it avoids forming both the modified matrix and the modified factor.

Binary wheels

Release wheels are built with GitHub Actions and cibuildwheel for:

  • CPython 3.12, 3.13, and 3.14;
  • Linux manylinux2014 x86_64;
  • macOS Intel and Apple Silicon;
  • Windows 64-bit.

For most users this means a normal install should use a prebuilt wheel:

python -m pip install cholrot

The source distribution remains available for platforms not covered by the release matrix, provided a C++17 compiler and pybind11-compatible build environment are present.

Compile from a local checkout

The pybind11 extension is compiled automatically when you install from the repository. You need a C++17 compiler: g++/clang++ on Linux, Xcode Command Line Tools on macOS, or Microsoft C++ Build Tools on Windows.

python -m pip install --upgrade pip
python -m pip install -e .[test]
pytest
python -c "import cholrot; print(cholrot.backend())"

A successful compiled install prints:

cpp

To compare against the reference NumPy/Python backend:

CHOLROT_PURE_PYTHON=1 pytest

Build release artifacts with:

python -m pip install build twine
python -m build
python -m twine check dist/*

C++ / pybind11 backend

The C++ backend lives in src/cholrot/_core_ext.cpp and is built with pybind11. It currently mirrors the tested Python algorithms for:

  • materialized rank-one update/downdate via update(...);
  • direct modified-factor products via matvec(...);
  • rank-one modified solves via cholsolve(...);
  • upper and lower Cholesky conventions;
  • method="hy", method="hc", and method="algorithm_a".

You can check the active backend at runtime:

import cholrot
print(cholrot.backend())  # "cpp" or "python"

For debugging or correctness comparisons, force the reference backend with:

CHOLROT_PURE_PYTHON=1 pytest

Minimal example

import numpy as np
from cholrot import downdate, matvec, cholsolve, identity_matvec

rng = np.random.default_rng(0)
n = 6
A = rng.normal(size=(n, n))
A = A.T @ A + n * np.eye(n)
R = np.linalg.cholesky(A).T          # upper Cholesky factor: A = R.T @ R
z = 0.1 * rng.normal(size=n)
v = rng.normal(size=n)

D = downdate(R, z, method="hy")      # D.T @ D = R.T @ R - z z.T
w = matvec(R, z, v, method="hy")     # same as D @ v, but D is not formed
x = cholsolve(R, z, v, alpha=-1)     # solve (A - z z.T) x = v

np.testing.assert_allclose(w, D @ v)
np.testing.assert_allclose(
    x,
    np.linalg.solve(A - np.outer(z, z), v),
)

API conventions

By default, cholrot uses the upper Cholesky convention:

A = R.T @ R

Set lower=True for the lower convention:

A = L @ L.T

Supported methods:

  • method="hy": hyperbolic-rotation form.
  • method="hc": Chambers-style hyperbolic-cosine variant.
  • method="algorithm_a": Algorithm A variant.

Non-regression tests

The test suite has two layers:

  1. property-style correctness tests comparing update, downdate, matvec, cholsolve, and logdet_rank1 against NumPy references;
  2. golden-value regression tests in tests/test_regression.py to catch silent changes in sign conventions, lower/upper orientation, or recurrence details.

Recommended release checks:

pytest
CHOLROT_PURE_PYTHON=1 pytest

The GitHub Actions workflow runs both the compiled/default backend and the pure Python backend on Linux, macOS, and Windows.

Benchmarks

Run local dense rank-one benchmarks with:

python benchmarks/bench_rank1.py --sizes 100 200 400 800 1600 --repeat 5
python benchmarks/bench_rank1.py --csv benchmarks/results/local.csv

This benchmark compares three routes for computing w = D @ v:

  1. recompute Cholesky with NumPy, then multiply;
  2. materialize the modified factor with cholrot.downdate, then multiply;
  3. compute D @ v directly with cholrot.matvec.

For the identity-structured case,

D D.T = I + alpha * z z.T,

run:

python benchmarks/bench_identity.py --sizes 100 200 400 800 1600 3200 6400 --repeat 5

Benchmark tables should report the CPU, OS, Python version, NumPy version, thread settings, cholrot.backend(), matrix size, and the three timings above. The current C++ backend is single-threaded; NumPy may use a multithreaded BLAS or LAPACK backend. For this reason, both single-threaded BLAS and default local thread settings are useful benchmark modes.

The intended benchmark conclusion is not "cholrot always beats MKL". The claim is narrower: for rank-one modified workflows, cholrot can avoid full recomputation and can compute products or solves without materializing the modified factor.

Documentation

The repo includes a Sphinx documentation skeleton in docs/, suitable for Read the Docs. Build it locally with:

python -m pip install -e .[docs]
sphinx-build -b html docs docs/_build/html

Keep the package README short and practical. Put the algorithm derivations, math, API reference, and benchmark methodology in the Sphinx docs.

Development status

This is an alpha-stage scientific package. The first public release focuses on rank-one Cholesky update/downdate routines, direct modified-factor products, and rank-one modified solves through a tested C++/pybind11 backend with a Python fallback.

The package implements known numerical linear algebra algorithms. The public contribution is the packaging, API design, correctness tests, benchmarks, and the focus on product/solve routines that avoid unnecessary materialization.

License

cholrot is licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.

The software is provided on an "AS IS" basis, without warranties or conditions of any kind. Users are responsible for validating numerical behavior in their own applications.

Contributions are accepted under the same Apache-2.0 license; see CONTRIBUTING.md. Maintainer release steps are documented in RELEASE.md.

Disclaimer

This is an independent open-source project developed in my personal time and is not affiliated with my employer.

References

Useful background and comparison points include:

  • LINPACK Cholesky update/downdate routines, including DCHUD and DCHDD.
  • Seeger, M. Low Rank Updates for the Cholesky Decomposition.
  • MATLAB cholupdate.
  • JAX jax.lax.linalg.cholesky_update.
  • TensorFlow Probability tfp.math.cholesky_update.

Citation

If you use cholrot, please cite the archived Zenodo release:

Miryusupov, S. (2026). cholrot: Rank-one Cholesky update/downdate routines for Python/C++ (v0.1.1). Zenodo. https://doi.org/10.5281/zenodo.20382065

Metadata

Release files for cholrot 0.1.3

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

Source distribution (sdist)

Source distribution for cholrot 0.1.3
File Size Uploaded
cholrot-0.1.3.tar.gz 36.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for cholrot 0.1.3
File
cholrot-0.1.3-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
cholrot-0.1.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
cholrot-0.1.3-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
cholrot-0.1.3-cp314-cp314-macosx_10_13_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.13+ x86-64 Details
cholrot-0.1.3-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
cholrot-0.1.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
cholrot-0.1.3-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
cholrot-0.1.3-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details
cholrot-0.1.3-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
cholrot-0.1.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
cholrot-0.1.3-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
cholrot-0.1.3-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details

Total release size: 1.4 MB

Release files / cholrot-0.1.3.tar.gz

Download URL cholrot-0.1.3.tar.gz
Size 36.0 kB
Tags Source
SHA-256 checksum
How to use checksums
30426d4f3d200f3c8bdcdc98d8a0342b39f1289241b29e1d5a7a257b8f530c46
BLAKE2b-256 checksum
How to use checksums
5984782cdbd865bf7d0c820f12b48f3420b58574f58069512de3d7952e8804d3
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp314-cp314-win_amd64.whl

Download URL cholrot-0.1.3-cp314-cp314-win_amd64.whl
Size 103.0 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
1ea3733d98debfcbbf4a3b1862ec5458ee4ca0c1a35100814e8cd85e1e5f6563
BLAKE2b-256 checksum
How to use checksums
fd05c60169d8da121458409900ea1f2fe097e16ec33f8a454d14ca3321d242b9
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cholrot-0.1.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 144.2 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
c346e9dd91f83201cb16d9ecfd228d72e3460cec2f742ad113709ebca9ba23ab
BLAKE2b-256 checksum
How to use checksums
8de1f3969f17f689f8058edfa5b7ff5afee767fd69931bb7d30aed049a403c9d
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp314-cp314-macosx_11_0_arm64.whl

Download URL cholrot-0.1.3-cp314-cp314-macosx_11_0_arm64.whl
Size 101.6 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d9d422942c408ab6745a0f3b1938438bcae1deb84ea659f5c93acb88f14e6a3b
BLAKE2b-256 checksum
How to use checksums
269fcb00956111aabd586b47b1b03cf1f9c84230a44d8aee2e7765546e12cd82
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp314-cp314-macosx_10_13_x86_64.whl

Download URL cholrot-0.1.3-cp314-cp314-macosx_10_13_x86_64.whl
Size 108.3 kB
Tags CPython 3.14 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
ecf8e10a16df237bd1ab3c86a02572edb7d94c25711e70d4e90e898c195ca558
BLAKE2b-256 checksum
How to use checksums
4f888a06ed7f1808e5565789d6b5a4185b1693b65f8a7712343af76a1c958322
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp313-cp313-win_amd64.whl

Download URL cholrot-0.1.3-cp313-cp313-win_amd64.whl
Size 101.1 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
2b49141c01cdd4270193071c3231516a91f4d2c42cbaf15219e5146ba30b3531
BLAKE2b-256 checksum
How to use checksums
5b1022221a66a19fc34b19ea68a0356dcd639b1f742a50d734ed1164775a6a59
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cholrot-0.1.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 144.2 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1e65fa7ff7f4ca91f2a8b4c9864c2c2a183589b5f05443cad394e5d1db1adac0
BLAKE2b-256 checksum
How to use checksums
6da7b7ccb7a059f8b3c27f4503451677a6202e8cb82110f76eb54c43ffa16c8c
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp313-cp313-macosx_11_0_arm64.whl

Download URL cholrot-0.1.3-cp313-cp313-macosx_11_0_arm64.whl
Size 101.5 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
86d6f514d24d2e454811ed0dfa6998843582bb95a39160ecdf37d0139165ff1d
BLAKE2b-256 checksum
How to use checksums
437b656305e8efbc3d71491571444908a76278ad40d85c1a8434ff20a22443f6
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp313-cp313-macosx_10_13_x86_64.whl

Download URL cholrot-0.1.3-cp313-cp313-macosx_10_13_x86_64.whl
Size 108.1 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
d7d01e311f60b1c3ebca730df0d79b6d3d6b1e2883adb808e9d3a7de842710f0
BLAKE2b-256 checksum
How to use checksums
dedff48c9e113fefac847fe27defd1e6c9cdff930143f175e9d00683ba659446
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp312-cp312-win_amd64.whl

Download URL cholrot-0.1.3-cp312-cp312-win_amd64.whl
Size 101.1 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
015d0c95912d6d381081165c31ab1509435406031ba7feaec620c285e50549ed
BLAKE2b-256 checksum
How to use checksums
1c461387f56b2a0d4a1f9cc4bdf435ecaf754e6ae807e49dd8b8a730990d4f1c
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cholrot-0.1.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 144.1 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
27202d82ae8cb11610e5640859e41f9194f4011219331a5e348cec03fc039cde
BLAKE2b-256 checksum
How to use checksums
d1f9ff7a62bb792e33e6cd4e2a0e3874536c2d1669dd0ca2dae8a933fbcf1bdf
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp312-cp312-macosx_11_0_arm64.whl

Download URL cholrot-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Size 101.5 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1c58bf098334519977e92649096fac83a07d343d2af8569f00159e337530f1ef
BLAKE2b-256 checksum
How to use checksums
6a4422420bae880b339281880e0a6edc40f0b324ab78f58d355058852ba2f4e9
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 May 25, 2026.

Transparency log

Release files / cholrot-0.1.3-cp312-cp312-macosx_10_13_x86_64.whl

Download URL cholrot-0.1.3-cp312-cp312-macosx_10_13_x86_64.whl
Size 108.1 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
d47342c586c652fbf4471b6a1550810858ab71559510c52b241cad5110cd92da
BLAKE2b-256 checksum
How to use checksums
ba351000dfebffc32dd7e898fc4a90d37025348735df31320d3f49474484855a
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 May 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

13 release files

0.1.1

13 release files

0.1.0

13 release files

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