hypertopos 0.6.2__tar.gz → 0.6.3__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.6.2 → hypertopos-0.6.3}/CHANGELOG.md +63 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/LICENSE.md +1 -1
- {hypertopos-0.6.2 → hypertopos-0.6.3}/PKG-INFO +1 -1
- {hypertopos-0.6.2 → hypertopos-0.6.3}/README.md +2 -1
- {hypertopos-0.6.2 → hypertopos-0.6.3}/ROADMAP.md +1 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/SECURITY.md +1 -1
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/api-reference.md +755 -751
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/concepts.md +1 -1
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/configuration.md +1121 -1098
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/data-format.md +4 -2
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/builder.py +5809 -5721
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/mapping.py +490 -427
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/build.py +1020 -1020
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/schema.py +952 -952
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/adjacency.py +4 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/chains.py +71 -17
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/density_gaps.py +4 -0
- hypertopos-0.6.3/hypertopos/engine/edge_features.py +762 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/hop_predicate.py +4 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/structuring.py +4 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/model/sphere.py +27 -6
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/navigation/navigator.py +24 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/_schemas.py +65 -65
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/calibration_history.py +2 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/reader.py +19 -9
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/writer.py +962 -962
- {hypertopos-0.6.2 → hypertopos-0.6.3}/pyproject.toml +1 -1
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_derived.py +1416 -1416
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration_drift.py +398 -398
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration_history.py +64 -0
- hypertopos-0.6.3/tests/test_edge_dim_aggregations.py +340 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dim_aggregations_builder.py +264 -6
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dim_aggregations_chain.py +4 -4
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dim_aggregations_engine.py +226 -1
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_motif.py +2890 -2890
- hypertopos-0.6.2/hypertopos/engine/edge_features.py +0 -345
- hypertopos-0.6.2/tests/test_edge_dim_aggregations.py +0 -173
- {hypertopos-0.6.2 → hypertopos-0.6.3}/.github/workflows/publish-pypi.yml +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/.gitignore +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/README.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/architecture.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/LICENSE +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/README.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/README.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/SUMMARY.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_accounts.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_cpty_banks.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_districts.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_loan_accounts.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_operations.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_orders.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_transactions.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_tx_types.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/sphere.yaml +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/README.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/_layer2_cross_eval.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/_layer3_cross_eval.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_accounts.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_currencies.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_payment_formats.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_transactions.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/sphere.yaml +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/layer1_passive_scan.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/layer2_xgboost_sweep.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/layer3_typology_filter.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/prepare_accounts.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/prepare_currencies.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/prepare_payment_formats.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/prepare_transactions.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/sphere.yaml +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/passive-scan-calibration.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/README.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/SUMMARY.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-exp-c-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-exp-c-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-a-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-a-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-b-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-b-scoring.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-exp-c-report.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-settings.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/sphere/prepare_trips.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/sphere/sphere.yaml +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmarks.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/build-pipeline.svg +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/core-objects.svg +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/cutting-plane.svg +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/directory-layout.svg +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/hypertopos-overview.svg +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/model-lifecycle.svg +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/navigation-primitives.svg +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/three-scales.svg +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/introduction.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/quickstart.md +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/__init__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/__init__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_bootstrap.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_bregman.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_scatter.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_stats.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_writer.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/derived.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/dim_blocks.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/__init__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/__main__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/info.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/main.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/sources.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/__init__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/aggregation.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/calibration.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/composition.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/fdr.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/forecast.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/geometry.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/graph_algorithms.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/heredity.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/invalidation.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/investigation.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/lance_sql_agg.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/selection.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/model/__init__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/model/manifest.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/model/objects.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/navigation/__init__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/navigation/scanner.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/sphere.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/__init__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/cache.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/utils/__init__.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/utils/arrow.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/.gitkeep +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/conftest.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/fixtures/generate_fixtures.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_adjacency.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_adjacency_vectorized.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_aggregation_engine.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_arrow_utils.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_bootstrap.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_bregman.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_alias.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_chunking.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_contagion.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_edges.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_rolling_z.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_scatter.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_temporal_perf.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_cache.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration_history_builder.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration_history_reader.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_chains.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_cli.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_cli_alias.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_cli_sources.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_compaction.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_composition.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_continuous_event_dims.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_data_quality_prop.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_decompose_drift.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_density_gaps_engine.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_detection.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_dim_blocks.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_distinct_neighbor_count.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dim_aggregations_roundtrip.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dimensions_builder.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dimensions_yaml.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_features.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_features_reader.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_potential.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_table.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_engine.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_fdr.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_calibration_influencers.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_density_gaps.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_lead_lag.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_lead_lag_significance.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_motif_by_hops.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_forecast.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_fts.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_geometric_path.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_geometry_stats.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_gradient_alignment.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_graph_algorithms.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_heredity.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_hop_predicate_engine.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_hybrid_search.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_incremental.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_invalidation.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_investigation.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_kind_detect.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_lance_sql_agg.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_mapping.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_model.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_mvcc_session.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_navigation.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_navigator_alerts.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_navigator_fdr_select.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_neighbors_window.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_observability.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_precision_stack.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_profile_motif_perf_smoke.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_reputation.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_root_cause_trace.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_row_id_cache.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_scanner.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_schema_chain_eda_validation.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_selection.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_sphere.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_sphere_overview_perf.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_stats_guard.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_storage.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_streaming_reads.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_structuring_engine.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_temporal_centroids.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_trajectory_ann.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_witness_cohort.py +0 -0
- {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_witness_set.py +0 -0
|
@@ -7,6 +7,69 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.6.3] — 2026-05-06
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Build-time compute paths for `edge_dim_aggregations:` and the edge feature
|
|
14
|
+
catalog (`compute_pair_edge_count`, `compute_time_since_pair_last_edge`,
|
|
15
|
+
`compute_pair_amount_zscore`, `parse_timestamps_to_epoch`) optimised —
|
|
16
|
+
pure-Python per-row loops replaced with vectorised pyarrow / numpy
|
|
17
|
+
paths. The `_p95` aggregate now returns the exact 95-th percentile
|
|
18
|
+
element (previously a t-digest sketch approximation).
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- `aggregates:` per-source-dim subset selector on `edge_dim_aggregations:`.
|
|
22
|
+
Source dims can now declare which aggregates to emit (`mean` / `max` /
|
|
23
|
+
`std` / `p95` / `count_above_threshold`) instead of always emitting all
|
|
24
|
+
five. The existing `dims: [a, b]` list form continues to expand to all
|
|
25
|
+
five aggregates per dim; the new mapping form
|
|
26
|
+
`dims: {a: [count_above_threshold], b: [mean, max]}` selects subsets.
|
|
27
|
+
Polygon-dim layout follows source-dim insertion order × canonical
|
|
28
|
+
aggregate order, so reordering the user-supplied aggregate list does
|
|
29
|
+
not flip `schema_hash`. Spheres rebuilt with subset selectors carry an
|
|
30
|
+
`aggregates_per_dim` block under each pattern's `edge_dim_aggregations:`
|
|
31
|
+
in `sphere.json`; pre-selector spheres keep emitting the full five-tuple
|
|
32
|
+
on read.
|
|
33
|
+
- Per-source-dim `_count_above_threshold` thresholds are now persisted into
|
|
34
|
+
the calibration epoch JSON under `_gds_meta/calibration_history/<pid>/v={N}.json`
|
|
35
|
+
alongside `mu` / `sigma` / `theta`. Each calibration epoch carries the
|
|
36
|
+
thresholds used during its build, so re-builds are deterministic and
|
|
37
|
+
multi-epoch comparisons see threshold drift. `compare_calibrations`
|
|
38
|
+
output gains a new `edge_dim_threshold_drift` field — a per-source-dim
|
|
39
|
+
`{from, to, delta}` map populated when both compared epochs declared
|
|
40
|
+
`edge_dim_aggregations:`. Legacy epochs (built before this release)
|
|
41
|
+
deserialize with `edge_dim_thresholds=None` and silently omit the
|
|
42
|
+
drift block.
|
|
43
|
+
- `edge_dim_aggregations:` on composite anchors with `len(key_cols) > 2`
|
|
44
|
+
(tripartite and beyond). The previous k=2 (pair) restriction is lifted —
|
|
45
|
+
composite anchors registered via `composite_lines:` with three or more
|
|
46
|
+
key columns now compose with `edge_dim_aggregations:` the same way k=2
|
|
47
|
+
composite anchors did. The anchor primary key is constructed positionally
|
|
48
|
+
from `key_cols` joined by the `composite_lines.<id>.separator`, matching
|
|
49
|
+
the convention used to register the composite line itself. Aggregated
|
|
50
|
+
per-anchor `<source_dim>_mean` / `<source_dim>_max` columns surface in
|
|
51
|
+
every existing anchor-pattern primitive (`find_anomalies`,
|
|
52
|
+
`explain_anomaly`, `find_clusters`, `find_calibration_influencers`,
|
|
53
|
+
`decompose_drift`) via the same `dimension_kinds` source-of-truth as the
|
|
54
|
+
earlier `single` / `pair` / `chain` regimes. No new tools, no MCP API
|
|
55
|
+
change, no sphere format bump.
|
|
56
|
+
- Three new aggregates on `edge_dim_aggregations:` — `_std`
|
|
57
|
+
(per-anchor standard deviation of the source dim across the anchor's
|
|
58
|
+
edges), `_p95` (95th percentile, tail-mass tracker without `_max`'s
|
|
59
|
+
extreme-outlier sensitivity), and `_count_above_threshold` (number
|
|
60
|
+
of edges where the source dim crosses a per-dim threshold). Extend
|
|
61
|
+
the prior `_mean` / `_max` set on every anchor regime (single, pair,
|
|
62
|
+
k>2, chain). Surface automatically alongside `_mean` / `_max` on
|
|
63
|
+
every anchor primitive (`find_anomalies`, `explain_anomaly`,
|
|
64
|
+
`find_clusters`, `find_calibration_influencers`, `decompose_drift`).
|
|
65
|
+
Per-dim threshold for `_count_above_threshold` defaults to the
|
|
66
|
+
population p95 of the source dim; user can override by passing a
|
|
67
|
+
`thresholds` dict keyed by source dim name. `_std` adds variance
|
|
68
|
+
signal that `_mean` / `_max` don't capture; `_p95` separates
|
|
69
|
+
tail-mass from extreme outliers; `_count_above_threshold` flags
|
|
70
|
+
anchors with anomalous concentration of high-value edges. No new
|
|
71
|
+
YAML keywords, no new tools, no sphere format bump.
|
|
72
|
+
|
|
10
73
|
## [0.6.2] — 2026-05-05
|
|
11
74
|
|
|
12
75
|
### Added
|
|
@@ -26,7 +26,7 @@ For purposes of this License:
|
|
|
26
26
|
- **Internal use** within an organization is not a competitive offering. Your
|
|
27
27
|
organization includes entities under common control.
|
|
28
28
|
|
|
29
|
-
**Change Date:** 2029-05-
|
|
29
|
+
**Change Date:** 2029-05-06
|
|
30
30
|
|
|
31
31
|
**Change License:** Apache License, Version 2.0
|
|
32
32
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hypertopos
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
4
4
|
Summary: Understand the structure of your data — without training machine learning models
|
|
5
5
|
Project-URL: Homepage, https://github.com/hypertopos/hypertopos-py
|
|
6
6
|
Project-URL: Documentation, https://github.com/hypertopos/hypertopos-py/tree/main/docs
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
[](https://arrow.apache.org/docs/python/)
|
|
9
9
|
[](https://github.com/lance-format/lance)
|
|
10
10
|
[](https://modelcontextprotocol.io)
|
|
11
|
-
[](pyproject.toml)
|
|
12
12
|
|
|
13
13
|
hypertopos is not a database, and not a machine learning model. It is a layer that turns relational data into a coordinate system where every entity gets a position derived from its relationships and the population around it.
|
|
14
14
|
|
|
@@ -69,6 +69,7 @@ Each capability below emerges from treating entities as points in a shared, popu
|
|
|
69
69
|
| Richer hop predicates | `HopPredicate.amount_ratio_to_prev` (decreasing-chain ratio) and `require_anomalous_entity` (filter chains routing through calibrated-anomalous nodes) extend the declarative motif API | Closed-vocab motif library has fixed amount thresholds and no anomaly-routing filter | `0.6.1` |
|
|
70
70
|
| Event-aware motif scoring | `find_motif_by_hops(score=True)` ranks motifs by the product of event-aware `edge_potential` across edges (uses both the anchor companion's per-entity geometry and the event pattern's per-transaction polygons); distinct transactions between the same accounts produce distinct scores | Pure node-pair scoring collapses ranks when motifs share a node sequence | `0.6.1` |
|
|
71
71
|
| Chain-anchor aggregation | Chain anchor patterns auto-emitted from `chain_lines:` declare `edge_dim_aggregations:` to bake per-event sidecar signals into per-chain `_mean` / `_max` columns; closes the third `anchor_kind` after `single` and `pair` | Per-chain manual aggregation outside the geometry, or no chain-level edge-dim summary at all | `0.6.2` |
|
|
72
|
+
| Expanded `edge_dim_aggregations:` surface | Three additional canonical aggregates per source dim (`_std`, `_p95`, `_count_above_threshold` with population p95 cutoff persisted in calibration epoch JSON); k>2 composite anchor support (tripartite and beyond); per-source-dim subset selector — `dims:` accepts list (sugar = all five aggregates) or mapping `{dim: [agg, …]}` (per-dim subset); cross-epoch `edge_dim_threshold_drift` surface on `compare_calibrations` | Manual rebuild + re-engineering whenever the aggregate vocabulary or the per-anchor breadth changes | `0.6.3` |
|
|
72
73
|
|
|
73
74
|
### What changes in practice
|
|
74
75
|
|
|
@@ -9,6 +9,7 @@ Architecture-emergent analytics, properly enabled — calibration is now version
|
|
|
9
9
|
- **0.6.0** — multi-epoch calibration retention, `compare_calibrations`, intrinsic / extrinsic drift decomposition, hidden-influencer matrix (`find_calibration_influencers`), cross-pattern temporal lead-lag (`find_lead_lag`), edge-derived event-pattern dimensions, joint density gap detection (`find_density_gaps`), declarative motif API (`find_motif_by_hops`, bounded MVP). Sphere format 2.4.
|
|
10
10
|
- **0.6.1** — anchor-pattern aggregation of edge-derived dimensions (`edge_dim_aggregations:`); BFS-by-level enumerator on `find_motif_by_hops` with hop count cap raised 6→8 and global `time_window_hours`; declarative motif API completion via `HopPredicate.amount_ratio_to_prev` and `require_anomalous_entity`; functional anchor-companion + event-aware scoring on `find_motif_by_hops(score=True)`; broadcast-safe `Pattern.dim_labels` on patterns with aggregated edge-dim names. Additive only — no sphere format bump, no new tools.
|
|
11
11
|
- **0.6.2** — chain-anchor `edge_dim_aggregations:` regime closes the third `anchor_kind` after single (account-style) and pair (k=2 composite); vectorized `AdjacencyIndex` load path (pyarrow `group_by` + lazy per-key materialization) for cold-start latency cleanup; column-selective `neighbors_*_window` accessors with motif enumerator migration for `bipartite_burst`, `fan_out`, `fan_in`, `cycle_2`; new project skill `profile-before-plan` gating hot-path refactors on real-data cProfile. Additive only — sphere format stays at 2.4 (the originally proposed persisted-artifact path was empirically refuted; vectorized loader ships without any on-disk change).
|
|
12
|
+
- **0.6.3** — `edge_dim_aggregations:` expansion along four axes: three additional canonical aggregates per source dim (`_std`, `_p95`, `_count_above_threshold` with population p95 cutoff); k>2 composite anchor support (tripartite and beyond) via positional `key_cols` to edge endpoints; per-source-dim subset selector (`dims:` accepts list form for back-compat all-five sugar or mapping form `{dim: [agg, ...]}` for explicit per-dim subset); `_count_above_threshold` cutoffs persisted into the calibration epoch JSON with cross-epoch drift surfacing through `compare_calibrations.edge_dim_threshold_drift`. Spheres declaring `edge_dim_aggregations:` must rebuild; sphere format stays at 2.4.
|
|
12
13
|
|
|
13
14
|
See [CHANGELOG](CHANGELOG.md) for the full feature list.
|
|
14
15
|
|