Catalog PyPI
PACKAGE EXPLORERView in registry

abakus

PyPI

Sparse, vectorized algebra over countably infinite bases: symmetric functions, Clifford and Weyl algebras, polynomials, with integer partitions encoded as bit patterns.

algebracliffordcombinatoricsfunctionshopfintegernumbapartitionssymmetricweyl
Versions collected1
Direct dependencies4From release 0.1.0
Last observed20 Oct, 17:09 UTC

README

Version 0.1.0 documentation

abakus

Sparse, vectorized algebra over countably infinite bases.

Many algebras in mathematics have a countable basis: polynomials in infinitely many variables, symmetric functions, Clifford and exterior algebras, Weyl algebras, class algebras of symmetric groups. abakus computes in such algebras directly in a chosen basis, with numpy arrays and Numba-compiled kernels.

Ideas

Vectors and bases. An element of an algebra is a Vector: a finite linear combination of basis elements, stored as an integer index array and a coefficient array. A basis is a class that knows what its indices mean. It defines multiplication, comultiplication and changes of basis on whole arrays of indices at once. Tensor products, smash products and linear maps are built uniformly on top of this.

Countably infinite bases. Most bases are infinite: all partitions, all monomials in infinitely many variables. Each vector touches only finitely many basis elements, and indices grow as needed. Beyond the int64 range, indices turn into exact Python integers on their own.

Tensor products are built uniformly: index rows are placed side by side, a @ b is a⊗b, and Koszul signs appear when two factors are superalgebras. Smash products such as Weyl algebras are tensor products with a twisted multiplication.

Partitions as integers. An integer partition is encoded by the boundary of its Ferrers diagram: a step up is a 1 bit, a step right is a 0 bit. The partition (8, 5, 2, 2) becomes 0b10001000110 == 1094. Partitions are then plain integers that can live in numpy arrays. Containment of diagrams implies x <= y. Horizontal and vertical strips, rim hooks, and transposition become bit operations. So do the Pieri, Littlewood–Richardson and Murnaghan–Nakayama rules (see docs/BinaryPartitions.md).

Example

>>> from abakus.symm import s, h, p
>>> s(2, 1) * s(1)              # Littlewood–Richardson rule
s{2,2} + s{3,1} + s{2,1,1}
>>> h(s(2, 1))                  # Jacobi–Trudi
-h{3} + h{2,1}
>>> s(p(3))                     # Murnaghan–Nakayama
s{3} - s{2,1} + s{1,1,1}
>>> s(100) * s(100) == s(h(100, 100))
True

>>> from abakus import bpart
>>> x = bpart.from_lambda([8, 5, 2, 2])
>>> x
1094
>>> bpart.to_lambda(bpart.transpose(x))
[4, 4, 2, 2, 2, 1, 1, 1]

>>> from abakus.clifford import CliffordAlgebraBasis, ExteriorAlgebraBasis as E
>>> C = CliffordAlgebraBasis[3, 0]
>>> C.u * C.v, C.v * C.u, (C.u + C.v) ** 2
(uv, -uv, 2)

>>> from abakus.polynomial import PolynomialBasis
>>> from abakus.weyl import polynomial_weyl_basis
>>> W = polynomial_weyl_basis(PolynomialBasis["x"])
>>> W.dx * W.x
1 + x∂

>>> s(2) @ E.u
s{2}⊗u

More in the tutorial, in docs/SymmetricFunctions.md and in docs/TensorProducts.md.

Modules

ModuleContents
abakus.vectorVector, VectorBasis, tensor products, linear and bilinear maps
abakus.bpartinteger partitions encoded as ints, scalar and array versions
abakus.polynomial(Laurent) polynomials in finitely many variables
abakus.infpolypolynomial rings with bases indexed by partitions
abakus.cliffordClifford and exterior algebras
abakus.symmsymmetric functions (e, h, p, m, Schur), class algebras, Ivanov–Kerov algebra
abakus.weylWeyl algebras as smash products

Installation

pip install abakus

Requires Python 3.14 or later, numpy and Numba.

For development:

pip install -e ".[dev]"
pytest

License

MIT, see LICENSE.

Downloads & popularity

4downloads
1-day window · source-reported counts17 Oct 2026
94470
2026-10-12: 94 · observed 2026-10-20T18:20:01.9491151Z · period 2026-10-12–2026-10-122026-10-13: 26 · observed 2026-10-20T18:20:01.9491151Z · period 2026-10-13–2026-10-132026-10-14: 7 · observed 2026-10-20T18:20:01.9491151Z · period 2026-10-14–2026-10-142026-10-15: 4 · observed 2026-10-20T18:20:01.9491151Z · period 2026-10-15–2026-10-152026-10-16: 3 · observed 2026-10-20T18:20:01.9491151Z · period 2026-10-16–2026-10-162026-10-17: 4 · observed 2026-10-20T18:20:01.9491151Z · period 2026-10-17–2026-10-17
12 Oct17 Oct

pypistats · 6 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-17 – 2026-10-1742026-10-20T18:20:01.9491151Z
2026-10-16 – 2026-10-1632026-10-20T18:20:01.9491151Z
2026-10-15 – 2026-10-1542026-10-20T18:20:01.9491151Z
2026-10-14 – 2026-10-1472026-10-20T18:20:01.9491151Z
2026-10-13 – 2026-10-13262026-10-20T18:20:01.9491151Z
2026-10-12 – 2026-10-12942026-10-20T18:20:01.9491151Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.012 Oct 20264

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
simonkapfer/abakus

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:09 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:1e33fa30f37e6ff6833413083dc5b37cb49fa60b3a721292e7a16c6c909582be