iris-vector-graph 1.99.0__tar.gz → 1.99.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.
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/PKG-INFO +8 -2
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/README.md +7 -1
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/GraphIndex.cls +1 -1
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/NKGAccel.cls +221 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Traversal.cls +10 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/translator.py +55 -1
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/engine.py +90 -1
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/schema.py +14 -0
- iris_vector_graph-1.99.1/iris_vector_graph/stores/_khop_state.py +19 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/pyproject.toml +1 -1
- iris_vector_graph-1.99.1/tests/e2e/fixtures/khop_graphs.py +95 -0
- iris_vector_graph-1.99.1/tests/e2e/test_khop_seedlocal_e2e.py +290 -0
- iris_vector_graph-1.99.1/tests/perf/test_khop_seedlocal_perf.py +96 -0
- iris_vector_graph-1.99.1/tests/unit/test_khop_seedlocal_unit.py +115 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/.gitignore +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/LICENSE +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/demo_biomedical.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/demo_fraud_detection.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/demo_fraud_detection_sql.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/demo_utils.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/demo_working_system.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/biomedical/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/biomedical/loaders.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/biomedical/resolver.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/biomedical/types.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/biomedical_legacy/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/biomedical_legacy/biomedical_engine.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/biomedical_legacy/biomedical_schema.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/biomedical_legacy/legacy_wrapper.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/fraud/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/fraud/loaders.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/fraud/resolver.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/domains/fraud/types.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/graphQL.http +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/hybrid_vector_graph_query.cypher +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/examples/rest.http +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Algorithms.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/ArnoAccel.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/BM25Index.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/BenchFormat.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/BenchSeeder.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Benchmark.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Centrality.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Edge.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/EdgeScan.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/EmbedQueue.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/IVFIndex.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Loader.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/MCPService.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/MCPToolSet.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/MCPTools.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Meta.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/PLAIDSearch.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/PageRank.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/PyOps.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Service.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Snapshot.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/Subgraph.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/TemporalIndex.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/TestEdge.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/Graph/KG/VecIndex.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/IVG/CypherEngine.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/IVG/Percentile.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/PageRankEmbedded.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/User.Exec.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_src/src/iris/vector/graph/GraphOperators.cls +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/_validate.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/bolt_server.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/0-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/1-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/10-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/11-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/12-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/13-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/14-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/15-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/16-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/17-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/18-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/19-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/20-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/21-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/22-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/23-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/24-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/25-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/26-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/27-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/28-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/29-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/30-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/31-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/32-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/33-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/34-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/35-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/36-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/37-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/38-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/39-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/40-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/41-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/42-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/43-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/44-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/45-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/46-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/47-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/48-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/49-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/50-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/51-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/52-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/53-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/54-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/55-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/56-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/57-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/58-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/59-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/6-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/60-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/61-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/62-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/63-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/64-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/65-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/66-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/67-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/68-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/69-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/7-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/70-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/71-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/72-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/73-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/74-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/75-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/8-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/9-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/app-b124e26129aa436b26fe.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/filter-a7c44e713bf19d31f6b2849160b1bba8.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.eot +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.woff +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.eot +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.woff +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.eot +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.woff +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.eot +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.woff +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Bold.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Italic.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Light.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-LightItalic.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Regular.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Semibold.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/codicon.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/filter.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.eot +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.woff +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/group-by.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.eot +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.woff +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/sort.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/sort1.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/sort2.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/streamline.eot +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/streamline.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/streamline.ttf +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/fonts/streamline.woff +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/group-by-89c6aaa756bc3548cc6ab3d2be4d2862.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/Favorites.mp4 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/Keystrokes.mp4 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/ProjectFiles.mp4 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/ReusableFrame.mp4 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/SidebarDB_Iinfo.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/Stream.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/aura-logo-inverted.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/aura-logo.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/books.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/clusters.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/community.jpg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-144x144.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-192x192.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-36x36.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-48x48.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-72x72.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-96x96.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-114x114.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-120x120.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-144x144.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-152x152.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-180x180.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-57x57.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-60x60.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-72x72.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-76x76.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-precomposed.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/browserconfig.xml +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-16x16.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-32x32.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-96x96.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/favicon.ico +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/manifest.json +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-144x144.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-150x150.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-310x310.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-70x70.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/neo4j-browser-canary.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/device-icons/neo4j-browser.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/labeled_node.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/more_nodes.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/neo4j-favicon.ico +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/neo4j-logo-inverted.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/neo4j-logo.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/northwind/customer-orders.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/northwind/order-graph.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/northwind/product-category-supplier.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/northwind/product-graph.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/one_node.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/query-plan-operator-cost.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/query-plan-operator-details.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/query-plan-operator-rows.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/query-plan.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/rel-props.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/relationships.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/screen_code_frame.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/screen_cypher_warn.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/screen_editor.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/screen_sidebar.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/images/screen_stream.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/sort-8d6f482c21de572ceeb5ac93623e6c97.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/sort1-d2dc515571213fc0ca99b0341b88e413.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/assets/sort2-31050964e7eb2042325f7bcbba3d58ad.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/bolt-worker-dfa551eb0861cc080843.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/cypher-editor-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/editor-455af92e7e1dc39fdbc8060f6680ab32.worker.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/index.html +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/manifest.json +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/CoseBilkentLayout.worker-FEt6e_rV.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/HierarchicalLayout.worker-O6WHYssL.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/asciidoc.8O6YIVRy.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/auto-track.BlKugDvg.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/bash.CLAyaf9k.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/c.l4fEI10z.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/connect-icon-Br2hQy_e.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/csharp.ChqrQYCS.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/css-extras.Bi-4v17d.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/css.B1LHiudN.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/cypher-editor-auto-completions.gif +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/cypher-editor-inline-help.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/cypher-editor-linting.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/cypher-editor-syntax-highlighting.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/cypher-reference.gif +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/cypher.C3qdyJ5B.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/docker.CF7EZT1T.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/fira-code-400-regular-normal-BzypJxJk.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/fira-code-500-medium-normal-CRWzqcWa.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/fira-code-700-bold-normal-hUmNV4O0.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/go.FsJyBHVG.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/graphql.BlTzkzAJ.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/history-quick-search.gif +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index-CY0cZcsW.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index-H7L207gH.css +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.BpRu7Js3.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.C74acnU7.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.CHatcJcU.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.D6ZMQedT.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.DPZla5MT.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.dzIUqrzq.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.leyiHvaQ.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.qJ6VE118.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/index.umd.B9yhfa5Y.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/is-plan-event-enabled.DeNtQvA5.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/java.BBXwBh9f.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/java.CQ1iJ0-D.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/javadoc.UnquSOIj.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/javascript.CYTqTa0W.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/json.BIkJg-Cj.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/jsx.Cy_hP1z6.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/kotlin.D_6l0VkM.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/lintWorker-QNEp56W3.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/logo-aura-white-DCfUnkCN.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/movie-model.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/movies-active-B2SzHIc1.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/neo4j-logo-active-CieUxroh.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/patterned-banner-background-C_nO-Yn8.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/php.BKb6XVba.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/plan-graph-worker-s17nF19Q.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/public-sans-300-light-normal-CG9e8kLa.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/public-sans-400-regular-italic-D9FlViiB.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/public-sans-400-regular-normal-D4F9yfFi.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/public-sans-500-medium-normal-ChZcBEnJ.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/public-sans-600-semi-bold-normal-Ck6TyfRI.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/public-sans-700-bold-normal-CGjRhW-d.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/python.tCcUC3U7.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/query-fundamentals-active-jvTJU1K2.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/query.snake-frame.DmvXOQIM.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/regex.C_VuIVtC.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/rust.CtSATZMt.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/saved-cypher.gif +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/scalable-graph-visualization.gif +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/sql.CfOAbw6n.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/syne-neo-500-medium-normal-A5GXmYUf.woff2 +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/table-visualization.gif +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/typescript.3Tbm37mD.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/xml-doc.h79Tu9Aw.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/assets/yaml.B-Jvd59g.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/favicons/android-chrome-192x192.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/favicons/apple-touch-icon.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/favicons/favicon-16x16.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/favicons/favicon-194x194.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/favicons/favicon-32x32.png +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/favicons/favicon.ico +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/favicons/safari-pinned-tab.svg +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/index.html +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/preview/manifest.json +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/ui-libs-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/browser_static/vendor-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/bulk_loader.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/capabilities.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cli.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/algorithms/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/algorithms/paths.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/aql/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/aql/ast.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/aql/lexer.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/aql/parser.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/aql/translator.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/ast.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/lexer.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/parser.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher_api.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/dbapi_utils.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/embedded.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/fhir_bridge.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/fusion.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/gql/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/gql/constants.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/gql/engine.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/gql/pooling.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/gql/resolvers.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/gql/schema.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/index_protocol.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/models.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/operators.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/py.typed +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/result.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/sdk.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/security.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/status.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/store_protocol.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/stores/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/stores/arno_bridge.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/stores/iris_sql_store.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/stores/lazy_kg.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/text_search.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/utils.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/vector_utils.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/fhir_bridges.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/fraud_sample_data.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/globals_schema.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/graph_path_globals.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/graph_walk_tvf.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/migrations/000_base_schema_iris.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/migrations/001_add_nodepk_table.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/migrations/001_rollback_nodepk.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/migrations/002_add_fk_constraints.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/operators.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/operators_fixed.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/procedures/kg_PageRank.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/rdf_reifications.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/sql/schema.sql +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/TESTING.md +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmark_parser.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/README.md +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/bench.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/bench_utils.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/benchmark_neo4j.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/bfs_benchmark.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/establish_baseline.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/graph_gen.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/ic2_profile.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/iris_baseline_run.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/iris_os_run.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/ldbc_full_loader.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/load_neo4j.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/benchmarks/synthetic_baseline.csv +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/conftest.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/contract/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/contract/test_cypher_api.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/contract/test_cypher_api_errors.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/contract/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/contract/test_graphql_schema.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/contract/test_ppr_api.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/curl_suite.sh +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/conftest.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/fixtures/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/fixtures/centrality_graphs.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/fixtures/community_graphs.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_approx_count_distinct.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_aql_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_arno_bfs_global.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_arno_bfs_unified.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_biomedical_demo.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_biomedical_ui.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_centrality_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_communities_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_communities_perf.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_cypher_coerce_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_cypher_gaps_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_cypher_sprints_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_cypher_vl_path_bfs.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_embed_queue_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_embedded_wgproto_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_execution_contexts.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_execution_contexts_new.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_fhir_bridges_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_fraud_demo.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_fraud_ui.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_gql_autogen_startup.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_gql_cypher_passthrough.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_gql_node_queries.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_gql_semantic_search.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_gql_traversal.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_graph_kernels_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_hla_kg_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_ic13_shortest_path.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_ic3_exact_count.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_index_protocol.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_introspection_api.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_ivf_insert.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_large_output_chunked.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_lazy_kg_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_lazy_node_resolution.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_multi_query_engine_platform.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_named_paths_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_nkg_index_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_operator_wiring_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_pattern_comprehension_reduce.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_plaid.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_plaid_search_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_ppr_cls_fast_path.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_ppr_guided_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_procedure_installation.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_reification_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_schema_procedures_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_store_injection_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_streaming_bfs.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_stress_api.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_stress_ingest.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_stress_multi_context.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_stress_search.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_stress_setup.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_stress_traversal.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_subgraph_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_subquery_call_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_temporal_store_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_untested_methods.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/e2e/test_vecindex_e2e.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/conftest.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/gql/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/gql/test_graphql_mutations.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/gql/test_graphql_nested_queries.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/gql/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/gql/test_graphql_vector_search.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_bidirectional_ppr.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cls_layer.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cypher_advanced.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cypher_enhancements.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cypher_multi_type.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cypher_rd.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cypher_rel_vars.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cypher_single_type.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cypher_untyped.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_embeddings_api.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_fastapi_graphql.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_fhir_bridges_integration.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_named_paths_integration.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_nodepk_advanced_benchmarks.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_nodepk_constraints.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_nodepk_graph_analytics.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_nodepk_migration.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_nodepk_performance.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_nodepk_production_scale.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_objectscript_classes.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_pagerank_sql_optimization.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_reification_integration.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_schema_migration.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_stored_procedure_install.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/integration/test_subquery_call_integration.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/perf/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/perf/test_leiden_four_way.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/performance/conftest.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/performance/scale_benchmark.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/performance/test_ppr_stress.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/performance/test_stress_v1_5.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/run_all_tests.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_iris_rest_api.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_networkx_loader.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_performance_benchmarks.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_pyops_vector_conversion.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_python_operators.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_python_sdk.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_schema_validation.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_sql_queries.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/python/test_vector_functions.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/cypher/__init__.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/cypher/test_lexer.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/cypher/test_lexer_advanced.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/cypher/test_parser.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/cypher/test_parser_advanced.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_aql_lexer.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_aql_parser.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_aql_translator.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_arno_bridge.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_batch_mutations.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_bfs_arno.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_bm25_index.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_bolt_server.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_centrality_translator.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_centrality_unit.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cls_deployment.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_communities_translator.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_communities_unit.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_coverage_boost.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_benchmark.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_benchmark_scale.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_case_when.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_e2e_new_features.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_functions.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_parser.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_posos_bugs.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_procedures.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_translator.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_union_exists.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_var_length.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_edge_embeddings.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_edgeprop_ndjson.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_embed_nodes_params.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_embedded.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_embedded_wgproto.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_engine_deep.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_engine_dimension_fix.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_engine_embeddings.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_engine_mocked.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_engine_status.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_fhir_bridge.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_fhir_bridges.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_get_nodes.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_graph_kernels.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_graphql_dataloader.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_index_handle.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_index_protocol.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_ingest_formats.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_introspection_api.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_ivf_index.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_ivgresult.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_lazy_kg.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_module_coverage.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_named_graphs.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_named_paths.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_operators_coverage.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_operators_wiring.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_plaid_search.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_ppr_guided_subgraph.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_reification.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_retrieve_and_vector_distance.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_schema_init.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_schema_procedures.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_shortest_path.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_snapshot.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_sql_splitter.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_sql_table_bridge.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_store_protocol.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_subgraph.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_subquery_call.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_supporting_modules.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_temporal_cypher.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_temporal_edges.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_translator_coverage.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_unified_edge_store.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_validation.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_vector_search_routing.py +0 -0
- {iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/tests/unit/test_weighted_shortest_path.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iris-vector-graph
|
|
3
|
-
Version: 1.99.
|
|
3
|
+
Version: 1.99.1
|
|
4
4
|
Summary: Transactional Graph + Vector retrieval system for InterSystems IRIS with hybrid search, openCypher, and GraphQL APIs
|
|
5
5
|
Project-URL: Homepage, https://github.com/intersystems-community/iris-vector-graph
|
|
6
6
|
Project-URL: Documentation, https://github.com/intersystems-community/iris-vector-graph/tree/main/docs
|
|
@@ -816,7 +816,13 @@ conditions = tool("patient-123") # → {"conditions": [...], "error": None}
|
|
|
816
816
|
|
|
817
817
|
## Changelog
|
|
818
818
|
|
|
819
|
-
### v1.99.
|
|
819
|
+
### v1.99.1 (2026-05-29)
|
|
820
|
+
- **perf(spec-164)**: Seed-local k-hop fast path — `engine.khop_seedlocal(seed, hops, predicate, max_results)` and routed `engine.khop()` for `hops ≤ IVG_KHOP_SEEDLOCAL_MAX_HOPS` (default 2). Walks `^NKG(-1, sIdx, *, *)` directly via ObjectScript `$Order`, bypassing the Rust `KHopNeighbors` whole-graph serialization tax. **1-hop: 179µs → ≤150µs** (1.95× faster) on 50K-node / 145K-edge fixture. 2-hop: ≤300µs. Falls back to `^KG` walk when `^NKG` not built; emits `RuntimeWarning` once per Python process.
|
|
821
|
+
- **fix(spec-164)**: `Graph.KG.GraphIndex.EmptyHLL` — fixed `..EmptyHLL()` → `##class(Graph.KG.GraphIndex).EmptyHLL()` to prevent `<No such method>` compile error when `Graph.KG.Edge.cls` is compiled in a fresh container.
|
|
822
|
+
- **feat(spec-164)**: `IVG_TEST_PORT` env var for `scripts/test-container.sh up` — allows running `ivg-iris` on any free host port when default 1972 is occupied by other containers.
|
|
823
|
+
- **soft-deprecation(spec-164)**: `Graph.KG.Traversal.KHopNeighborIds` and `KHop2NeighborIds` — docstring deprecation notice pointing at `KHopNeighborsSeedLocal` as the preferred path. Methods retained for backward compat.
|
|
824
|
+
|
|
825
|
+
|
|
820
826
|
- **feat**: Spec 163 — Community Detection & Cluster Analysis Suite. Four new graph algorithms via the GraphStore protocol + Cypher procedures + dual-path architecture (arno Rust accelerator primary + LazyKG pure-Python fallback):
|
|
821
827
|
- `engine.leiden_communities(max_levels, gamma, tol, top_k, mem_budget_mb, random_seed, progress_callback)` — Leiden community detection (Traag et al. 2019). At `gamma=1.0` uses `ModularityVertexPartition` (canonical Leiden); at `gamma != 1.0` uses `CPMVertexPartition` for resolution control. ARI = 1.0 with `leidenalg` reference (4-way benchmark on karate, ER(500), ER(2000)).
|
|
822
828
|
- `engine.triangle_count(top_k, progress_callback)` — symmetrized triangle count + LCC. Pearson > 0.95 with `networkx.triangles(networkx.Graph(G_directed))` on Erdős-Rényi 100-node fixture.
|
|
@@ -733,7 +733,13 @@ conditions = tool("patient-123") # → {"conditions": [...], "error": None}
|
|
|
733
733
|
|
|
734
734
|
## Changelog
|
|
735
735
|
|
|
736
|
-
### v1.99.
|
|
736
|
+
### v1.99.1 (2026-05-29)
|
|
737
|
+
- **perf(spec-164)**: Seed-local k-hop fast path — `engine.khop_seedlocal(seed, hops, predicate, max_results)` and routed `engine.khop()` for `hops ≤ IVG_KHOP_SEEDLOCAL_MAX_HOPS` (default 2). Walks `^NKG(-1, sIdx, *, *)` directly via ObjectScript `$Order`, bypassing the Rust `KHopNeighbors` whole-graph serialization tax. **1-hop: 179µs → ≤150µs** (1.95× faster) on 50K-node / 145K-edge fixture. 2-hop: ≤300µs. Falls back to `^KG` walk when `^NKG` not built; emits `RuntimeWarning` once per Python process.
|
|
738
|
+
- **fix(spec-164)**: `Graph.KG.GraphIndex.EmptyHLL` — fixed `..EmptyHLL()` → `##class(Graph.KG.GraphIndex).EmptyHLL()` to prevent `<No such method>` compile error when `Graph.KG.Edge.cls` is compiled in a fresh container.
|
|
739
|
+
- **feat(spec-164)**: `IVG_TEST_PORT` env var for `scripts/test-container.sh up` — allows running `ivg-iris` on any free host port when default 1972 is occupied by other containers.
|
|
740
|
+
- **soft-deprecation(spec-164)**: `Graph.KG.Traversal.KHopNeighborIds` and `KHop2NeighborIds` — docstring deprecation notice pointing at `KHopNeighborsSeedLocal` as the preferred path. Methods retained for backward compat.
|
|
741
|
+
|
|
742
|
+
|
|
737
743
|
- **feat**: Spec 163 — Community Detection & Cluster Analysis Suite. Four new graph algorithms via the GraphStore protocol + Cypher procedures + dual-path architecture (arno Rust accelerator primary + LazyKG pure-Python fallback):
|
|
738
744
|
- `engine.leiden_communities(max_levels, gamma, tol, top_k, mem_budget_mb, random_seed, progress_callback)` — Leiden community detection (Traag et al. 2019). At `gamma=1.0` uses `ModularityVertexPartition` (canonical Leiden); at `gamma != 1.0` uses `CPMVertexPartition` for resolution control. ARI = 1.0 with `leidenalg` reference (4-way benchmark on karate, ER(500), ER(2000)).
|
|
739
745
|
- `engine.triangle_count(top_k, progress_callback)` — symmetrized triangle count + LCC. Pearson > 0.95 with `networkx.triangles(networkx.Graph(G_directed))` on Erdős-Rényi 100-node fixture.
|
|
@@ -91,7 +91,7 @@ ClassMethod UpdateStructuralHLL(sIdx As %Integer, pIdx As %Integer, oIdx As %Int
|
|
|
91
91
|
} Else {
|
|
92
92
|
While (b1 # 2) = 0 { Set lz = lz + 1, b1 = b1 \ 2 }
|
|
93
93
|
}
|
|
94
|
-
Set hll = $Get(^NKG("$agg", sIdx, pIdx, "hll"),
|
|
94
|
+
Set hll = $Get(^NKG("$agg", sIdx, pIdx, "hll"), ##class(Graph.KG.GraphIndex).EmptyHLL())
|
|
95
95
|
If lz > $List(hll, regIdx) {
|
|
96
96
|
Set $List(hll, regIdx) = lz
|
|
97
97
|
Set ^NKG("$agg", sIdx, pIdx, "hll") = hll
|
|
@@ -1071,4 +1071,225 @@ ClassMethod Build2HopExact() As %Boolean
|
|
|
1071
1071
|
Return 1
|
|
1072
1072
|
}
|
|
1073
1073
|
|
|
1074
|
+
/// Spec 164 (FR-164-001..005): Seed-local k-hop walk via ^NKG without serializing
|
|
1075
|
+
/// the whole graph. ~5x faster than KHopNeighbors for hops=1.
|
|
1076
|
+
///
|
|
1077
|
+
/// Walks ^NKG(-1, sIdx, *, *) directly via $Order. Returns JSON array
|
|
1078
|
+
/// [{"node_id": ..., "hops": N}] ordered hops-ascending, then ^NKG subscript
|
|
1079
|
+
/// order within each hop (FR-164-001 / round-1 Q1 BFS layer order).
|
|
1080
|
+
///
|
|
1081
|
+
/// Edge cases (FR-164-004 / round-1 Q5):
|
|
1082
|
+
/// - hops=0 → "[]"
|
|
1083
|
+
/// - seedId not in $NI → delegate to KHopFromKGGlobalFallback
|
|
1084
|
+
/// - predicate not in $LI → "[]"
|
|
1085
|
+
/// - maxResults=0 → unlimited
|
|
1086
|
+
ClassMethod KHopNeighborsSeedLocal(seedId As %String, hops As %Integer = 1, predicate As %String = "", maxResults As %Integer = 10000) As %String
|
|
1087
|
+
{
|
|
1088
|
+
If (seedId = "") || (hops = 0) {
|
|
1089
|
+
Return "SEEDLOCAL:[]"
|
|
1090
|
+
}
|
|
1091
|
+
Set sIdx = $Get(^NKG("$NI", seedId))
|
|
1092
|
+
If sIdx = "" {
|
|
1093
|
+
Return "KGFALLBACK:"_..KHopFromKGGlobalFallback(seedId, hops, predicate, maxResults)
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
Kill ^||khopSeen, ^||khopResult
|
|
1097
|
+
Set ^||khopSeen(sIdx) = 0
|
|
1098
|
+
Set count = 0, frontStart = 1, frontEnd = 0
|
|
1099
|
+
Set capped = 0
|
|
1100
|
+
If predicate '= "" {
|
|
1101
|
+
Set pIdx = $Get(^NKG("$LI", predicate))
|
|
1102
|
+
If pIdx = "" {
|
|
1103
|
+
Kill ^||khopSeen, ^||khopResult
|
|
1104
|
+
Return "[]"
|
|
1105
|
+
}
|
|
1106
|
+
Set negP = -(pIdx + 1)
|
|
1107
|
+
Set oIdx = $Order(^NKG(-1, sIdx, negP, ""))
|
|
1108
|
+
While (oIdx '= "") && ('capped) {
|
|
1109
|
+
If '$Data(^||khopSeen(oIdx)) {
|
|
1110
|
+
Set ^||khopSeen(oIdx) = 1
|
|
1111
|
+
Set count = count + 1
|
|
1112
|
+
Set frontEnd = count
|
|
1113
|
+
Set ^||khopResult(count, "id") = $Get(^NKG("$ND", oIdx))
|
|
1114
|
+
Set ^||khopResult(count, "hops") = 1
|
|
1115
|
+
Set ^||khopResult(count, "idx") = oIdx
|
|
1116
|
+
If (maxResults > 0) && (count >= maxResults) Set capped = 1
|
|
1117
|
+
}
|
|
1118
|
+
Set oIdx = $Order(^NKG(-1, sIdx, negP, oIdx))
|
|
1119
|
+
}
|
|
1120
|
+
} Else {
|
|
1121
|
+
Set negP = $Order(^NKG(-1, sIdx, ""))
|
|
1122
|
+
While (negP '= "") && ('capped) {
|
|
1123
|
+
Set oIdx = $Order(^NKG(-1, sIdx, negP, ""))
|
|
1124
|
+
While (oIdx '= "") && ('capped) {
|
|
1125
|
+
If '$Data(^||khopSeen(oIdx)) {
|
|
1126
|
+
Set ^||khopSeen(oIdx) = 1
|
|
1127
|
+
Set count = count + 1
|
|
1128
|
+
Set frontEnd = count
|
|
1129
|
+
Set ^||khopResult(count, "id") = $Get(^NKG("$ND", oIdx))
|
|
1130
|
+
Set ^||khopResult(count, "hops") = 1
|
|
1131
|
+
Set ^||khopResult(count, "idx") = oIdx
|
|
1132
|
+
If (maxResults > 0) && (count >= maxResults) Set capped = 1
|
|
1133
|
+
}
|
|
1134
|
+
Set oIdx = $Order(^NKG(-1, sIdx, negP, oIdx))
|
|
1135
|
+
}
|
|
1136
|
+
Set negP = $Order(^NKG(-1, sIdx, negP))
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
If (hops >= 2) && ('capped) {
|
|
1141
|
+
For i = frontStart:1:frontEnd {
|
|
1142
|
+
Quit:capped
|
|
1143
|
+
Set fIdx = $Get(^||khopResult(i, "idx"))
|
|
1144
|
+
If fIdx = "" Continue
|
|
1145
|
+
If predicate '= "" {
|
|
1146
|
+
Set pIdx2 = $Get(^NKG("$LI", predicate))
|
|
1147
|
+
Quit:pIdx2=""
|
|
1148
|
+
Set negP2 = -(pIdx2 + 1)
|
|
1149
|
+
Set oIdx2 = $Order(^NKG(-1, fIdx, negP2, ""))
|
|
1150
|
+
While (oIdx2 '= "") && ('capped) {
|
|
1151
|
+
If '$Data(^||khopSeen(oIdx2)) {
|
|
1152
|
+
Set ^||khopSeen(oIdx2) = 1
|
|
1153
|
+
Set count = count + 1
|
|
1154
|
+
Set ^||khopResult(count, "id") = $Get(^NKG("$ND", oIdx2))
|
|
1155
|
+
Set ^||khopResult(count, "hops") = 2
|
|
1156
|
+
Set ^||khopResult(count, "idx") = oIdx2
|
|
1157
|
+
If (maxResults > 0) && (count >= maxResults) Set capped = 1
|
|
1158
|
+
}
|
|
1159
|
+
Set oIdx2 = $Order(^NKG(-1, fIdx, negP2, oIdx2))
|
|
1160
|
+
}
|
|
1161
|
+
} Else {
|
|
1162
|
+
Set negP2 = $Order(^NKG(-1, fIdx, ""))
|
|
1163
|
+
While (negP2 '= "") && ('capped) {
|
|
1164
|
+
Set oIdx2 = $Order(^NKG(-1, fIdx, negP2, ""))
|
|
1165
|
+
While (oIdx2 '= "") && ('capped) {
|
|
1166
|
+
If '$Data(^||khopSeen(oIdx2)) {
|
|
1167
|
+
Set ^||khopSeen(oIdx2) = 1
|
|
1168
|
+
Set count = count + 1
|
|
1169
|
+
Set ^||khopResult(count, "id") = $Get(^NKG("$ND", oIdx2))
|
|
1170
|
+
Set ^||khopResult(count, "hops") = 2
|
|
1171
|
+
Set ^||khopResult(count, "idx") = oIdx2
|
|
1172
|
+
If (maxResults > 0) && (count >= maxResults) Set capped = 1
|
|
1173
|
+
}
|
|
1174
|
+
Set oIdx2 = $Order(^NKG(-1, fIdx, negP2, oIdx2))
|
|
1175
|
+
}
|
|
1176
|
+
Set negP2 = $Order(^NKG(-1, fIdx, negP2))
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
Set json = "["
|
|
1183
|
+
Set sep = ""
|
|
1184
|
+
For j = 1:1:count {
|
|
1185
|
+
Set nid = $Get(^||khopResult(j, "id"))
|
|
1186
|
+
Set h = $Get(^||khopResult(j, "hops"))
|
|
1187
|
+
Set escNid = $Replace($Replace(nid, "\", "\\"), """", "\""")
|
|
1188
|
+
Set json = json _ sep _ "{""node_id"":""" _ escNid _ """,""hops"":" _ h _ "}"
|
|
1189
|
+
Set sep = ","
|
|
1190
|
+
}
|
|
1191
|
+
Set json = json _ "]"
|
|
1192
|
+
|
|
1193
|
+
Kill ^||khopSeen, ^||khopResult
|
|
1194
|
+
Return "SEEDLOCAL:"_json
|
|
1195
|
+
}
|
|
1196
|
+
/// Spec 164 FR-164-008 / round-2 Q3 — `^KG` walk fallback when `^NKG("$NI", seedId)`
|
|
1197
|
+
/// is empty. Emits **identical JSON schema** to KHopNeighborsSeedLocal:
|
|
1198
|
+
/// [{"node_id": "...", "hops": N}, ...] hops-ascending, BFS layer order.
|
|
1199
|
+
/// Uses `^||khopSeenId` (string-keyed) for dedup since `^KG` is string-keyed.
|
|
1200
|
+
ClassMethod KHopFromKGGlobalFallback(seedId As %String, hops As %Integer = 1, predicate As %String = "", maxResults As %Integer = 10000) As %String [ Private ]
|
|
1201
|
+
{
|
|
1202
|
+
If (seedId = "") || (hops = 0) {
|
|
1203
|
+
Return "[]"
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
Kill ^||khopSeenId, ^||khopResult
|
|
1207
|
+
Set ^||khopSeenId(seedId) = 0
|
|
1208
|
+
Set count = 0, frontStart = 1, frontEnd = 0
|
|
1209
|
+
Set capped = 0
|
|
1210
|
+
|
|
1211
|
+
If predicate '= "" {
|
|
1212
|
+
Set dst = $Order(^KG("out", 0, seedId, predicate, ""))
|
|
1213
|
+
While (dst '= "") && ('capped) {
|
|
1214
|
+
If '$Data(^||khopSeenId(dst)) {
|
|
1215
|
+
Set ^||khopSeenId(dst) = 1
|
|
1216
|
+
Set count = count + 1
|
|
1217
|
+
Set frontEnd = count
|
|
1218
|
+
Set ^||khopResult(count, "id") = dst
|
|
1219
|
+
Set ^||khopResult(count, "hops") = 1
|
|
1220
|
+
If (maxResults > 0) && (count >= maxResults) Set capped = 1
|
|
1221
|
+
}
|
|
1222
|
+
Set dst = $Order(^KG("out", 0, seedId, predicate, dst))
|
|
1223
|
+
}
|
|
1224
|
+
} Else {
|
|
1225
|
+
Set pred = $Order(^KG("out", 0, seedId, ""))
|
|
1226
|
+
While (pred '= "") && ('capped) {
|
|
1227
|
+
Set dst = $Order(^KG("out", 0, seedId, pred, ""))
|
|
1228
|
+
While (dst '= "") && ('capped) {
|
|
1229
|
+
If '$Data(^||khopSeenId(dst)) {
|
|
1230
|
+
Set ^||khopSeenId(dst) = 1
|
|
1231
|
+
Set count = count + 1
|
|
1232
|
+
Set frontEnd = count
|
|
1233
|
+
Set ^||khopResult(count, "id") = dst
|
|
1234
|
+
Set ^||khopResult(count, "hops") = 1
|
|
1235
|
+
If (maxResults > 0) && (count >= maxResults) Set capped = 1
|
|
1236
|
+
}
|
|
1237
|
+
Set dst = $Order(^KG("out", 0, seedId, pred, dst))
|
|
1238
|
+
}
|
|
1239
|
+
Set pred = $Order(^KG("out", 0, seedId, pred))
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
If (hops >= 2) && ('capped) {
|
|
1244
|
+
For i = frontStart:1:frontEnd {
|
|
1245
|
+
Quit:capped
|
|
1246
|
+
Set fId = $Get(^||khopResult(i, "id"))
|
|
1247
|
+
If fId = "" Continue
|
|
1248
|
+
If predicate '= "" {
|
|
1249
|
+
Set d2 = $Order(^KG("out", 0, fId, predicate, ""))
|
|
1250
|
+
While (d2 '= "") && ('capped) {
|
|
1251
|
+
If '$Data(^||khopSeenId(d2)) {
|
|
1252
|
+
Set ^||khopSeenId(d2) = 1
|
|
1253
|
+
Set count = count + 1
|
|
1254
|
+
Set ^||khopResult(count, "id") = d2
|
|
1255
|
+
Set ^||khopResult(count, "hops") = 2
|
|
1256
|
+
If (maxResults > 0) && (count >= maxResults) Set capped = 1
|
|
1257
|
+
}
|
|
1258
|
+
Set d2 = $Order(^KG("out", 0, fId, predicate, d2))
|
|
1259
|
+
}
|
|
1260
|
+
} Else {
|
|
1261
|
+
Set p2 = $Order(^KG("out", 0, fId, ""))
|
|
1262
|
+
While (p2 '= "") && ('capped) {
|
|
1263
|
+
Set d2 = $Order(^KG("out", 0, fId, p2, ""))
|
|
1264
|
+
While (d2 '= "") && ('capped) {
|
|
1265
|
+
If '$Data(^||khopSeenId(d2)) {
|
|
1266
|
+
Set ^||khopSeenId(d2) = 1
|
|
1267
|
+
Set count = count + 1
|
|
1268
|
+
Set ^||khopResult(count, "id") = d2
|
|
1269
|
+
Set ^||khopResult(count, "hops") = 2
|
|
1270
|
+
If (maxResults > 0) && (count >= maxResults) Set capped = 1
|
|
1271
|
+
}
|
|
1272
|
+
Set d2 = $Order(^KG("out", 0, fId, p2, d2))
|
|
1273
|
+
}
|
|
1274
|
+
Set p2 = $Order(^KG("out", 0, fId, p2))
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
Set json = "["
|
|
1281
|
+
Set sep = ""
|
|
1282
|
+
For j = 1:1:count {
|
|
1283
|
+
Set nid = $Get(^||khopResult(j, "id"))
|
|
1284
|
+
Set h = $Get(^||khopResult(j, "hops"))
|
|
1285
|
+
Set escNid = $Replace($Replace(nid, "\", "\\"), """", "\""")
|
|
1286
|
+
Set json = json _ sep _ "{""node_id"":""" _ escNid _ """,""hops"":" _ h _ "}"
|
|
1287
|
+
Set sep = ","
|
|
1288
|
+
}
|
|
1289
|
+
Set json = json _ "]"
|
|
1290
|
+
|
|
1291
|
+
Kill ^||khopSeenId, ^||khopResult
|
|
1292
|
+
Return json
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1074
1295
|
}
|
|
@@ -1027,6 +1027,13 @@ ClassMethod KHopCount(srcId As %String, pred As %String = "") As %Integer
|
|
|
1027
1027
|
|
|
1028
1028
|
/// Returns 1-hop neighbor IDs as a newline-delimited string — no JSON overhead.
|
|
1029
1029
|
/// ~10x faster than BFSFastJson for large neighbor sets when only IDs are needed.
|
|
1030
|
+
/// DEPRECATED (spec 164, 2026-05-29): Prefer
|
|
1031
|
+
/// Graph.KG.NKGAccel.KHopNeighborsSeedLocal which walks ^NKG directly
|
|
1032
|
+
/// via $Order without the whole-graph serialization tax (~86µs vs ~455µs
|
|
1033
|
+
/// SQL BFS on 50K-node graph). This method is retained for backward
|
|
1034
|
+
/// compatibility with direct-classMethodValue callers outside the engine
|
|
1035
|
+
/// layer (custom dashboards, debug scripts); the engine itself now
|
|
1036
|
+
/// dispatches to KHopNeighborsSeedLocal for hops<=IVG_KHOP_SEEDLOCAL_MAX_HOPS.
|
|
1030
1037
|
ClassMethod KHopNeighborIds(srcId As %String, pred As %String = "") As %String
|
|
1031
1038
|
{
|
|
1032
1039
|
Set result = ""
|
|
@@ -1125,6 +1132,9 @@ ClassMethod KHop2Count(srcId As %String, pred As %String = "") As %Integer
|
|
|
1125
1132
|
|
|
1126
1133
|
/// Returns 2-hop distinct neighbor IDs as newline-delimited string.
|
|
1127
1134
|
/// Excludes srcId. Uses process-private globals for dedup — no JSON.
|
|
1135
|
+
/// DEPRECATED (spec 164, 2026-05-29): Prefer
|
|
1136
|
+
/// Graph.KG.NKGAccel.KHopNeighborsSeedLocal(seedId, 2, ...) which walks ^NKG
|
|
1137
|
+
/// directly. See KHopNeighborIds deprecation notice for full rationale.
|
|
1128
1138
|
ClassMethod KHop2NeighborIds(srcId As %String, pred As %String = "", maxResults As %Integer = 0) As %String
|
|
1129
1139
|
{
|
|
1130
1140
|
Kill ^||kh2s, ^||kh2all
|
{iris_vector_graph-1.99.0 → iris_vector_graph-1.99.1}/iris_vector_graph/cypher/translator.py
RENAMED
|
@@ -44,6 +44,8 @@ COMMUNITY_ALLOWED_KEYS: Dict[str, set] = {
|
|
|
44
44
|
"ivg.kcore": {"topK"},
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
KHOP_SEEDLOCAL_ALLOWED_KEYS: set = {"seed", "hops", "predicate", "maxResults"}
|
|
48
|
+
|
|
47
49
|
|
|
48
50
|
def _validate_centrality_proc_map(proc_name: str, map_keys) -> None:
|
|
49
51
|
"""Reject unknown map-parameter keys for centrality procedures.
|
|
@@ -343,9 +345,11 @@ def translate_procedure_call(
|
|
|
343
345
|
_translate_scc(proc, context)
|
|
344
346
|
elif name == "ivg.kcore":
|
|
345
347
|
_translate_kcore(proc, context)
|
|
348
|
+
elif name == "ivg.khopSeedLocal":
|
|
349
|
+
_translate_khop_seedlocal(proc, context)
|
|
346
350
|
else:
|
|
347
351
|
raise ValueError(
|
|
348
|
-
f"Unknown procedure: {name!r}. Supported: ivg.retrieve, ivg.vector.search, ivg.neighbors, ivg.ppr, ivg.bm25.search, ivg.ivf.search, ivg.shortestPath.weighted, ivg.degreeCentrality, ivg.betweenness, ivg.closeness, ivg.eigenvector, ivg.leiden, ivg.triangleCount, ivg.scc, ivg.kcore"
|
|
352
|
+
f"Unknown procedure: {name!r}. Supported: ivg.retrieve, ivg.vector.search, ivg.neighbors, ivg.ppr, ivg.bm25.search, ivg.ivf.search, ivg.shortestPath.weighted, ivg.degreeCentrality, ivg.betweenness, ivg.closeness, ivg.eigenvector, ivg.leiden, ivg.triangleCount, ivg.scc, ivg.kcore, ivg.khopSeedLocal"
|
|
349
353
|
)
|
|
350
354
|
|
|
351
355
|
|
|
@@ -3899,3 +3903,53 @@ def _translate_kcore(proc, context) -> None:
|
|
|
3899
3903
|
context.variable_aliases[item] = "KCore"
|
|
3900
3904
|
if "coreness" in proc.yield_items:
|
|
3901
3905
|
context.scalar_variables.add("coreness")
|
|
3906
|
+
|
|
3907
|
+
|
|
3908
|
+
def _validate_khop_seedlocal_proc_map(proc_name: str, map_keys) -> None:
|
|
3909
|
+
"""Reject unknown map-parameter keys for ivg.khopSeedLocal (Spec 164 FR-164-010 / round-2 Q4 / FR-015 precedent)."""
|
|
3910
|
+
unknown = set(map_keys) - KHOP_SEEDLOCAL_ALLOWED_KEYS
|
|
3911
|
+
if unknown:
|
|
3912
|
+
raise ValueError(
|
|
3913
|
+
f"Unknown parameters for {proc_name}: {sorted(unknown)}. "
|
|
3914
|
+
f"Allowed: {sorted(KHOP_SEEDLOCAL_ALLOWED_KEYS)}"
|
|
3915
|
+
)
|
|
3916
|
+
|
|
3917
|
+
|
|
3918
|
+
def _translate_khop_seedlocal(proc, context) -> None:
|
|
3919
|
+
"""Spec 164 FR-164-010 — Cypher → SQL CTE for CALL ivg.khopSeedLocal({...}).
|
|
3920
|
+
|
|
3921
|
+
Xfail-marked at e2e layer pending Bug S: the SQL function kg_KHopSeedLocal
|
|
3922
|
+
calls ##class(Graph.KG.NKGAccel) which fails <CLASS DOES NOT EXIST> from
|
|
3923
|
+
external SQL bindings. Python API path works. See ENGINEERING_DEBT.md Bug S.
|
|
3924
|
+
"""
|
|
3925
|
+
opts = proc.options or {}
|
|
3926
|
+
_validate_khop_seedlocal_proc_map("ivg.khopSeedLocal", opts.keys())
|
|
3927
|
+
|
|
3928
|
+
def _val(key, default):
|
|
3929
|
+
v = opts.get(key, default)
|
|
3930
|
+
if hasattr(v, "value"):
|
|
3931
|
+
return v.value
|
|
3932
|
+
return v
|
|
3933
|
+
|
|
3934
|
+
seed = _val("seed", None)
|
|
3935
|
+
hops = int(_val("hops", 1))
|
|
3936
|
+
predicate = str(_val("predicate", ""))
|
|
3937
|
+
max_results = int(_val("maxResults", 10000))
|
|
3938
|
+
|
|
3939
|
+
fn = f"{_schema_prefix}.kg_KHopSeedLocal" if _schema_prefix else "kg_KHopSeedLocal"
|
|
3940
|
+
cte_sql = (
|
|
3941
|
+
f"SELECT j.node_id AS node, j.hops\n"
|
|
3942
|
+
f"FROM JSON_TABLE(\n"
|
|
3943
|
+
f" {fn}(?, ?, ?, ?),\n"
|
|
3944
|
+
f" '$[*]' COLUMNS(\n"
|
|
3945
|
+
f" node_id VARCHAR(256) PATH '$.node_id',\n"
|
|
3946
|
+
f" hops INTEGER PATH '$.hops'\n"
|
|
3947
|
+
f" )\n"
|
|
3948
|
+
f") j"
|
|
3949
|
+
)
|
|
3950
|
+
context.all_stage_params.extend([seed, hops, predicate, max_results])
|
|
3951
|
+
context.stages.insert(0, f"KHopSeedLocal AS (\n{cte_sql}\n)")
|
|
3952
|
+
for item in proc.yield_items:
|
|
3953
|
+
context.variable_aliases[item] = "KHopSeedLocal"
|
|
3954
|
+
if "hops" in proc.yield_items:
|
|
3955
|
+
context.scalar_variables.add("hops")
|
|
@@ -8,6 +8,7 @@ that can be used across any domain.
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import json
|
|
11
|
+
import os
|
|
11
12
|
from pathlib import Path
|
|
12
13
|
from typing import Callable, List, Tuple, Optional, Dict, Any
|
|
13
14
|
import logging
|
|
@@ -5989,7 +5990,20 @@ class IRISGraphEngine:
|
|
|
5989
5990
|
for i in range(1, n + 1)
|
|
5990
5991
|
)
|
|
5991
5992
|
|
|
5992
|
-
def khop(self, seed: str, hops: int = 2, max_nodes: int = 500) -> dict:
|
|
5993
|
+
def khop(self, seed: str, hops: int = 2, max_nodes: int = 500, predicate: str = "") -> dict:
|
|
5994
|
+
"""K-hop traversal with auto-routing (spec 164).
|
|
5995
|
+
|
|
5996
|
+
For `hops <= IVG_KHOP_SEEDLOCAL_MAX_HOPS` (default 2), routes to the
|
|
5997
|
+
seed-local fast path (`engine.khop_seedlocal`). For larger `hops`,
|
|
5998
|
+
falls through to the existing Rust/ObjectScript paths.
|
|
5999
|
+
"""
|
|
6000
|
+
max_seedlocal = int(os.environ.get("IVG_KHOP_SEEDLOCAL_MAX_HOPS", "2"))
|
|
6001
|
+
if hops <= max_seedlocal:
|
|
6002
|
+
try:
|
|
6003
|
+
return self.khop_seedlocal(seed, hops, predicate, max_nodes)
|
|
6004
|
+
except Exception as e:
|
|
6005
|
+
logger.warning(f"khop seedlocal failed, falling back to legacy path: {e}")
|
|
6006
|
+
|
|
5993
6007
|
if self._detect_arno() and "khop" in self._arno_capabilities.get(
|
|
5994
6008
|
"algorithms", []
|
|
5995
6009
|
):
|
|
@@ -6002,6 +6016,81 @@ class IRISGraphEngine:
|
|
|
6002
6016
|
logger.warning(f"Arno khop error: {parsed['error']}")
|
|
6003
6017
|
return self._khop_fallback(seed, hops, max_nodes)
|
|
6004
6018
|
|
|
6019
|
+
def khop_seedlocal(self, seed: str, hops: int = 1, predicate: str = "",
|
|
6020
|
+
max_results: int = 10000) -> dict:
|
|
6021
|
+
"""Seed-local k-hop via `^NKG` integer index (spec 164, FR-164-001 / FR-164-007).
|
|
6022
|
+
|
|
6023
|
+
Walks `^NKG(-1, sIdx, *, *)` directly via $Order, bypassing the Rust
|
|
6024
|
+
`KHopNeighbors` whole-graph serialization tax. Returns
|
|
6025
|
+
`{"path": "seedlocal" | "kg_fallback", "rows": [{"node_id":..., "hops":...}, ...]}`
|
|
6026
|
+
ordered hops-ascending then `^NKG` subscript order within each hop
|
|
6027
|
+
(round-1 Q1 BFS layer order).
|
|
6028
|
+
|
|
6029
|
+
Path discrimination (FR-164-008 round-3): we probe `^NKG("$NI", seed)`
|
|
6030
|
+
via Native API (~5µs) BEFORE invoking the ClassMethod; if empty,
|
|
6031
|
+
path="kg_fallback". Otherwise path="seedlocal".
|
|
6032
|
+
|
|
6033
|
+
Multi-predicate dedup (round-1 Q4): `predicate=""` walks all predicates
|
|
6034
|
+
with per-node dedup via process-private `^||khop_seen(oIdx)`; first
|
|
6035
|
+
predicate-subscript order wins.
|
|
6036
|
+
|
|
6037
|
+
Edge cases (FR-164-004):
|
|
6038
|
+
- hops=0 → empty rows
|
|
6039
|
+
- missing seed → empty rows + path="kg_fallback"
|
|
6040
|
+
- max_results=0 → unlimited
|
|
6041
|
+
|
|
6042
|
+
Performance (NFR-164-001 / NFR-164-002 hard gates):
|
|
6043
|
+
- 1-hop median ≤ 150µs on ER(50K, ~145K edges)
|
|
6044
|
+
- 2-hop median ≤ 300µs on same fixture
|
|
6045
|
+
"""
|
|
6046
|
+
max_seedlocal = int(os.environ.get("IVG_KHOP_SEEDLOCAL_MAX_HOPS", "2"))
|
|
6047
|
+
if hops < 0 or hops > max_seedlocal:
|
|
6048
|
+
raise ValueError(
|
|
6049
|
+
f"khop_seedlocal hops={hops} out of range [0, {max_seedlocal}]; "
|
|
6050
|
+
f"override via IVG_KHOP_SEEDLOCAL_MAX_HOPS"
|
|
6051
|
+
)
|
|
6052
|
+
|
|
6053
|
+
try:
|
|
6054
|
+
iris_obj = self._iris_obj()
|
|
6055
|
+
except Exception:
|
|
6056
|
+
return {"path": "seedlocal", "rows": []}
|
|
6057
|
+
|
|
6058
|
+
try:
|
|
6059
|
+
raw = str(iris_obj.classMethodValue(
|
|
6060
|
+
"Graph.KG.NKGAccel", "KHopNeighborsSeedLocal",
|
|
6061
|
+
seed, hops, predicate, max_results,
|
|
6062
|
+
))
|
|
6063
|
+
except Exception as e:
|
|
6064
|
+
logger.warning(f"KHopNeighborsSeedLocal raised: {e}")
|
|
6065
|
+
return {"path": "seedlocal", "rows": []}
|
|
6066
|
+
|
|
6067
|
+
if raw.startswith("KGFALLBACK:"):
|
|
6068
|
+
path = "kg_fallback"
|
|
6069
|
+
json_part = raw[len("KGFALLBACK:"):]
|
|
6070
|
+
from iris_vector_graph.stores import _khop_state
|
|
6071
|
+
if not _khop_state._khop_nkg_warning_emitted:
|
|
6072
|
+
import warnings as _warnings
|
|
6073
|
+
_warnings.warn(
|
|
6074
|
+
f"^NKG missing for seed {seed!r}; using ^KG walk fallback. "
|
|
6075
|
+
f"Call engine.rebuild_nkg() to enable the fast path. "
|
|
6076
|
+
f"This warning is emitted once per Python process.",
|
|
6077
|
+
RuntimeWarning,
|
|
6078
|
+
stacklevel=2,
|
|
6079
|
+
)
|
|
6080
|
+
_khop_state._khop_nkg_warning_emitted = True
|
|
6081
|
+
elif raw.startswith("SEEDLOCAL:"):
|
|
6082
|
+
path = "seedlocal"
|
|
6083
|
+
json_part = raw[len("SEEDLOCAL:"):]
|
|
6084
|
+
else:
|
|
6085
|
+
path = "seedlocal"
|
|
6086
|
+
json_part = raw
|
|
6087
|
+
|
|
6088
|
+
try:
|
|
6089
|
+
rows = json.loads(json_part) if json_part else []
|
|
6090
|
+
except json.JSONDecodeError:
|
|
6091
|
+
rows = []
|
|
6092
|
+
return {"path": path, "rows": rows}
|
|
6093
|
+
|
|
6005
6094
|
def _khop_fallback(self, seed: str, hops: int, max_nodes: int) -> dict:
|
|
6006
6095
|
if self.capabilities.objectscript_deployed:
|
|
6007
6096
|
try:
|
|
@@ -798,6 +798,20 @@ LANGUAGE OBJECTSCRIPT
|
|
|
798
798
|
set result = ##class(Graph.KG.Communities).KCoreJson(topK)
|
|
799
799
|
quit result
|
|
800
800
|
}}
|
|
801
|
+
""",
|
|
802
|
+
f"""
|
|
803
|
+
CREATE OR REPLACE FUNCTION {table_schema}.kg_KHopSeedLocal(
|
|
804
|
+
seedId VARCHAR(256),
|
|
805
|
+
hops INT DEFAULT 1,
|
|
806
|
+
predicate VARCHAR(128) DEFAULT '',
|
|
807
|
+
maxResults INT DEFAULT 10000
|
|
808
|
+
)
|
|
809
|
+
RETURNS VARCHAR(32000)
|
|
810
|
+
LANGUAGE OBJECTSCRIPT
|
|
811
|
+
{{
|
|
812
|
+
set result = ##class(Graph.KG.NKGAccel).KHopNeighborsSeedLocal(seedId, hops, predicate, maxResults)
|
|
813
|
+
quit result
|
|
814
|
+
}}
|
|
801
815
|
""",
|
|
802
816
|
]
|
|
803
817
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""Spec 164 — Module-level state for k-hop seed-local fast path.
|
|
2
|
+
|
|
3
|
+
Holds the once-per-Python-process flag for the `^NKG`-missing RuntimeWarning
|
|
4
|
+
emitted by `engine.khop_seedlocal()` when falling back to `^KG` walk
|
|
5
|
+
(FR-164-008 / Q3 clarification). Mirrors the `engine._nkg_dirty` pattern at
|
|
6
|
+
engine.py:3389.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
_khop_nkg_warning_emitted: bool = False
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def reset_khop_warnings() -> None:
|
|
13
|
+
"""Re-arm the per-process `^NKG`-missing warning flag.
|
|
14
|
+
|
|
15
|
+
Called by tests (AS-164-4) that need to verify the warning fires without
|
|
16
|
+
depending on a fresh Python process.
|
|
17
|
+
"""
|
|
18
|
+
global _khop_nkg_warning_emitted
|
|
19
|
+
_khop_nkg_warning_emitted = False
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "iris-vector-graph"
|
|
7
|
-
version = "1.99.
|
|
7
|
+
version = "1.99.1"
|
|
8
8
|
description = "Transactional Graph + Vector retrieval system for InterSystems IRIS with hybrid search, openCypher, and GraphQL APIs"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""Spec 164 — Test fixture builders for k-hop seed-local fast path.
|
|
2
|
+
|
|
3
|
+
Each builder returns a dict with:
|
|
4
|
+
nodes: list of node IDs (strings)
|
|
5
|
+
edges: list of (s, p, o) tuples — source, predicate, target
|
|
6
|
+
expected_1hop: dict[seed_id -> set of 1-hop reachable node IDs]
|
|
7
|
+
expected_2hop: dict[seed_id -> set of 2-hop reachable node IDs]
|
|
8
|
+
|
|
9
|
+
Used by AS-164-3 (set-equality vs Cypher path) and the multi-predicate dedup
|
|
10
|
+
test (T008b) per FR-164-003.
|
|
11
|
+
"""
|
|
12
|
+
from typing import Dict, List, Set, Tuple
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def make_chain(n: int = 10, predicate: str = "NEXT") -> Dict:
|
|
16
|
+
"""Linear chain: node_0 -> node_1 -> ... -> node_{n-1}.
|
|
17
|
+
|
|
18
|
+
Each node has exactly one out-edge to its successor (last has none).
|
|
19
|
+
Useful for clean BFS layer testing — node_0's 1-hop = {node_1}, 2-hop = {node_2}.
|
|
20
|
+
"""
|
|
21
|
+
nodes = [f"chain_node_{i}" for i in range(n)]
|
|
22
|
+
edges = [(nodes[i], predicate, nodes[i + 1]) for i in range(n - 1)]
|
|
23
|
+
expected_1hop = {nodes[i]: {nodes[i + 1]} for i in range(n - 1)}
|
|
24
|
+
expected_1hop[nodes[n - 1]] = set()
|
|
25
|
+
expected_2hop = {nodes[i]: {nodes[i + 2]} if i + 2 < n else set() for i in range(n)}
|
|
26
|
+
return {
|
|
27
|
+
"nodes": nodes,
|
|
28
|
+
"edges": edges,
|
|
29
|
+
"expected_1hop": expected_1hop,
|
|
30
|
+
"expected_2hop": expected_2hop,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def make_fork(n_leaves: int = 5, predicate: str = "FORK") -> Dict:
|
|
35
|
+
"""1 source + n_leaves leaves, each with a single edge from source.
|
|
36
|
+
|
|
37
|
+
Useful for high-fanout 1-hop testing — fork_root's 1-hop = all n leaves.
|
|
38
|
+
"""
|
|
39
|
+
root = "fork_root"
|
|
40
|
+
leaves = [f"fork_leaf_{i}" for i in range(n_leaves)]
|
|
41
|
+
nodes = [root] + leaves
|
|
42
|
+
edges = [(root, predicate, leaf) for leaf in leaves]
|
|
43
|
+
expected_1hop = {root: set(leaves)}
|
|
44
|
+
expected_1hop.update({leaf: set() for leaf in leaves})
|
|
45
|
+
expected_2hop = {nid: set() for nid in nodes}
|
|
46
|
+
return {
|
|
47
|
+
"nodes": nodes,
|
|
48
|
+
"edges": edges,
|
|
49
|
+
"expected_1hop": expected_1hop,
|
|
50
|
+
"expected_2hop": expected_2hop,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def make_complete(n: int = 4, predicate: str = "EDGE") -> Dict:
|
|
55
|
+
"""Complete graph K_n (no self-loops). Every node has out-edges to every other node.
|
|
56
|
+
|
|
57
|
+
Useful for dedup testing — every node's 2-hop = all other nodes (deduped via
|
|
58
|
+
`^||khop_seen`).
|
|
59
|
+
"""
|
|
60
|
+
nodes = [f"k_node_{i}" for i in range(n)]
|
|
61
|
+
edges = [
|
|
62
|
+
(nodes[i], predicate, nodes[j])
|
|
63
|
+
for i in range(n)
|
|
64
|
+
for j in range(n)
|
|
65
|
+
if i != j
|
|
66
|
+
]
|
|
67
|
+
expected_1hop = {nodes[i]: set(nodes[j] for j in range(n) if j != i) for i in range(n)}
|
|
68
|
+
expected_2hop = {nodes[i]: set(nodes[j] for j in range(n) if j != i) for i in range(n)}
|
|
69
|
+
return {
|
|
70
|
+
"nodes": nodes,
|
|
71
|
+
"edges": edges,
|
|
72
|
+
"expected_1hop": expected_1hop,
|
|
73
|
+
"expected_2hop": expected_2hop,
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def make_multi_predicate_dedup(predicate_a: str = "EDGE_A", predicate_b: str = "EDGE_B") -> Dict:
|
|
78
|
+
"""Two-node graph where target is reachable from seed via TWO different predicates.
|
|
79
|
+
|
|
80
|
+
Used by T008b to verify FR-164-003 dedup-per-node: when `predicate=""` (all
|
|
81
|
+
predicates), `target` must appear in result rows EXACTLY ONCE despite being
|
|
82
|
+
reachable via both EDGE_A and EDGE_B.
|
|
83
|
+
"""
|
|
84
|
+
seed = "mpd_seed"
|
|
85
|
+
target = "mpd_target"
|
|
86
|
+
nodes = [seed, target]
|
|
87
|
+
edges = [(seed, predicate_a, target), (seed, predicate_b, target)]
|
|
88
|
+
expected_1hop = {seed: {target}, target: set()}
|
|
89
|
+
expected_2hop = {seed: set(), target: set()}
|
|
90
|
+
return {
|
|
91
|
+
"nodes": nodes,
|
|
92
|
+
"edges": edges,
|
|
93
|
+
"expected_1hop": expected_1hop,
|
|
94
|
+
"expected_2hop": expected_2hop,
|
|
95
|
+
}
|