sqlitegraph 0.1.1__tar.gz → 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/Cargo.lock +2 -2
  2. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/PKG-INFO +1 -1
  3. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/pyproject.toml +1 -1
  4. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/Cargo.toml +1 -1
  5. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/backend.rs +27 -0
  6. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/sqlite/impl_.rs +24 -1
  7. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend.rs +36 -0
  8. sqlitegraph-0.2.0/sqlitegraph-core/src/bfs.rs +171 -0
  9. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/multi_hop.rs +10 -1
  10. sqlitegraph-0.2.0/sqlitegraph-core/tests/bfs_tests.rs +226 -0
  11. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/CHANGELOG.md +25 -0
  12. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/Cargo.toml +1 -1
  13. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/src/lib.rs +86 -13
  14. sqlitegraph-0.2.0/sqlitegraph-py/tests/test_filtered_traversal.py +113 -0
  15. sqlitegraph-0.1.1/sqlitegraph-core/src/bfs.rs +0 -80
  16. sqlitegraph-0.1.1/sqlitegraph-core/tests/bfs_tests.rs +0 -100
  17. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/Cargo.toml +0 -0
  18. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/README.md +0 -0
  19. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/python/sqlitegraph/__init__.py +0 -0
  20. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/python/sqlitegraph/_native.pyi +0 -0
  21. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/python/sqlitegraph/py.typed +0 -0
  22. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/.gitignore +0 -0
  23. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/BLOCK_AWARE_CACHE_BEHAVIOR_REPORT.md +0 -0
  24. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/BLOCK_LOCALITY_PROTOTYPE_REPORT.md +0 -0
  25. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/BUG_10K_INVESTIGATION_SUMMARY.md +0 -0
  26. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/BUG_SNAPSHOTID_SQLITE_BACKEND.md +0 -0
  27. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/CACHE_CAPACITY_SWEEP_REPORT.md +0 -0
  28. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/CACHE_CLONE_FIX_REPORT.md +0 -0
  29. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/CHANGELOG.md +0 -0
  30. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/COLD_PATH_FORENSICS_REPORT.md +0 -0
  31. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/COLD_WARM_BENCHMARK_SPLIT_REPORT.md +0 -0
  32. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/EDGE_CORRUPTION_ROOT_CAUSE.md +0 -0
  33. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/LICENSE +0 -0
  34. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/MAIN_BENCHMARK_RERUN_REPORT.md +0 -0
  35. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/NODE_PAGE_OVERFLOW_FIX_REPORT.md +0 -0
  36. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/PAGE_ID_COLLISION_ROOT_CAUSE.md +0 -0
  37. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/PHASE3_NODE_PAGE_CACHE_FIX_REPORT.md +0 -0
  38. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/PHYSICAL_BLOCK_PLACEMENT_PROTOTYPE_REPORT.md +0 -0
  39. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/README.md +0 -0
  40. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/REBUILD_INDEXES_FIX_REPORT.md +0 -0
  41. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/REOPEN_CORRUPTION_FORENSICS.md +0 -0
  42. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/V3_10K_NODE_BUG_FIX.md +0 -0
  43. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/V3_FILE_IO_COORDINATION.md +0 -0
  44. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/V3_FORENSIC_REPORT.md +0 -0
  45. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/V3_REGRESSION_SWEEP_REPORT.md +0 -0
  46. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/adaptive_page_simple.rs +0 -0
  47. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/adjlist_benchmark.rs +0 -0
  48. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/algo_benchmarks.rs +0 -0
  49. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/backend_comparison.rs +0 -0
  50. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/bench_utils.rs +0 -0
  51. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/bfs.rs +0 -0
  52. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/cold_cache.rs +0 -0
  53. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/comparative_benchmark.rs +0 -0
  54. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/comprehensive_performance.rs +0 -0
  55. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/compression_benchmark.rs +0 -0
  56. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/concurrent_access.rs +0 -0
  57. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/connection_pool.rs +0 -0
  58. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/graph_generators.rs +0 -0
  59. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/graph_theory_benchmarks.rs +0 -0
  60. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/hnsw.rs +0 -0
  61. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/hnsw_multilayer.rs +0 -0
  62. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/insert.rs +0 -0
  63. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/k_hop.rs +0 -0
  64. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/memory_profiling.rs +0 -0
  65. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/mvcc_benchmarks.rs +0 -0
  66. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/native_disk_io.rs +0 -0
  67. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/parallel_bfs.rs +0 -0
  68. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/read_path_benchmarks.rs +0 -0
  69. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/real_datasets.rs +0 -0
  70. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/regression_memory.rs +0 -0
  71. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/regression_non_chain_patterns.rs +0 -0
  72. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/regression_pubsub_memory.rs +0 -0
  73. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/regression_pubsub_non_chain.rs +0 -0
  74. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/regression_pubsub_write_cost.rs +0 -0
  75. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/regression_write_cost.rs +0 -0
  76. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/sqlite_v3_comparison.rs +0 -0
  77. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/v3_algorithm_benchmarks.rs +0 -0
  78. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/v3_backend_benchmarks.rs +0 -0
  79. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/benches/wal_recovery_benchmarks.rs +0 -0
  80. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/clippy.toml +0 -0
  81. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/core.d +0 -0
  82. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/debug_test.rs +0 -0
  83. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/HNSW_DEVELOPMENT_RULES.md +0 -0
  84. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/HNSW_VECTOR_INTEGRATION_FUTURE_ROADMAP.md +0 -0
  85. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/SEQUENTIAL_IO_PERFORMANCE.md +0 -0
  86. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/WAL_MODE_IMPLEMENTATION_GUIDE.md +0 -0
  87. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase-40-benchmark-report.md +0 -0
  88. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase10_performance_tuning.md +0 -0
  89. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase11_native_perf_plan.md +0 -0
  90. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase12_optimization_plan.md +0 -0
  91. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase14_step9_khop_corruption_codebase_mapping.md +0 -0
  92. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase29_step7_mmap_preaudit_notes.md +0 -0
  93. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase5_real_adjacency.md +0 -0
  94. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase6_implementation_status.md +0 -0
  95. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase6_native_graphbackend_plan.md +0 -0
  96. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/phase7_native_backend_refactor.md +0 -0
  97. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/docs/superpowers/plans/2026-04-23-task-1-analysis.md +0 -0
  98. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/algo_benchmark.rs +0 -0
  99. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/basic_functionality_test.rs +0 -0
  100. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/batch_bench.rs +0 -0
  101. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/batch_stress_test.rs +0 -0
  102. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/bench_parallel_bfs.rs +0 -0
  103. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/block_locality_benchmark.rs +0 -0
  104. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/cache_capacity_benchmark.rs +0 -0
  105. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/cache_clone_forensics.rs +0 -0
  106. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/cache_perf_test.rs +0 -0
  107. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/cold_path_decomposition.rs +0 -0
  108. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/compression_analysis.rs +0 -0
  109. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/compression_detailed.rs +0 -0
  110. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/compression_diagnostics.rs +0 -0
  111. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/crash_test_child.rs +0 -0
  112. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/debug_buffer_error.rs +0 -0
  113. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/get_node_cache_sweep.rs +0 -0
  114. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/phase53_1_execution.rs +0 -0
  115. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/phase55_simple_benchmark.rs +0 -0
  116. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/reopen_corruption_repro.rs +0 -0
  117. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_100k.rs +0 -0
  118. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_adaptive_pages.rs +0 -0
  119. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_allocator_startup.rs +0 -0
  120. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_batch_simple.rs +0 -0
  121. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_binary_search.rs +0 -0
  122. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_btree_100k.rs +0 -0
  123. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_cache_warm.rs +0 -0
  124. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_chunked_bfs.rs +0 -0
  125. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_delta_encoding.rs +0 -0
  126. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_direct_backend_benchmark.rs +0 -0
  127. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_direct_edgestore.rs +0 -0
  128. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_edge_store_direct.rs +0 -0
  129. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_edgestore_perf.rs +0 -0
  130. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_index_restore.rs +0 -0
  131. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_index_staleness.rs +0 -0
  132. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_lazy_decode.rs +0 -0
  133. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_lock_overhead.rs +0 -0
  134. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_native_edge.rs +0 -0
  135. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_neighbors_cache.rs +0 -0
  136. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_neighbors_detailed.rs +0 -0
  137. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_neighbors_profile.rs +0 -0
  138. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_open_detailed_timing.rs +0 -0
  139. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_open_roundtrip.rs +0 -0
  140. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_open_stage_timing.rs +0 -0
  141. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_performance_comparison.rs +0 -0
  142. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_rwlock_overhead.rs +0 -0
  143. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_sqlite_neighbors_perf.rs +0 -0
  144. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_v3_neighbors_perf.rs +0 -0
  145. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/test_vec_clone.rs +0 -0
  146. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/v3_forensic_page_analysis.rs +0 -0
  147. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/v3_forensics_example.rs +0 -0
  148. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/v3_get_node_profile.rs +0 -0
  149. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/v3_offset_forensic.rs +0 -0
  150. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/v3_perf_test.rs +0 -0
  151. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/v3_readonly_profile.rs +0 -0
  152. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/examples/v3_reopen_verify.rs +0 -0
  153. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/libtest_syntax.rlib +0 -0
  154. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/manual.md +0 -0
  155. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/snapshot_export/snapshot_1766284406.v2 +0 -0
  156. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/snapshot_export/snapshot_1766284420.v2 +0 -0
  157. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/sqlitegraph_bench.json +0 -0
  158. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/backend/centrality.rs +0 -0
  159. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/backend/graph_ops.rs +0 -0
  160. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/backend/mod.rs +0 -0
  161. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/backend/traversal.rs +0 -0
  162. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/call_graph_analysis.rs +0 -0
  163. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/centrality.rs +0 -0
  164. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/community.rs +0 -0
  165. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/control_dependence.rs +0 -0
  166. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/critical_path.rs +0 -0
  167. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/cut_partition.rs +0 -0
  168. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/cycle_basis.rs +0 -0
  169. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/dominance_frontiers.rs +0 -0
  170. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/dominators.rs +0 -0
  171. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/graph_diff.rs +0 -0
  172. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/graph_rewriting.rs +0 -0
  173. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/graph_similarity.rs +0 -0
  174. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/mod.rs +0 -0
  175. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/natural_loops.rs +0 -0
  176. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/observability.rs +0 -0
  177. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/path_enumeration.rs +0 -0
  178. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/post_dominators.rs +0 -0
  179. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/program_slicing.rs +0 -0
  180. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/reachability.rs +0 -0
  181. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/scc.rs +0 -0
  182. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/structure.rs +0 -0
  183. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/subgraph_isomorphism.rs +0 -0
  184. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/taint_analysis.rs +0 -0
  185. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/tests.rs +0 -0
  186. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/topological_sort.rs +0 -0
  187. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/transitive_closure.rs +0 -0
  188. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/transitive_reduction.rs +0 -0
  189. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/algo/wcc.rs +0 -0
  190. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/api_ergonomics.rs +0 -0
  191. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/constants.rs +0 -0
  192. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/cpu_tuning.rs +0 -0
  193. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/mod.rs +0 -0
  194. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/types/aliases.rs +0 -0
  195. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/types/cpu_profile.rs +0 -0
  196. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/types/errors.rs +0 -0
  197. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/types/flags.rs +0 -0
  198. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/types/kv_types.rs +0 -0
  199. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/types/mod.rs +0 -0
  200. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/types/utils.rs +0 -0
  201. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/algorithm/mod.rs +0 -0
  202. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/algorithm/parallel_bfs.rs +0 -0
  203. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/allocator.rs +0 -0
  204. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/btree.rs +0 -0
  205. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/compact_edge_record.rs +0 -0
  206. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/compression/delta.rs +0 -0
  207. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/compression/edge_delta.rs +0 -0
  208. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/compression/mod.rs +0 -0
  209. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/compression/varint.rs +0 -0
  210. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/constants.rs +0 -0
  211. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/edge_compat.rs +0 -0
  212. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/file_coordinator.rs +0 -0
  213. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/forensics.rs +0 -0
  214. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/header.rs +0 -0
  215. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/index/mod.rs +0 -0
  216. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/index/page.rs +0 -0
  217. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/index_persistence.rs +0 -0
  218. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/kind_index.rs +0 -0
  219. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/kv_store/mod.rs +0 -0
  220. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/kv_store/store.rs +0 -0
  221. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/kv_store/types.rs +0 -0
  222. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/lazy_init_tests.rs +0 -0
  223. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/mod.rs +0 -0
  224. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/name_index.rs +0 -0
  225. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/node/block_cache.rs +0 -0
  226. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/node/cache.rs +0 -0
  227. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/node/mod.rs +0 -0
  228. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/node/page.rs +0 -0
  229. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/node/record.rs +0 -0
  230. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/node/store.rs +0 -0
  231. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/node/tests.rs +0 -0
  232. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/pubsub/mod.rs +0 -0
  233. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/pubsub/publisher.rs +0 -0
  234. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/pubsub/types.rs +0 -0
  235. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/storage/adaptive_page.rs +0 -0
  236. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/storage/media_detector.rs +0 -0
  237. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/storage/mod.rs +0 -0
  238. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/string_table/mod.rs +0 -0
  239. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/string_table/table.rs +0 -0
  240. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/string_table/tests.rs +0 -0
  241. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/tests/mod.rs +0 -0
  242. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/wal.rs +0 -0
  243. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/native/v3/write_batch.rs +0 -0
  244. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/sqlite/helpers.rs +0 -0
  245. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/sqlite/kv_tests.rs +0 -0
  246. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/sqlite/mod.rs +0 -0
  247. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/sqlite/pubsub_tests.rs +0 -0
  248. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend/sqlite/types.rs +0 -0
  249. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/backend_selector.rs +0 -0
  250. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/bench_gates.rs +0 -0
  251. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/bench_meta.rs +0 -0
  252. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/bench_regression.rs +0 -0
  253. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/bench_utils.rs +0 -0
  254. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/cache.rs +0 -0
  255. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/client.rs +0 -0
  256. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/config/factory.rs +0 -0
  257. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/config/graph_config.rs +0 -0
  258. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/config/kinds.rs +0 -0
  259. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/config/mod.rs +0 -0
  260. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/config/native.rs +0 -0
  261. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/config/sqlite.rs +0 -0
  262. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/dependency_monitor.rs +0 -0
  263. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/dsl.rs +0 -0
  264. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/errors.rs +0 -0
  265. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/fault_injection.rs +0 -0
  266. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/adjacency.rs +0 -0
  267. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/core.rs +0 -0
  268. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/edge_ops.rs +0 -0
  269. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/entity_ops.rs +0 -0
  270. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/metrics/instrumented.rs +0 -0
  271. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/metrics/metrics_core.rs +0 -0
  272. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/metrics/metrics_snapshot.rs +0 -0
  273. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/metrics/mod.rs +0 -0
  274. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/metrics/statement_tracker.rs +0 -0
  275. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/metrics/utils.rs +0 -0
  276. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/metrics_schema.rs +0 -0
  277. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/mod.rs +0 -0
  278. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/pattern_matching.rs +0 -0
  279. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/pool.rs +0 -0
  280. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/snapshot.rs +0 -0
  281. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph/types.rs +0 -0
  282. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/graph_opt.rs +0 -0
  283. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/batch_filter.rs +0 -0
  284. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/builder.rs +0 -0
  285. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/config.rs +0 -0
  286. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/distance_functions.rs +0 -0
  287. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/distance_metric.rs +0 -0
  288. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/errors.rs +0 -0
  289. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/index.rs +0 -0
  290. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/index_api.rs +0 -0
  291. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/index_internal.rs +0 -0
  292. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/index_persist.rs +0 -0
  293. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/layer.rs +0 -0
  294. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/mod.rs +0 -0
  295. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/multilayer.rs +0 -0
  296. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/neighborhood.rs +0 -0
  297. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/serialization.rs +0 -0
  298. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/simd.rs +0 -0
  299. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/storage.rs +0 -0
  300. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/v3_storage.rs +0 -0
  301. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/hnsw/v3_storage_tests.rs +0 -0
  302. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/index.rs +0 -0
  303. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/inference/engine.rs +0 -0
  304. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/inference/mod.rs +0 -0
  305. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/inference/sampling.rs +0 -0
  306. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/inference/simd.rs +0 -0
  307. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/introspection.rs +0 -0
  308. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/lib.rs +0 -0
  309. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/mvcc.rs +0 -0
  310. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern.rs +0 -0
  311. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine/matcher.rs +0 -0
  312. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine/mod.rs +0 -0
  313. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine/pattern.rs +0 -0
  314. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine/property.rs +0 -0
  315. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine/query.rs +0 -0
  316. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine/tests.rs +0 -0
  317. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine_cache/edge_validation.rs +0 -0
  318. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine_cache/fast_path_detection.rs +0 -0
  319. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine_cache/fast_path_execution.rs +0 -0
  320. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine_cache/mod.rs +0 -0
  321. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/pattern_engine_cache/tests.rs +0 -0
  322. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/progress.rs +0 -0
  323. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/query.rs +0 -0
  324. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/query_cache.rs +0 -0
  325. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/reasoning.rs +0 -0
  326. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/recovery.rs +0 -0
  327. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/schema.rs +0 -0
  328. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/src/snapshot.rs +0 -0
  329. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/acid_regression_test.rs +0 -0
  330. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/acid_snapshot_test.rs +0 -0
  331. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/algo_tests.rs +0 -0
  332. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/backend_selector_tests.rs +0 -0
  333. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/bench_data_tests.rs +0 -0
  334. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/bench_gate_tests.rs +0 -0
  335. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/bench_gates_tests.rs +0 -0
  336. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/bench_meta_tests.rs +0 -0
  337. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/bench_report_tests.rs +0 -0
  338. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/benchmark_isolation_test.rs +0 -0
  339. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/bincode_compatibility_test.rs +0 -0
  340. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/cache_effectiveness_tests.rs +0 -0
  341. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/cache_tests.rs +0 -0
  342. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/check_write_path.rs +0 -0
  343. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/cluster_offset_corruption_regression.rs +0 -0
  344. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/cold_path_forensics.rs +0 -0
  345. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/debug_file_size.rs +0 -0
  346. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/debug_index_rebuilding.rs +0 -0
  347. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/debug_overflow.rs +0 -0
  348. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/debug_scenario_c.rs +0 -0
  349. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/deterministic_index_tests.rs +0 -0
  350. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/direct_file_read_corruption_test.rs +0 -0
  351. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/doc_tests.rs +0 -0
  352. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/edge_corruption_minimal.rs +0 -0
  353. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/edge_corruption_repro.rs +0 -0
  354. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/edge_insertion_corruption_test.rs +0 -0
  355. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/edge_tests.rs +0 -0
  356. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/entity_tests.rs +0 -0
  357. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/file_extension_debug.rs +0 -0
  358. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/fuzz_common.rs +0 -0
  359. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/get_node_forensics.rs +0 -0
  360. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/graph_node_existence_enforcement.rs +0 -0
  361. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/graph_opt_tests.rs +0 -0
  362. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/helpers/mod.rs +0 -0
  363. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/hnsw_persistence_tests.rs +0 -0
  364. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/index_persistence_integration.rs +0 -0
  365. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/index_persistence_validation.rs +0 -0
  366. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/index_tests.rs +0 -0
  367. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/instrumentation_tests.rs +0 -0
  368. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/integration_tests.rs +0 -0
  369. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/isolate_open_bug.rs +0 -0
  370. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/json_parsing_diagnostics.rs +0 -0
  371. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/kv_durability_tests.rs +0 -0
  372. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/lib_api_smoke_tests.rs +0 -0
  373. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/multi_hop_tests.rs +0 -0
  374. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/multi_node_corruption_regression.rs +0 -0
  375. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/mvcc_baseline_tests.rs +0 -0
  376. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/mvcc_concurrent_tests.rs +0 -0
  377. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/mvcc_edge_case_tests.rs +0 -0
  378. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/mvcc_snapshot_tests.rs +0 -0
  379. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/mvcc_wal_tests.rs +0 -0
  380. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/native_edge_insertion_regression.rs +0 -0
  381. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/node_overflow_forensics.rs +0 -0
  382. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/node_read_forensics_test.rs +0 -0
  383. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/node_slot_transaction_persistence.rs +0 -0
  384. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/oom_reproduction_test.rs +0 -0
  385. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/page_42_debug.rs +0 -0
  386. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/page_write_debug.rs +0 -0
  387. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/pattern_cache_fastpath_tests.rs +0 -0
  388. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/pattern_engine_tests.rs +0 -0
  389. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/pattern_tests.rs +0 -0
  390. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/perf_gate_tests.rs +0 -0
  391. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/perf_gate_v32_tests.rs +0 -0
  392. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/phase32_cluster_pipeline_reconstruction_tests_clean.rs +0 -0
  393. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/phase44_2_cluster_size_contract_tests.rs +0 -0
  394. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/phase64_node_count_durability_regression.rs +0 -0
  395. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/phase65_cluster_size_corruption_regression.rs +0 -0
  396. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/phase73_node_count_corruption_capture.rs +0 -0
  397. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/query_cache_performance_tests.rs +0 -0
  398. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/query_cache_tests.rs +0 -0
  399. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/query_tests.rs +0 -0
  400. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/recovery_tests.rs +0 -0
  401. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/regression_concurrent_traversal.rs +0 -0
  402. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/reopen_corruption_investigation.rs +0 -0
  403. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/reopen_integration_test.rs +0 -0
  404. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/rowid_tests.rs +0 -0
  405. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/schema_tests.rs +0 -0
  406. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/snapshot_isolation_tests.rs +0 -0
  407. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/sqlite_reopen_tests.rs +0 -0
  408. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/sqlite_snapshot_tests.rs +0 -0
  409. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/test_10k_bug_reproduction.rs +0 -0
  410. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/transaction_begin_corruption_proof.rs +0 -0
  411. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/unsafe_invariants_tests.rs +0 -0
  412. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_algorithm_tests.rs +0 -0
  413. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_block_locality_tests.rs +0 -0
  414. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_btree_forensics.rs +0 -0
  415. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_check_nodepages.rs +0 -0
  416. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_dump_page_headers.rs +0 -0
  417. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_edge_durability_tdd.rs +0 -0
  418. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_file_write_test.rs +0 -0
  419. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_focused_perf.rs +0 -0
  420. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_forensics_test.rs +0 -0
  421. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_header_forensics.rs +0 -0
  422. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_insert_read_forensics.rs +0 -0
  423. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_integrity_check.rs +0 -0
  424. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_kind_index_tests.rs +0 -0
  425. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_name_index_tests.rs +0 -0
  426. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_page_ownership_forensics.rs +0 -0
  427. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_persistence_100.rs +0 -0
  428. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_query_truth_tests.rs +0 -0
  429. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_regression_sweep.rs +0 -0
  430. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_reopen_durability.rs +0 -0
  431. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_sync_fix_validation.rs +0 -0
  432. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/v3_verify_file_persistence.rs +0 -0
  433. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/wal_mode_default_tests.rs +0 -0
  434. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/wal_tuning_tests.rs +0 -0
  435. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-core/tests/write_buffer_coherence_regression.rs +0 -0
  436. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/.gitignore +0 -0
  437. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/README.md +0 -0
  438. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/examples/01_basic_crud.py +0 -0
  439. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/examples/02_graph_algorithms.py +0 -0
  440. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/examples/03_vector_search.py +0 -0
  441. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/examples/04_social_network.py +0 -0
  442. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/examples/05_file_backed.py +0 -0
  443. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/tests/test_algo.py +0 -0
  444. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/tests/test_basic.py +0 -0
  445. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/tests/test_crud.py +0 -0
  446. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/tests/test_errors.py +0 -0
  447. {sqlitegraph-0.1.1 → sqlitegraph-0.2.0}/sqlitegraph-py/tests/test_hnsw.py +0 -0
@@ -1387,7 +1387,7 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
1387
1387
 
1388
1388
  [[package]]
1389
1389
  name = "sqlitegraph"
1390
- version = "2.2.5"
1390
+ version = "2.3.0"
1391
1391
  dependencies = [
1392
1392
  "ahash",
1393
1393
  "arc-swap",
@@ -1428,7 +1428,7 @@ dependencies = [
1428
1428
 
1429
1429
  [[package]]
1430
1430
  name = "sqlitegraph-py"
1431
- version = "0.1.1"
1431
+ version = "0.2.0"
1432
1432
  dependencies = [
1433
1433
  "ndarray 0.16.1",
1434
1434
  "numpy",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlitegraph
3
- Version: 0.1.1
3
+ Version: 0.2.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
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "sqlitegraph"
7
- version = "0.1.1"
7
+ version = "0.2.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,6 +1,6 @@
1
1
  [package]
2
2
  name = "sqlitegraph"
3
- version = "2.2.5"
3
+ version = "2.3.0"
4
4
  edition = "2024"
5
5
  description = "Embedded graph database with full ACID transactions, HNSW vector search, dual backend support, and comprehensive graph algorithms library"
6
6
  license = "GPL-3.0"
@@ -1237,6 +1237,33 @@ impl GraphBackend for V3Backend {
1237
1237
  self.k_hop(_snapshot_id, _start, _depth, _direction)
1238
1238
  }
1239
1239
 
1240
+ fn bfs_filtered(
1241
+ &self,
1242
+ snapshot_id: SnapshotId,
1243
+ start: i64,
1244
+ depth: u32,
1245
+ _direction: BackendDirection,
1246
+ _allowed_edge_types: &[&str],
1247
+ ) -> Result<Vec<i64>, SqliteGraphError> {
1248
+ // TODO: Implement edge type filtering for V3 backend.
1249
+ // V3's edge_store exposes `neighbors_filtered`, but typed-edge traversal
1250
+ // is not yet wired into the BFS path. Tracked alongside `k_hop_filtered`.
1251
+ // For now, delegate to unfiltered bfs to match the existing stub pattern.
1252
+ self.bfs(snapshot_id, start, depth)
1253
+ }
1254
+
1255
+ fn shortest_path_filtered(
1256
+ &self,
1257
+ snapshot_id: SnapshotId,
1258
+ start: i64,
1259
+ end: i64,
1260
+ _allowed_edge_types: &[&str],
1261
+ ) -> Result<Option<Vec<i64>>, SqliteGraphError> {
1262
+ // TODO: Implement edge type filtering for V3 backend.
1263
+ // See note on `bfs_filtered`.
1264
+ self.shortest_path(snapshot_id, start, end)
1265
+ }
1266
+
1240
1267
  fn chain_query(
1241
1268
  &self,
1242
1269
  _snapshot_id: SnapshotId,
@@ -10,7 +10,7 @@ use crate::{
10
10
  SqliteGraphError,
11
11
  backend::sqlite::types::{BackendDirection, EdgeSpec, NeighborQuery, NodeSpec},
12
12
  backend::{PubSubEvent, SubscriptionFilter},
13
- bfs::{bfs_neighbors, shortest_path},
13
+ bfs::{bfs_neighbors, bfs_neighbors_filtered, shortest_path, shortest_path_filtered},
14
14
  graph::{GraphEdge, GraphEntity, SqliteGraph},
15
15
  multi_hop,
16
16
  pattern::{self, PatternMatch, PatternQuery},
@@ -427,6 +427,29 @@ impl crate::backend::GraphBackend for SqliteGraphBackend {
427
427
  Ok(result)
428
428
  }
429
429
 
430
+ fn bfs_filtered(
431
+ &self,
432
+ snapshot_id: crate::snapshot::SnapshotId,
433
+ start: i64,
434
+ depth: u32,
435
+ direction: BackendDirection,
436
+ allowed_edge_types: &[&str],
437
+ ) -> Result<Vec<i64>, SqliteGraphError> {
438
+ validate_snapshot_for_sqlite(snapshot_id)?;
439
+ bfs_neighbors_filtered(&self.graph, start, depth, allowed_edge_types, direction)
440
+ }
441
+
442
+ fn shortest_path_filtered(
443
+ &self,
444
+ snapshot_id: crate::snapshot::SnapshotId,
445
+ start: i64,
446
+ end: i64,
447
+ allowed_edge_types: &[&str],
448
+ ) -> Result<Option<Vec<i64>>, SqliteGraphError> {
449
+ validate_snapshot_for_sqlite(snapshot_id)?;
450
+ shortest_path_filtered(&self.graph, start, end, allowed_edge_types)
451
+ }
452
+
430
453
  fn chain_query(
431
454
  &self,
432
455
  snapshot_id: crate::snapshot::SnapshotId,
@@ -250,6 +250,21 @@ pub trait GraphBackend {
250
250
  direction: BackendDirection,
251
251
  allowed_edge_types: &[&str],
252
252
  ) -> Result<Vec<i64>, SqliteGraphError>;
253
+ fn bfs_filtered(
254
+ &self,
255
+ snapshot_id: SnapshotId,
256
+ start: i64,
257
+ depth: u32,
258
+ direction: BackendDirection,
259
+ allowed_edge_types: &[&str],
260
+ ) -> Result<Vec<i64>, SqliteGraphError>;
261
+ fn shortest_path_filtered(
262
+ &self,
263
+ snapshot_id: SnapshotId,
264
+ start: i64,
265
+ end: i64,
266
+ allowed_edge_types: &[&str],
267
+ ) -> Result<Option<Vec<i64>>, SqliteGraphError>;
253
268
  fn chain_query(
254
269
  &self,
255
270
  snapshot_id: SnapshotId,
@@ -606,6 +621,27 @@ where
606
621
  (*self).k_hop_filtered(snapshot_id, start, depth, direction, allowed_edge_types)
607
622
  }
608
623
 
624
+ fn bfs_filtered(
625
+ &self,
626
+ snapshot_id: SnapshotId,
627
+ start: i64,
628
+ depth: u32,
629
+ direction: BackendDirection,
630
+ allowed_edge_types: &[&str],
631
+ ) -> Result<Vec<i64>, SqliteGraphError> {
632
+ (*self).bfs_filtered(snapshot_id, start, depth, direction, allowed_edge_types)
633
+ }
634
+
635
+ fn shortest_path_filtered(
636
+ &self,
637
+ snapshot_id: SnapshotId,
638
+ start: i64,
639
+ end: i64,
640
+ allowed_edge_types: &[&str],
641
+ ) -> Result<Option<Vec<i64>>, SqliteGraphError> {
642
+ (*self).shortest_path_filtered(snapshot_id, start, end, allowed_edge_types)
643
+ }
644
+
609
645
  fn chain_query(
610
646
  &self,
611
647
  snapshot_id: SnapshotId,
@@ -0,0 +1,171 @@
1
+ use std::collections::VecDeque;
2
+
3
+ use ahash::{AHashMap, AHashSet};
4
+
5
+ use crate::{
6
+ backend::BackendDirection,
7
+ errors::SqliteGraphError,
8
+ graph::SqliteGraph,
9
+ multi_hop::{build_lookup, typed_adjacency},
10
+ };
11
+
12
+ pub fn bfs_neighbors(
13
+ graph: &SqliteGraph,
14
+ start: i64,
15
+ max_depth: u32,
16
+ ) -> Result<Vec<i64>, SqliteGraphError> {
17
+ graph.get_entity(start)?;
18
+ let mut visited = Vec::new();
19
+ let mut seen = AHashSet::new();
20
+ let mut queue = VecDeque::new();
21
+ queue.push_back((start, 0));
22
+ seen.insert(start);
23
+ while let Some((node, depth)) = queue.pop_front() {
24
+ visited.push(node);
25
+ if depth >= max_depth {
26
+ continue;
27
+ }
28
+ for next in graph.fetch_outgoing(node)? {
29
+ if seen.insert(next) {
30
+ queue.push_back((next, depth + 1));
31
+ }
32
+ }
33
+ }
34
+ Ok(visited)
35
+ }
36
+
37
+ pub fn bfs_neighbors_filtered(
38
+ graph: &SqliteGraph,
39
+ start: i64,
40
+ max_depth: u32,
41
+ allowed_edge_types: &[&str],
42
+ direction: BackendDirection,
43
+ ) -> Result<Vec<i64>, SqliteGraphError> {
44
+ graph.get_entity(start)?;
45
+ if allowed_edge_types.is_empty() {
46
+ return Ok(Vec::new());
47
+ }
48
+ let lookup = build_lookup(allowed_edge_types);
49
+ let mut visited = Vec::new();
50
+ let mut seen = AHashSet::new();
51
+ let mut queue = VecDeque::new();
52
+ queue.push_back((start, 0));
53
+ seen.insert(start);
54
+ while let Some((node, depth)) = queue.pop_front() {
55
+ visited.push(node);
56
+ if depth >= max_depth {
57
+ continue;
58
+ }
59
+ for next in typed_adjacency(graph, node, direction, Some(&lookup))? {
60
+ if seen.insert(next) {
61
+ queue.push_back((next, depth + 1));
62
+ }
63
+ }
64
+ }
65
+ Ok(visited)
66
+ }
67
+
68
+ pub fn shortest_path(
69
+ graph: &SqliteGraph,
70
+ start: i64,
71
+ end: i64,
72
+ ) -> Result<Option<Vec<i64>>, SqliteGraphError> {
73
+ graph.get_entity(start)?;
74
+ graph.get_entity(end)?;
75
+ if start == end {
76
+ return Ok(Some(vec![start]));
77
+ }
78
+ let mut queue = VecDeque::new();
79
+ let mut parents = AHashMap::new();
80
+ let mut seen = AHashSet::new();
81
+ queue.push_back(start);
82
+ seen.insert(start);
83
+ let mut found = false;
84
+ while let Some(node) = queue.pop_front() {
85
+ for next in graph.fetch_outgoing(node)? {
86
+ if seen.insert(next) {
87
+ parents.insert(next, node);
88
+ if next == end {
89
+ found = true;
90
+ break;
91
+ }
92
+ queue.push_back(next);
93
+ }
94
+ }
95
+ if found {
96
+ break;
97
+ }
98
+ }
99
+ if !found {
100
+ return Ok(None);
101
+ }
102
+ let mut path = vec![end];
103
+ let mut current = end;
104
+ while let Some(&parent) = parents.get(&current) {
105
+ path.push(parent);
106
+ if parent == start {
107
+ break;
108
+ }
109
+ current = parent;
110
+ }
111
+ if path.last().map(|last| *last != start).unwrap_or(true) {
112
+ return Ok(None);
113
+ }
114
+ path.reverse();
115
+ Ok(Some(path))
116
+ }
117
+
118
+ pub fn shortest_path_filtered(
119
+ graph: &SqliteGraph,
120
+ start: i64,
121
+ end: i64,
122
+ allowed_edge_types: &[&str],
123
+ ) -> Result<Option<Vec<i64>>, SqliteGraphError> {
124
+ graph.get_entity(start)?;
125
+ graph.get_entity(end)?;
126
+ if start == end {
127
+ return Ok(Some(vec![start]));
128
+ }
129
+ if allowed_edge_types.is_empty() {
130
+ return Ok(None);
131
+ }
132
+ let lookup = build_lookup(allowed_edge_types);
133
+ let mut queue = VecDeque::new();
134
+ let mut parents = AHashMap::new();
135
+ let mut seen = AHashSet::new();
136
+ queue.push_back(start);
137
+ seen.insert(start);
138
+ let mut found = false;
139
+ while let Some(node) = queue.pop_front() {
140
+ for next in typed_adjacency(graph, node, BackendDirection::Outgoing, Some(&lookup))? {
141
+ if seen.insert(next) {
142
+ parents.insert(next, node);
143
+ if next == end {
144
+ found = true;
145
+ break;
146
+ }
147
+ queue.push_back(next);
148
+ }
149
+ }
150
+ if found {
151
+ break;
152
+ }
153
+ }
154
+ if !found {
155
+ return Ok(None);
156
+ }
157
+ let mut path = vec![end];
158
+ let mut current = end;
159
+ while let Some(&parent) = parents.get(&current) {
160
+ path.push(parent);
161
+ if parent == start {
162
+ break;
163
+ }
164
+ current = parent;
165
+ }
166
+ if path.last().map(|last| *last != start).unwrap_or(true) {
167
+ return Ok(None);
168
+ }
169
+ path.reverse();
170
+ Ok(Some(path))
171
+ }
@@ -139,6 +139,15 @@ fn adjacency_for(
139
139
  node: i64,
140
140
  direction: BackendDirection,
141
141
  allowed_types: Option<&AHashSet<&str>>,
142
+ ) -> Result<Vec<i64>, SqliteGraphError> {
143
+ typed_adjacency(graph, node, direction, allowed_types)
144
+ }
145
+
146
+ pub(crate) fn typed_adjacency(
147
+ graph: &SqliteGraph,
148
+ node: i64,
149
+ direction: BackendDirection,
150
+ allowed_types: Option<&AHashSet<&str>>,
142
151
  ) -> Result<Vec<i64>, SqliteGraphError> {
143
152
  match allowed_types {
144
153
  Some(set) => filter_neighbors(graph, node, direction, set),
@@ -183,7 +192,7 @@ fn filter_neighbors(
183
192
  Ok(result)
184
193
  }
185
194
 
186
- fn build_lookup<'a>(types: &'a [&'a str]) -> AHashSet<&'a str> {
195
+ pub(crate) fn build_lookup<'a>(types: &'a [&'a str]) -> AHashSet<&'a str> {
187
196
  let mut lookup = AHashSet::with_capacity(types.len());
188
197
  for ty in types {
189
198
  lookup.insert(*ty);
@@ -0,0 +1,226 @@
1
+ use serde_json::json;
2
+ use sqlitegraph::{
3
+ GraphEdge, GraphEntity, SqliteGraph,
4
+ backend::BackendDirection,
5
+ bfs::{bfs_neighbors, bfs_neighbors_filtered, shortest_path, shortest_path_filtered},
6
+ };
7
+
8
+ fn build_graph(edges: &[(i64, i64)]) -> SqliteGraph {
9
+ let graph = SqliteGraph::open_in_memory().expect("graph");
10
+ for idx in 0..10 {
11
+ let name = format!("node_{idx}");
12
+ graph
13
+ .insert_entity(&GraphEntity {
14
+ id: 0,
15
+ kind: "Node".to_string(),
16
+ name,
17
+ file_path: None,
18
+ data: json!({}),
19
+ })
20
+ .unwrap();
21
+ }
22
+ for &(from, to) in edges {
23
+ graph
24
+ .insert_edge(&GraphEdge {
25
+ id: 0,
26
+ from_id: from,
27
+ to_id: to,
28
+ edge_type: "LINK".to_string(),
29
+ data: json!({}),
30
+ })
31
+ .unwrap();
32
+ }
33
+ graph
34
+ }
35
+
36
+ fn build_typed_graph(edges: &[(i64, i64, &str)]) -> SqliteGraph {
37
+ let graph = SqliteGraph::open_in_memory().expect("graph");
38
+ for idx in 0..10 {
39
+ let name = format!("node_{idx}");
40
+ graph
41
+ .insert_entity(&GraphEntity {
42
+ id: 0,
43
+ kind: "Node".to_string(),
44
+ name,
45
+ file_path: None,
46
+ data: json!({}),
47
+ })
48
+ .unwrap();
49
+ }
50
+ for &(from, to, edge_type) in edges {
51
+ graph
52
+ .insert_edge(&GraphEdge {
53
+ id: 0,
54
+ from_id: from,
55
+ to_id: to,
56
+ edge_type: edge_type.to_string(),
57
+ data: json!({}),
58
+ })
59
+ .unwrap();
60
+ }
61
+ graph
62
+ }
63
+
64
+ #[test]
65
+ fn test_bfs_traversal_single_component() {
66
+ let edges = vec![(1, 2), (2, 3), (3, 4), (4, 5)];
67
+ let graph = build_graph(&edges);
68
+ let visited = bfs_neighbors(&graph, 1, 10).expect("bfs");
69
+ assert_eq!(visited, vec![1, 2, 3, 4, 5]);
70
+ }
71
+
72
+ #[test]
73
+ fn test_bfs_traversal_disconnected_graph() {
74
+ let edges = vec![(1, 2), (2, 3), (6, 7)];
75
+ let graph = build_graph(&edges);
76
+ let visited = bfs_neighbors(&graph, 6, 10).expect("bfs");
77
+ assert_eq!(visited, vec![6, 7]);
78
+ }
79
+
80
+ #[test]
81
+ fn test_shortest_path_exists() {
82
+ let edges = vec![(1, 2), (2, 3), (1, 4), (4, 3)];
83
+ let graph = build_graph(&edges);
84
+ let path = shortest_path(&graph, 1, 3).expect("shortest");
85
+ assert_eq!(path, Some(vec![1, 2, 3]));
86
+ }
87
+
88
+ #[test]
89
+ fn test_shortest_path_not_exists() {
90
+ let edges = vec![(1, 2), (3, 4)];
91
+ let graph = build_graph(&edges);
92
+ let path = shortest_path(&graph, 1, 4).expect("shortest");
93
+ assert_eq!(path, None);
94
+ }
95
+
96
+ #[test]
97
+ fn test_bfs_deterministic_with_same_insert_order() {
98
+ let edges = vec![(1, 3), (1, 2), (2, 4), (2, 5)];
99
+ let graph = build_graph(&edges);
100
+ let visited = bfs_neighbors(&graph, 1, 10).expect("bfs");
101
+ assert_eq!(visited, vec![1, 2, 3, 4, 5]);
102
+ }
103
+
104
+ #[test]
105
+ fn test_bfs_deterministic_with_shuffled_insert_order() {
106
+ let mut edges = vec![(2, 4), (1, 3), (1, 2), (2, 5)];
107
+ let graph = build_graph(&edges);
108
+ edges.reverse();
109
+ let graph_b = build_graph(&edges);
110
+ let visited_a = bfs_neighbors(&graph, 1, 10).expect("bfs A");
111
+ let visited_b = bfs_neighbors(&graph_b, 1, 10).expect("bfs B");
112
+ assert_eq!(visited_a, visited_b);
113
+ }
114
+
115
+ #[test]
116
+ fn test_bfs_respects_max_depth() {
117
+ let edges = vec![(1, 2), (2, 3), (3, 4)];
118
+ let graph = build_graph(&edges);
119
+ let visited = bfs_neighbors(&graph, 1, 1).expect("bfs");
120
+ assert_eq!(visited, vec![1, 2]);
121
+ }
122
+
123
+ #[test]
124
+ fn test_shortest_path_prefers_lexicographic_neighbors() {
125
+ let edges = vec![(1, 2), (1, 3), (2, 4), (3, 4)];
126
+ let graph = build_graph(&edges);
127
+ let path = shortest_path(&graph, 1, 4).expect("shortest");
128
+ assert_eq!(path, Some(vec![1, 2, 4]));
129
+ }
130
+
131
+ #[test]
132
+ fn test_bfs_neighbors_filtered_restricts_traversal_to_allowed_edge_types() {
133
+ let edges = vec![
134
+ (1, 2, "CALL"),
135
+ (2, 3, "CALL"),
136
+ (1, 4, "IMPORTS"),
137
+ (4, 5, "IMPORTS"),
138
+ ];
139
+ let graph = build_typed_graph(&edges);
140
+ let visited =
141
+ bfs_neighbors_filtered(&graph, 1, 10, &["CALL"], BackendDirection::Outgoing).expect("bfs");
142
+ assert_eq!(visited, vec![1, 2, 3]);
143
+ }
144
+
145
+ #[test]
146
+ fn test_bfs_neighbors_filtered_empty_allowed_types_returns_empty() {
147
+ let edges = vec![(1, 2, "CALL"), (2, 3, "CALL")];
148
+ let graph = build_typed_graph(&edges);
149
+ let visited =
150
+ bfs_neighbors_filtered(&graph, 1, 10, &[], BackendDirection::Outgoing).expect("bfs");
151
+ assert!(visited.is_empty());
152
+ }
153
+
154
+ #[test]
155
+ fn test_bfs_neighbors_filtered_multiple_kinds_unions_neighbors() {
156
+ let edges = vec![
157
+ (1, 2, "CALL"),
158
+ (1, 3, "IMPORTS"),
159
+ (1, 4, "TESTS"),
160
+ (2, 5, "CALL"),
161
+ ];
162
+ let graph = build_typed_graph(&edges);
163
+ let visited = bfs_neighbors_filtered(
164
+ &graph,
165
+ 1,
166
+ 10,
167
+ &["CALL", "IMPORTS"],
168
+ BackendDirection::Outgoing,
169
+ )
170
+ .expect("bfs");
171
+ assert!(visited.contains(&2));
172
+ assert!(visited.contains(&3));
173
+ assert!(visited.contains(&5));
174
+ assert!(!visited.contains(&4));
175
+ }
176
+
177
+ #[test]
178
+ fn test_bfs_neighbors_filtered_incoming_direction() {
179
+ let edges = vec![(1, 5, "CALL"), (2, 5, "CALL"), (3, 5, "IMPORTS")];
180
+ let graph = build_typed_graph(&edges);
181
+ let visited =
182
+ bfs_neighbors_filtered(&graph, 5, 10, &["CALL"], BackendDirection::Incoming).expect("bfs");
183
+ assert!(visited.contains(&5));
184
+ assert!(visited.contains(&1));
185
+ assert!(visited.contains(&2));
186
+ assert!(!visited.contains(&3));
187
+ }
188
+
189
+ #[test]
190
+ fn test_shortest_path_filtered_uses_only_allowed_kinds() {
191
+ let edges = vec![
192
+ (1, 2, "CALL"),
193
+ (2, 3, "CALL"),
194
+ (1, 4, "IMPORTS"),
195
+ (4, 3, "IMPORTS"),
196
+ ];
197
+ let graph = build_typed_graph(&edges);
198
+ let path = shortest_path_filtered(&graph, 1, 3, &["CALL"]).expect("shortest");
199
+ assert_eq!(path, Some(vec![1, 2, 3]));
200
+ let path_imports = shortest_path_filtered(&graph, 1, 3, &["IMPORTS"]).expect("shortest");
201
+ assert_eq!(path_imports, Some(vec![1, 4, 3]));
202
+ }
203
+
204
+ #[test]
205
+ fn test_shortest_path_filtered_returns_none_when_kind_excludes_only_path() {
206
+ let edges = vec![(1, 2, "IMPORTS"), (2, 3, "IMPORTS")];
207
+ let graph = build_typed_graph(&edges);
208
+ let path = shortest_path_filtered(&graph, 1, 3, &["CALL"]).expect("shortest");
209
+ assert_eq!(path, None);
210
+ }
211
+
212
+ #[test]
213
+ fn test_shortest_path_filtered_empty_allowed_types_returns_none() {
214
+ let edges = vec![(1, 2, "CALL"), (2, 3, "CALL")];
215
+ let graph = build_typed_graph(&edges);
216
+ let path = shortest_path_filtered(&graph, 1, 3, &[]).expect("shortest");
217
+ assert_eq!(path, None);
218
+ }
219
+
220
+ #[test]
221
+ fn test_shortest_path_filtered_same_node_returns_singleton() {
222
+ let edges = vec![(1, 2, "CALL")];
223
+ let graph = build_typed_graph(&edges);
224
+ let path = shortest_path_filtered(&graph, 1, 1, &["CALL"]).expect("shortest");
225
+ assert_eq!(path, Some(vec![1]));
226
+ }
@@ -3,6 +3,31 @@
3
3
  This file tracks releases of the `sqlitegraph` package on PyPI. The Rust
4
4
  crate of the same name has its own changelog at the repository root.
5
5
 
6
+ ## [0.2.0] - 2026-05-15
7
+
8
+ ### Added
9
+ - **`bfs(start, depth, edge_types=None, direction=None)`** — `bfs` now accepts
10
+ an optional `edge_types` list and `direction` (`"outgoing"` or
11
+ `"incoming"`). When `edge_types` is provided, traversal only follows edges
12
+ whose type is in the list, dispatching to the new
13
+ `GraphBackend::bfs_filtered`. With `edge_types=None`, behavior is unchanged
14
+ (outgoing traversal, all edge types).
15
+ - **`shortest_path(start, end, edge_types=None)`** — Optional `edge_types`
16
+ list restricts which edge types the path can traverse, dispatching to
17
+ `GraphBackend::shortest_path_filtered`. Empty list returns `None`.
18
+ - **`k_hop(start, depth, direction=None, edge_types=None)`** — The existing
19
+ `k_hop` now exposes `edge_types`, dispatching to
20
+ `GraphBackend::k_hop_filtered` when provided. Empty list returns an empty
21
+ result.
22
+ - **11 new pytest tests** in `tests/test_filtered_traversal.py` covering each
23
+ new kwarg plus backwards-compatibility checks for the old kwargless calls.
24
+
25
+ ### Notes
26
+ - Built against `sqlitegraph` (Rust) **v2.3.0**, which adds the underlying
27
+ `bfs_filtered` / `shortest_path_filtered` trait methods.
28
+ - All existing tests continue to pass without modification — the new kwargs
29
+ are strictly additive.
30
+
6
31
  ## [0.1.1] - 2026-05-15
7
32
 
8
33
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sqlitegraph-py"
3
- version = "0.1.1"
3
+ version = "0.2.0"
4
4
  edition = "2021"
5
5
  description = "Python bindings for sqlitegraph via PyO3"
6
6
  license = "GPL-3.0-only"