OpenAlgebra is a high-performance sparse linear algebra library written in Rust with C++ interoperability. It provides efficient sparse matrix operations, iterative solvers, tensor computations, and AI-guided optimization for scientific computing applications.
- Sparse Matrix Formats: COO, CSR, and CSC matrix representations
- Iterative Solvers: Conjugate Gradient, GMRES, BiCGSTAB with convergence monitoring
- Preconditioners: Jacobi, ILU, Gauss-Seidel, and Algebraic Multigrid (AMG)
- Tensor Operations: Sparse and dense tensor computations with N-dimensional support
- Matrix Operations: Efficient matrix-vector multiplication, transposition, and format conversion
- Memory Efficient: Optimized sparse data structures with minimal memory overhead
- Parallel Processing: Multi-threaded operations using Rayon
- SIMD Optimization: Vectorized operations for supported architectures
- GPU Acceleration: Optional CUDA support for accelerated computations
- Distributed Computing: MPI support for large-scale parallel computing
- OpenAI SDK Integration: AI-guided solver selection and parameter optimization
- Adaptive Algorithms: Machine learning-driven performance tuning
- Smart Preconditioning: AI-recommended preconditioning strategies
- Performance Prediction: ML-based convergence and performance estimation
- FastAPI Server: RESTful API for remote computation and integration
- WebAssembly Support: Browser-compatible linear algebra operations
- Python Bindings: PyO3-based Python interface for data science workflows
- C++ Interoperability: Header-only C++ interface for legacy code integration
cargo add openalgebrapip install openalgebra-pygit clone https://github.com/your-org/openalgebra.git
cd openalgebra
cargo build --releaseuse openalgebra::{
sparse::{COOMatrix, SparseMatrix},
solvers::{ConjugateGradient, IterativeSolver},
};
fn main() -> openalgebra::Result<()> {
// Initialize the library
openalgebra::init()?;
// Create a sparse matrix in COO format
let mut matrix = COOMatrix::<f64>::new(1000, 1000);
// Build a tridiagonal matrix
for i in 0..1000 {
matrix.insert(i, i, 2.0)?;
if i > 0 {
matrix.insert(i, i-1, -1.0)?;
}
if i < 999 {
matrix.insert(i, i+1, -1.0)?;
}
}
// Convert to CSR format for efficient operations
let csr_matrix = matrix.to_csr();
// Solve linear system Ax = b
let b = vec![1.0; 1000];
let mut x = vec![0.0; 1000];
let solver = ConjugateGradient::new();
let info = solver.solve(&csr_matrix, &b, &mut x)?;
println!("Converged in {} iterations with residual {:.2e}",
info.iterations, info.residual_norm);
Ok(())
}use openalgebra::tensor::{SparseTensor, DenseTensor, Tensor};
fn tensor_example() -> openalgebra::Result<()> {
// Create a 3D sparse tensor
let mut tensor = SparseTensor::<f64>::new(vec![100, 100, 100]);
// Insert sparse values
for i in 0..100 {
tensor.insert(vec![i, i, i], i as f64)?;
}
// Access tensor elements
let value = tensor.get(&[50, 50, 50])?;
println!("Value at [50,50,50]: {:?}", value);
// Create dense tensor from data
let data = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0];
let dense = DenseTensor::from_vec(vec![2, 2, 2], data)?;
println!("Dense tensor shape: {:?}", dense.shape());
Ok(())
}use openalgebra::{
agents::{MathAgent, MathProblem, ProblemType},
solvers::AdaptiveSolver,
};
async fn ai_solver_example() -> openalgebra::Result<()> {
// Define the mathematical problem
let problem = MathProblem {
problem_type: ProblemType::LinearSystem,
description: "Large sparse symmetric positive definite system".to_string(),
matrix_size: Some((10000, 10000)),
sparsity_pattern: Some("Tridiagonal".to_string()),
constraints: vec!["Symmetric".to_string(), "Positive Definite".to_string()],
objectives: vec!["Fast convergence".to_string(), "Memory efficient".to_string()],
};
// Create AI agent for analysis
let agent = MathAgent::new("your-openai-api-key".to_string()).await?;
// Get AI recommendations
let analysis = agent.analyze_problem(&problem).await?;
println!("AI Analysis: {}", analysis.analysis);
// Use adaptive solver with AI guidance
let mut adaptive_solver = AdaptiveSolver::new(agent);
// The solver will automatically select the best algorithm
// based on problem characteristics and AI recommendations
Ok(())
}OpenAlgebra includes a high-performance FastAPI server for remote computation and integration with other systems.
cargo run --bin openalgebra-server --features apiPOST /matrices- Create a new sparse matrixGET /matrices/{name}- Get matrix informationDELETE /matrices/{name}- Delete a matrixPOST /matrices/{name}/matvec- Matrix-vector multiplication
POST /solve- Solve linear system with specified solverPOST /solve/adaptive- AI-guided adaptive solvingGET /solvers- List available solvers
POST /tensors- Create a new tensorGET /tensors/{name}- Get tensor informationPOST /tensors/{name}/operations- Tensor computations
POST /ai/analyze- AI analysis of mathematical problemsPOST /ai/recommend- Get solver recommendationsPOST /ai/optimize- Parameter optimization
# Create a matrix
curl -X POST "http://localhost:8080/matrices" \
-H "Content-Type: application/json" \
-d '{
"name": "test_matrix",
"format": "coo",
"rows": 1000,
"cols": 1000,
"entries": [
{"row": 0, "col": 0, "value": 2.0},
{"row": 0, "col": 1, "value": -1.0}
]
}'
# Solve linear system
curl -X POST "http://localhost:8080/solve" \
-H "Content-Type: application/json" \
-d '{
"matrix_name": "test_matrix",
"rhs": [1.0, 2.0, 3.0],
"solver": "conjugate_gradient",
"tolerance": 1e-6,
"max_iterations": 1000
}'OpenAlgebra includes comprehensive test suites covering all functionality:
# Run all tests
cargo test
# Run specific test categories
cargo test --test integration_tests
cargo test --test performance_tests
cargo test --test api_tests
# Run with specific features
cargo test --features "gpu-acceleration,mpi"
# Run benchmarks
cargo bench- Unit Tests: Individual component testing
- Integration Tests: End-to-end workflow testing
- Performance Tests: Benchmarking and regression testing
- API Tests: FastAPI endpoint testing
- Property Tests: Randomized testing with QuickCheck
- Fuzzing Tests: Security and robustness testing
The project uses GitHub Actions for automated testing:
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- run: cargo test --all-features
- run: cargo benchFROM rust:1.70 as builder
WORKDIR /app
COPY . .
RUN cargo build --release --features "api,gpu-acceleration"
FROM debian:bullseye-slim
RUN apt-get update && apt-get install -y \
libssl1.1 \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/openalgebra-server /usr/local/bin/
EXPOSE 8080
CMD ["openalgebra-server"]version: '3.8'
services:
openalgebra:
build: .
ports:
- "8080:8080"
environment:
- RUST_LOG=info
- OPENAI_API_KEY=${OPENAI_API_KEY}
volumes:
- ./data:/app/data
redis:
image: redis:alpine
ports:
- "6379:6379"
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.ymlapiVersion: apps/v1
kind: Deployment
metadata:
name: openalgebra
spec:
replicas: 3
selector:
matchLabels:
app: openalgebra
template:
metadata:
labels:
app: openalgebra
spec:
containers:
- name: openalgebra
image: openalgebra:latest
ports:
- containerPort: 8080
env:
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: openai-secret
key: api-key
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2000m"OpenAlgebra is designed for high performance across various problem sizes:
- Small matrices (< 1K): Sub-millisecond operations
- Medium matrices (1K-100K): Optimized for memory bandwidth
- Large matrices (> 100K): Parallel and distributed processing
- Conjugate Gradient: 2-5x faster than reference implementations
- GMRES: Optimized restart strategies and memory management
- BiCGSTAB: Improved numerical stability and convergence
- Sparse storage: 50-90% memory reduction vs. dense formats
- Streaming operations: Constant memory usage for large problems
- Cache optimization: NUMA-aware memory allocation
# Logging
export RUST_LOG=info
export OPENALGEBRA_LOG_LEVEL=debug
# Performance
export RAYON_NUM_THREADS=8
export OPENALGEBRA_MEMORY_LIMIT=8GB
# AI Integration
export OPENAI_API_KEY=your-api-key
export OPENALGEBRA_AI_MODEL=gpt-4
# GPU Acceleration
export CUDA_VISIBLE_DEVICES=0,1
export OPENALGEBRA_GPU_MEMORY=4GB# openalgebra.toml
[performance]
num_threads = 8
memory_limit = "8GB"
use_gpu = true
gpu_memory = "4GB"
[solvers]
default_tolerance = 1e-6
max_iterations = 10000
adaptive_restart = true
[ai]
model = "gpt-4"
timeout_seconds = 30
cache_responses = true
[api]
host = "0.0.0.0"
port = 8080
max_connections = 1000
request_timeout = 300We welcome contributions! Please see our Contributing Guide for details.
# Clone the repository
git clone https://github.com/your-org/openalgebra.git
cd openalgebra
# Install development dependencies
cargo install cargo-watch cargo-tarpaulin cargo-audit
# Run development server with auto-reload
cargo watch -x "run --bin openalgebra-server"
# Run tests with coverage
cargo tarpaulin --out html
# Security audit
cargo auditWe use rustfmt and clippy for code formatting and linting:
cargo fmt
cargo clippy -- -D warningsThis project is licensed under the MIT License - see the LICENSE file for details.
- BLAS/LAPACK: Foundation for numerical linear algebra
- PETSc: Inspiration for solver interfaces
- SuiteSparse: Reference for sparse matrix algorithms
- OpenAI: AI integration capabilities
- Rust Community: Amazing ecosystem and support
- nalgebra - General-purpose linear algebra
- sprs - Sparse matrix library
- candle - ML framework in Rust
- faer - Linear algebra library
OpenAlgebra - Empowering scientific computing with high-performance sparse linear algebra and AI integration.