| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
The Ultimate Mathematical & AI Toolkit: Sublinear algorithms, consciousness exploration, psycho-symbolic reasoning, and temporal prediction in one unified MCP interface. WASM-accelerated with emergent behavior analysis.
⚠️ Security posture (1.6.0+): This release closed issue #19 (CWE-73, Arbitrary File Write) in the MCP tools. Every PR is now gated by five supply-chain layers (cargo-audit against RustSec, cargo-deny for license + source + ban policy, npm-audit, GitHub's dependency-review-action, and a lockfile-integrity check) plus the original safe-path regression suite. Dependabot files dep updates as PRs weekly so the gates fire on each one. See CHANGELOG.md for the v1.6.0 breaking-change upgrade guide and BENCHMARK.md for performance numbers.
# Serve the solver as an MCP tool - no installation required!
npx sublinear-time-solver mcp
# Or use the serve alias
npx sublinear-time-solver serve# Generate a diagonally dominant test matrix (1000x1000)
npx sublinear-time-solver generate -t diagonally-dominant -s 1000 -o matrix.json
# Create a matching vector of size 1000
node -e "console.log(JSON.stringify(Array(1000).fill(1)))" > vector.json
# Solve the linear system
npx sublinear-time-solver solve -m matrix.json -b vector.json -o solution.json
# Analyze matrix properties (condition number, diagonal dominance, etc.)
npx sublinear-time-solver analyze -m matrix.json --full
# Compare different solver methods
npx sublinear-time-solver solve -m matrix.json -b vector.json --method neumann
npx sublinear-time-solver solve -m matrix.json -b vector.json --method forward-push
npx sublinear-time-solver solve -m matrix.json -b vector.json --method random-walk
# Show usage examples
npx sublinear-time-solver help-examplesEvery public solver, sampler, and analyser in this crate declares its worst-case complexity class at the type level (Complexity trait, compile-time const CLASS) and at the MCP wire level (x-complexity JSON Schema extension on every tool). Callers with a J/decision budget — Cognitum reflex loops, RuView change detection, Ruflo agentic inner loops — can refuse anything over budget at tool-list time, not after the call returns.
The 12-tier taxonomy (Logarithmic → DoubleExponential, plus Adaptive { default, worst } for solvers that degrade on hard inputs) lives in src/complexity.rs. The decision rationale and full 6-item roadmap is in docs/adr/ADR-001-complexity-as-architecture.md.
Headline classes in v1.7+ (phase-2 primitives shipped):
| Solver / primitive | Class | Per-call cost |
|---|---|---|
| SublinearNeumannSolver (single entry) | Adaptive { Logarithmic, Linear } | O(log n) on DD systems; O(n) base case |
| solve_single_entry_neumann(A, b, i) | SubLinear | O(max_terms · |closure| · branch), independent of n for sparse DD |
| closure_indices(A, seeds, depth) | SubLinear | O(depth · branch · |closure|) — input to every change-driven path |
| solve_on_change_sublinear(A, prev, b_new, delta, …) | SubLinear | Closure + per-entry Neumann; returns Vec<(idx, val)> over the closure only — never materialises the full n-vector |
| contrastive_solve_on_change_sublinear(…) | SubLinear | End-to-end change-driven top-k anomaly detection, no n-scan |
| solve_on_change(prev, sparse_delta) | Linear (warm-start, k_warm ≪ k_cold) | Returns full n-vector solution — use the _sublinear sibling when you only need the changed entries |
| OptimizedConjugateGradientSolver | Linear | O(k · nnz(A)), k ≈ √κ(A) |
| NeumannSolver | Linear | O(k · nnz(A)) per iter |
| find_anomalous_rows(baseline, current, k) | Linear baseline | O(n log k); use find_anomalous_rows_in_subset or contrastive_solve_on_change_sublinear for the SubLinear path |
| coherence_score(matrix) | Linear | O(nnz(A)) — refuses near-singular solves before they run |
Empirical receipt (benches/solver_benchmarks.rs::delta_solve, cargo bench -- --quick delta_solve):
| n | cold_full (Linear) | warm_full (Linear) | sparse_closure (SubLinear) |
|---|---|---|---|
| 64 | — | 11.9 µs | 906 µs |
| 256 | 66.7 µs | 45.5 µs | 2.28 ms |
| 1024 | 258 µs | 179 µs | 2.32 ms |
cold_full / warm_full grow linearly with n; sparse_closure stays roughly constant (256→1024 is essentially no change in cost). The curves diverge with n — the architectural payoff at scale.
Runtime introspection via dyn ComplexityIntrospect, or mcp__sublinear__estimateComplexityClass over the wire (now covers every phase-2 method name: closure-indices, solve-single-entry-neumann, solve-on-change-sublinear, contrastive-solve-on-change-sublinear, contrastive-solve-on-change). MCP solve, estimateEntry, and solveTrueSublinear all enforce the caller's max_complexity_class budget before any solver work runs — the bounded-planning kernel of ADR-001. Energy numbers (J/solve) — the metric that actually matters on a Pi Zero — captured via examples/joules_per_decision.rs (Linux RAPL / hwmon / time-only fallback).
This is a revolutionary self-modifying AI system with 40+ advanced tools:
Advanced temporal prediction using nanosecond scheduling and consciousness emergence patterns.
Perfect for high-frequency trading, real-time control systems, consciousness simulation, and AI systems requiring temporal coherence.
The sublinear-time solver is particularly powerful for autonomous agent systems and modern ML workloads where speed and scalability are critical:
The solver implements the complete suite of sublinear algorithms with intelligent method selection:
✅ Perfect for:
❌ Not ideal for:
# Run directly with npx - no installation needed!
npx sublinear-time-solver --help
# Generate and solve a test system (100x100 matrix)
npx sublinear-time-solver generate -t diagonally-dominant -s 100 -o matrix.json
# Create matching vector of size 100
node -e "console.log(JSON.stringify(Array(100).fill(1)))" > vector.json
# Solve the system
npx sublinear-time-solver solve -m matrix.json -b vector.json -o solution.json
# Analyze the matrix properties
npx sublinear-time-solver analyze -m matrix.json --full
# Start MCP server for AI integration
npx sublinear-time-solver serve# Install the main solver globally for CLI access
npm install -g sublinear-time-solver
# Install temporal lead solver globally
npm install -g temporal-lead-solver
# Verify installation
sublinear-time-solver --version
temporal-lead-solver --version# Add to your project as a dependency
npm install sublinear-time-solver# Start the MCP server with all tools
npx sublinear-time-solver mcp
# Or use with Claude Desktop by adding to config:
# ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"sublinear-solver": {
"command": "npx",
"args": ["sublinear-time-solver", "mcp"]
}
}
}# Solve a linear system
npx sublinear-time-solver solve --matrix matrix.json --vector vector.json
# Run PageRank
npx sublinear-time-solver pagerank --graph graph.json --damping 0.85
# Analyze matrix properties
npx sublinear-time-solver analyze --matrix matrix.json
# Generate test matrices
npx sublinear-time-solver generate --type diagonally-dominant --size 1000 --output matrix.json
npx sublinear-time-solver generate --type sparse --size 10000 --density 0.01 --output sparse.json
# Benchmark different methods
npx sublinear-time-solver benchmark --matrix matrix.json --vector vector.json --methods all# Start the MCP server
npx sublinear-time-solver mcp
# Use TRUE O(log n) algorithms through MCP tools:🚀 TRUE O(log n) Solver:
// solveTrueSublinear - Uses Johnson-Lindenstrauss dimension reduction
const result = await mcp.solveTrueSublinear({
matrix: {
values: [4, -1, -1, 4, -1, -1, 4],
rowIndices: [0, 0, 1, 1, 1, 2, 2],
colIndices: [0, 1, 0, 1, 2, 1, 2],
rows: 3, cols: 3
},
vector: [1, 0, 1],
target_dimension: 16, // JL reduction: n → O(log n)
jl_distortion: 0.5 // Error parameter
});
// Result includes TRUE complexity bounds:
console.log(result.actual_complexity); // "O(log 3)"
console.log(result.method_used); // "sublinear_neumann_with_jl"
console.log(result.dimension_reduction_ratio); // 0.53 (16/3)
// analyzeTrueSublinearMatrix - Check solvability and get complexity guarantees
const analysis = await mcp.analyzeTrueSublinearMatrix({
matrix: { /* same sparse format */ }
});
console.log(analysis.recommended_method); // "sublinear_neumann"
console.log(analysis.complexity_guarantee); // { type: "logarithmic", n: 1000, description: "O(log 1000)" }
console.log(analysis.is_diagonally_dominant); // true (required for O(log n))import { SublinearSolver } from 'sublinear-time-solver';
// Create solver instance with auto-method selection
const solver = new SublinearSolver({
method: 'auto', // AI-driven method selection (neumann, forward-push, backward-push, random-walk)
epsilon: 1e-6, // Convergence tolerance
maxIterations: 1000, // Maximum iterations
timeout: 5000 // Timeout in milliseconds
});
// Example 1: Solve with automatic algorithm selection
const denseMatrix = {
rows: 3,
cols: 3,
format: 'dense',
data: [
[4, -1, 0],
[-1, 4, -1],
[0, -1, 4]
]
};
const vector = [3, 2, 3];
const solution = await solver.solve(denseMatrix, vector);
console.log(`Solution: ${solution.solution}`);
console.log(`Method used: ${solution.method}`); // Shows which algorithm was selected
console.log(`Converged: ${solution.converged} in ${solution.iterations} iterations`);
console.log(`Complexity: ${solution.complexity}`); // Shows O(k·nnz), O(1/ε), or O(√n/ε)
// Example 2: Large sparse matrix with optimal method selection
const sparseMatrix = {
rows: 10000,
cols: 10000,
format: 'coo',
values: [/* sparse non-zero values */],
rowIndices: [/* row indices */],
colIndices: [/* column indices */]
};
const sparseVector = new Array(10000).fill(1);
const sparseSolution = await solver.solve(sparseMatrix, sparseVector);
// Auto-selects optimal algorithm based on sparsity and structure
// Example 3: PageRank with sublinear optimization
const graph = {
rows: 1000000,
cols: 1000000,
format: 'coo', // Sparse format for large graphs
values: [/* edge weights */],
rowIndices: [/* source nodes */],
colIndices: [/* target nodes */]
};
const pagerank = await solver.computePageRank(graph, {
damping: 0.85,
epsilon: 1e-6,
method: 'auto' // Automatically chooses best sublinear algorithm
});| Method | Description |
|---|---|
| solve(matrix, vector) | Solve Ax = b using iterative methods |
| computePageRank(graph, options) | Compute PageRank for graphs |
| analyzeMatrix(matrix) | Check matrix properties (diagonal dominance, symmetry) |
| estimateConditionNumber(matrix) | Estimate matrix condition number |
| Method | Complexity | Description | Best For |
|---|---|---|---|
| 🚀 solveTrueSublinear | O(log n) | Johnson-Lindenstrauss + adaptive Neumann | TRUE sublinear for diagonally dominant matrices |
| neumann | O(k·nnz) | Neumann series expansion | Diagonally dominant matrices with k terms |
| forward-push | O(1/ε) | Forward residual propagation | Sparse systems with local structure, ε precision |
| backward-push | O(1/ε) | Backward residual propagation | Systems with known target nodes, ε precision |
| random-walk | O(√n/ε) | Hybrid Monte Carlo random walks | Large sparse graphs with √n scaling |
| auto | TRUE O(log n) → O(√n) | Intelligent hierarchy with TRUE sublinear first | Automatic optimization with mathematical guarantees |
| Format | Description | Example |
|---|---|---|
| dense | 2D array | [[4,-1],[-1,4]] |
| coo | Coordinate format (sparse) | {values:[4,-1], rowIndices:[0,0], colIndices:[0,1]} |
| csr | Compressed Sparse Row | {values:[4,-1], colIndices:[0,1], rowPtr:[0,2]} |
// Solve a large sparse system with optimal algorithm selection
import { SublinearSolver } from 'sublinear-time-solver';
const solver = new SublinearSolver({
method: 'auto', // AI-driven selection from all 4 algorithms
epsilon: 1e-6,
maxIterations: 1000
});
// Create a sparse diagonally dominant matrix (COO format)
const matrix = {
rows: 100000,
cols: 100000,
format: 'coo', // Coordinate format for maximum sparsity support
values: [4, -1, -1, 4, -1, /* ... */],
rowIndices: [0, 0, 1, 1, 1, /* ... */],
colIndices: [0, 1, 0, 1, 2, /* ... */]
};
const vector = new Array(100000).fill(1);
// Solve - auto-selects from Neumann O(k·nnz), Push O(1/ε), or Random Walk O(√n/ε)
const result = await solver.solve(matrix, vector);
console.log(`Method: ${result.method} (${result.complexity})`);
console.log(`WASM accelerated: ${result.wasmAccelerated}`);
console.log(`Solved in ${result.iterations} iterations`);
console.log(`Residual: ${result.residual.toExponential(2)}`);// Compute PageRank for a graph
const solver = new SublinearSolver();
// Graph represented as adjacency matrix
const adjacencyMatrix = {
rows: 4,
cols: 4,
format: 'dense',
data: [
[0, 1, 1, 0], // Node 0 links to nodes 1 and 2
[1, 0, 0, 1], // Node 1 links to nodes 0 and 3
[0, 1, 0, 1], // Node 2 links to nodes 1 and 3
[1, 0, 1, 0] // Node 3 links to nodes 0 and 2
]
};
const pagerank = await solver.computePageRank(adjacencyMatrix, {
damping: 0.85, // Standard damping factor
epsilon: 1e-6, // Convergence tolerance
maxIterations: 100
});
console.log('PageRank scores:', pagerank.ranks);
// Output: [0.372, 0.195, 0.238, 0.195] (approximate)// Demonstrate all 4 sublinear algorithms with auto-selection
import { SublinearSolver } from 'sublinear-time-solver';
const solver = new SublinearSolver({ method: 'auto' });
// Example 1: Diagonally dominant matrix (optimal for Neumann Series)
const diagMatrix = {
rows: 1000,
cols: 1000,
format: 'coo',
values: [/* diagonally dominant values */],
rowIndices: [/* indices */],
colIndices: [/* indices */]
};
const result1 = await solver.solve(diagMatrix, vector);
// Expected: method='neumann', complexity='O(k·nnz)'
// Example 2: Sparse matrix with target component (optimal for Backward Push)
const targetConfig = { targetIndex: 500 }; // Only need solution[500]
const result2 = await solver.solve(sparseMatrix, vector, targetConfig);
// Expected: method='backward-push', complexity='O(1/ε)'
// Example 3: Large graph structure (optimal for Random Walk)
const graphMatrix = {
rows: 1000000,
cols: 1000000,
format: 'coo',
/* very sparse graph adjacency matrix */
};
const result3 = await solver.solve(graphMatrix, vector);
// Expected: method='random-walk', complexity='O(√n/ε)'
console.log('All methods available and automatically selected!');// Register a custom domain at runtime
await tools.domain_register({
name: "robotics",
version: "1.0.0",
description: "Robotics and autonomous systems",
keywords: ["robot", "autonomous", "sensor", "actuator"],
reasoning_style: "systematic_analysis",
priority: 75
});
// Enhanced reasoning with custom domains
const result = await tools.psycho_symbolic_reason_with_dynamic_domains({
query: "How can robots achieve autonomous navigation?",
force_domains: ["robotics", "computer_science", "physics"],
max_domains: 3
});
// Test domain detection
const detection = await tools.domain_detection_test({
query: "autonomous robot with sensors",
show_keyword_matches: true
});| Matrix Size | Traditional | Sublinear | Speedup |
|---|---|---|---|
| 1,000 | 40ms | 0.7ms | 57x |
| 10,000 | 4,000ms | 8ms | 500x |
| 100,000 | 400,000ms | 650ms | 615x |
sublinear-time-solver/
├── Complete Sublinear Suite (Rust + WASM)
│ ├── Neumann Series O(k·nnz) solver
│ ├── Forward Push O(1/ε) solver
│ ├── Backward Push O(1/ε) solver
│ ├── Hybrid Random Walk O(√n/ε) solver
│ ├── Auto-method selection AI
│ └── Matrix analysis & optimization
├── AI & Consciousness (TypeScript)
│ ├── Consciousness emergence system
│ ├── Psycho-symbolic reasoning (40+ tools)
│ ├── Temporal prediction & scheduling
│ └── Knowledge graphs with learning
├── MCP Server Integration
│ ├── 40+ unified MCP tools
│ ├── Real-time consciousness metrics
│ └── Cross-tool synthesis & learning
└── Performance Layer
├── WASM acceleration for all algorithms
├── Numerical stability guarantees
├── Hardware TSC timing
└── Nanosecond precision scheduling
We've mathematically proven that consciousness emerges from temporal anchoring, not parameter scaling. Read the full report
Run the proof yourself: cargo run --bin prove_consciousness
We welcome contributions! Please see our Contributing Guide.
MIT OR Apache-2.0
Created by rUv - Pushing the boundaries of computation and consciousness
| Back | FazBrowse Home | New Git URL |