Skip to main content

sagebrush

Fast, certified engines for research mathematics, in Rust, for Python. Permissively licensed (MIT OR Apache-2.0): use them anywhere, in anything, from agents and notebooks to products. No C libraries; one abi3 wheel per platform covers Python 3.9 and later.

This is an early release of Sagebrush, which also runs in the browser at sagebrush.space.

>>> from sagebrush import nf, mf, ap, poly, linalg

>>> nf.bnf([-11, 0, 0, 1])              # Q[x]/(x^3 - 11): class group, regulator
{'assumes': ['GRH'], 'certified': True, 'cyc': [2], 'degree': 3, 'disc': -3267, 'h': 2, 'r1': 1, 'r2': 1, 'regulator': '5.5872066260609077619', 'w': 2, 'w_proven': True}

>>> nf.factor_integer(2**128 + 1)       # ECM
[(59649589127497217, 1), (5704689200685129054721, 1)]

>>> nf.primes_above([-11, 0, 0, 1], 5)  # 5 = P_1 P_2 with residue degrees 1, 2
[{'e': 1, 'f': 1, 'p': 5, 'pi': [-1, 1, 0], 'pi_den': 1}, {'e': 1, 'f': 2, 'p': 5, 'pi': [1, 1, 1], 'pi_den': 1}]

>>> nf.lll([[1, 1, 1], [-1, 0, 2], [3, 5, 6]])
[[0, 1, 0], [1, 0, 1], [-1, 0, 2]]

>>> poly.factor([5, -1, -1, 1])         # x^3 - x^2 - x + 5 over Z
(1, [([5, -1, -1, 1], 1)])

>>> linalg.det([[2, 7, 1], [8, 2, 8], [1, 8, 2]]), linalg.charpoly([[0, 1], [-1, 0]])
(-114, [1, 0, 1])

>>> linalg.solve([[2, 1], [1, 3]], [[1], [2]])   # exact, over QQ
[[Fraction(1, 5)], [Fraction(3, 5)]]

>>> d = mf.newforms(389, 2, bound=6)    # newform orbits of S_2(Gamma0(389))
>>> d["status"], [(o["letter"], o["dim"]) for o in d["newforms"]]
('proven', [('a', 1), ('b', 2), ('c', 3), ('d', 6), ('e', 20)])

Polynomials are coefficient lists, constant term first.

Sage-compatible: sagebrush.sage

For Sage users, sagebrush.sage is a namespace with Sage's names, behaviour and printing, for what Sagebrush implements: number fields, polynomials, matrices, modular forms and symbols, elliptic curves, Dirichlet characters, integers, plotting.

>>> from sagebrush.sage import *
>>> factor(2026)
2 * 1013
>>> x = PolynomialRing(QQ, 'x').gen()
>>> K = NumberField(x**3 + 17*x + 1, 'a')
>>> K.class_group()
Class group of order 3 with structure C3 of Number Field in a with defining polynomial x^3 + 17*x + 1
>>> K.regulator()
2.83341678218613
>>> K.factor(11)
(Fractional ideal (11, a + 3))^2 * (Fractional ideal (11, a + 5))
>>> Integer(2026).is_prime(), Integer(2026) / 4
(False, 1013/2)
>>> EllipticCurve('389a1').rank()
2

This is plain Python, without Sage's preparser: write x**3 (x^3 is xor in Python, and raises an error here as in Sage), Integer(2)/3 for a rational (2/3 is a float), and K = NumberField(f, 'a'); a = K.gen() for K.<a> = NumberField(f). Integers from Integer(n) or ZZ(n) have Sage's methods. The output is checked line by line against Sage itself: Sage's own preparser turns Sagebrush's Sage test files into plain Python, and their output under sagebrush.sage must equal Sage's.

For AI agents: sagebrush-mcp

This package installs sagebrush-mcp, a Model Context Protocol server with no other dependencies.

  • Claude Code: claude mcp add sagebrush -- sagebrush-mcp
  • Other clients: {"mcpServers": {"sagebrush": {"command": "sagebrush-mcp"}}}

Its tools:

  • sage: Sage syntax in a persistent session; returns printed output, the last value and SVG plots.
  • python: the same session, as plain Python.
  • factor, number_field, newforms: shortcuts.
  • guide: what is implemented. reset: clear the session.

Each call has a time limit. When it expires the computation is interrupted and the session keeps its variables. The session also works on its own (sagebrush.session.Session), and sagebrush.preparse.preparse turns Sage syntax into Python.

Engines

  • sagebrush.nf: number fields: maximal orders, prime ideals, class groups, units and regulators (assuming GRH, with a field-specific bound for the generators), quadratic class groups to |D| ~ 10^60; integer factoring (ECM); Hermite and Smith forms, LLL; complex roots to any precision.
  • sagebrush.mf: modular forms of weight k >= 2 with character: dimensions, exact Hecke characteristic polynomials, newform orbits, trace forms.
  • sagebrush.modsym: weight-2 modular symbols for Gamma0(N).
  • sagebrush.ap: traces of Frobenius a_p of elliptic curves over Q.
  • sagebrush.poly: factoring in Z[x] and F_p[x]; products, gcds and exact division in Z[x].
  • sagebrush.linalg: exact matrices over ZZ and QQ: det, rank, rref, solve, inverse, charpoly, kernel (multimodular and p-adic, every answer certified).

Results are checked against independent systems: PARI for class groups, Sage and Magma for the rest, and LMFDB for modular forms.

License

Copyright (c) 2026 SageMath, Inc. Licensed under either of the Apache License, Version 2.0 or the MIT license, at your option. The package also contains John Cremona's elliptic curves of conductor below 1000 (from ecdata, under the Artistic License 2.0) and the Rust crates its engine is built from, each under its own license: see THIRD-PARTY-NOTICES.txt.

Metadata

Release files for sagebrush 0.7.1

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

Source distribution (sdist)

Source distribution for sagebrush 0.7.1
File Size Uploaded
sagebrush-0.7.1.tar.gz 1.6 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for sagebrush 0.7.1
File
sagebrush-0.7.1-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
sagebrush-0.7.1-cp39-abi3-manylinux_2_28_x86_64.whl CPython 3.9 abi3 Linux glibc 2.28+ x86-64 Details
sagebrush-0.7.1-cp39-abi3-manylinux_2_28_aarch64.whl CPython 3.9 abi3 Linux glibc 2.28+ ARM64 Details
sagebrush-0.7.1-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
sagebrush-0.7.1-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 21.2 MB

Release files / sagebrush-0.7.1.tar.gz

Download URL sagebrush-0.7.1.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
aa2e93abba7bd5afe90a6ed324a6b3a5770a02de9ab99c7f18d328c2f579f856
BLAKE2b-256 checksum
How to use checksums
53f8a71ed1c59faf7114badc70a3ffae5c171ed1532dd1560632e19ab3cf78b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 10, 2026.

Transparency log

Release files / sagebrush-0.7.1-cp39-abi3-win_amd64.whl

Download URL sagebrush-0.7.1-cp39-abi3-win_amd64.whl
Size 4.1 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
26bf28b38610ce6cd015cb0515ce6e3e75feac89116173e38e92e3824c3b0909
BLAKE2b-256 checksum
How to use checksums
787be9b11eeeb4188442397b97134eb1274de7cebd0e1f85e00e71fbd4728e0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 10, 2026.

Transparency log

Release files / sagebrush-0.7.1-cp39-abi3-manylinux_2_28_x86_64.whl

Download URL sagebrush-0.7.1-cp39-abi3-manylinux_2_28_x86_64.whl
Size 4.0 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
a019188b7be8657964b7dc6132762e6c41f115007e35d877f3723ccf33a6eb7a
BLAKE2b-256 checksum
How to use checksums
5e7993090c0e4f149523be3c8a45f65584d98622537da07784d6464ff86a0712
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 10, 2026.

Transparency log

Release files / sagebrush-0.7.1-cp39-abi3-manylinux_2_28_aarch64.whl

Download URL sagebrush-0.7.1-cp39-abi3-manylinux_2_28_aarch64.whl
Size 3.8 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
d96c6d9239f06b2dc54cf3f89202b9b7b1927f2add80c69711c6846d079f7a22
BLAKE2b-256 checksum
How to use checksums
250f79d56dcb41570e9cbfdf023106b93d5f7f93d798b05fa244590de5526b78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 10, 2026.

Transparency log

Release files / sagebrush-0.7.1-cp39-abi3-macosx_11_0_arm64.whl

Download URL sagebrush-0.7.1-cp39-abi3-macosx_11_0_arm64.whl
Size 3.7 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ed9261d8508a196fb15251cac3bc2f28fb4c61a4598e44a5614a638cfe6deb68
BLAKE2b-256 checksum
How to use checksums
06969f4d01926f2ecc6acdd980dddf14cb57985f6938628b058ff05ca81c6ec3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 10, 2026.

Transparency log

Release files / sagebrush-0.7.1-cp39-abi3-macosx_10_12_x86_64.whl

Download URL sagebrush-0.7.1-cp39-abi3-macosx_10_12_x86_64.whl
Size 4.0 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b3aee5a2acc675742027fa0eaa08119d893ab29b615dba33e121932bbc6fa3bc
BLAKE2b-256 checksum
How to use checksums
176ed141dad9523487d8f42870cbe4ed83368d5caaf8901ba5e12c533774efc9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

0.7.2

6 release files

This release

0.7.1 This release

6 release files

0.7.0

6 release files

0.6.0

6 release files

0.5.1

6 release files

0.5.0

6 release files

0.4.0

6 release files

0.3.0

6 release files

0.2.2

6 release files

0.2.1

6 release files

0.2.0

6 release files

0.1.0

6 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