sqlitegraph 0.1.0__tar.gz → 0.1.1__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.
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/Cargo.lock +3 -3
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/PKG-INFO +20 -3
- sqlitegraph-0.1.1/README.md +44 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/pyproject.toml +1 -1
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/Cargo.toml +1 -1
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/index_api.rs +4 -3
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-py/CHANGELOG.md +10 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-py/Cargo.toml +1 -1
- sqlitegraph-0.1.1/sqlitegraph-py/README.md +44 -0
- sqlitegraph-0.1.1/sqlitegraph-py/examples/01_basic_crud.py +71 -0
- sqlitegraph-0.1.1/sqlitegraph-py/examples/02_graph_algorithms.py +99 -0
- sqlitegraph-0.1.1/sqlitegraph-py/examples/03_vector_search.py +66 -0
- sqlitegraph-0.1.1/sqlitegraph-py/examples/04_social_network.py +99 -0
- sqlitegraph-0.1.1/sqlitegraph-py/examples/05_file_backed.py +56 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-py/src/lib.rs +3 -1
- sqlitegraph-0.1.0/README.md +0 -27
- sqlitegraph-0.1.0/sqlitegraph-core/src/config/config.rs +0 -82
- sqlitegraph-0.1.0/sqlitegraph-py/README.md +0 -27
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/Cargo.toml +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/python/sqlitegraph/__init__.py +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/python/sqlitegraph/_native.pyi +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/python/sqlitegraph/py.typed +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/.gitignore +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/BLOCK_AWARE_CACHE_BEHAVIOR_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/BLOCK_LOCALITY_PROTOTYPE_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/BUG_10K_INVESTIGATION_SUMMARY.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/BUG_SNAPSHOTID_SQLITE_BACKEND.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/CACHE_CAPACITY_SWEEP_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/CACHE_CLONE_FIX_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/CHANGELOG.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/COLD_PATH_FORENSICS_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/COLD_WARM_BENCHMARK_SPLIT_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/EDGE_CORRUPTION_ROOT_CAUSE.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/LICENSE +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/MAIN_BENCHMARK_RERUN_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/NODE_PAGE_OVERFLOW_FIX_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/PAGE_ID_COLLISION_ROOT_CAUSE.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/PHASE3_NODE_PAGE_CACHE_FIX_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/PHYSICAL_BLOCK_PLACEMENT_PROTOTYPE_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/README.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/REBUILD_INDEXES_FIX_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/REOPEN_CORRUPTION_FORENSICS.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/V3_10K_NODE_BUG_FIX.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/V3_FILE_IO_COORDINATION.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/V3_FORENSIC_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/V3_REGRESSION_SWEEP_REPORT.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/adaptive_page_simple.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/adjlist_benchmark.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/algo_benchmarks.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/backend_comparison.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/bench_utils.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/bfs.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/cold_cache.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/comparative_benchmark.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/comprehensive_performance.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/compression_benchmark.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/concurrent_access.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/connection_pool.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/graph_generators.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/graph_theory_benchmarks.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/hnsw.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/hnsw_multilayer.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/insert.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/k_hop.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/memory_profiling.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/mvcc_benchmarks.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/native_disk_io.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/parallel_bfs.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/read_path_benchmarks.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/real_datasets.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/regression_memory.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/regression_non_chain_patterns.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/regression_pubsub_memory.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/regression_pubsub_non_chain.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/regression_pubsub_write_cost.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/regression_write_cost.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/sqlite_v3_comparison.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/v3_algorithm_benchmarks.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/v3_backend_benchmarks.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/benches/wal_recovery_benchmarks.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/clippy.toml +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/core.d +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/debug_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/HNSW_DEVELOPMENT_RULES.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/HNSW_VECTOR_INTEGRATION_FUTURE_ROADMAP.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/SEQUENTIAL_IO_PERFORMANCE.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/WAL_MODE_IMPLEMENTATION_GUIDE.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase-40-benchmark-report.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase10_performance_tuning.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase11_native_perf_plan.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase12_optimization_plan.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase14_step9_khop_corruption_codebase_mapping.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase29_step7_mmap_preaudit_notes.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase5_real_adjacency.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase6_implementation_status.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase6_native_graphbackend_plan.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/phase7_native_backend_refactor.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/docs/superpowers/plans/2026-04-23-task-1-analysis.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/algo_benchmark.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/basic_functionality_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/batch_bench.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/batch_stress_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/bench_parallel_bfs.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/block_locality_benchmark.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/cache_capacity_benchmark.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/cache_clone_forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/cache_perf_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/cold_path_decomposition.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/compression_analysis.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/compression_detailed.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/compression_diagnostics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/crash_test_child.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/debug_buffer_error.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/get_node_cache_sweep.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/phase53_1_execution.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/phase55_simple_benchmark.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/reopen_corruption_repro.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_100k.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_adaptive_pages.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_allocator_startup.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_batch_simple.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_binary_search.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_btree_100k.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_cache_warm.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_chunked_bfs.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_delta_encoding.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_direct_backend_benchmark.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_direct_edgestore.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_edge_store_direct.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_edgestore_perf.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_index_restore.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_index_staleness.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_lazy_decode.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_lock_overhead.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_native_edge.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_neighbors_cache.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_neighbors_detailed.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_neighbors_profile.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_open_detailed_timing.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_open_roundtrip.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_open_stage_timing.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_performance_comparison.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_rwlock_overhead.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_sqlite_neighbors_perf.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_v3_neighbors_perf.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/test_vec_clone.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/v3_forensic_page_analysis.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/v3_forensics_example.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/v3_get_node_profile.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/v3_offset_forensic.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/v3_perf_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/v3_readonly_profile.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/examples/v3_reopen_verify.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/libtest_syntax.rlib +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/manual.md +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/snapshot_export/snapshot_1766284406.v2 +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/snapshot_export/snapshot_1766284420.v2 +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/sqlitegraph_bench.json +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/backend/centrality.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/backend/graph_ops.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/backend/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/backend/traversal.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/call_graph_analysis.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/centrality.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/community.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/control_dependence.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/critical_path.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/cut_partition.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/cycle_basis.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/dominance_frontiers.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/dominators.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/graph_diff.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/graph_rewriting.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/graph_similarity.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/natural_loops.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/observability.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/path_enumeration.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/post_dominators.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/program_slicing.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/reachability.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/scc.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/structure.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/subgraph_isomorphism.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/taint_analysis.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/topological_sort.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/transitive_closure.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/transitive_reduction.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/algo/wcc.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/api_ergonomics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/constants.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/cpu_tuning.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/types/aliases.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/types/cpu_profile.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/types/errors.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/types/flags.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/types/kv_types.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/types/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/types/utils.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/algorithm/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/algorithm/parallel_bfs.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/allocator.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/backend.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/btree.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/compact_edge_record.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/compression/delta.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/compression/edge_delta.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/compression/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/compression/varint.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/constants.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/edge_compat.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/file_coordinator.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/header.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/index/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/index/page.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/index_persistence.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/kind_index.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/kv_store/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/kv_store/store.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/kv_store/types.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/lazy_init_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/name_index.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/node/block_cache.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/node/cache.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/node/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/node/page.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/node/record.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/node/store.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/node/tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/pubsub/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/pubsub/publisher.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/pubsub/types.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/storage/adaptive_page.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/storage/media_detector.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/storage/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/string_table/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/string_table/table.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/string_table/tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/tests/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/wal.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/native/v3/write_batch.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/sqlite/helpers.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/sqlite/impl_.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/sqlite/kv_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/sqlite/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/sqlite/pubsub_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend/sqlite/types.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/backend_selector.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/bench_gates.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/bench_meta.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/bench_regression.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/bench_utils.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/bfs.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/cache.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/client.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/config/factory.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/config/graph_config.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/config/kinds.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/config/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/config/native.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/config/sqlite.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/dependency_monitor.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/dsl.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/errors.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/fault_injection.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/adjacency.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/core.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/edge_ops.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/entity_ops.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/metrics/instrumented.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/metrics/metrics_core.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/metrics/metrics_snapshot.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/metrics/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/metrics/statement_tracker.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/metrics/utils.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/metrics_schema.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/pattern_matching.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/pool.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/snapshot.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph/types.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/graph_opt.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/batch_filter.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/builder.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/config.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/distance_functions.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/distance_metric.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/errors.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/index.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/index_internal.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/index_persist.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/layer.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/multilayer.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/neighborhood.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/serialization.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/simd.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/storage.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/v3_storage.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/hnsw/v3_storage_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/index.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/inference/engine.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/inference/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/inference/sampling.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/inference/simd.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/introspection.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/lib.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/multi_hop.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/mvcc.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine/matcher.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine/pattern.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine/property.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine/query.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine/tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine_cache/edge_validation.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine_cache/fast_path_detection.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine_cache/fast_path_execution.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine_cache/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/pattern_engine_cache/tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/progress.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/query.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/query_cache.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/reasoning.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/recovery.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/schema.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/src/snapshot.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/acid_regression_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/acid_snapshot_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/algo_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/backend_selector_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/bench_data_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/bench_gate_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/bench_gates_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/bench_meta_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/bench_report_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/benchmark_isolation_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/bfs_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/bincode_compatibility_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/cache_effectiveness_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/cache_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/check_write_path.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/cluster_offset_corruption_regression.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/cold_path_forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/debug_file_size.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/debug_index_rebuilding.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/debug_overflow.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/debug_scenario_c.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/deterministic_index_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/direct_file_read_corruption_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/doc_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/edge_corruption_minimal.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/edge_corruption_repro.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/edge_insertion_corruption_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/edge_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/entity_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/file_extension_debug.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/fuzz_common.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/get_node_forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/graph_node_existence_enforcement.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/graph_opt_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/helpers/mod.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/hnsw_persistence_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/index_persistence_integration.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/index_persistence_validation.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/index_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/instrumentation_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/integration_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/isolate_open_bug.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/json_parsing_diagnostics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/kv_durability_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/lib_api_smoke_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/multi_hop_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/multi_node_corruption_regression.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/mvcc_baseline_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/mvcc_concurrent_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/mvcc_edge_case_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/mvcc_snapshot_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/mvcc_wal_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/native_edge_insertion_regression.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/node_overflow_forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/node_read_forensics_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/node_slot_transaction_persistence.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/oom_reproduction_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/page_42_debug.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/page_write_debug.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/pattern_cache_fastpath_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/pattern_engine_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/pattern_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/perf_gate_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/perf_gate_v32_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/phase32_cluster_pipeline_reconstruction_tests_clean.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/phase44_2_cluster_size_contract_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/phase64_node_count_durability_regression.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/phase65_cluster_size_corruption_regression.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/phase73_node_count_corruption_capture.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/query_cache_performance_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/query_cache_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/query_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/recovery_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/regression_concurrent_traversal.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/reopen_corruption_investigation.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/reopen_integration_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/rowid_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/schema_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/snapshot_isolation_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/sqlite_reopen_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/sqlite_snapshot_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/test_10k_bug_reproduction.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/transaction_begin_corruption_proof.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/unsafe_invariants_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_algorithm_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_block_locality_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_btree_forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_check_nodepages.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_dump_page_headers.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_edge_durability_tdd.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_file_write_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_focused_perf.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_forensics_test.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_header_forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_insert_read_forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_integrity_check.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_kind_index_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_name_index_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_page_ownership_forensics.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_persistence_100.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_query_truth_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_regression_sweep.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_reopen_durability.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_sync_fix_validation.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/v3_verify_file_persistence.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/wal_mode_default_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/wal_tuning_tests.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-core/tests/write_buffer_coherence_regression.rs +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-py/.gitignore +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-py/tests/test_algo.py +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-py/tests/test_basic.py +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-py/tests/test_crud.py +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/sqlitegraph-py/tests/test_errors.py +0 -0
- {sqlitegraph-0.1.0 → sqlitegraph-0.1.1}/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.
|
|
1390
|
+
version = "2.2.5"
|
|
1391
1391
|
dependencies = [
|
|
1392
1392
|
"ahash",
|
|
1393
1393
|
"arc-swap",
|
|
@@ -1418,7 +1418,7 @@ dependencies = [
|
|
|
1418
1418
|
|
|
1419
1419
|
[[package]]
|
|
1420
1420
|
name = "sqlitegraph-cli"
|
|
1421
|
-
version = "2.1.
|
|
1421
|
+
version = "2.1.5"
|
|
1422
1422
|
dependencies = [
|
|
1423
1423
|
"anyhow",
|
|
1424
1424
|
"clap",
|
|
@@ -1428,7 +1428,7 @@ dependencies = [
|
|
|
1428
1428
|
|
|
1429
1429
|
[[package]]
|
|
1430
1430
|
name = "sqlitegraph-py"
|
|
1431
|
-
version = "0.1.
|
|
1431
|
+
version = "0.1.1"
|
|
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.
|
|
3
|
+
Version: 0.1.1
|
|
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,23 @@ g.add_edge(alice, order, "placed")
|
|
|
54
54
|
print(g.neighbors(alice))
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
## Examples
|
|
58
|
+
|
|
59
|
+
The [`examples/`](./examples/) directory contains runnable scripts:
|
|
60
|
+
|
|
61
|
+
| Example | What it shows |
|
|
62
|
+
|---------|---------------|
|
|
63
|
+
| [`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 |
|
|
65
|
+
| [`03_vector_search.py`](./examples/03_vector_search.py) | HNSW index creation, insert, search, bulk insert, index listing |
|
|
66
|
+
| [`04_social_network.py`](./examples/04_social_network.py) | Realistic network: influencers (PageRank), communities, connection paths, mutual follows |
|
|
67
|
+
| [`05_file_backed.py`](./examples/05_file_backed.py) | Persistent `Graph.open(path)`, checkpoint, reopen, cleanup |
|
|
68
|
+
|
|
69
|
+
Run any example from the repo root:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
cd sqlitegraph-py
|
|
73
|
+
source .venv/bin/activate
|
|
74
|
+
python examples/01_basic_crud.py
|
|
75
|
+
```
|
|
59
76
|
|
|
@@ -0,0 +1,44 @@
|
|
|
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
|
+
## Examples
|
|
27
|
+
|
|
28
|
+
The [`examples/`](./examples/) directory contains runnable scripts:
|
|
29
|
+
|
|
30
|
+
| Example | What it shows |
|
|
31
|
+
|---------|---------------|
|
|
32
|
+
| [`01_basic_crud.py`](./examples/01_basic_crud.py) | Nodes, edges, update, delete, query by kind/pattern, degrees |
|
|
33
|
+
| [`02_graph_algorithms.py`](./examples/02_graph_algorithms.py) | BFS, k-hop, shortest path, PageRank, Louvain communities, connected components |
|
|
34
|
+
| [`03_vector_search.py`](./examples/03_vector_search.py) | HNSW index creation, insert, search, bulk insert, index listing |
|
|
35
|
+
| [`04_social_network.py`](./examples/04_social_network.py) | Realistic network: influencers (PageRank), communities, connection paths, mutual follows |
|
|
36
|
+
| [`05_file_backed.py`](./examples/05_file_backed.py) | Persistent `Graph.open(path)`, checkpoint, reopen, cleanup |
|
|
37
|
+
|
|
38
|
+
Run any example from the repo root:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
cd sqlitegraph-py
|
|
42
|
+
source .venv/bin/activate
|
|
43
|
+
python examples/01_basic_crud.py
|
|
44
|
+
```
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sqlitegraph"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.1"
|
|
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.
|
|
3
|
+
version = "2.2.5"
|
|
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"
|
|
@@ -526,10 +526,11 @@ impl crate::SqliteGraph {
|
|
|
526
526
|
.map_err(|e| crate::SqliteGraphError::invalid_input(format!("Failed to get index_id: {}", e)))?
|
|
527
527
|
.ok_or_else(|| crate::SqliteGraphError::invalid_input("Failed to get index_id after saving metadata".to_string()))?;
|
|
528
528
|
|
|
529
|
-
// Get database path to open a new connection for storage
|
|
529
|
+
// Get database path to open a new connection for storage.
|
|
530
|
+
// `database_list` columns: 0=seq, 1=name ("main"), 2=file (actual path).
|
|
530
531
|
let db_path = conn_ref.pragma_query_value(None, "database_list", |row| {
|
|
531
|
-
let
|
|
532
|
-
Ok(
|
|
532
|
+
let file: String = row.get(2)?;
|
|
533
|
+
Ok(file)
|
|
533
534
|
}).map_err(|e| crate::SqliteGraphError::invalid_input(format!("Failed to get database path: {}", e)))?;
|
|
534
535
|
|
|
535
536
|
let conn_for_storage = rusqlite::Connection::open(&db_path)
|
|
@@ -3,6 +3,16 @@
|
|
|
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.1.1] - 2026-05-15
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
- **`create_hnsw_index` now calls `hnsw_index_persistent`** — Previously the
|
|
10
|
+
Python binding called the non-persistent `hnsw_index()`, so vector indexes
|
|
11
|
+
created from Python were lost when the `Graph` object was dropped. Now it
|
|
12
|
+
calls `hnsw_index_persistent()`, matching the expected durability contract.
|
|
13
|
+
Requires `sqlitegraph` (Rust) **>= 2.2.5** (the release that fixes the
|
|
14
|
+
underlying `database_list` column read).
|
|
15
|
+
|
|
6
16
|
## [0.1.0] — unreleased
|
|
7
17
|
|
|
8
18
|
### Added
|
|
@@ -0,0 +1,44 @@
|
|
|
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
|
+
## Examples
|
|
27
|
+
|
|
28
|
+
The [`examples/`](./examples/) directory contains runnable scripts:
|
|
29
|
+
|
|
30
|
+
| Example | What it shows |
|
|
31
|
+
|---------|---------------|
|
|
32
|
+
| [`01_basic_crud.py`](./examples/01_basic_crud.py) | Nodes, edges, update, delete, query by kind/pattern, degrees |
|
|
33
|
+
| [`02_graph_algorithms.py`](./examples/02_graph_algorithms.py) | BFS, k-hop, shortest path, PageRank, Louvain communities, connected components |
|
|
34
|
+
| [`03_vector_search.py`](./examples/03_vector_search.py) | HNSW index creation, insert, search, bulk insert, index listing |
|
|
35
|
+
| [`04_social_network.py`](./examples/04_social_network.py) | Realistic network: influencers (PageRank), communities, connection paths, mutual follows |
|
|
36
|
+
| [`05_file_backed.py`](./examples/05_file_backed.py) | Persistent `Graph.open(path)`, checkpoint, reopen, cleanup |
|
|
37
|
+
|
|
38
|
+
Run any example from the repo root:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
cd sqlitegraph-py
|
|
42
|
+
source .venv/bin/activate
|
|
43
|
+
python examples/01_basic_crud.py
|
|
44
|
+
```
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""Basic CRUD operations with sqlitegraph.
|
|
2
|
+
|
|
3
|
+
Demonstrates: open, add_node, get_node, update_node, delete_node,
|
|
4
|
+
add_edge, get_edge, delete_edge, neighbors, node_degree.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from sqlitegraph import Graph
|
|
8
|
+
|
|
9
|
+
# Open an in-memory graph (fast, no persistence)
|
|
10
|
+
g = Graph.open_in_memory()
|
|
11
|
+
print("=== Basic CRUD ===\n")
|
|
12
|
+
|
|
13
|
+
# -- Nodes --
|
|
14
|
+
|
|
15
|
+
alice = g.add_node(kind="User", name="Alice", data={"age": 30, "city": "Berlin"})
|
|
16
|
+
bob = g.add_node(kind="User", name="Bob", data={"age": 25, "city": "Paris"})
|
|
17
|
+
project = g.add_node(kind="Project", name="GraphDB", data={"status": "active"})
|
|
18
|
+
company = g.add_node(kind="Company", name="TechCorp", data={"founded": 2020})
|
|
19
|
+
|
|
20
|
+
print(f"Created nodes: Alice={alice}, Bob={bob}, Project={project}, Company={company}")
|
|
21
|
+
|
|
22
|
+
# Read a node back
|
|
23
|
+
node = g.get_node(alice)
|
|
24
|
+
print(f"\nAlice's node: {node}")
|
|
25
|
+
|
|
26
|
+
# Update a node
|
|
27
|
+
g.update_node(bob, kind="User", name="Bob", data={"age": 26, "city": "Paris", "promoted": True})
|
|
28
|
+
updated = g.get_node(bob)
|
|
29
|
+
print(f"Updated Bob: {updated}")
|
|
30
|
+
|
|
31
|
+
# -- Edges --
|
|
32
|
+
|
|
33
|
+
# Alice works_on Project
|
|
34
|
+
e1 = g.add_edge(alice, project, "works_on", data={"role": "developer"})
|
|
35
|
+
# Project belongs_to Company
|
|
36
|
+
e2 = g.add_edge(project, company, "belongs_to", data={"ownership": 0.75})
|
|
37
|
+
# Alice employed_by Company
|
|
38
|
+
e3 = g.add_edge(alice, company, "employed_by", data={"department": "engineering"})
|
|
39
|
+
|
|
40
|
+
print(f"\nCreated edges: works_on={e1}, belongs_to={e2}, employed_by={e3}")
|
|
41
|
+
|
|
42
|
+
# Read an edge back
|
|
43
|
+
edge = g.get_edge(e1)
|
|
44
|
+
print(f"Edge {e1}: {edge['edge_type']} from {edge['from_id']} to {edge['to_id']}")
|
|
45
|
+
|
|
46
|
+
# -- Neighbors & degrees --
|
|
47
|
+
|
|
48
|
+
print(f"\nAlice's outgoing neighbors: {g.neighbors(alice, direction='outgoing')}")
|
|
49
|
+
print(f"Alice's incoming neighbors: {g.neighbors(alice, direction='incoming')}")
|
|
50
|
+
print(f"Alice's all neighbors: {g.neighbors(alice)}")
|
|
51
|
+
|
|
52
|
+
in_deg, out_deg = g.node_degree(alice)
|
|
53
|
+
print(f"\nAlice's degree: in={in_deg}, out={out_deg}")
|
|
54
|
+
|
|
55
|
+
# -- Query by kind / pattern --
|
|
56
|
+
|
|
57
|
+
users = g.nodes_by_kind("User")
|
|
58
|
+
print(f"\nAll users: {users}")
|
|
59
|
+
|
|
60
|
+
matches = g.nodes_by_name_pattern("Al*")
|
|
61
|
+
print(f"Names matching 'Al*': {matches}")
|
|
62
|
+
|
|
63
|
+
# -- Delete --
|
|
64
|
+
|
|
65
|
+
# Delete an edge
|
|
66
|
+
g.delete_edge(e3)
|
|
67
|
+
print(f"\nDeleted edge {e3}. Alice's neighbors now: {g.neighbors(alice)}")
|
|
68
|
+
|
|
69
|
+
# Delete a node (also deletes attached edges)
|
|
70
|
+
g.delete_node(bob)
|
|
71
|
+
print(f"Deleted Bob. Remaining node IDs: {g.node_ids()}")
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""Graph algorithms with sqlitegraph.
|
|
2
|
+
|
|
3
|
+
Demonstrates: bfs, k_hop, shortest_path, pagerank,
|
|
4
|
+
louvain_communities, connected_components.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from sqlitegraph import Graph
|
|
8
|
+
|
|
9
|
+
g = Graph.open_in_memory()
|
|
10
|
+
print("=== Graph Algorithms ===\n")
|
|
11
|
+
|
|
12
|
+
# Build a sample graph: two disjoint triangles plus a bridge
|
|
13
|
+
# Triangle 1: a-b-c-a
|
|
14
|
+
# Triangle 2: d-e-f-d
|
|
15
|
+
# Bridge: c-d
|
|
16
|
+
|
|
17
|
+
a = g.add_node(kind="Node", name="a")
|
|
18
|
+
b = g.add_node(kind="Node", name="b")
|
|
19
|
+
c = g.add_node(kind="Node", name="c")
|
|
20
|
+
d = g.add_node(kind="Node", name="d")
|
|
21
|
+
e = g.add_node(kind="Node", name="e")
|
|
22
|
+
f = g.add_node(kind="Node", name="f")
|
|
23
|
+
|
|
24
|
+
for u, v in [(a, b), (b, c), (c, a)]:
|
|
25
|
+
g.add_edge(u, v, "link")
|
|
26
|
+
for u, v in [(d, e), (e, f), (f, d)]:
|
|
27
|
+
g.add_edge(u, v, "link")
|
|
28
|
+
g.add_edge(c, d, "bridge")
|
|
29
|
+
|
|
30
|
+
print("Graph: two triangles linked by a bridge (c-d)")
|
|
31
|
+
|
|
32
|
+
# -- BFS --
|
|
33
|
+
|
|
34
|
+
reached = g.bfs(a, depth=2)
|
|
35
|
+
print(f"\nBFS from a (depth=2): {sorted(reached)}")
|
|
36
|
+
|
|
37
|
+
# -- k-hop --
|
|
38
|
+
|
|
39
|
+
khop = g.k_hop(a, depth=2)
|
|
40
|
+
print(f"k-hop from a (depth=2): {sorted(khop)}")
|
|
41
|
+
|
|
42
|
+
# -- Shortest path --
|
|
43
|
+
|
|
44
|
+
path = g.shortest_path(a, f)
|
|
45
|
+
print(f"\nShortest path a -> f: {path}")
|
|
46
|
+
|
|
47
|
+
path = g.shortest_path(a, e)
|
|
48
|
+
print(f"Shortest path a -> e: {path}")
|
|
49
|
+
|
|
50
|
+
# No connection possible if we delete the bridge
|
|
51
|
+
g.delete_edge(g.get_edge(7)["id"] if False else 7) # edge IDs are 1-based
|
|
52
|
+
# Actually let's just show unreachable
|
|
53
|
+
isolated = g.add_node(kind="Node", name="isolated")
|
|
54
|
+
no_path = g.shortest_path(a, isolated)
|
|
55
|
+
print(f"Shortest path a -> isolated (no edge): {no_path}")
|
|
56
|
+
|
|
57
|
+
# -- PageRank --
|
|
58
|
+
|
|
59
|
+
# Build a directed cycle for PageRank: a->b->c->a
|
|
60
|
+
h = Graph.open_in_memory()
|
|
61
|
+
na = h.add_node(kind="Page", name="A")
|
|
62
|
+
nb = h.add_node(kind="Page", name="B")
|
|
63
|
+
nc = h.add_node(kind="Page", name="C")
|
|
64
|
+
h.add_edge(na, nb, "links")
|
|
65
|
+
h.add_edge(nb, nc, "links")
|
|
66
|
+
h.add_edge(nc, na, "links")
|
|
67
|
+
|
|
68
|
+
scores = h.pagerank(damping=0.85, iterations=20)
|
|
69
|
+
print("\n--- PageRank (cycle of 3) ---")
|
|
70
|
+
for nid, score in scores:
|
|
71
|
+
node = h.get_node(nid)
|
|
72
|
+
print(f" {node['name']}: {score:.6f}")
|
|
73
|
+
|
|
74
|
+
# -- Louvain Communities --
|
|
75
|
+
|
|
76
|
+
communities = g.louvain_communities(max_iterations=10)
|
|
77
|
+
print("\n--- Louvain Communities ---")
|
|
78
|
+
print(f"Found {len(communities)} communities:")
|
|
79
|
+
for i, comm in enumerate(communities):
|
|
80
|
+
names = [g.get_node(nid)["name"] for nid in comm]
|
|
81
|
+
print(f" Community {i}: {names}")
|
|
82
|
+
|
|
83
|
+
# -- Connected Components --
|
|
84
|
+
|
|
85
|
+
# Add an isolated pair to the first graph
|
|
86
|
+
g2 = Graph.open_in_memory()
|
|
87
|
+
x = g2.add_node(kind="Node", name="x")
|
|
88
|
+
y = g2.add_node(kind="Node", name="y")
|
|
89
|
+
z = g2.add_node(kind="Node", name="z")
|
|
90
|
+
g2.add_edge(x, y, "link") # component 1
|
|
91
|
+
# z is alone — but singletons aren't returned by connected_components
|
|
92
|
+
# unless they have self-loops, so this gives 1 component
|
|
93
|
+
|
|
94
|
+
components = g2.connected_components()
|
|
95
|
+
print("\n--- Connected Components ---")
|
|
96
|
+
print(f"Found {len(components)} component(s)")
|
|
97
|
+
for i, comp in enumerate(components):
|
|
98
|
+
names = [g2.get_node(nid)["name"] for nid in comp]
|
|
99
|
+
print(f" Component {i}: {names}")
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"""HNSW vector search with sqlitegraph.
|
|
2
|
+
|
|
3
|
+
Demonstrates: create_hnsw_index, insert_vector, search,
|
|
4
|
+
get_vector, vector_count, list_hnsw_indexes, get_hnsw_index.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from sqlitegraph import Graph
|
|
8
|
+
|
|
9
|
+
g = Graph.open_in_memory()
|
|
10
|
+
print("=== HNSW Vector Search ===\n")
|
|
11
|
+
|
|
12
|
+
# Create an HNSW index for 3-dimensional vectors using cosine similarity
|
|
13
|
+
idx = g.create_hnsw_index("embeddings", dimension=3, metric="cosine")
|
|
14
|
+
print(f"Created index: {idx.name()}")
|
|
15
|
+
|
|
16
|
+
# Insert some vectors
|
|
17
|
+
# These are simplified "document embeddings" — in practice you'd use
|
|
18
|
+
# an embedding model (e.g. sentence-transformers, OpenAI, etc.)
|
|
19
|
+
|
|
20
|
+
# "machine learning" direction
|
|
21
|
+
v_ml = idx.insert_vector([1.0, 0.8, 0.1])
|
|
22
|
+
# "deep learning" direction (similar to ML)
|
|
23
|
+
v_dl = idx.insert_vector([0.9, 0.85, 0.05])
|
|
24
|
+
# "baking" direction (unrelated)
|
|
25
|
+
v_bake = idx.insert_vector([0.1, 0.2, 1.0])
|
|
26
|
+
# "cooking" direction (similar to baking)
|
|
27
|
+
v_cook = idx.insert_vector([0.05, 0.15, 0.95])
|
|
28
|
+
|
|
29
|
+
print(f"Inserted vectors: ML={v_ml}, DL={v_dl}, Bake={v_bake}, Cook={v_cook}")
|
|
30
|
+
print(f"Total vectors in index: {idx.vector_count()}")
|
|
31
|
+
|
|
32
|
+
# Search for vectors similar to "machine learning"
|
|
33
|
+
query = [1.0, 0.9, 0.0] # close to ML/DL
|
|
34
|
+
top2 = idx.search(query, k=2)
|
|
35
|
+
print("\nSearch for [1.0, 0.9, 0.0] (top 2):")
|
|
36
|
+
for vid, distance in top2:
|
|
37
|
+
print(f" vector_id={vid}, distance={distance:.4f}")
|
|
38
|
+
|
|
39
|
+
# Search for vectors similar to "cooking/baking"
|
|
40
|
+
query2 = [0.0, 0.0, 1.0] # close to Bake/Cook
|
|
41
|
+
top2 = idx.search(query2, k=2)
|
|
42
|
+
print("\nSearch for [0.0, 0.0, 1.0] (top 2):")
|
|
43
|
+
for vid, distance in top2:
|
|
44
|
+
print(f" vector_id={vid}, distance={distance:.4f}")
|
|
45
|
+
|
|
46
|
+
# Retrieve a specific vector by ID
|
|
47
|
+
vec = idx.get_vector(v_ml)
|
|
48
|
+
print(f"\nVector {v_ml}: {vec}")
|
|
49
|
+
|
|
50
|
+
# List all indexes
|
|
51
|
+
print(f"\nAll HNSW indexes: {g.list_hnsw_indexes()}")
|
|
52
|
+
|
|
53
|
+
# Re-open the index by name
|
|
54
|
+
idx2 = g.get_hnsw_index("embeddings")
|
|
55
|
+
print(f"Re-opened index: {idx2.name()}, vectors: {idx2.vector_count()}")
|
|
56
|
+
|
|
57
|
+
# Bulk insert example
|
|
58
|
+
print("\n--- Bulk insert ---")
|
|
59
|
+
vectors = [
|
|
60
|
+
([0.5, 0.5, 0.0], None),
|
|
61
|
+
([0.6, 0.4, 0.0], {"tag": "ml"}),
|
|
62
|
+
([0.0, 0.0, 0.8], {"tag": "cooking"}),
|
|
63
|
+
]
|
|
64
|
+
bulk_ids = idx.bulk_insert_vectors(vectors)
|
|
65
|
+
print(f"Bulk inserted {len(bulk_ids)} vectors: {bulk_ids}")
|
|
66
|
+
print(f"Total vectors now: {idx.vector_count()}")
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""Social network analysis with sqlitegraph.
|
|
2
|
+
|
|
3
|
+
A realistic example: model a small social network, find influencers
|
|
4
|
+
via PageRank, detect communities via Louvain, and find connection paths.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from sqlitegraph import Graph
|
|
8
|
+
|
|
9
|
+
g = Graph.open_in_memory()
|
|
10
|
+
print("=== Social Network Analysis ===\n")
|
|
11
|
+
|
|
12
|
+
# Create people
|
|
13
|
+
people = {
|
|
14
|
+
"alice": g.add_node(kind="Person", name="Alice", data={"role": "engineer"}),
|
|
15
|
+
"bob": g.add_node(kind="Person", name="Bob", data={"role": "designer"}),
|
|
16
|
+
"carol": g.add_node(kind="Person", name="Carol", data={"role": "manager"}),
|
|
17
|
+
"dave": g.add_node(kind="Person", name="Dave", data={"role": "engineer"}),
|
|
18
|
+
"eve": g.add_node(kind="Person", name="Eve", data={"role": "analyst"}),
|
|
19
|
+
"frank": g.add_node(kind="Person", name="Frank", data={"role": "intern"}),
|
|
20
|
+
"grace": g.add_node(kind="Person", name="Grace", data={"role": "cto"}),
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
# Create follows edges (directed: A follows B)
|
|
24
|
+
follows = [
|
|
25
|
+
("alice", "bob"), # alice follows bob
|
|
26
|
+
("alice", "carol"), # alice follows carol
|
|
27
|
+
("bob", "carol"), # bob follows carol
|
|
28
|
+
("carol", "grace"), # carol follows grace (the CTO)
|
|
29
|
+
("dave", "alice"), # dave follows alice
|
|
30
|
+
("dave", "bob"), # dave follows bob
|
|
31
|
+
("eve", "carol"), # eve follows carol
|
|
32
|
+
("frank", "alice"), # frank follows alice
|
|
33
|
+
("frank", "dave"), # frank follows dave
|
|
34
|
+
("grace", "carol"), # grace follows carol (mutual)
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
for follower, followee in follows:
|
|
38
|
+
g.add_edge(people[follower], people[followee], "follows")
|
|
39
|
+
|
|
40
|
+
print("Social network created:")
|
|
41
|
+
print(f" People: {len(people)}")
|
|
42
|
+
print(f" Follows edges: {len(follows)}")
|
|
43
|
+
|
|
44
|
+
# -- Find influencers with PageRank --
|
|
45
|
+
|
|
46
|
+
scores = g.pagerank(damping=0.85, iterations=50)
|
|
47
|
+
print("\n--- Influencers (PageRank) ---")
|
|
48
|
+
# Sort by score descending
|
|
49
|
+
ranked = sorted(scores, key=lambda x: x[1], reverse=True)
|
|
50
|
+
for nid, score in ranked:
|
|
51
|
+
name = g.get_node(nid)["name"]
|
|
52
|
+
in_deg, out_deg = g.node_degree(nid)
|
|
53
|
+
print(f" {name:6s}: score={score:.4f} (in={in_deg}, out={out_deg})")
|
|
54
|
+
|
|
55
|
+
# -- Find communities --
|
|
56
|
+
|
|
57
|
+
communities = g.louvain_communities(max_iterations=10)
|
|
58
|
+
print("\n--- Communities (Louvain) ---")
|
|
59
|
+
print(f"Found {len(communities)} communities:")
|
|
60
|
+
for i, comm in enumerate(communities):
|
|
61
|
+
names = [g.get_node(nid)["name"] for nid in comm]
|
|
62
|
+
print(f" Community {i}: {', '.join(names)}")
|
|
63
|
+
|
|
64
|
+
# -- Find connection paths --
|
|
65
|
+
|
|
66
|
+
print("\n--- Connection Paths ---")
|
|
67
|
+
path = g.shortest_path(people["frank"], people["grace"])
|
|
68
|
+
if path:
|
|
69
|
+
names = [g.get_node(nid)["name"] for nid in path]
|
|
70
|
+
print(f" Frank -> Grace: {' -> '.join(names)}")
|
|
71
|
+
else:
|
|
72
|
+
print(" Frank -> Grace: no path")
|
|
73
|
+
|
|
74
|
+
path = g.shortest_path(people["eve"], people["dave"])
|
|
75
|
+
if path:
|
|
76
|
+
names = [g.get_node(nid)["name"] for nid in path]
|
|
77
|
+
print(f" Eve -> Dave: {' -> '.join(names)}")
|
|
78
|
+
else:
|
|
79
|
+
print(" Eve -> Dave: no path")
|
|
80
|
+
|
|
81
|
+
# -- Mutual follows --
|
|
82
|
+
|
|
83
|
+
print("\n--- Mutual Follows ---")
|
|
84
|
+
for name_a, nid_a in people.items():
|
|
85
|
+
for name_b, nid_b in people.items():
|
|
86
|
+
if name_a >= name_b:
|
|
87
|
+
continue
|
|
88
|
+
a_follows_b = nid_b in g.neighbors(nid_a, direction="outgoing")
|
|
89
|
+
b_follows_a = nid_a in g.neighbors(nid_b, direction="outgoing")
|
|
90
|
+
if a_follows_b and b_follows_a:
|
|
91
|
+
print(f" {name_a.title()} <-> {name_b.title()}")
|
|
92
|
+
|
|
93
|
+
# -- Who follows the CTO? --
|
|
94
|
+
|
|
95
|
+
grace_id = people["grace"]
|
|
96
|
+
followers_of_cto = g.neighbors(grace_id, direction="incoming")
|
|
97
|
+
print("\n--- Followers of Grace (CTO) ---")
|
|
98
|
+
for nid in followers_of_cto:
|
|
99
|
+
print(f" {g.get_node(nid)['name']}")
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Persistent file-backed graph with sqlitegraph.
|
|
2
|
+
|
|
3
|
+
Demonstrates: Graph.open(path), checkpoint, reopen, and data durability.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import tempfile
|
|
8
|
+
|
|
9
|
+
from sqlitegraph import Graph
|
|
10
|
+
|
|
11
|
+
# Use a temporary file for the demo
|
|
12
|
+
db_path = os.path.join(tempfile.gettempdir(), "sqlitegraph_demo.db")
|
|
13
|
+
print("=== File-Backed Graph ===\n")
|
|
14
|
+
print(f"Database path: {db_path}\n")
|
|
15
|
+
|
|
16
|
+
# Clean up any previous demo file
|
|
17
|
+
if os.path.exists(db_path):
|
|
18
|
+
os.remove(db_path)
|
|
19
|
+
|
|
20
|
+
# -- Create and populate --
|
|
21
|
+
|
|
22
|
+
g = Graph.open(db_path)
|
|
23
|
+
print("Created file-backed graph.")
|
|
24
|
+
|
|
25
|
+
alice = g.add_node(kind="User", name="Alice", data={"age": 30})
|
|
26
|
+
bob = g.add_node(kind="User", name="Bob", data={"age": 25})
|
|
27
|
+
project = g.add_node(kind="Project", name="GraphDB")
|
|
28
|
+
|
|
29
|
+
g.add_edge(alice, project, "works_on")
|
|
30
|
+
g.add_edge(bob, project, "works_on")
|
|
31
|
+
|
|
32
|
+
print(f"Added {len(g.node_ids())} nodes and edges.")
|
|
33
|
+
|
|
34
|
+
# Checkpoint to ensure data is flushed
|
|
35
|
+
g.checkpoint()
|
|
36
|
+
print("Checkpoint complete.\n")
|
|
37
|
+
|
|
38
|
+
# -- Re-open and verify --
|
|
39
|
+
|
|
40
|
+
g2 = Graph.open(db_path)
|
|
41
|
+
print("Re-opened graph from disk.")
|
|
42
|
+
|
|
43
|
+
print(f"Node count: {len(g2.node_ids())}")
|
|
44
|
+
print(f"Nodes by kind 'User': {g2.nodes_by_kind('User')}")
|
|
45
|
+
|
|
46
|
+
# Retrieve Alice
|
|
47
|
+
users = g2.nodes_by_kind("User")
|
|
48
|
+
for uid in users:
|
|
49
|
+
node = g2.get_node(uid)
|
|
50
|
+
print(f" {node['name']}: {node['data']}")
|
|
51
|
+
|
|
52
|
+
# -- Clean up --
|
|
53
|
+
|
|
54
|
+
if os.path.exists(db_path):
|
|
55
|
+
os.remove(db_path)
|
|
56
|
+
print(f"\nCleaned up {db_path}")
|
|
@@ -379,7 +379,9 @@ impl Graph {
|
|
|
379
379
|
let index_name = {
|
|
380
380
|
let this = slf.borrow();
|
|
381
381
|
let graph = this.backend.graph();
|
|
382
|
-
let mut indexes = graph
|
|
382
|
+
let mut indexes = graph
|
|
383
|
+
.hnsw_index_persistent(&name, config)
|
|
384
|
+
.map_err(into_pyerr)?;
|
|
383
385
|
let index = indexes
|
|
384
386
|
.get_mut(&name)
|
|
385
387
|
.ok_or_else(|| BackendError::new_err("Index not found after creation"))?;
|
sqlitegraph-0.1.0/README.md
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
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
|
-
A polished README with vector-search and code-metadata examples will land
|
|
27
|
-
alongside the first PyPI release.
|