Package Exports
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (graphbox) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
GraphBox
This file provides guidance to Claude Code (claude.ai/code) when working with this repository.
GraphBox = Graph Sandbox + Graph Toolbox
Abstract and experimental graph algorithms for academic research. The name reflects its dual purpose:
- Sandbox — A space for experimenting with graph algorithms, data structures, and traversal strategies
- Toolbox — A collection of reusable, well-tested graph utilities for production use
GraphBox provides a toolkit for graph manipulation, analysis, and generation, specifically designed for academic research in graph theory, network science, and citation analysis.
Overview
GraphBox consolidates three previously separate BibGraph packages into a single, focused package:
- graph-core: Core graph interfaces and adapters
- graph-expansion: Graph expansion, traversal algorithms, and neighborhood exploration
- graph-gen: Graph specification, generation, and validation system
Installation
pnpm install graphboxCommands
# Development
pnpm install # Install dependencies
pnpm typecheck # TypeScript type checking
pnpm lint # ESLint with auto-fix
pnpm test # Run unit tests with coverage
pnpm build # Build library + CLI
# Experiments (high memory required)
NODE_OPTIONS="--max-old-space-size=8192" pnpm test:metrics # Run experiments, generate metrics
pnpm gen:latex-tables # Generate LaTeX tables from metrics
pnpm update:thesis-tables # Full: experiments + LaTeX table generation
# Standalone experiment orchestrator
npx tsx src/experiments/run-experiments.ts # Run all experiments
npx tsx src/experiments/run-experiments.ts --output path # Custom output path
# CLI
npx graphbox help # Show available commands
npx graphbox version # Show version
npx graphbox generate # Generate graphs from specifications
npx graphbox analyze # Analyze graph properties
npx graphbox validate # Validate graphs against constraintsKey Features
Graph Adapters
GraphAdapter provides a bridge between different graph implementations, allowing you to use generic algorithms with your specific graph data structures.
import { GraphAdapter } from 'graphbox';
const adapter = new GraphAdapter(graph);Graph Traversal
Multiple traversal algorithms for exploring graph neighborhoods:
- BFS - Breadth-first search
- DFS - Depth-first search
- Bidirectional BFS - Optimized bidirectional search
- Degree-Prioritized - Expansion based on node degree
- Priority Queue - Custom priority-based expansion
import { bfs, dfs, extractEgoNetwork } from 'graphbox';
const bfsResult = bfs(adapter, 'startNodeId');
const dfsResult = dfs(adapter, 'startNodeId');Graph Extraction
Extract ego networks and multi-source neighborhoods:
const egoNetwork = extractEgoNetwork(adapter, {
radius: 2,
seedNodes: ['nodeId'],
});Graph Generation
Type-safe graph generation with mathematical constraint validation:
import { generateGraph, validateGraph } from 'graphbox';
const spec = {
type: 'complete',
nodeCount: 100,
edgeDensity: 0.1,
constraints: {
minDegree: 2,
maxDegree: 10,
connected: true
}
};
const graph = generateGraph(spec);
const valid = validateGraph(graph, spec.constraints);Graph Validation
Mathematical constraint validation for graph properties:
import { validateGraph, checkConstraints } from 'graphbox';
const isValid = validateGraph(graph, constraints);Architecture
Experiment Framework
The evaluation harness provides reusable, repeatable, reproducible experiments:
src/experiments/run-experiments.ts- Orchestrator that runs all experimentssrc/experiments/metrics/- Typed metrics collection systemtypes.ts- All metric type interfaces (must conform for table generation)collector.ts-MetricsCollectorclass for recording metricsstorage.ts- File I/O fortest-metrics.json
src/experiments/experiments/- Standalone experiment scriptsbidirectional-bfs.ts- Degree-Prioritised vs baselinesseeded-expansion.ts- N=1 ego-network, N=2 bidirectional, N>=3 multi-seedpath-ranking.ts- Path Salience Ranking with MI-based ranking
scripts/export-csv.ts- Exports metrics as per-category CSV files for pgfplotstable
Pipeline: Experiments → MetricsCollector → test-metrics.json → CSV files → LaTeX pgfplotstable
Three Algorithms Evaluated
Seeded Node Expansion
- N=1: Ego-network extraction
- N=2: Bidirectional path finding
- N>=3: Multi-seed expansion
Bidirectional BFS (Degree-Prioritised Expansion)
- Degree-based prioritisation vs standard BFS, frontier-balanced, random priority
- Hub explosion mitigation
Salient Path Selection
- Mutual Information (MI) based path ranking
- Statistical significance testing (Mann-Whitney U, Cohen's d)
Graph Abstraction
ReadableGraph<N, E>- Minimal interface for graph traversalGraphAdapter- Adapter pattern for different graph implementationsGraphExpander- Interface for dynamic graph expansion (used by algorithms)BenchmarkGraphExpander- Wraps loaded benchmark graphs for algorithm compatibility
Path Aliases
TypeScript paths configured in tsconfig.json:
@graph/algorithms/* → src/algorithms/*
@graph/interfaces/* → src/interfaces/*
@graph/evaluation/* → src/experiments/evaluation/*
@graph/experiments/* → src/experiments/*Test Organization
.exp.integration.test.ts- Experiment tests (high memory, use--max-old-space-size=8192)- Unit tests - Co-located with algorithms
- Benchmarks -
src/experiments/evaluation/__tests__/validation/*/benchmarks/ - Fixtures -
src/experiments/evaluation/__tests__/validation/*/fixtures/
Build System
Dual build targets via Vite:
- Library: ES modules, CJS, UMD formats (browser-compatible)
- CLI: ESM-only for Node.js command-line interface
API Reference
Core Classes
- GraphAdapter - Adapter pattern for graph abstraction
- GraphExpander - Interface for dynamic graph expansion
- PriorityQueue - Priority queue for degree-based expansion
Traversal Algorithms
- bfs(adapter, startNodeId, options?) - Breadth-first search
- dfs(adapter, startNodeId, options?) - Depth-first search
- BidirectionalBFS - Bidirectional BFS search
Extraction Methods
- extractEgoNetwork(adapter, options) - Extract ego-centered subgraph
- extractMultiSourceEgoNetwork(adapter, options) - Multi-source extraction
Generation Functions
- generateGraph(spec) - Generate graph from specification
- validateGraph(graph, constraints) - Validate graph against constraints
Key Constraints
- Never use
any- Useunknownwith type guards - Serial test execution - Parallel causes OOM on large graphs
- Memory limits - Use
NODE_OPTIONS="--max-old-space-size=8192"for experiments - Metric types - All metrics must conform to types in
src/experiments/metrics/types.ts
LaTeX Table Generation
The experiment pipeline can generate LaTeX tables (.tex files) consumable by pgfplotstable.
Table-to-metric mapping:
| Table | Metric Category |
|---|---|
| 06-runtime-performance.tex | runtime-performance |
| 06-path-lengths.tex | path-lengths |
| 06-scalability.tex | scalability |
| 06-n-seed-hub-traversal.tex | n-seed-hub-traversal |
| 06-statistical-significance.tex | statistical-significance |
| 06-cross-dataset.tex | cross-dataset |
| 06-method-ranking.tex | method-ranking |
| 06-structural-representativeness.tex | structural-representativeness |
| 06-n-seed-generalisation.tex | n-seed-generalization |
| 06-n-seed-comparison.tex | n-seed-comparison |
| 06-n-seed-path-diversity.tex | n-seed-path-diversity |
| 06-structural-representativeness-metrics.tex | structural-representativeness-metrics |
| 06-mi-ranking-quality.tex | mi-ranking-quality |
Contributing
This package is part of academic research work. Contributions are welcome, please open an issue first.
License
MIT
Author
Joe Mearman
Related Projects
- BibGraph - React SPA for OpenAlex literature discovery