Skip to main content

Algebraic Independence Processor — auto-detection of matrix structure + memory-efficient computation for ultra-large sparse systems

Project description

AIP Engine

Algebraic Independence Processor — auto-detection of matrix structure + memory-efficient computation for ultra-large sparse systems.

pip install aip-engine

What it does

AIP Engine solves a real problem: building and solving sparse linear systems that are too large for conventional tools. It does three things:

  1. Detects matrix structure automatically (sparse/dense, square/rectangular)
  2. Routes to the optimal solver (LSQR, spsolve, LAPACK)
  3. Accordion Memory: builds and solves ultra-large systems without running out of RAM

Quick start

import aip

# Auto-detect structure and solve
report = aip.detect_matrix(A)
x = aip.solve(A, b)

Accordion Memory

For systems with millions or billions of entries that don't fit in RAM:

from aip.accordion import PascalIndex, AccordionBuilder, solve_chunks

# 1. Mathematical indexing (replaces dictionary, saves GB of RAM)
index = PascalIndex(num_vars=30, max_degree=10)
idx = index.combo_to_index((3, 7, 12))  # O(k) time, 0 extra memory

# 2. Batch construction (never all in RAM at once)
builder = AccordionBuilder(num_rows=53_000_000)
# ... add entries in batches ...
builder.flush()  # converts to CSR chunk, frees raw data
chunks = builder.finalize()

# 3. Streaming solve (never assembles full matrix)
result = solve_chunks(chunks, b, max_iter=10000)
print(result['residual'], result['size_l2'])

Why Accordion?

Without Accordion With Accordion
Monomial index (8.6M entries) ~2 GB dictionary 0 MB (computed mathematically)
Matrix construction (150M entries) ~12 GB Python lists ~2.4 GB array.array per batch
Full matrix (53M x 1.17B) 496,052 TB dense 14.5 GB sparse chunks
Solve needs full matrix in RAM streaming over chunks

Real-world results:

Problem Matrix size Dense would be Accordion uses Compression
PHP n=4 d=8 8.6M x 78M 5.4 PB 1.2 GB 4,640,586x
PHP n=5 d=10 53M x 1.17B 496,052 TB 14.5 GB 34,215,310x

How it works

PascalIndex

Uses the Combinatorial Number System to compute the index of any monomial in O(k) time using a precomputed Pascal table. No dictionary needed.

index = PascalIndex(num_vars=45, max_degree=10)
print(index)  # PascalIndex(vars=45, deg=10, monomials=4,346,814,276, pascal=4048 bytes)
# 4.3 billion monomials indexed with 4 KB of memory

AccordionBuilder

Builds sparse matrices in batches using array.array (C-native, 4-8 bytes/element) instead of Python lists (28 bytes/element). Each batch is converted to CSR immediately and raw arrays are freed.

solve_chunks

LSQR solver that operates on a LinearOperator built from column chunks. The matvec/rmatvec operations iterate over chunks sequentially, never needing the full matrix in memory.

Requirements

  • Python >= 3.8
  • NumPy >= 1.20
  • SciPy >= 1.7

License

MIT License - Carmen Esteban, 2025-2026

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aip_engine-0.5.0.tar.gz (18.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aip_engine-0.5.0-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file aip_engine-0.5.0.tar.gz.

File metadata

  • Download URL: aip_engine-0.5.0.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for aip_engine-0.5.0.tar.gz
Algorithm Hash digest
SHA256 35d4b121821671605c6a4bc0ae4e6c4d56def70f77a7397bc23a6c05fbc5f510
MD5 8a73e6dd035bbcf5344ee9e9e0fa14c2
BLAKE2b-256 4f42c0d0e89dc6453502b60dbbe2f378692a326676740903403e68a508a93a0a

See more details on using hashes here.

File details

Details for the file aip_engine-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: aip_engine-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for aip_engine-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 674e2af777bf9dc2b1b6ecf5212e097173265315397a52263449cb75c1a893e2
MD5 47dac3fb3995a2d64d5d12d6d416ab25
BLAKE2b-256 033c17cc27037efab9c378b7c94fd13ed3e8cfaa2a28278218fa5a2f2a5a6ed8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page