hypertopos 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hypertopos-0.2.0/.gitignore +40 -0
- hypertopos-0.2.0/CHANGELOG.md +156 -0
- hypertopos-0.2.0/LICENSE.md +83 -0
- hypertopos-0.2.0/PKG-INFO +26 -0
- hypertopos-0.2.0/README.md +120 -0
- hypertopos-0.2.0/ROADMAP.md +73 -0
- hypertopos-0.2.0/SECURITY.md +15 -0
- hypertopos-0.2.0/docs/README.md +38 -0
- hypertopos-0.2.0/docs/api-reference.md +444 -0
- hypertopos-0.2.0/docs/architecture.md +326 -0
- hypertopos-0.2.0/docs/benchmark/LICENSE +190 -0
- hypertopos-0.2.0/docs/benchmark/README.md +129 -0
- hypertopos-0.2.0/docs/benchmark/berka/README.md +287 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/SUMMARY.md +271 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-a-report.md +421 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-a-scoring.md +14 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-b-report.md +409 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-b-scoring.md +17 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r1/0.1.0-settings.md +38 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-a-report.md +391 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-a-scoring.md +75 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-b-report.md +433 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-b-scoring.md +17 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r2/0.1.0-settings.md +37 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-a-report.md +322 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-a-scoring.md +114 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-b-report.md +484 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-b-scoring.md +19 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r3/0.1.0-settings.md +38 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-a-report.md +158 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-a-scoring.md +114 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-b-report.md +329 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-b-scoring.md +19 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r4/0.1.0-settings.md +39 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-a-report.md +208 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-a-scoring.md +128 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-b-report.md +419 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-b-scoring.md +25 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r5/0.1.0-settings.md +39 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-a-report.md +281 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-a-scoring.md +100 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-b-report.md +413 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-b-scoring.md +26 -0
- hypertopos-0.2.0/docs/benchmark/berka/results/0.1.0/r6/0.1.0-settings.md +47 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/prepare_accounts.py +195 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/prepare_cpty_banks.py +20 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/prepare_districts.py +24 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/prepare_loan_accounts.py +20 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/prepare_operations.py +20 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/prepare_orders.py +40 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/prepare_transactions.py +51 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/prepare_tx_types.py +20 -0
- hypertopos-0.2.0/docs/benchmark/berka/sphere/sphere.yaml +222 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/README.md +349 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/_layer2_cross_eval.py +292 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/_layer3_cross_eval.py +335 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/hi_small_sphere/prepare_accounts.py +210 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/hi_small_sphere/prepare_currencies.py +31 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/hi_small_sphere/prepare_payment_formats.py +31 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/hi_small_sphere/prepare_transactions.py +94 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/hi_small_sphere/sphere.yaml +202 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/layer1_passive_scan.py +419 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/layer2_xgboost_sweep.py +381 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/layer3_typology_filter.py +292 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/li_small_sphere/prepare_accounts.py +210 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/li_small_sphere/prepare_currencies.py +31 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/li_small_sphere/prepare_payment_formats.py +31 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/li_small_sphere/prepare_transactions.py +94 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/li_small_sphere/sphere.yaml +202 -0
- hypertopos-0.2.0/docs/benchmark/ibm-aml/passive-scan-calibration.md +232 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/README.md +291 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/SUMMARY.md +281 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-a-report.md +301 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-a-scoring.md +23 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-b-report.md +321 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-b-scoring.md +20 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-c-report.md +492 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-settings.md +84 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-a-report.md +269 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-a-scoring.md +42 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-b-report.md +253 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-b-scoring.md +20 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-c-report.md +388 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-settings.md +91 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-a-report.md +331 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-a-scoring.md +24 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-b-report.md +335 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-b-scoring.md +20 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-c-report.md +455 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-settings.md +91 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/sphere/prepare_trips.py +203 -0
- hypertopos-0.2.0/docs/benchmark/nyc-taxi/sphere/sphere.yaml +159 -0
- hypertopos-0.2.0/docs/benchmarks.md +64 -0
- hypertopos-0.2.0/docs/concepts.md +265 -0
- hypertopos-0.2.0/docs/configuration.md +980 -0
- hypertopos-0.2.0/docs/data-format.md +197 -0
- hypertopos-0.2.0/docs/images/build-pipeline.svg +83 -0
- hypertopos-0.2.0/docs/images/core-objects.svg +131 -0
- hypertopos-0.2.0/docs/images/cutting-plane.svg +42 -0
- hypertopos-0.2.0/docs/images/directory-layout.svg +98 -0
- hypertopos-0.2.0/docs/images/hypertopos-overview.svg +172 -0
- hypertopos-0.2.0/docs/images/model-lifecycle.svg +110 -0
- hypertopos-0.2.0/docs/images/navigation-primitives.svg +113 -0
- hypertopos-0.2.0/docs/images/three-scales.svg +96 -0
- hypertopos-0.2.0/docs/quickstart.md +113 -0
- hypertopos-0.2.0/hypertopos/__init__.py +19 -0
- hypertopos-0.2.0/hypertopos/builder/__init__.py +25 -0
- hypertopos-0.2.0/hypertopos/builder/_stats.py +351 -0
- hypertopos-0.2.0/hypertopos/builder/_writer.py +248 -0
- hypertopos-0.2.0/hypertopos/builder/builder.py +3708 -0
- hypertopos-0.2.0/hypertopos/builder/derived.py +828 -0
- hypertopos-0.2.0/hypertopos/builder/mapping.py +243 -0
- hypertopos-0.2.0/hypertopos/cli/__init__.py +14 -0
- hypertopos-0.2.0/hypertopos/cli/__main__.py +10 -0
- hypertopos-0.2.0/hypertopos/cli/build.py +972 -0
- hypertopos-0.2.0/hypertopos/cli/info.py +63 -0
- hypertopos-0.2.0/hypertopos/cli/main.py +110 -0
- hypertopos-0.2.0/hypertopos/cli/schema.py +850 -0
- hypertopos-0.2.0/hypertopos/cli/sources.py +230 -0
- hypertopos-0.2.0/hypertopos/engine/__init__.py +4 -0
- hypertopos-0.2.0/hypertopos/engine/aggregation.py +2418 -0
- hypertopos-0.2.0/hypertopos/engine/calibration.py +125 -0
- hypertopos-0.2.0/hypertopos/engine/chains.py +491 -0
- hypertopos-0.2.0/hypertopos/engine/composition.py +180 -0
- hypertopos-0.2.0/hypertopos/engine/datafusion_agg.py +602 -0
- hypertopos-0.2.0/hypertopos/engine/forecast.py +327 -0
- hypertopos-0.2.0/hypertopos/engine/geometry.py +1036 -0
- hypertopos-0.2.0/hypertopos/engine/invalidation.py +4 -0
- hypertopos-0.2.0/hypertopos/engine/investigation.py +61 -0
- hypertopos-0.2.0/hypertopos/engine/subprocess_agg.py +742 -0
- hypertopos-0.2.0/hypertopos/model/__init__.py +4 -0
- hypertopos-0.2.0/hypertopos/model/manifest.py +42 -0
- hypertopos-0.2.0/hypertopos/model/objects.py +123 -0
- hypertopos-0.2.0/hypertopos/model/sphere.py +313 -0
- hypertopos-0.2.0/hypertopos/navigation/__init__.py +4 -0
- hypertopos-0.2.0/hypertopos/navigation/navigator.py +8461 -0
- hypertopos-0.2.0/hypertopos/navigation/scanner.py +832 -0
- hypertopos-0.2.0/hypertopos/sphere.py +295 -0
- hypertopos-0.2.0/hypertopos/storage/__init__.py +4 -0
- hypertopos-0.2.0/hypertopos/storage/_schemas.py +50 -0
- hypertopos-0.2.0/hypertopos/storage/cache.py +30 -0
- hypertopos-0.2.0/hypertopos/storage/reader.py +1311 -0
- hypertopos-0.2.0/hypertopos/storage/writer.py +931 -0
- hypertopos-0.2.0/hypertopos/utils/__init__.py +4 -0
- hypertopos-0.2.0/hypertopos/utils/arrow.py +111 -0
- hypertopos-0.2.0/pyproject.toml +50 -0
- hypertopos-0.2.0/tests/.gitkeep +0 -0
- hypertopos-0.2.0/tests/conftest.py +83 -0
- hypertopos-0.2.0/tests/fixtures/generate_fixtures.py +275 -0
- hypertopos-0.2.0/tests/test_aggregation_engine.py +1884 -0
- hypertopos-0.2.0/tests/test_arrow_utils.py +183 -0
- hypertopos-0.2.0/tests/test_builder.py +1810 -0
- hypertopos-0.2.0/tests/test_builder_alias.py +103 -0
- hypertopos-0.2.0/tests/test_builder_derived.py +1228 -0
- hypertopos-0.2.0/tests/test_builder_edges.py +147 -0
- hypertopos-0.2.0/tests/test_cache.py +41 -0
- hypertopos-0.2.0/tests/test_calibration.py +279 -0
- hypertopos-0.2.0/tests/test_chains.py +435 -0
- hypertopos-0.2.0/tests/test_cli.py +129 -0
- hypertopos-0.2.0/tests/test_cli_alias.py +257 -0
- hypertopos-0.2.0/tests/test_cli_sources.py +343 -0
- hypertopos-0.2.0/tests/test_compaction.py +4 -0
- hypertopos-0.2.0/tests/test_composition.py +60 -0
- hypertopos-0.2.0/tests/test_continuous_event_dims.py +533 -0
- hypertopos-0.2.0/tests/test_data_quality_prop.py +291 -0
- hypertopos-0.2.0/tests/test_datafusion_agg.py +788 -0
- hypertopos-0.2.0/tests/test_detection.py +406 -0
- hypertopos-0.2.0/tests/test_edge_table.py +189 -0
- hypertopos-0.2.0/tests/test_engine.py +2119 -0
- hypertopos-0.2.0/tests/test_forecast.py +317 -0
- hypertopos-0.2.0/tests/test_fts.py +511 -0
- hypertopos-0.2.0/tests/test_geometric_path.py +582 -0
- hypertopos-0.2.0/tests/test_geometry_stats.py +354 -0
- hypertopos-0.2.0/tests/test_hybrid_search.py +284 -0
- hypertopos-0.2.0/tests/test_incremental.py +233 -0
- hypertopos-0.2.0/tests/test_invalidation.py +4 -0
- hypertopos-0.2.0/tests/test_investigation.py +71 -0
- hypertopos-0.2.0/tests/test_mapping.py +386 -0
- hypertopos-0.2.0/tests/test_model.py +938 -0
- hypertopos-0.2.0/tests/test_mvcc_session.py +261 -0
- hypertopos-0.2.0/tests/test_navigation.py +7633 -0
- hypertopos-0.2.0/tests/test_navigator_alerts.py +49 -0
- hypertopos-0.2.0/tests/test_observability.py +1361 -0
- hypertopos-0.2.0/tests/test_precision_stack.py +870 -0
- hypertopos-0.2.0/tests/test_reputation.py +76 -0
- hypertopos-0.2.0/tests/test_row_id_cache.py +205 -0
- hypertopos-0.2.0/tests/test_scanner.py +647 -0
- hypertopos-0.2.0/tests/test_sphere.py +205 -0
- hypertopos-0.2.0/tests/test_sphere_overview_perf.py +75 -0
- hypertopos-0.2.0/tests/test_stats_guard.py +41 -0
- hypertopos-0.2.0/tests/test_storage.py +3354 -0
- hypertopos-0.2.0/tests/test_streaming_reads.py +144 -0
- hypertopos-0.2.0/tests/test_subprocess_agg.py +961 -0
- hypertopos-0.2.0/tests/test_temporal_centroids.py +358 -0
- hypertopos-0.2.0/tests/test_trajectory_ann.py +259 -0
- hypertopos-0.2.0/tests/test_witness_set.py +56 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.pyo
|
|
5
|
+
*.egg-info/
|
|
6
|
+
dist/
|
|
7
|
+
build/
|
|
8
|
+
.venv/
|
|
9
|
+
venv/
|
|
10
|
+
|
|
11
|
+
# Testing
|
|
12
|
+
.pytest_cache/
|
|
13
|
+
.coverage
|
|
14
|
+
htmlcov/
|
|
15
|
+
|
|
16
|
+
# Type checking
|
|
17
|
+
.mypy_cache/
|
|
18
|
+
|
|
19
|
+
# Linting
|
|
20
|
+
.ruff_cache/
|
|
21
|
+
|
|
22
|
+
# IDE
|
|
23
|
+
.idea/
|
|
24
|
+
.vscode/
|
|
25
|
+
.cursor/
|
|
26
|
+
*.iml
|
|
27
|
+
|
|
28
|
+
# Claude Code
|
|
29
|
+
.claude/
|
|
30
|
+
.worktrees/
|
|
31
|
+
.agents/
|
|
32
|
+
|
|
33
|
+
# Generated test fixtures
|
|
34
|
+
tests/fixtures/gds/
|
|
35
|
+
|
|
36
|
+
# Built spheres (output of hypertopos build)
|
|
37
|
+
**/sphere/gds_*/
|
|
38
|
+
|
|
39
|
+
# Build CLI cache (source parquet + chain pickle)
|
|
40
|
+
.cache/
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to hypertopos will be documented in this file.
|
|
4
|
+
|
|
5
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
+
Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.2.0] — 2026-04-10
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
**Edge Table**
|
|
13
|
+
- Lance-based edge table per event pattern — auto-emitted at build time from FK data
|
|
14
|
+
- BTREE indexes on `from_key`/`to_key` — O(log n) lookups at any scale
|
|
15
|
+
- `GDSWriter.write_edges()`, `append_edges()`, `create_edge_indexes()`
|
|
16
|
+
- `GDSReader.read_edges()`, `has_edge_table()`, `edge_table_stats()`
|
|
17
|
+
- MVCC session pinning for edge tables
|
|
18
|
+
- YAML `edge_table` config (optional, auto-detected from graph_features/relations)
|
|
19
|
+
- `--no-edges` CLI flag
|
|
20
|
+
|
|
21
|
+
**Navigation**
|
|
22
|
+
- `find_geometric_path()` — beam search with geometric/anomaly/shortest/amount scoring
|
|
23
|
+
- `discover_chains()` — runtime temporal BFS on edge table (no build-time extraction needed)
|
|
24
|
+
- `find_counterparties()` — edge table fast path with BTREE lookup and amount aggregates
|
|
25
|
+
- `entity_flow()` — net flow per counterparty via edge table
|
|
26
|
+
- `contagion_score()` / `contagion_score_batch()` — anomaly neighborhood scoring via edge table
|
|
27
|
+
- `degree_velocity()` — temporal connection velocity (degree change over time buckets)
|
|
28
|
+
- `investigation_coverage()` — agent guidance: explored vs unexplored counterparty coverage
|
|
29
|
+
- `propagate_influence()` — BFS influence propagation with geometric decay and tx_count weighting
|
|
30
|
+
- `cluster_bridges()` — geometry+graph fusion: find entities bridging geometric clusters
|
|
31
|
+
- `anomalous_edges()` — event-level scoring between entity pairs (uses event geometry, not anchor)
|
|
32
|
+
- Amount-weighted scoring mode for `find_geometric_path` — `scoring="amount"`
|
|
33
|
+
- Lazy adjacency expansion — never loads full edge table into memory
|
|
34
|
+
- Anchor pattern resolution for geometric scoring (event pattern edge table → anchor pattern deltas)
|
|
35
|
+
- Score interpretation hint in `find_geometric_path` summary
|
|
36
|
+
|
|
37
|
+
**PassiveScanner**
|
|
38
|
+
- `"graph"` source type — contagion scoring via edge table + geometry anomaly check
|
|
39
|
+
- `add_graph_source()` — register graph contagion source with configurable threshold
|
|
40
|
+
- `auto_discover()` — auto-detects graph sources for event patterns with edge tables
|
|
41
|
+
|
|
42
|
+
**MCP Tools**
|
|
43
|
+
- `find_geometric_path` — path finding with geometric coherence scoring (+ amount mode)
|
|
44
|
+
- `discover_chains` — runtime chain discovery without pre-built chain lines
|
|
45
|
+
- `edge_stats` — edge table statistics (row count, degree, timestamp/amount range)
|
|
46
|
+
- `entity_flow` — net flow analysis per counterparty
|
|
47
|
+
- `contagion_score` / `contagion_score_batch` — anomaly neighborhood scoring
|
|
48
|
+
- `degree_velocity` — temporal connection velocity
|
|
49
|
+
- `investigation_coverage` — agent guidance for investigation coverage
|
|
50
|
+
- `propagate_influence` — BFS influence propagation with geometric decay and tx_count weighting
|
|
51
|
+
- `cluster_bridges` — geometry+graph fusion cluster bridge analysis
|
|
52
|
+
- `anomalous_edges` — event-level edge scoring between entity pairs
|
|
53
|
+
- Output cap (top 20 paths / top 100 influenced) with warning when truncated
|
|
54
|
+
|
|
55
|
+
**Builder**
|
|
56
|
+
- Edge table emission in all build paths (standard, streaming, chunked)
|
|
57
|
+
- Adjacency deduplication — one entry per unique neighbor
|
|
58
|
+
- Self-loop filtering in graph traversal and temporal chain BFS
|
|
59
|
+
- Edge stats cached at build time (`_gds_meta/edge_stats/`) for instant reads
|
|
60
|
+
- Timestamp string parsing with sample-based format detection (6 formats supported)
|
|
61
|
+
- Windows timezone database fallback in timestamp parsing
|
|
62
|
+
- Edge table auto-detect infers `timestamp_col` and `amount_col` from common column names (`timestamp`/`ts`/`event_time`/`created_at`/`tx_date`/`date` and `amount_received`/`amount`/`amount_paid`/`value`/`total`/`amt`) when not explicitly configured
|
|
63
|
+
- `sphere.json` edge_table metadata persists full config (`from_col`, `to_col`, plus `timestamp_col`/`amount_col` when set)
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## [0.1.0] — 2026-04-07
|
|
68
|
+
|
|
69
|
+
First public release. Core GDS stack.
|
|
70
|
+
|
|
71
|
+
### Added
|
|
72
|
+
|
|
73
|
+
**Sphere Builder**
|
|
74
|
+
- Declarative YAML config (`sphere.yaml`) with CLI: `hypertopos build`, `validate`, `info`
|
|
75
|
+
- Three source tiers: single file (CSV/Parquet), multi-file join, Python script
|
|
76
|
+
- Derived dimensions (count, sum, avg, windowed metrics, IET)
|
|
77
|
+
- Precomputed dimensions with `edge_max` continuous mode
|
|
78
|
+
- Graph features: `in_degree`, `out_degree`, `reciprocity`, `counterpart_overlap`
|
|
79
|
+
- Composite lines (multi-key entities)
|
|
80
|
+
- Chain lines (temporal BFS extraction with parallel processing)
|
|
81
|
+
- Aliases with cutting-plane sub-populations
|
|
82
|
+
- Temporal snapshot builder
|
|
83
|
+
- `dimension_weights: kurtosis` automatic weighting
|
|
84
|
+
- Incremental update (`GDSBuilder.incremental_update()`)
|
|
85
|
+
|
|
86
|
+
**Navigation (π1–π12)**
|
|
87
|
+
- π1 `walk_line` — step along a line
|
|
88
|
+
- π2 `jump_polygon` — cross to related line via edge
|
|
89
|
+
- π3 `dive_solid` — enter temporal history
|
|
90
|
+
- π4 `emerge` — return to surface
|
|
91
|
+
- π5 `attract_anomaly` — find outliers in population
|
|
92
|
+
- π6 `attract_boundary` — find entities near alias boundary
|
|
93
|
+
- π7 `attract_hub` — find most connected entities
|
|
94
|
+
- π8 `attract_cluster` — discover geometric archetypes (k-means++)
|
|
95
|
+
- π9 `attract_drift` — find entities with highest temporal drift
|
|
96
|
+
- π10 `attract_trajectory` — find entities with similar trajectory (ANN)
|
|
97
|
+
- π11 `attract_population_compare` — compare geometry across time windows
|
|
98
|
+
- π12 `attract_regime_change` — detect structural shifts in population
|
|
99
|
+
|
|
100
|
+
**Analysis & Investigation**
|
|
101
|
+
- `explain_anomaly` — structured explanation with witness set, repair set, severity, reputation
|
|
102
|
+
- `contrast_populations` — dimension-by-dimension comparison (Cohen's d)
|
|
103
|
+
- `find_similar_entities` — ANN search in delta-space
|
|
104
|
+
- `centroid_map` — group centroids for sub-population positioning
|
|
105
|
+
- `composite_risk` — cross-pattern risk scoring (Fisher's method)
|
|
106
|
+
- `cross_pattern_profile` — multi-pattern risk view for one entity
|
|
107
|
+
- Full-text search (`search_entities_fts`) and hybrid search (semantic + FTS with RRF)
|
|
108
|
+
- 10 detection recipes: cross-pattern discrepancy, neighbor contamination, trajectory anomaly, segment shift, event rate anomaly, hub concentration, subgroup inflation, collective drift, temporal burst, data quality
|
|
109
|
+
|
|
110
|
+
**Forecasting**
|
|
111
|
+
- Trajectory extrapolation (exponentially-weighted linear regression)
|
|
112
|
+
- `forecast_anomaly_status` — predict future anomaly state
|
|
113
|
+
- `forecast_segment_crossing` — predict boundary crossings
|
|
114
|
+
- Pluggable `ForecastProvider` protocol for external backends
|
|
115
|
+
|
|
116
|
+
**Model**
|
|
117
|
+
- Point, Edge, Polygon, Solid, SolidSlice
|
|
118
|
+
- Line, Pattern, Alias, Manifest, Contract
|
|
119
|
+
- CalibrationTracker (online Welford drift detection)
|
|
120
|
+
- MVCC sessions (version-pinned reads per agent)
|
|
121
|
+
|
|
122
|
+
**Engine**
|
|
123
|
+
- Delta vector computation with z-score normalization
|
|
124
|
+
- Anomaly detection: theta threshold + conformal p-values
|
|
125
|
+
- Mahalanobis variant (ellipsoidal boundary via Cholesky decomposition)
|
|
126
|
+
- K-means++ clustering with automatic k selection (silhouette)
|
|
127
|
+
- DTW trajectory comparison
|
|
128
|
+
- Reputation scoring (Beta distribution posterior)
|
|
129
|
+
- Investigation engine (witness set, anti-witness, severity classification)
|
|
130
|
+
- Composition: Fisher's method for p-value combination, co-dispersion (Spearman)
|
|
131
|
+
|
|
132
|
+
**Storage**
|
|
133
|
+
- Arrow IPC format with Lance vector index (IVF-PQ)
|
|
134
|
+
- BTREE, BITMAP, FTS indices on points
|
|
135
|
+
- Append-only writes, LRU polygon cache
|
|
136
|
+
- Geometry stats cache, temporal centroid cache, trajectory ANN index
|
|
137
|
+
- Optional DataFusion SQL aggregation (~30x speedup on 5M+ events)
|
|
138
|
+
|
|
139
|
+
**PassiveScanner**
|
|
140
|
+
- Multi-source batch screening: geometry, borderline, points, compound sources
|
|
141
|
+
- `auto_discover` — automatic source registration from sphere structure
|
|
142
|
+
- Density boost, weighted scoring mode
|
|
143
|
+
- 4 operating stages
|
|
144
|
+
|
|
145
|
+
**Validation**
|
|
146
|
+
- Berka banking benchmark (skill calibration, 6 runs)
|
|
147
|
+
- NYC Yellow Taxi benchmark (domain generalization, 3 runs)
|
|
148
|
+
- IBM AML benchmark (3-layer pipeline with cross-validation)
|
|
149
|
+
|
|
150
|
+
**Documentation**
|
|
151
|
+
- Quick Start guide
|
|
152
|
+
- Core Concepts with mathematical foundation
|
|
153
|
+
- API Reference with navigation primitive families
|
|
154
|
+
- Configuration YAML reference with aliases
|
|
155
|
+
- Physical data format reference
|
|
156
|
+
- Architecture overview
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Business Source License 1.1
|
|
2
|
+
|
|
3
|
+
**Licensor:** Karol Kędzia
|
|
4
|
+
|
|
5
|
+
**Licensed Work:** hypertopos
|
|
6
|
+
Copyright (c) 2026 Karol Kędzia.
|
|
7
|
+
|
|
8
|
+
**Additional Use Grant:** You may make production use of the Licensed Work,
|
|
9
|
+
provided that you do not offer the Licensed Work to third parties on a hosted
|
|
10
|
+
or embedded basis as a competitive offering.
|
|
11
|
+
|
|
12
|
+
For purposes of this License:
|
|
13
|
+
|
|
14
|
+
- **Competitive offering** means a Product offered to third parties on a paid
|
|
15
|
+
basis, including through paid support arrangements, that significantly
|
|
16
|
+
overlaps with the capabilities of the Licensor's paid version(s) of the
|
|
17
|
+
Licensed Work. If your Product is not a competitive offering when first made
|
|
18
|
+
generally available, it does not become a competitive offering later merely
|
|
19
|
+
because the Licensor releases new versions with additional capabilities.
|
|
20
|
+
- **Product** means software offered to end users to run in their own
|
|
21
|
+
environments or offered as a service on a hosted basis.
|
|
22
|
+
- **Embedded** means including source code or executable code from the Licensed
|
|
23
|
+
Work in a competitive offering, or packaging a competitive offering in a way
|
|
24
|
+
that requires the Licensed Work to be accessed or downloaded for the offering
|
|
25
|
+
to operate.
|
|
26
|
+
- **Internal use** within an organization is not a competitive offering. Your
|
|
27
|
+
organization includes entities under common control.
|
|
28
|
+
|
|
29
|
+
**Change Date:** 2029-04-09
|
|
30
|
+
|
|
31
|
+
**Change License:** Apache License, Version 2.0
|
|
32
|
+
|
|
33
|
+
Commercial licensing inquiries: contact@hypertopos.com
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Terms
|
|
38
|
+
|
|
39
|
+
The Licensor grants you the right to copy, modify, create derivative works,
|
|
40
|
+
redistribute, and make non-production use of the Licensed Work. The Licensor
|
|
41
|
+
may make an Additional Use Grant, above, permitting limited production use.
|
|
42
|
+
|
|
43
|
+
Effective on the Change Date, or the third anniversary of the first publicly
|
|
44
|
+
available distribution of a specific version of the Licensed Work under this
|
|
45
|
+
License, whichever comes first, the rights granted above terminate and the
|
|
46
|
+
Change License applies instead.
|
|
47
|
+
|
|
48
|
+
If your use of the Licensed Work does not comply with the requirements in
|
|
49
|
+
effect under this License, you must obtain a commercial license from the
|
|
50
|
+
Licensor, its affiliates, or authorized resellers, or stop using the Licensed
|
|
51
|
+
Work.
|
|
52
|
+
|
|
53
|
+
All copies of the original and modified Licensed Work, and derivative works of
|
|
54
|
+
the Licensed Work, remain subject to this License. This License applies
|
|
55
|
+
separately to each version of the Licensed Work, and the Change Date may vary
|
|
56
|
+
by version.
|
|
57
|
+
|
|
58
|
+
You must conspicuously display this License on each original or modified copy
|
|
59
|
+
of the Licensed Work. If you receive a copy of the Licensed Work under a
|
|
60
|
+
different license, the terms of that license do not override this License.
|
|
61
|
+
|
|
62
|
+
Any use of the Licensed Work in violation of this License terminates the rights
|
|
63
|
+
granted under this License for the current and all other versions of the
|
|
64
|
+
Licensed Work.
|
|
65
|
+
|
|
66
|
+
This License does not grant you any right in any trademark or logo of the
|
|
67
|
+
Licensor or its affiliates, except where this License expressly requires it.
|
|
68
|
+
TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN
|
|
69
|
+
"AS IS" BASIS. THE LICENSOR DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS OR
|
|
70
|
+
IMPLIED, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
|
71
|
+
PURPOSE, NON-INFRINGEMENT, AND TITLE.
|
|
72
|
+
|
|
73
|
+
This License text may be used to license your own works, and may be referred to
|
|
74
|
+
as "Business Source License" provided you follow the public guidance published
|
|
75
|
+
by MariaDB. Copying this License without modification is permitted as long as
|
|
76
|
+
you keep the original text intact. Modifications to this License are not
|
|
77
|
+
permitted.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
License text copyright (c) 2024 MariaDB plc, All Rights Reserved.
|
|
82
|
+
"Business Source License" is a trademark of MariaDB plc.
|
|
83
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hypertopos
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Navigate your data like space.
|
|
5
|
+
Project-URL: Homepage, https://github.com/hypertopos/hypertopos-py
|
|
6
|
+
Project-URL: Documentation, https://github.com/hypertopos/hypertopos-py/tree/main/docs
|
|
7
|
+
Project-URL: Repository, https://github.com/hypertopos/hypertopos-py
|
|
8
|
+
Project-URL: Issues, https://github.com/hypertopos/hypertopos-py/issues
|
|
9
|
+
Author: Karol Kędzia
|
|
10
|
+
License: BSL-1.1
|
|
11
|
+
License-File: LICENSE.md
|
|
12
|
+
Requires-Python: >=3.12
|
|
13
|
+
Requires-Dist: numpy>=1.26
|
|
14
|
+
Requires-Dist: pyarrow>=14.0
|
|
15
|
+
Requires-Dist: pylance>=0.20
|
|
16
|
+
Requires-Dist: pyyaml>=6.0
|
|
17
|
+
Provides-Extra: datafusion
|
|
18
|
+
Requires-Dist: datafusion>=40.0; extra == 'datafusion'
|
|
19
|
+
Provides-Extra: dev
|
|
20
|
+
Requires-Dist: mypy; extra == 'dev'
|
|
21
|
+
Requires-Dist: pytest; extra == 'dev'
|
|
22
|
+
Requires-Dist: pytest-cov; extra == 'dev'
|
|
23
|
+
Requires-Dist: ruff; extra == 'dev'
|
|
24
|
+
Provides-Extra: mcp
|
|
25
|
+
Requires-Dist: mcp[cli]>=1.20; extra == 'mcp'
|
|
26
|
+
Requires-Dist: tzdata>=2024.1; extra == 'mcp'
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# hypertopos
|
|
2
|
+
|
|
3
|
+
> **Navigate your data like space.**
|
|
4
|
+
|
|
5
|
+
[](https://www.python.org/downloads/)
|
|
6
|
+
[](LICENSE.md)
|
|
7
|
+
[](https://doi.org/10.5281/zenodo.19482069)
|
|
8
|
+
[](https://arrow.apache.org/docs/python/)
|
|
9
|
+
[](https://github.com/lancedb/lancedb)
|
|
10
|
+
[](https://modelcontextprotocol.io)
|
|
11
|
+
[](pyproject.toml)
|
|
12
|
+
|
|
13
|
+
**hypertopos** transforms relational data into navigable geometric space.
|
|
14
|
+
|
|
15
|
+
Every entity — customer, vendor, transaction — accumulates a **polygon** built from its typed relationships: who it connects to, through which channels, how often, and with what properties filled or missing. The shape of that polygon is the entity's geometric identity.
|
|
16
|
+
|
|
17
|
+
A **pattern** calibrates what "typical" looks like for a population: the mean shape (μ), the spread per dimension (σ), and a threshold (θ) derived from the empirical distribution. The resulting coordinate space supports clustering, population comparison, similarity search, hub analysis, boundary exploration, drift tracking, and anomaly detection — no model training, no labeled data, no tuning.
|
|
18
|
+
|
|
19
|
+
Over time, polygons deform into **solids** — temporal stacks that capture how an entity's geometry evolves. Drift, trajectory similarity, and regime shifts become measurable geometric quantities.
|
|
20
|
+
|
|
21
|
+
Twelve **navigation primitives** (π1–π12) let AI agents walk lines, jump across relationships, discover clusters, compare populations, find hubs, and track temporal change — all as stateful, composable geometric operations.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pip install hypertopos
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
## Under the Hood
|
|
30
|
+
|
|
31
|
+
At its core, the system builds a population-calibrated coordinate space from typed relationships and entity properties — and enables agents to navigate it.
|
|
32
|
+
|
|
33
|
+
Each entity occupies a position derived from statistical normalization (μ and σ per dimension), producing a shared coordinate system in ℝ^D.
|
|
34
|
+
|
|
35
|
+
Navigation primitives turn this space into a stateful, step-by-step workspace, where clustering, anomaly detection, drift tracking, and temporal analysis are performed as geometric operations — without model training or learned embeddings.
|
|
36
|
+
|
|
37
|
+
## What Makes It Different
|
|
38
|
+
|
|
39
|
+
- **Geometry, not queries** — entities live in a population-calibrated coordinate space (μ, σ, θ). Position tells you what's typical. Distance reveals what's unusual, what's similar, and where clusters form.
|
|
40
|
+
- **Navigate, don't search** — twelve primitives (π1–π12) let agents walk lines, jump across relationships, cluster populations, compare groups, find hubs, and track drift. Stateful, composable, geometric.
|
|
41
|
+
- **Graph meets geometry** — edge tables give runtime graph traversal with geometric path scoring. Find paths scored by witness overlap and anomaly propagation — not just hop count. Lazy chain discovery without build-time extraction.
|
|
42
|
+
- **Time is built in** — polygons accumulate into solids. Trajectory similarity, regime change detection, and drift analysis are first-class — not bolted on.
|
|
43
|
+
- **Agents first** — designed for MCP tool-calling. Smart detection recipes, investigation workflows. The sphere is the agent's workspace.
|
|
44
|
+
- **Zero training** — no ML models, no labels, no training pipeline. Population statistics and empirical thresholds. Deploy in minutes.
|
|
45
|
+
|
|
46
|
+
> **Full power via MCP.** The core library provides the Python API. For the complete experience — guided investigation, smart detection, 66 tools exposed to AI agents — use **[hypertopos-mcp](https://github.com/hypertopos/hypertopos-mcp)** (`pip install hypertopos-mcp`). The MCP server turns navigation primitives into agent-callable tools with automatic context management, tool visibility phases, and detection recipes that chain multiple primitives into end-to-end investigative workflows.
|
|
47
|
+
|
|
48
|
+
## How It Compares
|
|
49
|
+
|
|
50
|
+
| | hypertopos | Neo4j GDS | Vector DBs | PyGOD |
|
|
51
|
+
|---|---|---|---|---|
|
|
52
|
+
| **Geometry from** | Entity's own relationships | Graph algorithms | External embeddings (ML) | Graph neural networks |
|
|
53
|
+
| **Training required** | No | No | Embedding model needed | Yes |
|
|
54
|
+
| **Population-relative** | Yes (μ, σ, θ per population) | No | No | No |
|
|
55
|
+
| **Temporal** | Built-in (solids, drift, regimes) | Snapshot-based | No | No |
|
|
56
|
+
| **Navigation** | 12 stateful primitives | Query-based | KNN search | N/A |
|
|
57
|
+
| **Multi-hop** | Edge table (runtime graph + lazy chains) + pre-computed chain geometry | Native (Cypher, ad-hoc) | No | No |
|
|
58
|
+
| **Anomaly propagation** | Contagion scoring + influence BFS in delta-space | No | No | Local neighborhood only |
|
|
59
|
+
| **Agent-native (MCP)** | Yes | No | No | No |
|
|
60
|
+
| **Explains why** | Witness sets, dimension ranking | Centrality scores | Nearest neighbors | Anomaly scores |
|
|
61
|
+
|
|
62
|
+
hypertopos is not a graph database, a vector store, or an ML framework. It is a **geometric coordinate system** built from relational structure — designed for AI agents to navigate, not for humans to query.
|
|
63
|
+
|
|
64
|
+
## Why This Matters
|
|
65
|
+
|
|
66
|
+
Most systems either:
|
|
67
|
+
|
|
68
|
+
- operate on raw relationships (queries, traversals), or
|
|
69
|
+
- rely on trained models (embeddings, ML pipelines)
|
|
70
|
+
|
|
71
|
+
This approach provides a third option:
|
|
72
|
+
|
|
73
|
+
- a persistent, interpretable coordinate system
|
|
74
|
+
- consistent across time
|
|
75
|
+
- usable for multiple analytical tasks without retraining
|
|
76
|
+
|
|
77
|
+
This enables simpler, more transparent analysis of complex relational systems.
|
|
78
|
+
|
|
79
|
+
## Documentation
|
|
80
|
+
|
|
81
|
+
| | |
|
|
82
|
+
|---|---|
|
|
83
|
+
| **[Quick Start](docs/quickstart.md)** | Install, build a sphere, navigate — in one page |
|
|
84
|
+
| **[Core Concepts](docs/concepts.md)** | GDS mental model, objects, mathematical foundation |
|
|
85
|
+
| **[API Reference](docs/api-reference.md)** | Python API — classes, methods, navigation primitives, errors |
|
|
86
|
+
| **[Configuration](docs/configuration.md)** | Sphere builder YAML reference |
|
|
87
|
+
| **[Data Format](docs/data-format.md)** | Physical storage — directory layout, Arrow schemas |
|
|
88
|
+
| **[Architecture](docs/architecture.md)** | Package structure, layers, runtime flow |
|
|
89
|
+
| **[Benchmarks](docs/benchmarks.md)** | Validation results — banking, AML, transportation |
|
|
90
|
+
|
|
91
|
+
## Tech Stack
|
|
92
|
+
|
|
93
|
+
| Technology | Role |
|
|
94
|
+
|------------|------|
|
|
95
|
+
| Python 3.12+ | Core language |
|
|
96
|
+
| PyArrow | Arrow IPC format, in-memory transport |
|
|
97
|
+
| NumPy | Vector operations, delta computation, DTW |
|
|
98
|
+
| Lance | Vector index (IVF-PQ), scalar indices, predicate pushdown |
|
|
99
|
+
| PyYAML | Sphere builder YAML config |
|
|
100
|
+
|
|
101
|
+
## License
|
|
102
|
+
|
|
103
|
+
Licensed under the [Business Source License 1.1](LICENSE.md).
|
|
104
|
+
|
|
105
|
+
| Question | Answer |
|
|
106
|
+
|----------|--------|
|
|
107
|
+
| Can I use it internally? | Yes |
|
|
108
|
+
| Development, testing, research? | Yes |
|
|
109
|
+
| Host as a service for third parties? | Not if it competes with the Licensor's paid offering |
|
|
110
|
+
| Embed in a commercial product? | Not if competitive |
|
|
111
|
+
| When does it become Apache 2.0? | On the Change Date or third anniversary, whichever comes first |
|
|
112
|
+
|
|
113
|
+
For commercial licensing: [contact@hypertopos.com](mailto:contact@hypertopos.com)
|
|
114
|
+
|
|
115
|
+
## Contributing
|
|
116
|
+
|
|
117
|
+
**Core library** — requires a Contributor License Agreement (CLA).
|
|
118
|
+
**MCP server & docs** — DCO sign-off only (`Signed-off-by: Name <email>`).
|
|
119
|
+
|
|
120
|
+
Bug reports, feature requests, and discussion via [GitHub Issues](https://github.com/hypertopos/hypertopos-py/issues).
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# hypertopos — Roadmap
|
|
2
|
+
|
|
3
|
+
> Planned direction. Priorities may change based on feedback.
|
|
4
|
+
|
|
5
|
+
## Current: 0.2.0
|
|
6
|
+
|
|
7
|
+
**Graph meets geometry.** The main theme is the unified **edge table** — a Lance-based adjacency index per event pattern with BTREE lookups, auto-emitted at build time, giving runtime graph traversal at O(log n) scale.
|
|
8
|
+
|
|
9
|
+
- **Edge table** — one Lance dataset per event pattern, BTREE indexes on `from_key`/`to_key`, MVCC session pinning, YAML `edge_table` config (auto-detected from `graph_features`/relations), `--no-edges` CLI flag
|
|
10
|
+
- **11 new navigation functions** — `find_geometric_path` (beam search with geometric/anomaly/shortest/amount scoring), `discover_chains` (runtime temporal BFS, no build-time extraction), `entity_flow` (net flow per counterparty), `contagion_score` / `contagion_score_batch` (anomaly neighborhood scoring), `degree_velocity`, `investigation_coverage`, `propagate_influence` (BFS with geometric decay), `cluster_bridges` (geometry+graph fusion), `anomalous_edges` (event-level scoring)
|
|
11
|
+
- **`find_counterparties` fast path** — edge table BTREE lookup with amount aggregates when `pattern_id` given
|
|
12
|
+
- **PassiveScanner graph source** — `"graph"` source type for contagion scoring, `add_graph_source()`, `auto_discover()` auto-detects edge tables
|
|
13
|
+
- **11 new MCP tools** — edge table tools available in Phase 2 (immediately after `open_sphere`), no `sphere_overview` needed. Total: 66 MCP tools (55 → 66)
|
|
14
|
+
- **7 fraud investigation recipes** added to `gds-fraud-investigator` skill — Mirror Transaction, Pass-Through, Burst Detection, Weighted Reciprocity, Financial Profile, Concentration Risk, Benford's Law
|
|
15
|
+
- **All 8 skills updated** — edge table tools integrated across `gds-analyst`, `gds-detective`, `gds-explorer`, `gds-fraud-investigator`, `gds-investigator`, `gds-monitor`, `gds-scanner`, `gds-sphere-designer`
|
|
16
|
+
- **Builder improvements** — adjacency deduplication, self-loop filtering, edge stats cached at build time (`_gds_meta/edge_stats/`), timestamp string parsing with 6-format sample-based detection, Windows timezone database fallback
|
|
17
|
+
- **Performance** — `passive_scan` 84s → <10s, `detect_pattern` 86s → <15s, `cluster_bridges` 31s → <5s
|
|
18
|
+
- **Fixes** — `find_anomalies` Lance duplicate row deduplication, zero-variance `tracked_properties` cleanup in AML benchmark spheres
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 0.1.0
|
|
23
|
+
|
|
24
|
+
Core GDS stack — sphere build, geometry, navigation, MCP server, storage/performance, and maintainability.
|
|
25
|
+
|
|
26
|
+
- Sphere builder — declarative YAML config, CLI (`build`, `validate`, `info`), Tier 1-3 sources, derived/precomputed/graph dimensions, composite lines, chain lines
|
|
27
|
+
- Navigation primitives π1–π12 — walk, jump, dive, emerge, attract (anomaly, boundary, hub, cluster), drift, trajectory, population compare, regime change
|
|
28
|
+
- Aliases — cutting-plane sub-populations with derived geometry (W vector, bias, direction)
|
|
29
|
+
- Temporal snapshots — deformation history, solid construction, temporal centroids
|
|
30
|
+
- Investigation — `explain_anomaly`, witness set, anti-witness, reputation scoring
|
|
31
|
+
- Forecasting — trajectory extrapolation, anomaly forecast, segment crossing prediction, pluggable `ForecastProvider` protocol
|
|
32
|
+
- Full-text search — FTS index on points, `search_entities_fts`, hybrid search (semantic + FTS with reciprocal rank fusion)
|
|
33
|
+
- CalibrationTracker — online Welford drift detection with soft/hard thresholds
|
|
34
|
+
- MVCC sessions — Manifest/Contract version pinning, isolated reads per agent
|
|
35
|
+
- PassiveScanner — multi-source batch screening (geometry, borderline, points, compound), auto-discover, density boost
|
|
36
|
+
- Incremental update — `GDSBuilder.incremental_update()` for appending without full rebuild
|
|
37
|
+
- MCP server (55 tools, smart detection mode, 3-phase tool visibility)
|
|
38
|
+
- Validation suite — Berka (skill calibration), NYC Taxi (domain generalization), IBM AML (3-layer benchmark)
|
|
39
|
+
- Storage — Lance vector index, Arrow IPC, LRU cache, append-only writes
|
|
40
|
+
- Docs — quickstart, concepts, architecture, configuration, API reference, data format
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Plan: 0.3.0
|
|
45
|
+
|
|
46
|
+
**Storage / performance:**
|
|
47
|
+
- Upgrade `pylance 2.0.1 → 3.0.1` — format 2.2, ~300% faster scans, LZ4/zstd compression
|
|
48
|
+
- Replace `shutil.copytree` with `lance.dataset.clone()` in test fixtures (O(1) metadata clone)
|
|
49
|
+
- Builder: incremental rebuild (geometry-only without `--force` wipe)
|
|
50
|
+
|
|
51
|
+
**Code refactoring:**
|
|
52
|
+
- Break up oversized modules into smaller, domain-focused components
|
|
53
|
+
- Reduce coupling between core layers by replacing private cross-layer access with explicit interfaces where practical
|
|
54
|
+
- Tighten error handling in hot paths so failures are surfaced more consistently
|
|
55
|
+
- Consolidate repeated orchestration logic into shared helpers instead of duplicating it across modules
|
|
56
|
+
- Make the refactor pass incremental: preserve behavior, improve structure, then revisit deeper architectural boundaries
|
|
57
|
+
|
|
58
|
+
**PassiveScanner evolution:**
|
|
59
|
+
- Native temporal source support for direct temporal inputs, without requiring manual dataset plumbing in benchmark scripts
|
|
60
|
+
- Optional weighted scoring mode that uses continuous intensity instead of binary counts
|
|
61
|
+
- **SphereProfiler** — autonomous sphere scanner that profiles all patterns, runs calibration sweeps across source combinations, proposes optimal PassiveScanner composition for Layer 1 surveillance. Core loop: enumerate patterns → single-source anomaly scans → greedy multi-source combination → ranked composition report. No labeled GT needed; optional GT file unlocks supervised calibration.
|
|
62
|
+
|
|
63
|
+
**Anomaly detection quality:**
|
|
64
|
+
- Confidence scoring, robust estimators, multi-scale resolution — improve anomaly precision and reduce false positives on heavy-tail and multi-modal populations
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Future
|
|
69
|
+
|
|
70
|
+
- Cross-sphere comparison — dimensionless metrics across independently calibrated coordinate spaces
|
|
71
|
+
- What-if analysis — hypothetical edge changes producing modified coordinate vectors
|
|
72
|
+
- Dimension access control — per-agent visibility constraints on delta dimensions
|
|
73
|
+
- Runtime latency benchmarks in package docs
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
## Current version: 0.2.x
|
|
4
|
+
|
|
5
|
+
hypertopos runs locally. No network services, no auth layer, no multi-tenancy.
|
|
6
|
+
|
|
7
|
+
## What to watch for
|
|
8
|
+
|
|
9
|
+
- **Pickle files** — chain cache (`.cache/chains_*.pkl`) uses pickle. Don't load cache files from untrusted sources.
|
|
10
|
+
- **Sphere paths** — `HyperSphere.open(path)` reads from the local filesystem. Don't point it at user-controlled paths without validation.
|
|
11
|
+
- **MCP server** — communicates over stdio. Not designed for network exposure.
|
|
12
|
+
|
|
13
|
+
## Reporting
|
|
14
|
+
|
|
15
|
+
If you find a security issue: [GitHub private vulnerability reporting](https://github.com/hypertopos/hypertopos-py/security/advisories/new) or email [contact@hypertopos.com](mailto:contact@hypertopos.com).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# hypertopos Documentation
|
|
2
|
+
|
|
3
|
+
> Package documentation for hypertopos — the AI-first geometric data sphere.
|
|
4
|
+
|
|
5
|
+
## Reading Paths
|
|
6
|
+
|
|
7
|
+
**New to hypertopos?** Start here:
|
|
8
|
+
|
|
9
|
+
1. [Quick Start](quickstart.md) — install, build, navigate
|
|
10
|
+
2. [Core Concepts](concepts.md) — the GDS mental model
|
|
11
|
+
3. [Configuration](configuration.md) — sphere.yaml reference
|
|
12
|
+
|
|
13
|
+
**Building a sphere?**
|
|
14
|
+
→ [Configuration](configuration.md) — full YAML reference with examples
|
|
15
|
+
|
|
16
|
+
**Writing Python code?**
|
|
17
|
+
→ [API Reference](api-reference.md) — classes, methods, error types
|
|
18
|
+
|
|
19
|
+
**Understanding the format?**
|
|
20
|
+
→ [Data Format](data-format.md) — directory layout, Arrow schemas, sphere.json
|
|
21
|
+
|
|
22
|
+
**Understanding the design?**
|
|
23
|
+
→ [Architecture](architecture.md) — package structure, runtime flow
|
|
24
|
+
|
|
25
|
+
**Checking the evidence?**
|
|
26
|
+
→ [Benchmarks](benchmarks.md) — validation results across three domains
|
|
27
|
+
|
|
28
|
+
## All Documents
|
|
29
|
+
|
|
30
|
+
| Document | Description |
|
|
31
|
+
|----------|-------------|
|
|
32
|
+
| [quickstart.md](quickstart.md) | From zero to navigating a sphere |
|
|
33
|
+
| [concepts.md](concepts.md) | Core GDS mental model and vocabulary |
|
|
34
|
+
| [architecture.md](architecture.md) | Package structure, layers, design principles |
|
|
35
|
+
| [configuration.md](configuration.md) | Sphere builder YAML reference |
|
|
36
|
+
| [api-reference.md](api-reference.md) | Python API — classes, methods, errors |
|
|
37
|
+
| [data-format.md](data-format.md) | Physical storage format on disk |
|
|
38
|
+
| [benchmarks.md](benchmarks.md) | Validation results — Berka, IBM AML, NYC Taxi |
|