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.
Files changed (259) hide show
  1. {hypertopos-0.6.2 → hypertopos-0.6.3}/CHANGELOG.md +63 -0
  2. {hypertopos-0.6.2 → hypertopos-0.6.3}/LICENSE.md +1 -1
  3. {hypertopos-0.6.2 → hypertopos-0.6.3}/PKG-INFO +1 -1
  4. {hypertopos-0.6.2 → hypertopos-0.6.3}/README.md +2 -1
  5. {hypertopos-0.6.2 → hypertopos-0.6.3}/ROADMAP.md +1 -0
  6. {hypertopos-0.6.2 → hypertopos-0.6.3}/SECURITY.md +1 -1
  7. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/api-reference.md +755 -751
  8. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/concepts.md +1 -1
  9. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/configuration.md +1121 -1098
  10. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/data-format.md +4 -2
  11. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/builder.py +5809 -5721
  12. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/mapping.py +490 -427
  13. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/build.py +1020 -1020
  14. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/schema.py +952 -952
  15. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/adjacency.py +4 -0
  16. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/chains.py +71 -17
  17. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/density_gaps.py +4 -0
  18. hypertopos-0.6.3/hypertopos/engine/edge_features.py +762 -0
  19. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/hop_predicate.py +4 -0
  20. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/structuring.py +4 -0
  21. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/model/sphere.py +27 -6
  22. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/navigation/navigator.py +24 -0
  23. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/_schemas.py +65 -65
  24. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/calibration_history.py +2 -0
  25. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/reader.py +19 -9
  26. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/writer.py +962 -962
  27. {hypertopos-0.6.2 → hypertopos-0.6.3}/pyproject.toml +1 -1
  28. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_derived.py +1416 -1416
  29. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration_drift.py +398 -398
  30. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration_history.py +64 -0
  31. hypertopos-0.6.3/tests/test_edge_dim_aggregations.py +340 -0
  32. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dim_aggregations_builder.py +264 -6
  33. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dim_aggregations_chain.py +4 -4
  34. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dim_aggregations_engine.py +226 -1
  35. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_motif.py +2890 -2890
  36. hypertopos-0.6.2/hypertopos/engine/edge_features.py +0 -345
  37. hypertopos-0.6.2/tests/test_edge_dim_aggregations.py +0 -173
  38. {hypertopos-0.6.2 → hypertopos-0.6.3}/.github/workflows/publish-pypi.yml +0 -0
  39. {hypertopos-0.6.2 → hypertopos-0.6.3}/.gitignore +0 -0
  40. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/README.md +0 -0
  41. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/architecture.md +0 -0
  42. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/LICENSE +0 -0
  43. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/README.md +0 -0
  44. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/README.md +0 -0
  45. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/SUMMARY.md +0 -0
  46. {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
  47. {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
  48. {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
  49. {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
  50. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r1/0.1.0-settings.md +0 -0
  51. {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
  52. {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
  53. {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
  54. {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
  55. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r2/0.1.0-settings.md +0 -0
  56. {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
  57. {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
  58. {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
  59. {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
  60. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r3/0.1.0-settings.md +0 -0
  61. {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
  62. {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
  63. {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
  64. {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
  65. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r4/0.1.0-settings.md +0 -0
  66. {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
  67. {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
  68. {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
  69. {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
  70. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r5/0.1.0-settings.md +0 -0
  71. {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
  72. {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
  73. {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
  74. {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
  75. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/results/0.1.0/r6/0.1.0-settings.md +0 -0
  76. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_accounts.py +0 -0
  77. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_cpty_banks.py +0 -0
  78. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_districts.py +0 -0
  79. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_loan_accounts.py +0 -0
  80. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_operations.py +0 -0
  81. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_orders.py +0 -0
  82. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_transactions.py +0 -0
  83. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/prepare_tx_types.py +0 -0
  84. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/berka/sphere/sphere.yaml +0 -0
  85. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/README.md +0 -0
  86. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/_layer2_cross_eval.py +0 -0
  87. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/_layer3_cross_eval.py +0 -0
  88. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_accounts.py +0 -0
  89. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_currencies.py +0 -0
  90. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_payment_formats.py +0 -0
  91. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/prepare_transactions.py +0 -0
  92. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/hi_small_sphere/sphere.yaml +0 -0
  93. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/layer1_passive_scan.py +0 -0
  94. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/layer2_xgboost_sweep.py +0 -0
  95. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/layer3_typology_filter.py +0 -0
  96. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/prepare_accounts.py +0 -0
  97. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/prepare_currencies.py +0 -0
  98. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/prepare_payment_formats.py +0 -0
  99. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/prepare_transactions.py +0 -0
  100. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/li_small_sphere/sphere.yaml +0 -0
  101. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/ibm-aml/passive-scan-calibration.md +0 -0
  102. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/README.md +0 -0
  103. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/SUMMARY.md +0 -0
  104. {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
  105. {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
  106. {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
  107. {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
  108. {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
  109. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r1/0.1.0-settings.md +0 -0
  110. {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
  111. {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
  112. {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
  113. {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
  114. {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
  115. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r2/0.1.0-settings.md +0 -0
  116. {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
  117. {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
  118. {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
  119. {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
  120. {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
  121. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/results/0.1.0/r3/0.1.0-settings.md +0 -0
  122. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/sphere/prepare_trips.py +0 -0
  123. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmark/nyc-taxi/sphere/sphere.yaml +0 -0
  124. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/benchmarks.md +0 -0
  125. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/build-pipeline.svg +0 -0
  126. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/core-objects.svg +0 -0
  127. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/cutting-plane.svg +0 -0
  128. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/directory-layout.svg +0 -0
  129. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/hypertopos-overview.svg +0 -0
  130. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/model-lifecycle.svg +0 -0
  131. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/navigation-primitives.svg +0 -0
  132. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/images/three-scales.svg +0 -0
  133. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/introduction.md +0 -0
  134. {hypertopos-0.6.2 → hypertopos-0.6.3}/docs/quickstart.md +0 -0
  135. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/__init__.py +0 -0
  136. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/__init__.py +0 -0
  137. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_bootstrap.py +0 -0
  138. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_bregman.py +0 -0
  139. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_scatter.py +0 -0
  140. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_stats.py +0 -0
  141. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/_writer.py +0 -0
  142. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/derived.py +0 -0
  143. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/builder/dim_blocks.py +0 -0
  144. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/__init__.py +0 -0
  145. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/__main__.py +0 -0
  146. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/info.py +0 -0
  147. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/main.py +0 -0
  148. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/cli/sources.py +0 -0
  149. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/__init__.py +0 -0
  150. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/aggregation.py +0 -0
  151. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/calibration.py +0 -0
  152. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/composition.py +0 -0
  153. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/fdr.py +0 -0
  154. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/forecast.py +0 -0
  155. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/geometry.py +0 -0
  156. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/graph_algorithms.py +0 -0
  157. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/heredity.py +0 -0
  158. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/invalidation.py +0 -0
  159. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/investigation.py +0 -0
  160. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/lance_sql_agg.py +0 -0
  161. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/engine/selection.py +0 -0
  162. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/model/__init__.py +0 -0
  163. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/model/manifest.py +0 -0
  164. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/model/objects.py +0 -0
  165. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/navigation/__init__.py +0 -0
  166. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/navigation/scanner.py +0 -0
  167. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/sphere.py +0 -0
  168. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/__init__.py +0 -0
  169. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/storage/cache.py +0 -0
  170. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/utils/__init__.py +0 -0
  171. {hypertopos-0.6.2 → hypertopos-0.6.3}/hypertopos/utils/arrow.py +0 -0
  172. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/.gitkeep +0 -0
  173. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/conftest.py +0 -0
  174. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/fixtures/generate_fixtures.py +0 -0
  175. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_adjacency.py +0 -0
  176. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_adjacency_vectorized.py +0 -0
  177. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_aggregation_engine.py +0 -0
  178. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_arrow_utils.py +0 -0
  179. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_bootstrap.py +0 -0
  180. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_bregman.py +0 -0
  181. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder.py +0 -0
  182. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_alias.py +0 -0
  183. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_chunking.py +0 -0
  184. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_contagion.py +0 -0
  185. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_edges.py +0 -0
  186. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_rolling_z.py +0 -0
  187. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_scatter.py +0 -0
  188. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_builder_temporal_perf.py +0 -0
  189. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_cache.py +0 -0
  190. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration.py +0 -0
  191. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration_history_builder.py +0 -0
  192. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_calibration_history_reader.py +0 -0
  193. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_chains.py +0 -0
  194. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_cli.py +0 -0
  195. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_cli_alias.py +0 -0
  196. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_cli_sources.py +0 -0
  197. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_compaction.py +0 -0
  198. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_composition.py +0 -0
  199. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_continuous_event_dims.py +0 -0
  200. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_data_quality_prop.py +0 -0
  201. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_decompose_drift.py +0 -0
  202. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_density_gaps_engine.py +0 -0
  203. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_detection.py +0 -0
  204. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_dim_blocks.py +0 -0
  205. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_distinct_neighbor_count.py +0 -0
  206. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dim_aggregations_roundtrip.py +0 -0
  207. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dimensions_builder.py +0 -0
  208. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_dimensions_yaml.py +0 -0
  209. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_features.py +0 -0
  210. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_features_reader.py +0 -0
  211. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_potential.py +0 -0
  212. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_edge_table.py +0 -0
  213. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_engine.py +0 -0
  214. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_fdr.py +0 -0
  215. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_calibration_influencers.py +0 -0
  216. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_density_gaps.py +0 -0
  217. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_lead_lag.py +0 -0
  218. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_lead_lag_significance.py +0 -0
  219. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_find_motif_by_hops.py +0 -0
  220. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_forecast.py +0 -0
  221. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_fts.py +0 -0
  222. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_geometric_path.py +0 -0
  223. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_geometry_stats.py +0 -0
  224. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_gradient_alignment.py +0 -0
  225. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_graph_algorithms.py +0 -0
  226. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_heredity.py +0 -0
  227. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_hop_predicate_engine.py +0 -0
  228. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_hybrid_search.py +0 -0
  229. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_incremental.py +0 -0
  230. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_invalidation.py +0 -0
  231. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_investigation.py +0 -0
  232. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_kind_detect.py +0 -0
  233. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_lance_sql_agg.py +0 -0
  234. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_mapping.py +0 -0
  235. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_model.py +0 -0
  236. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_mvcc_session.py +0 -0
  237. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_navigation.py +0 -0
  238. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_navigator_alerts.py +0 -0
  239. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_navigator_fdr_select.py +0 -0
  240. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_neighbors_window.py +0 -0
  241. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_observability.py +0 -0
  242. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_precision_stack.py +0 -0
  243. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_profile_motif_perf_smoke.py +0 -0
  244. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_reputation.py +0 -0
  245. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_root_cause_trace.py +0 -0
  246. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_row_id_cache.py +0 -0
  247. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_scanner.py +0 -0
  248. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_schema_chain_eda_validation.py +0 -0
  249. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_selection.py +0 -0
  250. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_sphere.py +0 -0
  251. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_sphere_overview_perf.py +0 -0
  252. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_stats_guard.py +0 -0
  253. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_storage.py +0 -0
  254. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_streaming_reads.py +0 -0
  255. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_structuring_engine.py +0 -0
  256. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_temporal_centroids.py +0 -0
  257. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_trajectory_ann.py +0 -0
  258. {hypertopos-0.6.2 → hypertopos-0.6.3}/tests/test_witness_cohort.py +0 -0
  259. {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-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.2
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
  [![PyArrow](https://img.shields.io/badge/format-PyArrow-red.svg)](https://arrow.apache.org/docs/python/)
9
9
  [![Lance](https://img.shields.io/badge/storage-Lance-blueviolet.svg)](https://github.com/lance-format/lance)
10
10
  [![MCP](https://img.shields.io/badge/MCP-compatible-green.svg)](https://modelcontextprotocol.io)
11
- [![Version](https://img.shields.io/badge/version-0.6.2-%235500FF.svg)](pyproject.toml)
11
+ [![Version](https://img.shields.io/badge/version-0.6.3-%235500FF.svg)](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
 
@@ -1,6 +1,6 @@
1
1
  # Security
2
2
 
3
- ## Current version: 0.6.2
3
+ ## Current version: 0.6.3
4
4
 
5
5
  hypertopos runs locally. No network services, no auth layer, no multi-tenancy.
6
6