sqlitegraph 0.2.0__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/Cargo.lock +4 -3
  2. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/PKG-INFO +65 -2
  3. sqlitegraph-0.4.0/README.md +107 -0
  4. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/pyproject.toml +1 -1
  5. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/Cargo.toml +3 -1
  6. sqlitegraph-0.4.0/sqlitegraph-core/README.md +193 -0
  7. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/adjlist_benchmark.rs +12 -12
  8. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/bench_utils.rs +21 -10
  9. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/comprehensive_performance.rs +2 -2
  10. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/graph_generators.rs +13 -1
  11. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/hnsw.rs +8 -8
  12. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/native_disk_io.rs +2 -2
  13. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/sqlite_v3_comparison.rs +2 -1
  14. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/clippy.toml +3 -1
  15. sqlitegraph-0.4.0/sqlitegraph-core/examples/hybrid_sqlite_v3_hnsw_pubsub.rs +166 -0
  16. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/call_graph_analysis.rs +14 -14
  17. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/centrality.rs +12 -0
  18. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/community.rs +14 -5
  19. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/critical_path.rs +1 -1
  20. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/cut_partition.rs +8 -9
  21. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/cycle_basis.rs +41 -41
  22. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/dominance_frontiers.rs +5 -7
  23. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/graph_diff.rs +5 -5
  24. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/graph_rewriting.rs +34 -36
  25. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/graph_similarity.rs +2 -2
  26. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/path_enumeration.rs +15 -15
  27. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/program_slicing.rs +1 -1
  28. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/scc.rs +7 -4
  29. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/structure.rs +9 -0
  30. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/subgraph_isomorphism.rs +36 -36
  31. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/taint_analysis.rs +17 -17
  32. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/tests.rs +4 -7
  33. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/transitive_closure.rs +18 -18
  34. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/algorithm/parallel_bfs.rs +3 -3
  35. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/backend.rs +54 -6
  36. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/compression/edge_delta.rs +2 -2
  37. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/edge_compat.rs +31 -31
  38. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/file_coordinator.rs +3 -3
  39. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/index/page.rs +2 -2
  40. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/node/page.rs +2 -2
  41. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/node/store.rs +14 -15
  42. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/node/tests.rs +3 -3
  43. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/storage/adaptive_page.rs +3 -3
  44. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/storage/media_detector.rs +5 -5
  45. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/string_table/mod.rs +1 -1
  46. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/string_table/tests.rs +1 -1
  47. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/write_batch.rs +8 -5
  48. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/sqlite/impl_.rs +56 -0
  49. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend.rs +37 -0
  50. sqlitegraph-0.4.0/sqlitegraph-core/src/cypher.rs +2037 -0
  51. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/core.rs +44 -2
  52. sqlitegraph-0.4.0/sqlitegraph-core/src/graph/edge_ops.rs +118 -0
  53. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/entity_ops.rs +57 -0
  54. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/snapshot.rs +3 -3
  55. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/builder.rs +5 -6
  56. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/config.rs +2 -2
  57. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/distance_functions.rs +1 -1
  58. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/errors.rs +25 -22
  59. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/index.rs +8 -7
  60. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/index_api.rs +33 -16
  61. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/index_internal.rs +2 -3
  62. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/layer.rs +1 -1
  63. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/mod.rs +1 -1
  64. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/multilayer.rs +13 -14
  65. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/neighborhood.rs +2 -3
  66. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/simd.rs +2 -2
  67. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/storage.rs +8 -7
  68. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/inference/engine.rs +29 -21
  69. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/inference/simd.rs +24 -24
  70. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/lib.rs +1 -0
  71. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine_cache/tests.rs +1 -1
  72. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/progress.rs +6 -7
  73. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/snapshot.rs +4 -4
  74. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/algo_tests.rs +1 -1
  75. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/benchmark_isolation_test.rs +3 -3
  76. sqlitegraph-0.4.0/sqlitegraph-core/tests/bulk_insert_tests.rs +173 -0
  77. sqlitegraph-0.4.0/sqlitegraph-core/tests/cypher_tests.rs +1200 -0
  78. sqlitegraph-0.4.0/sqlitegraph-core/tests/edge_insertion_corruption_test.rs +207 -0
  79. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/graph_node_existence_enforcement.rs +10 -4
  80. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/hnsw_persistence_tests.rs +4 -4
  81. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/mvcc_baseline_tests.rs +3 -3
  82. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/mvcc_concurrent_tests.rs +1 -1
  83. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/mvcc_edge_case_tests.rs +2 -2
  84. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/mvcc_snapshot_tests.rs +3 -3
  85. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/node_slot_transaction_persistence.rs +102 -104
  86. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/page_write_debug.rs +1 -1
  87. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/perf_gate_v32_tests.rs +14 -4
  88. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/phase32_cluster_pipeline_reconstruction_tests_clean.rs +4 -3
  89. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/query_cache_performance_tests.rs +1 -1
  90. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/reopen_integration_test.rs +9 -7
  91. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/sqlite_reopen_tests.rs +1 -1
  92. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_algorithm_tests.rs +5 -5
  93. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_btree_forensics.rs +8 -0
  94. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_file_write_test.rs +1 -1
  95. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_name_index_tests.rs +23 -16
  96. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_regression_sweep.rs +7 -7
  97. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_sync_fix_validation.rs +2 -2
  98. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/CHANGELOG.md +44 -0
  99. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/Cargo.toml +1 -1
  100. sqlitegraph-0.4.0/sqlitegraph-py/README.md +107 -0
  101. sqlitegraph-0.4.0/sqlitegraph-py/examples/06_hybrid_sqlite_hnsw_query.py +100 -0
  102. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/src/lib.rs +221 -1
  103. sqlitegraph-0.4.0/sqlitegraph-py/tests/test_algo.py +197 -0
  104. sqlitegraph-0.4.0/sqlitegraph-py/tests/test_bulk_insert.py +118 -0
  105. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/tests/test_hnsw.py +11 -0
  106. sqlitegraph-0.2.0/README.md +0 -44
  107. sqlitegraph-0.2.0/sqlitegraph-core/README.md +0 -123
  108. sqlitegraph-0.2.0/sqlitegraph-core/src/graph/edge_ops.rs +0 -58
  109. sqlitegraph-0.2.0/sqlitegraph-core/tests/edge_insertion_corruption_test.rs +0 -253
  110. sqlitegraph-0.2.0/sqlitegraph-core/tests/json_parsing_diagnostics.rs +0 -73
  111. sqlitegraph-0.2.0/sqlitegraph-core/tests/transaction_begin_corruption_proof.rs +0 -220
  112. sqlitegraph-0.2.0/sqlitegraph-py/README.md +0 -44
  113. sqlitegraph-0.2.0/sqlitegraph-py/tests/test_algo.py +0 -78
  114. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/Cargo.toml +0 -0
  115. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/python/sqlitegraph/__init__.py +0 -0
  116. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/python/sqlitegraph/_native.pyi +0 -0
  117. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/python/sqlitegraph/py.typed +0 -0
  118. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/.gitignore +0 -0
  119. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/BLOCK_AWARE_CACHE_BEHAVIOR_REPORT.md +0 -0
  120. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/BLOCK_LOCALITY_PROTOTYPE_REPORT.md +0 -0
  121. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/BUG_10K_INVESTIGATION_SUMMARY.md +0 -0
  122. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/BUG_SNAPSHOTID_SQLITE_BACKEND.md +0 -0
  123. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/CACHE_CAPACITY_SWEEP_REPORT.md +0 -0
  124. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/CACHE_CLONE_FIX_REPORT.md +0 -0
  125. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/CHANGELOG.md +0 -0
  126. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/COLD_PATH_FORENSICS_REPORT.md +0 -0
  127. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/COLD_WARM_BENCHMARK_SPLIT_REPORT.md +0 -0
  128. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/EDGE_CORRUPTION_ROOT_CAUSE.md +0 -0
  129. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/LICENSE +0 -0
  130. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/MAIN_BENCHMARK_RERUN_REPORT.md +0 -0
  131. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/NODE_PAGE_OVERFLOW_FIX_REPORT.md +0 -0
  132. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/PAGE_ID_COLLISION_ROOT_CAUSE.md +0 -0
  133. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/PHASE3_NODE_PAGE_CACHE_FIX_REPORT.md +0 -0
  134. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/PHYSICAL_BLOCK_PLACEMENT_PROTOTYPE_REPORT.md +0 -0
  135. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/REBUILD_INDEXES_FIX_REPORT.md +0 -0
  136. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/REOPEN_CORRUPTION_FORENSICS.md +0 -0
  137. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/V3_10K_NODE_BUG_FIX.md +0 -0
  138. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/V3_FILE_IO_COORDINATION.md +0 -0
  139. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/V3_FORENSIC_REPORT.md +0 -0
  140. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/V3_REGRESSION_SWEEP_REPORT.md +0 -0
  141. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/adaptive_page_simple.rs +0 -0
  142. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/algo_benchmarks.rs +0 -0
  143. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/backend_comparison.rs +0 -0
  144. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/bfs.rs +0 -0
  145. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/cold_cache.rs +0 -0
  146. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/comparative_benchmark.rs +0 -0
  147. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/compression_benchmark.rs +0 -0
  148. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/concurrent_access.rs +0 -0
  149. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/connection_pool.rs +0 -0
  150. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/graph_theory_benchmarks.rs +0 -0
  151. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/hnsw_multilayer.rs +0 -0
  152. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/insert.rs +0 -0
  153. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/k_hop.rs +0 -0
  154. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/memory_profiling.rs +0 -0
  155. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/mvcc_benchmarks.rs +0 -0
  156. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/parallel_bfs.rs +0 -0
  157. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/read_path_benchmarks.rs +0 -0
  158. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/real_datasets.rs +0 -0
  159. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/regression_memory.rs +0 -0
  160. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/regression_non_chain_patterns.rs +0 -0
  161. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/regression_pubsub_memory.rs +0 -0
  162. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/regression_pubsub_non_chain.rs +0 -0
  163. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/regression_pubsub_write_cost.rs +0 -0
  164. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/regression_write_cost.rs +0 -0
  165. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/v3_algorithm_benchmarks.rs +0 -0
  166. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/v3_backend_benchmarks.rs +0 -0
  167. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/benches/wal_recovery_benchmarks.rs +0 -0
  168. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/core.d +0 -0
  169. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/debug_test.rs +0 -0
  170. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/HNSW_DEVELOPMENT_RULES.md +0 -0
  171. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/HNSW_VECTOR_INTEGRATION_FUTURE_ROADMAP.md +0 -0
  172. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/SEQUENTIAL_IO_PERFORMANCE.md +0 -0
  173. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/WAL_MODE_IMPLEMENTATION_GUIDE.md +0 -0
  174. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase-40-benchmark-report.md +0 -0
  175. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase10_performance_tuning.md +0 -0
  176. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase11_native_perf_plan.md +0 -0
  177. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase12_optimization_plan.md +0 -0
  178. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase14_step9_khop_corruption_codebase_mapping.md +0 -0
  179. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase29_step7_mmap_preaudit_notes.md +0 -0
  180. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase5_real_adjacency.md +0 -0
  181. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase6_implementation_status.md +0 -0
  182. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase6_native_graphbackend_plan.md +0 -0
  183. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/phase7_native_backend_refactor.md +0 -0
  184. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/docs/superpowers/plans/2026-04-23-task-1-analysis.md +0 -0
  185. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/algo_benchmark.rs +0 -0
  186. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/basic_functionality_test.rs +0 -0
  187. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/batch_bench.rs +0 -0
  188. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/batch_stress_test.rs +0 -0
  189. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/bench_parallel_bfs.rs +0 -0
  190. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/block_locality_benchmark.rs +0 -0
  191. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/cache_capacity_benchmark.rs +0 -0
  192. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/cache_clone_forensics.rs +0 -0
  193. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/cache_perf_test.rs +0 -0
  194. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/cold_path_decomposition.rs +0 -0
  195. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/compression_analysis.rs +0 -0
  196. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/compression_detailed.rs +0 -0
  197. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/compression_diagnostics.rs +0 -0
  198. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/crash_test_child.rs +0 -0
  199. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/debug_buffer_error.rs +0 -0
  200. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/get_node_cache_sweep.rs +0 -0
  201. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/phase53_1_execution.rs +0 -0
  202. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/phase55_simple_benchmark.rs +0 -0
  203. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/reopen_corruption_repro.rs +0 -0
  204. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_100k.rs +0 -0
  205. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_adaptive_pages.rs +0 -0
  206. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_allocator_startup.rs +0 -0
  207. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_batch_simple.rs +0 -0
  208. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_binary_search.rs +0 -0
  209. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_btree_100k.rs +0 -0
  210. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_cache_warm.rs +0 -0
  211. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_chunked_bfs.rs +0 -0
  212. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_delta_encoding.rs +0 -0
  213. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_direct_backend_benchmark.rs +0 -0
  214. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_direct_edgestore.rs +0 -0
  215. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_edge_store_direct.rs +0 -0
  216. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_edgestore_perf.rs +0 -0
  217. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_index_restore.rs +0 -0
  218. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_index_staleness.rs +0 -0
  219. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_lazy_decode.rs +0 -0
  220. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_lock_overhead.rs +0 -0
  221. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_native_edge.rs +0 -0
  222. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_neighbors_cache.rs +0 -0
  223. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_neighbors_detailed.rs +0 -0
  224. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_neighbors_profile.rs +0 -0
  225. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_open_detailed_timing.rs +0 -0
  226. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_open_roundtrip.rs +0 -0
  227. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_open_stage_timing.rs +0 -0
  228. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_performance_comparison.rs +0 -0
  229. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_rwlock_overhead.rs +0 -0
  230. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_sqlite_neighbors_perf.rs +0 -0
  231. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_v3_neighbors_perf.rs +0 -0
  232. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/test_vec_clone.rs +0 -0
  233. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/v3_forensic_page_analysis.rs +0 -0
  234. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/v3_forensics_example.rs +0 -0
  235. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/v3_get_node_profile.rs +0 -0
  236. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/v3_offset_forensic.rs +0 -0
  237. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/v3_perf_test.rs +0 -0
  238. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/v3_readonly_profile.rs +0 -0
  239. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/examples/v3_reopen_verify.rs +0 -0
  240. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/libtest_syntax.rlib +0 -0
  241. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/manual.md +0 -0
  242. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/snapshot_export/snapshot_1766284406.v2 +0 -0
  243. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/snapshot_export/snapshot_1766284420.v2 +0 -0
  244. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/sqlitegraph_bench.json +0 -0
  245. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/backend/centrality.rs +0 -0
  246. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/backend/graph_ops.rs +0 -0
  247. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/backend/mod.rs +0 -0
  248. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/backend/traversal.rs +0 -0
  249. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/control_dependence.rs +0 -0
  250. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/dominators.rs +0 -0
  251. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/mod.rs +0 -0
  252. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/natural_loops.rs +0 -0
  253. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/observability.rs +0 -0
  254. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/post_dominators.rs +0 -0
  255. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/reachability.rs +0 -0
  256. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/topological_sort.rs +0 -0
  257. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/transitive_reduction.rs +0 -0
  258. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/algo/wcc.rs +0 -0
  259. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/api_ergonomics.rs +0 -0
  260. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/constants.rs +0 -0
  261. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/cpu_tuning.rs +0 -0
  262. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/mod.rs +0 -0
  263. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/types/aliases.rs +0 -0
  264. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/types/cpu_profile.rs +0 -0
  265. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/types/errors.rs +0 -0
  266. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/types/flags.rs +0 -0
  267. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/types/kv_types.rs +0 -0
  268. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/types/mod.rs +0 -0
  269. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/types/utils.rs +0 -0
  270. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/algorithm/mod.rs +0 -0
  271. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/allocator.rs +0 -0
  272. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/btree.rs +0 -0
  273. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/compact_edge_record.rs +0 -0
  274. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/compression/delta.rs +0 -0
  275. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/compression/mod.rs +0 -0
  276. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/compression/varint.rs +0 -0
  277. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/constants.rs +0 -0
  278. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/forensics.rs +0 -0
  279. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/header.rs +0 -0
  280. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/index/mod.rs +0 -0
  281. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/index_persistence.rs +0 -0
  282. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/kind_index.rs +0 -0
  283. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/kv_store/mod.rs +0 -0
  284. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/kv_store/store.rs +0 -0
  285. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/kv_store/types.rs +0 -0
  286. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/lazy_init_tests.rs +0 -0
  287. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/mod.rs +0 -0
  288. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/name_index.rs +0 -0
  289. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/node/block_cache.rs +0 -0
  290. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/node/cache.rs +0 -0
  291. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/node/mod.rs +0 -0
  292. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/node/record.rs +0 -0
  293. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/pubsub/mod.rs +0 -0
  294. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/pubsub/publisher.rs +0 -0
  295. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/pubsub/types.rs +0 -0
  296. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/storage/mod.rs +0 -0
  297. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/string_table/table.rs +0 -0
  298. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/tests/mod.rs +0 -0
  299. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/native/v3/wal.rs +0 -0
  300. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/sqlite/helpers.rs +0 -0
  301. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/sqlite/kv_tests.rs +0 -0
  302. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/sqlite/mod.rs +0 -0
  303. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/sqlite/pubsub_tests.rs +0 -0
  304. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend/sqlite/types.rs +0 -0
  305. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/backend_selector.rs +0 -0
  306. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/bench_gates.rs +0 -0
  307. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/bench_meta.rs +0 -0
  308. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/bench_regression.rs +0 -0
  309. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/bench_utils.rs +0 -0
  310. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/bfs.rs +0 -0
  311. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/cache.rs +0 -0
  312. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/client.rs +0 -0
  313. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/config/factory.rs +0 -0
  314. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/config/graph_config.rs +0 -0
  315. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/config/kinds.rs +0 -0
  316. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/config/mod.rs +0 -0
  317. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/config/native.rs +0 -0
  318. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/config/sqlite.rs +0 -0
  319. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/dependency_monitor.rs +0 -0
  320. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/dsl.rs +0 -0
  321. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/errors.rs +0 -0
  322. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/fault_injection.rs +0 -0
  323. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/adjacency.rs +0 -0
  324. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/metrics/instrumented.rs +0 -0
  325. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/metrics/metrics_core.rs +0 -0
  326. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/metrics/metrics_snapshot.rs +0 -0
  327. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/metrics/mod.rs +0 -0
  328. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/metrics/statement_tracker.rs +0 -0
  329. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/metrics/utils.rs +0 -0
  330. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/metrics_schema.rs +0 -0
  331. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/mod.rs +0 -0
  332. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/pattern_matching.rs +0 -0
  333. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/pool.rs +0 -0
  334. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph/types.rs +0 -0
  335. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/graph_opt.rs +0 -0
  336. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/batch_filter.rs +0 -0
  337. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/distance_metric.rs +0 -0
  338. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/index_persist.rs +0 -0
  339. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/serialization.rs +0 -0
  340. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/v3_storage.rs +0 -0
  341. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/hnsw/v3_storage_tests.rs +0 -0
  342. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/index.rs +0 -0
  343. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/inference/mod.rs +0 -0
  344. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/inference/sampling.rs +0 -0
  345. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/introspection.rs +0 -0
  346. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/multi_hop.rs +0 -0
  347. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/mvcc.rs +0 -0
  348. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern.rs +0 -0
  349. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine/matcher.rs +0 -0
  350. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine/mod.rs +0 -0
  351. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine/pattern.rs +0 -0
  352. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine/property.rs +0 -0
  353. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine/query.rs +0 -0
  354. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine/tests.rs +0 -0
  355. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine_cache/edge_validation.rs +0 -0
  356. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine_cache/fast_path_detection.rs +0 -0
  357. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine_cache/fast_path_execution.rs +0 -0
  358. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/pattern_engine_cache/mod.rs +0 -0
  359. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/query.rs +0 -0
  360. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/query_cache.rs +0 -0
  361. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/reasoning.rs +0 -0
  362. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/recovery.rs +0 -0
  363. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/src/schema.rs +0 -0
  364. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/acid_regression_test.rs +0 -0
  365. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/acid_snapshot_test.rs +0 -0
  366. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/backend_selector_tests.rs +0 -0
  367. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/bench_data_tests.rs +0 -0
  368. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/bench_gate_tests.rs +0 -0
  369. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/bench_gates_tests.rs +0 -0
  370. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/bench_meta_tests.rs +0 -0
  371. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/bench_report_tests.rs +0 -0
  372. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/bfs_tests.rs +0 -0
  373. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/bincode_compatibility_test.rs +0 -0
  374. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/cache_effectiveness_tests.rs +0 -0
  375. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/cache_tests.rs +0 -0
  376. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/check_write_path.rs +0 -0
  377. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/cluster_offset_corruption_regression.rs +0 -0
  378. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/cold_path_forensics.rs +0 -0
  379. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/debug_file_size.rs +0 -0
  380. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/debug_index_rebuilding.rs +0 -0
  381. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/debug_overflow.rs +0 -0
  382. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/debug_scenario_c.rs +0 -0
  383. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/deterministic_index_tests.rs +0 -0
  384. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/direct_file_read_corruption_test.rs +0 -0
  385. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/doc_tests.rs +0 -0
  386. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/edge_corruption_minimal.rs +0 -0
  387. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/edge_corruption_repro.rs +0 -0
  388. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/edge_tests.rs +0 -0
  389. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/entity_tests.rs +0 -0
  390. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/file_extension_debug.rs +0 -0
  391. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/fuzz_common.rs +0 -0
  392. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/get_node_forensics.rs +0 -0
  393. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/graph_opt_tests.rs +0 -0
  394. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/helpers/mod.rs +0 -0
  395. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/index_persistence_integration.rs +0 -0
  396. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/index_persistence_validation.rs +0 -0
  397. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/index_tests.rs +0 -0
  398. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/instrumentation_tests.rs +0 -0
  399. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/integration_tests.rs +0 -0
  400. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/isolate_open_bug.rs +0 -0
  401. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/kv_durability_tests.rs +0 -0
  402. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/lib_api_smoke_tests.rs +0 -0
  403. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/multi_hop_tests.rs +0 -0
  404. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/multi_node_corruption_regression.rs +0 -0
  405. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/mvcc_wal_tests.rs +0 -0
  406. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/native_edge_insertion_regression.rs +0 -0
  407. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/node_overflow_forensics.rs +0 -0
  408. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/node_read_forensics_test.rs +0 -0
  409. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/oom_reproduction_test.rs +0 -0
  410. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/page_42_debug.rs +0 -0
  411. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/pattern_cache_fastpath_tests.rs +0 -0
  412. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/pattern_engine_tests.rs +0 -0
  413. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/pattern_tests.rs +0 -0
  414. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/perf_gate_tests.rs +0 -0
  415. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/phase44_2_cluster_size_contract_tests.rs +0 -0
  416. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/phase64_node_count_durability_regression.rs +0 -0
  417. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/phase65_cluster_size_corruption_regression.rs +0 -0
  418. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/phase73_node_count_corruption_capture.rs +0 -0
  419. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/query_cache_tests.rs +0 -0
  420. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/query_tests.rs +0 -0
  421. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/recovery_tests.rs +0 -0
  422. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/regression_concurrent_traversal.rs +0 -0
  423. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/reopen_corruption_investigation.rs +0 -0
  424. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/rowid_tests.rs +0 -0
  425. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/schema_tests.rs +0 -0
  426. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/snapshot_isolation_tests.rs +0 -0
  427. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/sqlite_snapshot_tests.rs +0 -0
  428. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/test_10k_bug_reproduction.rs +0 -0
  429. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/unsafe_invariants_tests.rs +0 -0
  430. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_block_locality_tests.rs +0 -0
  431. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_check_nodepages.rs +0 -0
  432. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_dump_page_headers.rs +0 -0
  433. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_edge_durability_tdd.rs +0 -0
  434. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_focused_perf.rs +0 -0
  435. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_forensics_test.rs +0 -0
  436. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_header_forensics.rs +0 -0
  437. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_insert_read_forensics.rs +0 -0
  438. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_integrity_check.rs +0 -0
  439. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_kind_index_tests.rs +0 -0
  440. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_page_ownership_forensics.rs +0 -0
  441. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_persistence_100.rs +0 -0
  442. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_query_truth_tests.rs +0 -0
  443. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_reopen_durability.rs +0 -0
  444. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/v3_verify_file_persistence.rs +0 -0
  445. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/wal_mode_default_tests.rs +0 -0
  446. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/wal_tuning_tests.rs +0 -0
  447. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-core/tests/write_buffer_coherence_regression.rs +0 -0
  448. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/.gitignore +0 -0
  449. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/examples/01_basic_crud.py +0 -0
  450. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/examples/02_graph_algorithms.py +0 -0
  451. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/examples/03_vector_search.py +0 -0
  452. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/examples/04_social_network.py +0 -0
  453. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/examples/05_file_backed.py +0 -0
  454. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/tests/test_basic.py +0 -0
  455. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/tests/test_crud.py +0 -0
  456. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/tests/test_errors.py +0 -0
  457. {sqlitegraph-0.2.0 → sqlitegraph-0.4.0}/sqlitegraph-py/tests/test_filtered_traversal.py +0 -0
@@ -1387,7 +1387,7 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
1387
1387
 
1388
1388
  [[package]]
1389
1389
  name = "sqlitegraph"
1390
- version = "2.3.0"
1390
+ version = "3.0.0"
1391
1391
  dependencies = [
1392
1392
  "ahash",
1393
1393
  "arc-swap",
@@ -1406,6 +1406,7 @@ dependencies = [
1406
1406
  "r2d2_sqlite",
1407
1407
  "rand 0.8.6",
1408
1408
  "rayon",
1409
+ "regex",
1409
1410
  "rusqlite",
1410
1411
  "rustc_version",
1411
1412
  "serde",
@@ -1418,7 +1419,7 @@ dependencies = [
1418
1419
 
1419
1420
  [[package]]
1420
1421
  name = "sqlitegraph-cli"
1421
- version = "2.1.5"
1422
+ version = "3.0.0"
1422
1423
  dependencies = [
1423
1424
  "anyhow",
1424
1425
  "clap",
@@ -1428,7 +1429,7 @@ dependencies = [
1428
1429
 
1429
1430
  [[package]]
1430
1431
  name = "sqlitegraph-py"
1431
- version = "0.2.0"
1432
+ version = "0.4.0"
1432
1433
  dependencies = [
1433
1434
  "ndarray 0.16.1",
1434
1435
  "numpy",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlitegraph
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
6
6
  Classifier: Programming Language :: Python :: 3
@@ -54,6 +54,68 @@ g.add_edge(alice, order, "placed")
54
54
  print(g.neighbors(alice))
55
55
  ```
56
56
 
57
+ ## Query language
58
+
59
+ `Graph.query()` exposes the same Cypher-inspired language as the CLI:
60
+
61
+ ```python
62
+ from sqlitegraph import Graph
63
+
64
+ g = Graph.open_in_memory()
65
+ alice = g.add_node(kind="User", name="Alice", data={"age": 30})
66
+ bob = g.add_node(kind="User", name="Bob", data={"age": 31})
67
+ g.add_edge(alice, bob, "KNOWS")
68
+
69
+ result = g.query("MATCH (a:User)-[:KNOWS]->(b:User) RETURN a.name, b.name")
70
+ print(result["results"])
71
+ ```
72
+
73
+ Supported query features include node scans, edge traversal, multi-hop chains,
74
+ star/multi-pattern joins, variable-depth edges, `WHERE` with regex/numeric
75
+ operators and parentheses, `LIMIT`, `CREATE`, `SET`, `DELETE`, and HNSW vector
76
+ search through `CALL db.index.vector.queryNodes(...)`.
77
+
78
+ ## Algorithms
79
+
80
+ ```python
81
+ from sqlitegraph import Graph
82
+
83
+ g = Graph.open_in_memory()
84
+ a = g.add_node(kind="Page", name="A")
85
+ b = g.add_node(kind="Page", name="B")
86
+ c = g.add_node(kind="Page", name="C")
87
+ g.add_edge(a, b, "LINKS")
88
+ g.add_edge(b, c, "LINKS")
89
+ g.add_edge(c, a, "LINKS")
90
+
91
+ print(g.pagerank(iterations=20))
92
+ print(g.connected_components())
93
+ print(g.strongly_connected_components())
94
+ print(g.label_propagation(50))
95
+ print(g.find_cycles(10))
96
+ print(g.dominators(a))
97
+ ```
98
+
99
+ `critical_path()` is also available for directed acyclic graphs and returns
100
+ `{"path": [...], "distance": float, "path_length": int}`.
101
+
102
+ ## HNSW vector search
103
+
104
+ ```python
105
+ from sqlitegraph import Graph
106
+
107
+ g = Graph.open_in_memory()
108
+ idx = g.create_hnsw_index("embeddings", dimension=3, metric="cosine")
109
+
110
+ idx.insert_vector([1.0, 0.8, 0.1], {"label": "graph databases"})
111
+ idx.insert_vector([0.1, 0.2, 1.0], {"label": "baking"})
112
+
113
+ print(idx.search([1.0, 0.9, 0.0], 1))
114
+ print(g.list_hnsw_indexes())
115
+
116
+ g.delete_hnsw_index("embeddings")
117
+ ```
118
+
57
119
  ## Examples
58
120
 
59
121
  The [`examples/`](./examples/) directory contains runnable scripts:
@@ -61,10 +123,11 @@ The [`examples/`](./examples/) directory contains runnable scripts:
61
123
  | Example | What it shows |
62
124
  |---------|---------------|
63
125
  | [`01_basic_crud.py`](./examples/01_basic_crud.py) | Nodes, edges, update, delete, query by kind/pattern, degrees |
64
- | [`02_graph_algorithms.py`](./examples/02_graph_algorithms.py) | BFS, k-hop, shortest path, PageRank, Louvain communities, connected components |
126
+ | [`02_graph_algorithms.py`](./examples/02_graph_algorithms.py) | BFS, k-hop, shortest path, PageRank, Louvain & label-propagation communities, connected components (WCC), strongly-connected components (SCC), cycle search, dominator tree, critical path |
65
127
  | [`03_vector_search.py`](./examples/03_vector_search.py) | HNSW index creation, insert, search, bulk insert, index listing |
66
128
  | [`04_social_network.py`](./examples/04_social_network.py) | Realistic network: influencers (PageRank), communities, connection paths, mutual follows |
67
129
  | [`05_file_backed.py`](./examples/05_file_backed.py) | Persistent `Graph.open(path)`, checkpoint, reopen, cleanup |
130
+ | [`06_hybrid_sqlite_hnsw_query.py`](./examples/06_hybrid_sqlite_hnsw_query.py) | sqlite3 application rows + sqlitegraph metadata + HNSW + `Graph.query()` expansion |
68
131
 
69
132
  Run any example from the repo root:
70
133
 
@@ -0,0 +1,107 @@
1
+ # sqlitegraph
2
+
3
+ Python bindings to the [`sqlitegraph`](https://crates.io/crates/sqlitegraph)
4
+ embedded graph database. Storage, graph algorithms, and HNSW vector search
5
+ run in a reviewed Rust core; this package is the Pythonic surface.
6
+
7
+ > Alpha — API subject to change before 1.0.
8
+
9
+ ## Install
10
+
11
+ pip install sqlitegraph
12
+
13
+ ## Quick start
14
+
15
+ ```python
16
+ from sqlitegraph import Graph
17
+
18
+ g = Graph.open_in_memory()
19
+ alice = g.add_node(kind="User", name="Alice", data={"age": 30})
20
+ order = g.add_node(kind="Order", name="Order-123")
21
+ g.add_edge(alice, order, "placed")
22
+
23
+ print(g.neighbors(alice))
24
+ ```
25
+
26
+ ## Query language
27
+
28
+ `Graph.query()` exposes the same Cypher-inspired language as the CLI:
29
+
30
+ ```python
31
+ from sqlitegraph import Graph
32
+
33
+ g = Graph.open_in_memory()
34
+ alice = g.add_node(kind="User", name="Alice", data={"age": 30})
35
+ bob = g.add_node(kind="User", name="Bob", data={"age": 31})
36
+ g.add_edge(alice, bob, "KNOWS")
37
+
38
+ result = g.query("MATCH (a:User)-[:KNOWS]->(b:User) RETURN a.name, b.name")
39
+ print(result["results"])
40
+ ```
41
+
42
+ Supported query features include node scans, edge traversal, multi-hop chains,
43
+ star/multi-pattern joins, variable-depth edges, `WHERE` with regex/numeric
44
+ operators and parentheses, `LIMIT`, `CREATE`, `SET`, `DELETE`, and HNSW vector
45
+ search through `CALL db.index.vector.queryNodes(...)`.
46
+
47
+ ## Algorithms
48
+
49
+ ```python
50
+ from sqlitegraph import Graph
51
+
52
+ g = Graph.open_in_memory()
53
+ a = g.add_node(kind="Page", name="A")
54
+ b = g.add_node(kind="Page", name="B")
55
+ c = g.add_node(kind="Page", name="C")
56
+ g.add_edge(a, b, "LINKS")
57
+ g.add_edge(b, c, "LINKS")
58
+ g.add_edge(c, a, "LINKS")
59
+
60
+ print(g.pagerank(iterations=20))
61
+ print(g.connected_components())
62
+ print(g.strongly_connected_components())
63
+ print(g.label_propagation(50))
64
+ print(g.find_cycles(10))
65
+ print(g.dominators(a))
66
+ ```
67
+
68
+ `critical_path()` is also available for directed acyclic graphs and returns
69
+ `{"path": [...], "distance": float, "path_length": int}`.
70
+
71
+ ## HNSW vector search
72
+
73
+ ```python
74
+ from sqlitegraph import Graph
75
+
76
+ g = Graph.open_in_memory()
77
+ idx = g.create_hnsw_index("embeddings", dimension=3, metric="cosine")
78
+
79
+ idx.insert_vector([1.0, 0.8, 0.1], {"label": "graph databases"})
80
+ idx.insert_vector([0.1, 0.2, 1.0], {"label": "baking"})
81
+
82
+ print(idx.search([1.0, 0.9, 0.0], 1))
83
+ print(g.list_hnsw_indexes())
84
+
85
+ g.delete_hnsw_index("embeddings")
86
+ ```
87
+
88
+ ## Examples
89
+
90
+ The [`examples/`](./examples/) directory contains runnable scripts:
91
+
92
+ | Example | What it shows |
93
+ |---------|---------------|
94
+ | [`01_basic_crud.py`](./examples/01_basic_crud.py) | Nodes, edges, update, delete, query by kind/pattern, degrees |
95
+ | [`02_graph_algorithms.py`](./examples/02_graph_algorithms.py) | BFS, k-hop, shortest path, PageRank, Louvain & label-propagation communities, connected components (WCC), strongly-connected components (SCC), cycle search, dominator tree, critical path |
96
+ | [`03_vector_search.py`](./examples/03_vector_search.py) | HNSW index creation, insert, search, bulk insert, index listing |
97
+ | [`04_social_network.py`](./examples/04_social_network.py) | Realistic network: influencers (PageRank), communities, connection paths, mutual follows |
98
+ | [`05_file_backed.py`](./examples/05_file_backed.py) | Persistent `Graph.open(path)`, checkpoint, reopen, cleanup |
99
+ | [`06_hybrid_sqlite_hnsw_query.py`](./examples/06_hybrid_sqlite_hnsw_query.py) | sqlite3 application rows + sqlitegraph metadata + HNSW + `Graph.query()` expansion |
100
+
101
+ Run any example from the repo root:
102
+
103
+ ```bash
104
+ cd sqlitegraph-py
105
+ source .venv/bin/activate
106
+ python examples/01_basic_crud.py
107
+ ```
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "sqlitegraph"
7
- version = "0.2.0"
7
+ version = "0.4.0"
8
8
  description = "Embedded graph database with HNSW vector search — Python bindings to the sqlitegraph Rust crate."
9
9
  license = { text = "GPL-3.0-only" }
10
10
  authors = [{ name = "Luiz Spies" }]
@@ -1,7 +1,8 @@
1
1
  [package]
2
2
  name = "sqlitegraph"
3
- version = "2.3.0"
3
+ version = "3.0.0"
4
4
  edition = "2024"
5
+ rust-version = "1.89"
5
6
  description = "Embedded graph database with full ACID transactions, HNSW vector search, dual backend support, and comprehensive graph algorithms library"
6
7
  license = "GPL-3.0"
7
8
  repository = "https://github.com/oldnordic/sqlitegraph"
@@ -41,6 +42,7 @@ log = "0.4"
41
42
  rayon = "1.10"
42
43
  petgraph = "0.6"
43
44
  sha2 = "0.10"
45
+ regex = "1"
44
46
 
45
47
  [dependencies.lru]
46
48
  version = "0.12"
@@ -0,0 +1,193 @@
1
+ # SQLiteGraph
2
+
3
+ [![crates.io](https://img.shields.io/crates/v/sqlitegraph.svg)](https://crates.io/crates/sqlitegraph)
4
+ [![Documentation](https://docs.rs/sqlitegraph/badge.svg)](https://docs.rs/sqlitegraph)
5
+
6
+ Embedded graph database with dual backend architecture, graph algorithms,
7
+ Cypher-inspired queries, and HNSW vector search.
8
+
9
+ **Positioning:** Single-binary embedded database (no server). Persistent storage with
10
+ atomic batch commits. Graph algorithms + HNSW vector search in one engine.
11
+ SQLite: stable, mature, excellent for adjacency queries. V3: high-performance,
12
+ designed for large-scale graphs, faster for bulk traversals. See benchmarks below.
13
+
14
+ ## What's New in v3.0.0
15
+
16
+ `v3.0.0` is the first release that ships the full Cypher engine, the
17
+ expanded CLI surface, and the cross-session HNSW persistence fix:
18
+
19
+ - Cypher-inspired `MATCH`, `CREATE`, `SET`, `DELETE`, multi-hop, variable-depth,
20
+ star/multi-pattern joins, `WHERE` with precedence/parentheses, and HNSW
21
+ vector search via `CALL db.index.vector.queryNodes(...)`.
22
+ - CLI coverage for PageRank, betweenness, WCC/SCC, Louvain, label propagation,
23
+ cycle search, dominators, topological sort, critical path, and HNSW
24
+ create/insert/search/list/delete.
25
+ - Python `Graph.query()` plus algorithm bindings for SCC, label propagation,
26
+ cycle search, dominators, critical path, and HNSW index deletion.
27
+ - V3 durability fixes and HNSW autoload persistence fixes.
28
+
29
+ See [CHANGELOG](https://github.com/oldnordic/sqlitegraph/blob/main/CHANGELOG.md) for full history.
30
+
31
+ ## Backends
32
+
33
+ | Feature | SQLite | Native V3 |
34
+ |---------|--------|-----------|
35
+ | Status | Stable | Stable |
36
+ | Storage | `.db` file | `.graph` file |
37
+ | Max nodes | Unlimited | Unlimited |
38
+ | Graph algorithms | 35+ | 35+ |
39
+ | HNSW vectors | Yes | Yes |
40
+ | Pub/Sub | Yes | Yes |
41
+ | LRU Cache | No | Yes (v2.1.0) |
42
+ | Parallel BFS | No | Yes (v2.1.1) |
43
+
44
+ ## Benchmarks
45
+
46
+ See [Architecture](https://github.com/oldnordic/sqlitegraph/blob/main/docs/ARCHITECTURE.md) for system design details.
47
+
48
+ **Backend Comparison (v2.2.4 - AMD Ryzen 7 7800X3D, tmpfs, Rust 1.95.0):**
49
+
50
+ | Benchmark | SQLite | V3 | Ratio |
51
+ |-----------|--------|----|-------|
52
+ | BFS 1K nodes / 5K edges | 2.5ms | 0.45ms | V3 **5.5x faster** |
53
+ | BFS 10K / 50K | 26ms | 27ms | ~parity |
54
+ | BFS 50K / 250K | 160ms | 586ms | SQLite 3.6x faster |
55
+ | DFS 1K / 5K | 2.4ms | 0.46ms | V3 **5.2x faster** |
56
+ | Point lookup 1K | 15us | 82us | SQLite 5.4x faster |
57
+ | Point lookup 10K | 27us | 503us | SQLite 18x faster |
58
+ | Shortest path 1K | 304us | 393us | SQLite 29% faster |
59
+
60
+ V3 excels at small-scale traversals. SQLite dominates at larger graph sizes and
61
+ point lookups.
62
+
63
+ **Run benchmarks yourself:**
64
+
65
+ ```bash
66
+ git clone https://github.com/oldnordic/sqlitegraph.git
67
+ cd sqlitegraph/sqlitegraph-core
68
+ cargo run --example test_performance_comparison --features native-v3
69
+ cargo bench --features native-v3 -- backend_comparison
70
+ ```
71
+
72
+ See [examples/](https://github.com/oldnordic/sqlitegraph/tree/main/sqlitegraph-core/examples) for reproducible performance tests.
73
+
74
+ ## Quick Start
75
+
76
+ ```toml
77
+ [dependencies]
78
+ # SQLite backend (default)
79
+ sqlitegraph = "2.4"
80
+
81
+ # OR Native V3 backend (faster traversals)
82
+ sqlitegraph = { version = "2.4", features = ["native-v3"] }
83
+ ```
84
+
85
+ ```rust
86
+ use sqlitegraph::backend::{GraphBackend, NodeSpec};
87
+ use sqlitegraph::backend::sqlite::SqliteGraphBackend;
88
+
89
+ fn main() -> Result<(), Box<dyn std::error::Error>> {
90
+ let backend = SqliteGraphBackend::in_memory()?;
91
+
92
+ let node_id = backend.insert_node(NodeSpec {
93
+ kind: "User".to_string(),
94
+ name: "Alice".to_string(),
95
+ file_path: None,
96
+ data: serde_json::json!({"age": 30}),
97
+ })?;
98
+
99
+ println!("Created node: {}", node_id);
100
+ Ok(())
101
+ }
102
+ ```
103
+
104
+ ## CLI
105
+
106
+ ```bash
107
+ cargo install sqlitegraph-cli
108
+
109
+ # Query
110
+ sqlitegraph --db graph.db query "MATCH (n:User) RETURN n.name"
111
+
112
+ # Algorithms
113
+ sqlitegraph --db graph.db bfs --start 1 --depth 3
114
+ sqlitegraph --db graph.db algo pagerank --iterations 100
115
+ ```
116
+
117
+ ## Copy-Paste CLI Demo
118
+
119
+ ```bash
120
+ rm -f /tmp/sqlitegraph-demo.db
121
+
122
+ sqlitegraph --db /tmp/sqlitegraph-demo.db --write insert --kind User --name Alice --data '{"age":30}'
123
+ sqlitegraph --db /tmp/sqlitegraph-demo.db --write insert --kind User --name Bob --data '{"age":31}'
124
+ sqlitegraph --db /tmp/sqlitegraph-demo.db --write query 'CREATE (1)-[:KNOWS]->(2)'
125
+
126
+ sqlitegraph --db /tmp/sqlitegraph-demo.db query 'MATCH (a:User)-[:KNOWS]->(b:User) RETURN a.name, b.name'
127
+ sqlitegraph --db /tmp/sqlitegraph-demo.db algo scc
128
+ ```
129
+
130
+ ## Hybrid Runtime Demo
131
+
132
+ This crate includes a runnable demo that combines ordinary SQLite rows, Native
133
+ V3 graph metadata, SQLite-backed HNSW vectors, and V3 pub/sub:
134
+
135
+ ```bash
136
+ cargo run -p sqlitegraph --example hybrid_sqlite_v3_hnsw_pubsub --features native-v3
137
+ ```
138
+
139
+ ## Safety Invariants
140
+
141
+ - Orphan edges are detected by verifying every edge endpoint references a stored entity before any reasoning or subgraph extraction runs.
142
+ - Duplicate edges (identical `(from,to,type)` tuples) are tallied so traversal/pipeline counts stay deterministic and regressions surface quickly.
143
+ - Invalid label/property references (metadata rows pointing at missing entities) are reported by the safety-check helpers.
144
+ - Integrity sweeps perform a deep table walk (entities/edges/labels/properties), verifying sorted IDs, valid JSON payloads, and metadata references before committing to pipelines or migrations.
145
+
146
+ ## DSL Constraints
147
+
148
+ - Supported clauses are limited to deterministic `pattern`, `k-hop`, `filter type=…`, and `score` steps; ordering matters and only one filter clause is allowed.
149
+ - Combination syntax (`CALLS*2`, `CALLS->USES`) must not introduce conflicting filters or unknown tokens—ambiguous or unsupported input causes parser errors surfaced to the CLI/tests.
150
+
151
+ ## Performance & Instrumentation
152
+
153
+ Performance thresholds in sqlitegraph_bench.json gate releases. Benchmarks produce HTML reports under `target/criterion`. Use `cargo bench --bench bench_insert` (etc.) to isolate suites. The `bench_driver` binary runs all benches sequentially and surfaces pass/fail summaries.
154
+
155
+ Runtime instrumentation is exposed through the core APIs used by benchmarks and
156
+ integration tests: prepare/execute counts, transaction begins/commits/rollbacks,
157
+ and cache hits/misses can be captured while reproducing workloads.
158
+
159
+ ## Schema Compatibility Matrix
160
+
161
+ | Version | Description |
162
+ |---------|-------------|
163
+ | 1 | Base tables (`graph_entities`, `graph_edges`, `graph_labels`, `graph_properties`) plus indexes and `graph_meta`. |
164
+ | 2 | Adds `graph_meta_history` rows so each migration application is recorded; exposed via `run_pending_migrations` / CLI `migrate`. |
165
+ | Future | The CLI refuses to open DBs whose version exceeds the compiled `SCHEMA_VERSION`. |
166
+
167
+ Upgrade workflow:
168
+ 1. Inspect the database with `sqlitegraph --db <path> status`.
169
+ 2. Review pending migrations through the library migration helpers.
170
+ 3. Apply migrations atomically through the library helper; history entries are appended automatically.
171
+
172
+ ## Ecosystem
173
+
174
+ Tools built on SQLiteGraph:
175
+
176
+ | Tool | Purpose | Repository | crates.io |
177
+ |------|---------|------------|-----------|
178
+ | **Magellan** | Code graph indexing, symbol navigation | [github.com/oldnordic/magellan](https://github.com/oldnordic/magellan) | [crates.io/crates/magellan](https://crates.io/crates/magellan) |
179
+ | **llmgrep** | Semantic code search | [github.com/oldnordic/llmgrep](https://github.com/oldnordic/llmgrep) | [crates.io/crates/llmgrep](https://crates.io/crates/llmgrep) |
180
+ | **Mirage** | CFG analysis, path enumeration | [github.com/oldnordic/mirage](https://github.com/oldnordic/mirage) | [crates.io/crates/mirage-analyzer](https://crates.io/crates/mirage-analyzer) |
181
+ | **splice** | Precision code editing | [github.com/oldnordic/splice](https://github.com/oldnordic/splice) | [crates.io/crates/splice](https://crates.io/crates/splice) |
182
+
183
+ ## Documentation
184
+
185
+ - [Architecture](https://github.com/oldnordic/sqlitegraph/blob/main/docs/ARCHITECTURE.md) - System design
186
+ - [Manual](https://github.com/oldnordic/sqlitegraph/blob/main/MANUAL.md) - API guide
187
+ - [Query Language](https://github.com/oldnordic/sqlitegraph/blob/main/docs/QUERY_LANGUAGE.md) - Cypher-inspired query reference
188
+ - [Changelog](https://github.com/oldnordic/sqlitegraph/blob/main/CHANGELOG.md) - Version history
189
+ - [SnapshotId Migration Guide](https://github.com/oldnordic/sqlitegraph/blob/main/docs/SNAPSHOTID_MIGRATION.md) - v2.1.2 API changes
190
+
191
+ ## License
192
+
193
+ GPL-3.0
@@ -36,15 +36,15 @@ impl SimpleAdjList {
36
36
  }
37
37
 
38
38
  fn add_edge(&mut self, src: u64, dst: u64) {
39
- if let Some(outgoing) = self.outgoing.get_mut(&src) {
40
- if !outgoing.contains(&dst) {
41
- outgoing.push(dst);
42
- }
39
+ if let Some(outgoing) = self.outgoing.get_mut(&src)
40
+ && !outgoing.contains(&dst)
41
+ {
42
+ outgoing.push(dst);
43
43
  }
44
- if let Some(incoming) = self.incoming.get_mut(&dst) {
45
- if !incoming.contains(&src) {
46
- incoming.push(src);
47
- }
44
+ if let Some(incoming) = self.incoming.get_mut(&dst)
45
+ && !incoming.contains(&src)
46
+ {
47
+ incoming.push(src);
48
48
  }
49
49
  }
50
50
 
@@ -68,10 +68,10 @@ impl SimpleAdjList {
68
68
  visited.insert(start);
69
69
 
70
70
  while let Some((node, depth)) = queue.pop_front() {
71
- if let Some(max_depth) = max_depth {
72
- if depth > max_depth {
73
- continue;
74
- }
71
+ if let Some(max_depth) = max_depth
72
+ && depth > max_depth
73
+ {
74
+ continue;
75
75
  }
76
76
 
77
77
  result.push(node);
@@ -2,6 +2,14 @@
2
2
  //!
3
3
  //! Provides utilities for creating deterministic test graphs and running
4
4
  //! fair performance comparisons between SQLite and Native backends.
5
+ //!
6
+ //! This module is consumed by many benchmark binaries; clippy reports dead
7
+ //! code per-target, but every helper here is used by at least one bench.
8
+
9
+ #![allow(
10
+ dead_code,
11
+ reason = "shared bench utilities used across multiple bench targets"
12
+ )]
5
13
 
6
14
  use std::time::Duration;
7
15
  use tempfile::TempDir;
@@ -84,14 +92,14 @@ pub fn create_benchmark_graph(backend: BackendKind, spec: &BenchmarkGraph) -> Be
84
92
  }
85
93
 
86
94
  // Generate edges based on topology using individual insertions
87
- let edge_count = generate_edges(&graph, &node_ids, spec);
95
+ let edge_count = generate_edges(&*graph, &node_ids, spec);
88
96
 
89
97
  let creation_time = start_time.elapsed();
90
98
 
91
99
  BenchmarkResult {
92
100
  backend,
93
101
  node_count: node_ids.len(),
94
- edge_count: edge_count,
102
+ edge_count,
95
103
  creation_time,
96
104
  temp_dir,
97
105
  db_path,
@@ -110,7 +118,7 @@ pub struct BenchmarkResult {
110
118
 
111
119
  /// Generate edges based on the specified topology
112
120
  fn generate_edges(
113
- graph: &Box<dyn sqlitegraph::GraphBackend>,
121
+ graph: &dyn sqlitegraph::GraphBackend,
114
122
  node_ids: &[i64],
115
123
  spec: &BenchmarkGraph,
116
124
  ) -> usize {
@@ -138,11 +146,12 @@ fn generate_edges(
138
146
  return 0;
139
147
  }
140
148
  let center = node_ids[0];
141
- for i in 1..node_ids.len().min(spec.edge_count + 1) {
149
+ let take = (spec.edge_count + 1).min(node_ids.len()).saturating_sub(1);
150
+ for (i, &to) in node_ids.iter().enumerate().skip(1).take(take) {
142
151
  graph
143
152
  .insert_edge(EdgeSpec {
144
153
  from: center,
145
- to: node_ids[i],
154
+ to,
146
155
  edge_type: "star".to_string(),
147
156
  data: serde_json::json!({"spoke": i}),
148
157
  })
@@ -237,9 +246,10 @@ impl BenchInMemoryGraph {
237
246
 
238
247
  match spec.topology {
239
248
  GraphTopology::Chain => {
240
- for i in 0..spec.node_count.min(spec.edge_count) {
249
+ let limit = spec.node_count.min(spec.edge_count);
250
+ for (i, adj) in adjacency.iter_mut().enumerate().take(limit) {
241
251
  if i + 1 < spec.node_count {
242
- adjacency[i].push(i as u32 + 1);
252
+ adj.push(i as u32 + 1);
243
253
  }
244
254
  }
245
255
  }
@@ -263,18 +273,19 @@ impl BenchInMemoryGraph {
263
273
  }
264
274
  GraphTopology::Grid => {
265
275
  let grid_size = (spec.node_count as f64).sqrt() as usize;
266
- for i in 0..spec.node_count.min(spec.edge_count) {
276
+ let limit = spec.node_count.min(spec.edge_count);
277
+ for (i, adj) in adjacency.iter_mut().enumerate().take(limit) {
267
278
  let row = i / grid_size;
268
279
  let col = i % grid_size;
269
280
 
270
281
  // Right neighbor
271
282
  if col + 1 < grid_size && i + 1 < spec.node_count {
272
- adjacency[i].push((i + 1) as u32);
283
+ adj.push((i + 1) as u32);
273
284
  }
274
285
 
275
286
  // Bottom neighbor
276
287
  if row + 1 < grid_size && i + grid_size < spec.node_count {
277
- adjacency[i].push((i + grid_size) as u32);
288
+ adj.push((i + grid_size) as u32);
278
289
  }
279
290
  }
280
291
  }
@@ -97,7 +97,7 @@ fn bench_insert_throughput(criterion: &mut Criterion) {
97
97
  &batch_size,
98
98
  |b, &size| {
99
99
  b.iter_batched(
100
- || create_benchmark_temp_dir(),
100
+ create_benchmark_temp_dir,
101
101
  |temp_dir| {
102
102
  let db_path = temp_dir.path().join("insert.db");
103
103
  let graph = open_graph(&db_path, &GraphConfig::native()).unwrap();
@@ -209,7 +209,7 @@ fn bench_memory_efficiency(criterion: &mut Criterion) {
209
209
  &node_count,
210
210
  |b, &count| {
211
211
  b.iter_batched(
212
- || create_benchmark_temp_dir(),
212
+ create_benchmark_temp_dir,
213
213
  |temp_dir| {
214
214
  let db_path = temp_dir.path().join("memory.db");
215
215
  let graph = open_graph(&db_path, &GraphConfig::native()).unwrap();
@@ -2,6 +2,14 @@
2
2
  //!
3
3
  //! Provides various graph structures to test algorithm performance
4
4
  //! under different topological conditions.
5
+ //!
6
+ //! Each bench binary uses a subset of these helpers; clippy flags the rest
7
+ //! as dead per-target. Allow it here so the shared utilities stay green.
8
+
9
+ #![allow(
10
+ dead_code,
11
+ reason = "shared bench utilities used across multiple bench targets"
12
+ )]
5
13
 
6
14
  use rand::Rng;
7
15
  use sqlitegraph::backend::{EdgeSpec, NodeSpec};
@@ -307,7 +315,7 @@ fn generate_power_law(nodes: usize, target_edges: usize, alpha: f64) -> GraphDat
307
315
 
308
316
  /// Generate grid/lattice structure
309
317
  fn generate_grid(nodes: usize, width: usize) -> GraphData {
310
- let height = (nodes + width - 1) / width;
318
+ let height = nodes.div_ceil(width);
311
319
 
312
320
  let node_specs = (0..nodes)
313
321
  .map(|i| NodeSpec {
@@ -392,6 +400,10 @@ fn generate_complete(nodes: usize) -> GraphData {
392
400
 
393
401
  #[cfg(test)]
394
402
  mod tests {
403
+ #[allow(
404
+ unused_imports,
405
+ reason = "items resolved through allow(dead_code) attribute"
406
+ )]
395
407
  use super::*;
396
408
 
397
409
  #[test]