hypertopos 0.2.0__tar.gz → 0.2.2__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.2/.github/workflows/publish-pypi.yml +35 -0
- {hypertopos-0.2.0 → hypertopos-0.2.2}/.gitignore +40 -40
- {hypertopos-0.2.0 → hypertopos-0.2.2}/CHANGELOG.md +188 -156
- {hypertopos-0.2.0 → hypertopos-0.2.2}/LICENSE.md +83 -83
- {hypertopos-0.2.0 → hypertopos-0.2.2}/PKG-INFO +1 -1
- {hypertopos-0.2.0 → hypertopos-0.2.2}/README.md +121 -120
- hypertopos-0.2.2/ROADMAP.md +58 -0
- {hypertopos-0.2.0 → hypertopos-0.2.2}/SECURITY.md +15 -15
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/README.md +38 -38
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/api-reference.md +445 -444
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/architecture.md +330 -326
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/LICENSE +190 -190
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/README.md +129 -129
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/README.md +287 -287
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/SUMMARY.md +271 -271
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-a-report.md +421 -421
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-a-scoring.md +14 -14
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-b-report.md +409 -409
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-b-scoring.md +17 -17
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-settings.md +38 -38
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-a-report.md +391 -391
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-a-scoring.md +75 -75
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-b-report.md +433 -433
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-b-scoring.md +17 -17
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-settings.md +37 -37
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-a-report.md +322 -322
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-a-scoring.md +114 -114
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-b-report.md +484 -484
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-b-scoring.md +19 -19
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-settings.md +38 -38
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-a-report.md +158 -158
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-a-scoring.md +114 -114
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-b-report.md +328 -328
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-b-scoring.md +19 -19
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-settings.md +39 -39
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-a-report.md +208 -208
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-a-scoring.md +128 -128
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-b-report.md +419 -419
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-b-scoring.md +25 -25
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-settings.md +39 -39
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-a-report.md +281 -281
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-a-scoring.md +100 -100
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-b-report.md +413 -413
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-b-scoring.md +26 -26
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-settings.md +47 -47
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/prepare_accounts.py +195 -195
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/prepare_cpty_banks.py +20 -20
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/prepare_districts.py +24 -24
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/prepare_loan_accounts.py +20 -20
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/prepare_operations.py +20 -20
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/prepare_orders.py +40 -40
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/prepare_transactions.py +51 -51
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/prepare_tx_types.py +20 -20
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/berka/sphere/sphere.yaml +222 -222
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/README.md +349 -349
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/_layer2_cross_eval.py +292 -292
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/_layer3_cross_eval.py +335 -335
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_accounts.py +209 -209
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_currencies.py +30 -30
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_payment_formats.py +30 -30
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_transactions.py +93 -93
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/hi_small_sphere/sphere.yaml +202 -202
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/layer1_passive_scan.py +419 -419
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/layer2_xgboost_sweep.py +381 -381
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/layer3_typology_filter.py +292 -292
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/li_small_sphere/prepare_accounts.py +209 -209
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/li_small_sphere/prepare_currencies.py +30 -30
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/li_small_sphere/prepare_payment_formats.py +30 -30
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/li_small_sphere/prepare_transactions.py +93 -93
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/li_small_sphere/sphere.yaml +202 -202
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/ibm-aml/passive-scan-calibration.md +231 -231
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/README.md +291 -291
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/SUMMARY.md +281 -281
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-a-report.md +301 -301
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-a-scoring.md +23 -23
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-b-report.md +321 -321
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-b-scoring.md +20 -20
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-c-report.md +492 -492
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-settings.md +84 -84
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-a-report.md +269 -269
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-a-scoring.md +42 -42
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-b-report.md +253 -253
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-b-scoring.md +20 -20
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-c-report.md +388 -388
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-settings.md +91 -91
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-a-report.md +331 -331
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-a-scoring.md +24 -24
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-b-report.md +335 -335
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-b-scoring.md +20 -20
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-c-report.md +455 -455
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-settings.md +91 -91
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/sphere/prepare_trips.py +203 -203
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmark/nyc-taxi/sphere/sphere.yaml +159 -159
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/benchmarks.md +64 -64
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/concepts.md +266 -265
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/configuration.md +980 -980
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/data-format.md +197 -197
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/images/build-pipeline.svg +83 -83
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/images/core-objects.svg +131 -131
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/images/cutting-plane.svg +42 -42
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/images/directory-layout.svg +98 -98
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/images/hypertopos-overview.svg +172 -172
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/images/model-lifecycle.svg +110 -110
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/images/navigation-primitives.svg +113 -113
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/images/three-scales.svg +96 -96
- {hypertopos-0.2.0 → hypertopos-0.2.2}/docs/quickstart.md +113 -113
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/__init__.py +19 -19
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/builder/__init__.py +25 -25
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/builder/_stats.py +351 -351
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/builder/_writer.py +248 -248
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/builder/builder.py +3708 -3708
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/builder/derived.py +828 -828
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/builder/mapping.py +243 -243
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/cli/__init__.py +14 -14
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/cli/__main__.py +10 -10
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/cli/build.py +972 -972
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/cli/info.py +63 -63
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/cli/main.py +110 -110
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/cli/schema.py +850 -850
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/cli/sources.py +230 -230
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/__init__.py +4 -4
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/aggregation.py +2418 -2418
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/calibration.py +125 -125
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/chains.py +491 -491
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/composition.py +180 -180
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/datafusion_agg.py +602 -602
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/forecast.py +327 -327
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/geometry.py +1119 -1036
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/invalidation.py +4 -4
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/investigation.py +61 -61
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/engine/subprocess_agg.py +742 -742
- {hypertopos-0.2.0/hypertopos/storage → hypertopos-0.2.2/hypertopos/model}/__init__.py +4 -4
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/model/manifest.py +42 -42
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/model/objects.py +123 -123
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/model/sphere.py +313 -313
- {hypertopos-0.2.0/hypertopos/model → hypertopos-0.2.2/hypertopos/navigation}/__init__.py +4 -4
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/navigation/navigator.py +9070 -8461
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/navigation/scanner.py +838 -832
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/sphere.py +295 -295
- {hypertopos-0.2.0/hypertopos/navigation → hypertopos-0.2.2/hypertopos/storage}/__init__.py +4 -4
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/storage/_schemas.py +50 -50
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/storage/cache.py +30 -30
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/storage/reader.py +1311 -1311
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/storage/writer.py +931 -931
- hypertopos-0.2.2/hypertopos/utils/__init__.py +4 -0
- {hypertopos-0.2.0 → hypertopos-0.2.2}/hypertopos/utils/arrow.py +111 -111
- {hypertopos-0.2.0 → hypertopos-0.2.2}/pyproject.toml +50 -50
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/conftest.py +83 -83
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/fixtures/generate_fixtures.py +275 -275
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_aggregation_engine.py +1884 -1884
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_arrow_utils.py +183 -183
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_builder.py +1810 -1810
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_builder_alias.py +103 -103
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_builder_derived.py +1228 -1228
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_builder_edges.py +147 -147
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_cache.py +41 -41
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_calibration.py +279 -279
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_chains.py +435 -435
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_cli.py +129 -129
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_cli_alias.py +257 -257
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_cli_sources.py +343 -343
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_compaction.py +4 -4
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_composition.py +60 -60
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_continuous_event_dims.py +533 -533
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_data_quality_prop.py +291 -291
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_datafusion_agg.py +788 -788
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_detection.py +431 -406
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_edge_table.py +189 -189
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_engine.py +2119 -2119
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_forecast.py +317 -317
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_fts.py +511 -511
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_geometric_path.py +682 -582
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_geometry_stats.py +354 -354
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_hybrid_search.py +284 -284
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_incremental.py +233 -233
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_invalidation.py +4 -4
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_investigation.py +71 -71
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_mapping.py +386 -386
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_model.py +938 -938
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_mvcc_session.py +261 -261
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_navigation.py +7633 -7633
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_navigator_alerts.py +49 -49
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_observability.py +1361 -1361
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_precision_stack.py +870 -870
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_reputation.py +76 -76
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_row_id_cache.py +205 -205
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_scanner.py +659 -647
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_sphere.py +205 -205
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_sphere_overview_perf.py +75 -75
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_stats_guard.py +41 -41
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_storage.py +3354 -3354
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_streaming_reads.py +144 -144
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_subprocess_agg.py +961 -961
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_temporal_centroids.py +358 -358
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_trajectory_ann.py +259 -259
- hypertopos-0.2.2/tests/test_witness_cohort.py +223 -0
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/test_witness_set.py +56 -56
- hypertopos-0.2.0/ROADMAP.md +0 -73
- hypertopos-0.2.0/hypertopos/utils/__init__.py +0 -4
- {hypertopos-0.2.0 → hypertopos-0.2.2}/tests/.gitkeep +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build-and-publish:
|
|
13
|
+
name: Build and publish to PyPI
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
environment: pypi
|
|
16
|
+
permissions:
|
|
17
|
+
id-token: write # required for PyPI Trusted Publishing (OIDC)
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout
|
|
21
|
+
uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.12"
|
|
27
|
+
|
|
28
|
+
- name: Install build
|
|
29
|
+
run: python -m pip install --upgrade build
|
|
30
|
+
|
|
31
|
+
- name: Build sdist and wheel
|
|
32
|
+
run: python -m build
|
|
33
|
+
|
|
34
|
+
- name: Publish to PyPI
|
|
35
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -1,40 +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/
|
|
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/
|
|
@@ -1,156 +1,188 @@
|
|
|
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.
|
|
9
|
-
|
|
10
|
-
### Added
|
|
11
|
-
|
|
12
|
-
**
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
- `
|
|
16
|
-
- `
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- `
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- `
|
|
31
|
-
- `
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- `
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
- `
|
|
47
|
-
- `
|
|
48
|
-
- `
|
|
49
|
-
-
|
|
50
|
-
- `
|
|
51
|
-
- `
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
- `
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
- `
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
- `
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
**
|
|
133
|
-
-
|
|
134
|
-
-
|
|
135
|
-
-
|
|
136
|
-
-
|
|
137
|
-
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
-
|
|
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.2] — 2026-04-11
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
**Temporal as-of reconstruction across edge-table graph primitives**
|
|
13
|
+
- `contagion_score()`, `contagion_score_batch()` — optional keyword-only `timestamp_cutoff: float | None` parameter. When set, only edges with `timestamp <= timestamp_cutoff` are considered. Batch forwards the cutoff to every per-entity call.
|
|
14
|
+
- `entity_flow()` — same `timestamp_cutoff` parameter; both outgoing and incoming edge reads honor the cutoff, so net flow reflects the as-of graph state.
|
|
15
|
+
- `degree_velocity()` — same parameter; buckets derive from the filtered edge set so the last bucket endpoint is naturally `<= timestamp_cutoff`.
|
|
16
|
+
- `propagate_influence()` — same parameter; threaded through the BFS `_expand_neighbors` closure so expansion follows only edges with `timestamp <= cutoff`.
|
|
17
|
+
- `find_counterparties()` — same parameter on the edge-table fast path via `_find_counterparties_via_edges`. The points-scan fallback has no timestamp column and **raises `GDSNavigationError`** when `timestamp_cutoff` is supplied — fail loudly instead of silently returning unfiltered results.
|
|
18
|
+
|
|
19
|
+
The semantic mirrors the existing `WitnessCohortConfig.timestamp_cutoff` from 0.2.1: edges with `timestamp <= timestamp_cutoff` are included. Enables agents to reconstruct contagion, flow, connection velocity, and influence propagation state at a prior point in time — useful for incident forensics ("what did this neighborhood look like on the day the alert fired?"), retroactive detection validation, and historical-snapshot comparisons.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- `detect_cross_pattern_discrepancy` no longer triggers full edge-table scans through `PassiveScanner.auto_discover`. The scanner gains an `include_graph: bool = True` keyword-only parameter; `detect_cross_pattern_discrepancy` calls it with `include_graph=False` because graph contagion plays no role in the downstream geometry-disagreement check. Eliminates the dominant latency regression on multi-pattern spheres with edge tables — the discrepancy detector previously paid one full edge-table read per event pattern with no signal benefit. Every other `auto_discover` caller (`composite_risk`, explicit scanner use) stays at the graph-enabled default.
|
|
24
|
+
|
|
25
|
+
## [0.2.1] — 2026-04-11
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
**Witness cohort discovery**
|
|
30
|
+
- `find_witness_cohort()` — rank entities that share the target's witness signature. **Investigative peer ranking, not edge forecasting.**
|
|
31
|
+
- Combines four signals: `exp(-distance/theta)` delta similarity (absolute, pool-independent), witness Jaccard overlap, trajectory cosine alignment (optional), graded anomaly bonus from `delta_rank_pct / 100`
|
|
32
|
+
- Excludes already-connected entities via BTREE edge lookup; bidirectional check by default; `timestamp_cutoff` for as-of evaluation in temporal hold-out
|
|
33
|
+
- Auto-resolves the event pattern with edge table covering an anchor's entity line; explicit `edge_pattern_id` override is validated
|
|
34
|
+
- Trajectory branch decided once per call (not per candidate) — when ref has trajectory, missing candidates get neutral 0.5 instead of mixed renormalization
|
|
35
|
+
- Batch trajectory load via single Lance scan instead of per-candidate (~11× speedup over the per-candidate path)
|
|
36
|
+
- `WitnessCohortConfig` and `WitnessCohortWeights` dataclasses group all tunable parameters; navigator API takes a single `config=` keyword
|
|
37
|
+
- `CohortMember` and `WitnessCohortResult` frozen dataclasses with per-component scores, exclusion counts, and reproducibility metadata
|
|
38
|
+
- `GDSEngine.witness_jaccard()`, `GDSEngine.trajectory_cosine()`, `GDSEngine.composite_link_score()` — pure scoring helpers exposed for reuse
|
|
39
|
+
|
|
40
|
+
## [0.2.0] — 2026-04-10
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
|
|
44
|
+
**Edge Table**
|
|
45
|
+
- Lance-based edge table per event pattern — auto-emitted at build time from FK data
|
|
46
|
+
- BTREE indexes on `from_key`/`to_key` — O(log n) lookups at any scale
|
|
47
|
+
- `GDSWriter.write_edges()`, `append_edges()`, `create_edge_indexes()`
|
|
48
|
+
- `GDSReader.read_edges()`, `has_edge_table()`, `edge_table_stats()`
|
|
49
|
+
- MVCC session pinning for edge tables
|
|
50
|
+
- YAML `edge_table` config (optional, auto-detected from graph_features/relations)
|
|
51
|
+
- `--no-edges` CLI flag
|
|
52
|
+
|
|
53
|
+
**Navigation**
|
|
54
|
+
- `find_geometric_path()` — beam search with geometric/anomaly/shortest/amount scoring
|
|
55
|
+
- `discover_chains()` — runtime temporal BFS on edge table (no build-time extraction needed)
|
|
56
|
+
- `find_counterparties()` — edge table fast path with BTREE lookup and amount aggregates
|
|
57
|
+
- `entity_flow()` — net flow per counterparty via edge table
|
|
58
|
+
- `contagion_score()` / `contagion_score_batch()` — anomaly neighborhood scoring via edge table
|
|
59
|
+
- `degree_velocity()` — temporal connection velocity (degree change over time buckets)
|
|
60
|
+
- `investigation_coverage()` — agent guidance: explored vs unexplored counterparty coverage
|
|
61
|
+
- `propagate_influence()` — BFS influence propagation with geometric decay and tx_count weighting
|
|
62
|
+
- `cluster_bridges()` — geometry+graph fusion: find entities bridging geometric clusters
|
|
63
|
+
- `anomalous_edges()` — event-level scoring between entity pairs (uses event geometry, not anchor)
|
|
64
|
+
- Amount-weighted scoring mode for `find_geometric_path` — `scoring="amount"`
|
|
65
|
+
- Lazy adjacency expansion — never loads full edge table into memory
|
|
66
|
+
- Anchor pattern resolution for geometric scoring (event pattern edge table → anchor pattern deltas)
|
|
67
|
+
- Score interpretation hint in `find_geometric_path` summary
|
|
68
|
+
|
|
69
|
+
**PassiveScanner**
|
|
70
|
+
- `"graph"` source type — contagion scoring via edge table + geometry anomaly check
|
|
71
|
+
- `add_graph_source()` — register graph contagion source with configurable threshold
|
|
72
|
+
- `auto_discover()` — auto-detects graph sources for event patterns with edge tables
|
|
73
|
+
|
|
74
|
+
**MCP Tools**
|
|
75
|
+
- `find_geometric_path` — path finding with geometric coherence scoring (+ amount mode)
|
|
76
|
+
- `discover_chains` — runtime chain discovery without pre-built chain lines
|
|
77
|
+
- `edge_stats` — edge table statistics (row count, degree, timestamp/amount range)
|
|
78
|
+
- `entity_flow` — net flow analysis per counterparty
|
|
79
|
+
- `contagion_score` / `contagion_score_batch` — anomaly neighborhood scoring
|
|
80
|
+
- `degree_velocity` — temporal connection velocity
|
|
81
|
+
- `investigation_coverage` — agent guidance for investigation coverage
|
|
82
|
+
- `propagate_influence` — BFS influence propagation with geometric decay and tx_count weighting
|
|
83
|
+
- `cluster_bridges` — geometry+graph fusion cluster bridge analysis
|
|
84
|
+
- `anomalous_edges` — event-level edge scoring between entity pairs
|
|
85
|
+
- Output cap (top 20 paths / top 100 influenced) with warning when truncated
|
|
86
|
+
|
|
87
|
+
**Builder**
|
|
88
|
+
- Edge table emission in all build paths (standard, streaming, chunked)
|
|
89
|
+
- Adjacency deduplication — one entry per unique neighbor
|
|
90
|
+
- Self-loop filtering in graph traversal and temporal chain BFS
|
|
91
|
+
- Edge stats cached at build time (`_gds_meta/edge_stats/`) for instant reads
|
|
92
|
+
- Timestamp string parsing with sample-based format detection (6 formats supported)
|
|
93
|
+
- Windows timezone database fallback in timestamp parsing
|
|
94
|
+
- 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
|
|
95
|
+
- `sphere.json` edge_table metadata persists full config (`from_col`, `to_col`, plus `timestamp_col`/`amount_col` when set)
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## [0.1.0] — 2026-04-07
|
|
100
|
+
|
|
101
|
+
First public release. Core GDS stack.
|
|
102
|
+
|
|
103
|
+
### Added
|
|
104
|
+
|
|
105
|
+
**Sphere Builder**
|
|
106
|
+
- Declarative YAML config (`sphere.yaml`) with CLI: `hypertopos build`, `validate`, `info`
|
|
107
|
+
- Three source tiers: single file (CSV/Parquet), multi-file join, Python script
|
|
108
|
+
- Derived dimensions (count, sum, avg, windowed metrics, IET)
|
|
109
|
+
- Precomputed dimensions with `edge_max` continuous mode
|
|
110
|
+
- Graph features: `in_degree`, `out_degree`, `reciprocity`, `counterpart_overlap`
|
|
111
|
+
- Composite lines (multi-key entities)
|
|
112
|
+
- Chain lines (temporal BFS extraction with parallel processing)
|
|
113
|
+
- Aliases with cutting-plane sub-populations
|
|
114
|
+
- Temporal snapshot builder
|
|
115
|
+
- `dimension_weights: kurtosis` automatic weighting
|
|
116
|
+
- Incremental update (`GDSBuilder.incremental_update()`)
|
|
117
|
+
|
|
118
|
+
**Navigation (π1–π12)**
|
|
119
|
+
- π1 `walk_line` — step along a line
|
|
120
|
+
- π2 `jump_polygon` — cross to related line via edge
|
|
121
|
+
- π3 `dive_solid` — enter temporal history
|
|
122
|
+
- π4 `emerge` — return to surface
|
|
123
|
+
- π5 `attract_anomaly` — find outliers in population
|
|
124
|
+
- π6 `attract_boundary` — find entities near alias boundary
|
|
125
|
+
- π7 `attract_hub` — find most connected entities
|
|
126
|
+
- π8 `attract_cluster` — discover geometric archetypes (k-means++)
|
|
127
|
+
- π9 `attract_drift` — find entities with highest temporal drift
|
|
128
|
+
- π10 `attract_trajectory` — find entities with similar trajectory (ANN)
|
|
129
|
+
- π11 `attract_population_compare` — compare geometry across time windows
|
|
130
|
+
- π12 `attract_regime_change` — detect structural shifts in population
|
|
131
|
+
|
|
132
|
+
**Analysis & Investigation**
|
|
133
|
+
- `explain_anomaly` — structured explanation with witness set, repair set, severity, reputation
|
|
134
|
+
- `contrast_populations` — dimension-by-dimension comparison (Cohen's d)
|
|
135
|
+
- `find_similar_entities` — ANN search in delta-space
|
|
136
|
+
- `centroid_map` — group centroids for sub-population positioning
|
|
137
|
+
- `composite_risk` — cross-pattern risk scoring (Fisher's method)
|
|
138
|
+
- `cross_pattern_profile` — multi-pattern risk view for one entity
|
|
139
|
+
- Full-text search (`search_entities_fts`) and hybrid search (semantic + FTS with RRF)
|
|
140
|
+
- 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
|
|
141
|
+
|
|
142
|
+
**Forecasting**
|
|
143
|
+
- Trajectory extrapolation (exponentially-weighted linear regression)
|
|
144
|
+
- `forecast_anomaly_status` — predict future anomaly state
|
|
145
|
+
- `forecast_segment_crossing` — predict boundary crossings
|
|
146
|
+
- Pluggable `ForecastProvider` protocol for external backends
|
|
147
|
+
|
|
148
|
+
**Model**
|
|
149
|
+
- Point, Edge, Polygon, Solid, SolidSlice
|
|
150
|
+
- Line, Pattern, Alias, Manifest, Contract
|
|
151
|
+
- CalibrationTracker (online Welford drift detection)
|
|
152
|
+
- MVCC sessions (version-pinned reads per agent)
|
|
153
|
+
|
|
154
|
+
**Engine**
|
|
155
|
+
- Delta vector computation with z-score normalization
|
|
156
|
+
- Anomaly detection: theta threshold + conformal p-values
|
|
157
|
+
- Mahalanobis variant (ellipsoidal boundary via Cholesky decomposition)
|
|
158
|
+
- K-means++ clustering with automatic k selection (silhouette)
|
|
159
|
+
- DTW trajectory comparison
|
|
160
|
+
- Reputation scoring (Beta distribution posterior)
|
|
161
|
+
- Investigation engine (witness set, anti-witness, severity classification)
|
|
162
|
+
- Composition: Fisher's method for p-value combination, co-dispersion (Spearman)
|
|
163
|
+
|
|
164
|
+
**Storage**
|
|
165
|
+
- Arrow IPC format with Lance vector index (IVF-PQ)
|
|
166
|
+
- BTREE, BITMAP, FTS indices on points
|
|
167
|
+
- Append-only writes, LRU polygon cache
|
|
168
|
+
- Geometry stats cache, temporal centroid cache, trajectory ANN index
|
|
169
|
+
- Optional DataFusion SQL aggregation (~30x speedup on 5M+ events)
|
|
170
|
+
|
|
171
|
+
**PassiveScanner**
|
|
172
|
+
- Multi-source batch screening: geometry, borderline, points, compound sources
|
|
173
|
+
- `auto_discover` — automatic source registration from sphere structure
|
|
174
|
+
- Density boost, weighted scoring mode
|
|
175
|
+
- 4 operating stages
|
|
176
|
+
|
|
177
|
+
**Validation**
|
|
178
|
+
- Berka banking benchmark (skill calibration, 6 runs)
|
|
179
|
+
- NYC Yellow Taxi benchmark (domain generalization, 3 runs)
|
|
180
|
+
- IBM AML benchmark (3-layer pipeline with cross-validation)
|
|
181
|
+
|
|
182
|
+
**Documentation**
|
|
183
|
+
- Quick Start guide
|
|
184
|
+
- Core Concepts with mathematical foundation
|
|
185
|
+
- API Reference with navigation primitive families
|
|
186
|
+
- Configuration YAML reference with aliases
|
|
187
|
+
- Physical data format reference
|
|
188
|
+
- Architecture overview
|