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

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.2
File Size Uploaded
sagebrush-0.7.2.tar.gz 1.6 MB Details

Built distributions (wheels)

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

Total release size: 21.3 MB

Release files / sagebrush-0.7.2.tar.gz

Download URL sagebrush-0.7.2.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
4e76ed57663bd420ded20ceeed1f5db7757080bc2afd8c6f3a43582383a7939e
BLAKE2b-256 checksum
How to use checksums
dab2e1623d6d6ae872d12dc977fbe210efffdd0ad49144fa2243e4e7ae2f0a07
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.2-cp39-abi3-win_amd64.whl

Download URL sagebrush-0.7.2-cp39-abi3-win_amd64.whl
Size 4.1 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
1f30252504fd7887972504cca8b3d3825e6b4d38b1ce2f7c17289a7deeba4552
BLAKE2b-256 checksum
How to use checksums
84cc80aec11a59b191c13bbe8c20087c9c0c0e2517bf2c7f88b9f801f00702cc
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.2-cp39-abi3-manylinux_2_28_x86_64.whl

Download URL sagebrush-0.7.2-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
bd1c12c5d1fc8052558aa781a9966129b3670733f9b4bb3bae4f4576fb8e89cc
BLAKE2b-256 checksum
How to use checksums
7b18306fe5b6a474e1a3d4b0dc093d416f8f70340400c3f3052312caf288cf91
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.2-cp39-abi3-manylinux_2_28_aarch64.whl

Download URL sagebrush-0.7.2-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
df8d6fcd252431e89d6ef696b1eadf97c08218069d6e548842d36b18d5302de2
BLAKE2b-256 checksum
How to use checksums
b5deb477e0fda3ff8a7dca568db37b0beefcdaaf47b53ef0e91b7b0463541821
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.2-cp39-abi3-macosx_11_0_arm64.whl

Download URL sagebrush-0.7.2-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
e92681782b7c53ffa54836c23bdd63927614ef4f600b1b94296438cf15988b56
BLAKE2b-256 checksum
How to use checksums
f2c6663636d9782cc418d50ea2a1562b3b16525bdc4ca45c36c5fb30236ebe3c
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.2-cp39-abi3-macosx_10_12_x86_64.whl

Download URL sagebrush-0.7.2-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
72d61ff36ba2c680bbcf8a6e50d993595e8ff803badc9367c6868a81ab113a58
BLAKE2b-256 checksum
How to use checksums
3a6c29466414a285936c29a627213eb0db0a755bb19ef8f14b12b94a8912030e
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

This release

0.7.2 This release

6 release files

0.7.1

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