iris-vector-graph 1.95.0__tar.gz → 1.98.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/PKG-INFO +102 -2
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/README.md +95 -0
- iris_vector_graph-1.98.0/iris_src/src/Graph/KG/Centrality.cls +154 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/EdgeScan.cls +86 -4
- iris_vector_graph-1.98.0/iris_src/src/Graph/KG/EmbedQueue.cls +114 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/__init__.py +8 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/_validate.py +27 -0
- iris_vector_graph-1.98.0/iris_vector_graph/cli.py +208 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/translator.py +279 -2
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher_api.py +29 -6
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/dbapi_utils.py +3 -3
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/embedded.py +5 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/engine.py +451 -58
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/schema.py +55 -0
- iris_vector_graph-1.98.0/iris_vector_graph/sdk.py +270 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/store_protocol.py +12 -1
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/stores/iris_sql_store.py +544 -38
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/pyproject.toml +9 -2
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/conftest.py +68 -49
- iris_vector_graph-1.98.0/tests/e2e/fixtures/__init__.py +13 -0
- iris_vector_graph-1.98.0/tests/e2e/fixtures/centrality_graphs.py +103 -0
- iris_vector_graph-1.98.0/tests/e2e/test_centrality_e2e.py +465 -0
- iris_vector_graph-1.98.0/tests/e2e/test_embed_queue_e2e.py +66 -0
- iris_vector_graph-1.98.0/tests/unit/test_centrality_translator.py +92 -0
- iris_vector_graph-1.98.0/tests/unit/test_centrality_unit.py +198 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_deep.py +3 -1
- iris_vector_graph-1.98.0/tests/unit/test_retrieve_and_vector_distance.py +90 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_store_protocol.py +18 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/.gitignore +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/LICENSE +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/demo_biomedical.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/demo_fraud_detection.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/demo_fraud_detection_sql.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/demo_utils.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/demo_working_system.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical/loaders.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical/resolver.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical/types.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical_legacy/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical_legacy/biomedical_engine.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical_legacy/biomedical_schema.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical_legacy/legacy_wrapper.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/fraud/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/fraud/loaders.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/fraud/resolver.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/domains/fraud/types.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/graphQL.http +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/hybrid_vector_graph_query.cypher +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/examples/rest.http +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Algorithms.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/ArnoAccel.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/BM25Index.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/BenchFormat.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/BenchSeeder.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Benchmark.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Edge.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/GraphIndex.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/IVFIndex.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Loader.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/MCPService.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/MCPToolSet.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/MCPTools.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Meta.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/NKGAccel.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/PLAIDSearch.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/PageRank.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/PyOps.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Service.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Snapshot.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Subgraph.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/TemporalIndex.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/TestEdge.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Traversal.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/VecIndex.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/IVG/CypherEngine.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/IVG/Percentile.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/PageRankEmbedded.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/User.Exec.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_src/src/iris/vector/graph/GraphOperators.cls +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/bolt_server.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/0-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/1-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/10-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/11-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/12-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/13-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/14-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/15-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/16-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/17-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/18-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/19-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/20-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/21-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/22-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/23-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/24-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/25-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/26-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/27-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/28-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/29-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/30-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/31-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/32-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/33-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/34-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/35-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/36-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/37-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/38-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/39-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/40-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/41-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/42-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/43-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/44-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/45-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/46-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/47-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/48-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/49-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/50-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/51-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/52-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/53-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/54-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/55-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/56-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/57-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/58-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/59-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/6-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/60-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/61-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/62-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/63-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/64-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/65-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/66-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/67-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/68-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/69-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/7-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/70-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/71-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/72-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/73-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/74-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/75-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/8-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/9-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/app-b124e26129aa436b26fe.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/filter-a7c44e713bf19d31f6b2849160b1bba8.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.eot +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.woff +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.eot +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.woff +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.eot +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.woff +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.eot +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.woff +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Bold.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Italic.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Light.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-LightItalic.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Regular.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Semibold.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/codicon.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/filter.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.eot +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.woff +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/group-by.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.eot +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.woff +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/sort.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/sort1.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/sort2.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/streamline.eot +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/streamline.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/streamline.ttf +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/streamline.woff +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/group-by-89c6aaa756bc3548cc6ab3d2be4d2862.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/Favorites.mp4 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/Keystrokes.mp4 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/ProjectFiles.mp4 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/ReusableFrame.mp4 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/SidebarDB_Iinfo.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/Stream.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/aura-logo-inverted.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/aura-logo.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/books.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/clusters.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/community.jpg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-144x144.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-192x192.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-36x36.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-48x48.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-72x72.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-96x96.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-114x114.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-120x120.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-144x144.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-152x152.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-180x180.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-57x57.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-60x60.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-72x72.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-76x76.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-precomposed.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/browserconfig.xml +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-16x16.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-32x32.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-96x96.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/favicon.ico +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/manifest.json +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-144x144.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-150x150.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-310x310.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-70x70.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/neo4j-browser-canary.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/neo4j-browser.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/labeled_node.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/more_nodes.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/neo4j-favicon.ico +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/neo4j-logo-inverted.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/neo4j-logo.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/northwind/customer-orders.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/northwind/order-graph.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/northwind/product-category-supplier.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/northwind/product-graph.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/one_node.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/query-plan-operator-cost.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/query-plan-operator-details.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/query-plan-operator-rows.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/query-plan.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/rel-props.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/relationships.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_code_frame.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_cypher_warn.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_editor.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_sidebar.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_stream.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/sort-8d6f482c21de572ceeb5ac93623e6c97.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/sort1-d2dc515571213fc0ca99b0341b88e413.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/sort2-31050964e7eb2042325f7bcbba3d58ad.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/bolt-worker-dfa551eb0861cc080843.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/cypher-editor-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/editor-455af92e7e1dc39fdbc8060f6680ab32.worker.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/index.html +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/manifest.json +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/CoseBilkentLayout.worker-FEt6e_rV.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/HierarchicalLayout.worker-O6WHYssL.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/asciidoc.8O6YIVRy.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/auto-track.BlKugDvg.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/bash.CLAyaf9k.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/c.l4fEI10z.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/connect-icon-Br2hQy_e.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/csharp.ChqrQYCS.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/css-extras.Bi-4v17d.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/css.B1LHiudN.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher-editor-auto-completions.gif +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher-editor-inline-help.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher-editor-linting.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher-editor-syntax-highlighting.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher-reference.gif +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher.C3qdyJ5B.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/docker.CF7EZT1T.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/fira-code-400-regular-normal-BzypJxJk.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/fira-code-500-medium-normal-CRWzqcWa.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/fira-code-700-bold-normal-hUmNV4O0.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/go.FsJyBHVG.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/graphql.BlTzkzAJ.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/history-quick-search.gif +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index-CY0cZcsW.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index-H7L207gH.css +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.BpRu7Js3.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.C74acnU7.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.CHatcJcU.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.D6ZMQedT.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.DPZla5MT.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.dzIUqrzq.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.leyiHvaQ.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.qJ6VE118.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.umd.B9yhfa5Y.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/is-plan-event-enabled.DeNtQvA5.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/java.BBXwBh9f.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/java.CQ1iJ0-D.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/javadoc.UnquSOIj.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/javascript.CYTqTa0W.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/json.BIkJg-Cj.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/jsx.Cy_hP1z6.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/kotlin.D_6l0VkM.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/lintWorker-QNEp56W3.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/logo-aura-white-DCfUnkCN.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/movie-model.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/movies-active-B2SzHIc1.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/neo4j-logo-active-CieUxroh.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/patterned-banner-background-C_nO-Yn8.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/php.BKb6XVba.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/plan-graph-worker-s17nF19Q.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/public-sans-300-light-normal-CG9e8kLa.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/public-sans-400-regular-italic-D9FlViiB.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/public-sans-400-regular-normal-D4F9yfFi.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/public-sans-500-medium-normal-ChZcBEnJ.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/public-sans-600-semi-bold-normal-Ck6TyfRI.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/public-sans-700-bold-normal-CGjRhW-d.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/python.tCcUC3U7.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/query-fundamentals-active-jvTJU1K2.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/query.snake-frame.DmvXOQIM.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/regex.C_VuIVtC.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/rust.CtSATZMt.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/saved-cypher.gif +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/scalable-graph-visualization.gif +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/sql.CfOAbw6n.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/syne-neo-500-medium-normal-A5GXmYUf.woff2 +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/table-visualization.gif +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/typescript.3Tbm37mD.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/xml-doc.h79Tu9Aw.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/yaml.B-Jvd59g.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/android-chrome-192x192.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/apple-touch-icon.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/favicon-16x16.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/favicon-194x194.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/favicon-32x32.png +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/favicon.ico +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/safari-pinned-tab.svg +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/index.html +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/manifest.json +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/ui-libs-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/vendor-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/bulk_loader.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/capabilities.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/algorithms/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/algorithms/paths.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/aql/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/aql/ast.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/aql/lexer.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/aql/parser.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/aql/translator.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/ast.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/lexer.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/parser.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/fhir_bridge.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/fusion.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/constants.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/engine.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/pooling.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/resolvers.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/schema.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/index_protocol.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/models.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/operators.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/py.typed +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/result.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/security.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/status.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/stores/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/text_search.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/utils.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/iris_vector_graph/vector_utils.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/fhir_bridges.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/fraud_sample_data.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/globals_schema.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/graph_path_globals.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/graph_walk_tvf.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/migrations/000_base_schema_iris.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/migrations/001_add_nodepk_table.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/migrations/001_rollback_nodepk.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/migrations/002_add_fk_constraints.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/operators.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/operators_fixed.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/procedures/kg_PageRank.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/rdf_reifications.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/sql/schema.sql +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/TESTING.md +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmark_parser.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/README.md +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/bench.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/bench_utils.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/benchmark_neo4j.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/bfs_benchmark.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/establish_baseline.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/graph_gen.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/ic2_profile.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/iris_baseline_run.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/iris_os_run.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/ldbc_full_loader.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/load_neo4j.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/benchmarks/synthetic_baseline.csv +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/contract/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/contract/test_cypher_api.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/contract/test_cypher_api_errors.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/contract/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/contract/test_graphql_schema.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/contract/test_ppr_api.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/curl_suite.sh +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/conftest.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_approx_count_distinct.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_aql_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_arno_bfs_global.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_arno_bfs_unified.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_biomedical_demo.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_biomedical_ui.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_coerce_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_gaps_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_sprints_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_vl_path_bfs.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_embedded_wgproto_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_execution_contexts.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_execution_contexts_new.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_fhir_bridges_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_fraud_demo.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_fraud_ui.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_autogen_startup.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_cypher_passthrough.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_node_queries.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_semantic_search.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_traversal.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_graph_kernels_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_hla_kg_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ic13_shortest_path.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ic3_exact_count.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_index_protocol.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_introspection_api.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ivf_insert.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_large_output_chunked.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_lazy_node_resolution.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_multi_query_engine_platform.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_named_paths_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_nkg_index_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_operator_wiring_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_pattern_comprehension_reduce.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_plaid.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_plaid_search_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ppr_cls_fast_path.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ppr_guided_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_procedure_installation.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_reification_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_schema_procedures_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_store_injection_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_streaming_bfs.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_api.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_ingest.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_multi_context.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_search.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_setup.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_traversal.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_subgraph_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_subquery_call_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_temporal_store_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_untested_methods.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/e2e/test_vecindex_e2e.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/conftest.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/gql/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/gql/test_graphql_mutations.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/gql/test_graphql_nested_queries.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/gql/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/gql/test_graphql_vector_search.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_bidirectional_ppr.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cls_layer.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_advanced.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_enhancements.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_multi_type.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_rd.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_rel_vars.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_single_type.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_untyped.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_embeddings_api.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_fastapi_graphql.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_fhir_bridges_integration.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_named_paths_integration.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_advanced_benchmarks.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_constraints.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_graph_analytics.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_migration.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_performance.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_production_scale.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_objectscript_classes.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_pagerank_sql_optimization.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_reification_integration.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_schema_migration.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_stored_procedure_install.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/integration/test_subquery_call_integration.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/performance/conftest.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/performance/scale_benchmark.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/performance/test_ppr_stress.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/performance/test_stress_v1_5.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/run_all_tests.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_iris_rest_api.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_networkx_loader.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_performance_benchmarks.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_pyops_vector_conversion.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_python_operators.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_python_sdk.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_schema_validation.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_sql_queries.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/python/test_vector_functions.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/__init__.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/test_lexer.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/test_lexer_advanced.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/test_parser.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/test_parser_advanced.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_aql_lexer.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_aql_parser.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_aql_translator.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_batch_mutations.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_bfs_arno.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_bm25_index.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_bolt_server.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cls_deployment.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_coverage_boost.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_benchmark.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_benchmark_scale.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_case_when.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_e2e_new_features.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_functions.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_parser.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_posos_bugs.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_procedures.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_translator.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_union_exists.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_var_length.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_edge_embeddings.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_edgeprop_ndjson.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_embed_nodes_params.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_embedded.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_embedded_wgproto.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_dimension_fix.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_embeddings.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_mocked.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_status.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_fhir_bridge.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_fhir_bridges.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_get_nodes.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_graph_kernels.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_graphql_dataloader.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_index_handle.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_index_protocol.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_ingest_formats.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_introspection_api.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_ivf_index.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_ivgresult.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_module_coverage.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_named_graphs.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_named_paths.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_operators_coverage.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_operators_wiring.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_plaid_search.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_ppr_guided_subgraph.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_reification.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_schema_init.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_schema_procedures.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_shortest_path.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_snapshot.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_sql_splitter.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_sql_table_bridge.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_subgraph.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_subquery_call.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_supporting_modules.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_temporal_cypher.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_temporal_edges.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_translator_coverage.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_unified_edge_store.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_validation.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/tests/unit/test_vector_search_routing.py +0 -0
- {iris_vector_graph-1.95.0 → iris_vector_graph-1.98.0}/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.
|
|
3
|
+
Version: 1.98.0
|
|
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
|
|
@@ -29,6 +29,10 @@ Requires-Dist: biopython>=1.81; extra == 'biodata'
|
|
|
29
29
|
Requires-Dist: bioservices>=1.11.0; extra == 'biodata'
|
|
30
30
|
Requires-Dist: mygene>=3.2.0; extra == 'biodata'
|
|
31
31
|
Requires-Dist: obonet>=1.0.0; extra == 'biodata'
|
|
32
|
+
Provides-Extra: cli
|
|
33
|
+
Requires-Dist: click>=8.0.0; extra == 'cli'
|
|
34
|
+
Requires-Dist: httpx>=0.28.1; extra == 'cli'
|
|
35
|
+
Requires-Dist: tabulate>=0.9.0; extra == 'cli'
|
|
32
36
|
Provides-Extra: core
|
|
33
37
|
Requires-Dist: intersystems-iris>=1.0.0; extra == 'core'
|
|
34
38
|
Provides-Extra: demo
|
|
@@ -36,7 +40,7 @@ Requires-Dist: python-fasthtml>=0.12.0; extra == 'demo'
|
|
|
36
40
|
Provides-Extra: dev
|
|
37
41
|
Requires-Dist: black>=23.0.0; extra == 'dev'
|
|
38
42
|
Requires-Dist: flake8>=6.0.0; extra == 'dev'
|
|
39
|
-
Requires-Dist: iris-devtester>=1.
|
|
43
|
+
Requires-Dist: iris-devtester>=1.18.1; extra == 'dev'
|
|
40
44
|
Requires-Dist: isort>=5.12.0; extra == 'dev'
|
|
41
45
|
Requires-Dist: mypy>=1.5.0; extra == 'dev'
|
|
42
46
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
|
|
@@ -45,6 +49,7 @@ Requires-Dist: pytest>=7.4.0; extra == 'dev'
|
|
|
45
49
|
Provides-Extra: full
|
|
46
50
|
Requires-Dist: fastapi>=0.118.0; extra == 'full'
|
|
47
51
|
Requires-Dist: httpx>=0.28.1; extra == 'full'
|
|
52
|
+
Requires-Dist: iris-embedded-python-wrapper>=0.5.20; extra == 'full'
|
|
48
53
|
Requires-Dist: networkx>=3.0; extra == 'full'
|
|
49
54
|
Requires-Dist: numpy>=1.24.0; extra == 'full'
|
|
50
55
|
Requires-Dist: pandas>=2.0.0; extra == 'full'
|
|
@@ -805,6 +810,26 @@ conditions = tool("patient-123") # → {"conditions": [...], "error": None}
|
|
|
805
810
|
|
|
806
811
|
## Changelog
|
|
807
812
|
|
|
813
|
+
### v1.98.0 (2026-05-28)
|
|
814
|
+
- **feat**: Spec 162 — Centrality Suite. Four new graph centrality algorithms shipping via the GraphStore protocol + Cypher procedures, closing the biggest coverage gap vs Neo4j GDS:
|
|
815
|
+
- `engine.degree_centrality(direction, predicate, top_k)` — out/in/both, predicate-filtered, normalized to (n-1)
|
|
816
|
+
- `engine.betweenness_centrality(sample_size, direction, max_hops, top_k, mem_budget_mb, progress_callback)` — Brandes (2001), Brandes-Pich approximation when sampled, per-source memory budget, progress reporting
|
|
817
|
+
- `engine.closeness_centrality(formula, direction, max_hops, top_k, progress_callback)` — `harmonic` (default, robust to disconnection) and `classical` formulas
|
|
818
|
+
- `engine.eigenvector_centrality(max_iter, tol, top_k, progress_callback)` — power iteration over raw adjacency `A`, L2-normalized, matches `networkx.eigenvector_centrality_numpy` (NOT PageRank with α=1)
|
|
819
|
+
- **feat**: 4 Cypher procedures `CALL ivg.degreeCentrality({...}) YIELD node, score, degree`, `CALL ivg.betweenness({...}) YIELD node, score`, `CALL ivg.closeness({...})`, `CALL ivg.eigenvector({...})` with map-parameter syntax. Procedure-call validator rejects unknown keys (FR-029 forward-compat reservation for future `weighted` variants).
|
|
820
|
+
- **feat**: `engine.get_centrality_warnings()` reads `^IVG.warnings("centrality", ...)` for memory-budget skip events; Brandes writes warning entries when per-source predecessor accumulator exceeds `mem_budget_mb`.
|
|
821
|
+
- **feat**: 4 new `GraphStore` protocol methods (`execute_degree_centrality`, `execute_betweenness`, `execute_closeness`, `execute_eigenvector`) + 4 capability keys.
|
|
822
|
+
- **feat**: 4 new Pydantic input models exported from package root: `DegreeCentralityInput`, `BetweennessInput`, `ClosenessInput`, `EigenvectorInput`.
|
|
823
|
+
- **feat**: `scripts/test-container.sh` — single entry point for IRIS test container ops (replaces ad-hoc `IRISContainer.start()` calls). Includes graceful `iris stop IRIS quietly` before `docker rm -f` (Bug T mitigation).
|
|
824
|
+
- **feat**: Container renamed from legacy `gqs-ivg-test` (ephemeral) to `ivg-iris` (persistent, registered in lab_manager registry as `status: active`).
|
|
825
|
+
- **fix (Bug S)**: Native API gref-bypass production path for centrality algorithms — when `iris.createIRIS().classMethodValue('Graph.KG.Centrality', ...)` returns `<CLASS DOES NOT EXIST>` from `%SYS.DBSRV` cache, the Python store automatically falls back to direct `^KG` global access via `iris_inst.set/get/nextSubscript/kill`. Algorithm correctness proven via Pearson > 0.85 with networkx reference on `networkx.betweenness_centrality`, `harmonic_centrality`, `eigenvector_centrality_numpy`, `out_degree_centrality`.
|
|
826
|
+
- **fix (Bug T)**: `iris-devtester>=1.18.1` upstream fix — `IRISContainer.__exit__()` now calls `stop_gracefully()` (graceful `iris stop IRIS quietly`) before Docker SIGKILL, preventing silent row loss on container restart. IVG bumped pin to `iris-devtester>=1.18.1`.
|
|
827
|
+
- **fix (Bug R, false alarm)**: Investigation confirmed `los-iris` slowness from unindexed `rdf_labels.s`/`rdf_props.s` was specific to productivity-framework's container schema; IVG's `initialize_schema()` already creates `idx_labels_s` and `idx_props_s`. No IVG fix needed.
|
|
828
|
+
- **test**: 16 new e2e tests in `tests/e2e/test_centrality_e2e.py` — networkx parity master gate + per-algorithm validation (15 PASS + 1 XFAIL Bug S Cypher path, deeply documented).
|
|
829
|
+
- **test**: 30 new unit tests in `tests/unit/test_centrality_unit.py` and `tests/unit/test_centrality_translator.py` — protocol routing, Pydantic validation, Cypher translator FR-029 enforcement.
|
|
830
|
+
- **docs**: `specs/162-centrality-suite/{spec,plan,research,data-model,quickstart,tasks}.md` — full spec with 5 clarifications integrated, 29 functional requirements, 6 NFRs, 10 user stories.
|
|
831
|
+
- **docs**: `ENGINEERING_DEBT.md` Bug S + Bug T entries with reproduction steps and resolution context.
|
|
832
|
+
|
|
808
833
|
### v1.88.0 (2026-05-07)
|
|
809
834
|
- **feat**: `ffi_kg_build_2hop_exact_int` Rust function — integer-indexed single-pass 2-hop dedup from `^KG("out")`. Writes results to `^ArnoKG("2h")` temp global; `DecodeBuildResults()` ObjectScript method converts to `^KG("deg2p_exact")`
|
|
810
835
|
- **feat**: `KHop2CountExact(src, pred)` ObjectScript method — O(1) `$Get(^KG("deg2p_exact"))`, fallback to `KHop2Count` when not populated. 0.14ms p50 on SF10 (was 70ms)
|
|
@@ -1254,6 +1279,81 @@ Four openCypher gaps closed, all from structured gap analysis against the openCy
|
|
|
1254
1279
|
|
|
1255
1280
|
## Changelog
|
|
1256
1281
|
|
|
1282
|
+
### v1.97.0 (2026-05-16)
|
|
1283
|
+
|
|
1284
|
+
**Three new features closing the gap with NornicDB-style vector-graph fusion:**
|
|
1285
|
+
|
|
1286
|
+
**`CALL ivg.retrieve(query, limit, bm25_name?, vec_label?, rrf_k?)`** — single Cypher procedure for BM25 + vector + RRF fusion. Equivalent to NornicDB's `db.retrieve()`:
|
|
1287
|
+
```cypher
|
|
1288
|
+
CALL ivg.retrieve('insulin resistance', 10) YIELD node, score
|
|
1289
|
+
MATCH (node)-[:INTERACTS_WITH]->(target)
|
|
1290
|
+
RETURN target.node_id, score ORDER BY score DESC
|
|
1291
|
+
```
|
|
1292
|
+
Generates three-CTE SQL (BM25_Retrieve + Vec_Retrieve + Retrieve with FULL OUTER JOIN RRF fusion).
|
|
1293
|
+
|
|
1294
|
+
**`WHERE vector_distance(n, $vec) < 0.3`** — scalar vector similarity predicate in WHERE/RETURN clauses:
|
|
1295
|
+
```cypher
|
|
1296
|
+
MATCH (n:Gene) WHERE vector_distance(n, $vec) < 0.3 RETURN n.node_id
|
|
1297
|
+
MATCH (n) RETURN n.node_id, vector_similarity(n, $vec) AS sim ORDER BY sim DESC LIMIT 10
|
|
1298
|
+
```
|
|
1299
|
+
Translates to `VECTOR_COSINE()` subquery against `kg_NodeEmbeddings`.
|
|
1300
|
+
|
|
1301
|
+
**`Graph.KG.EmbedQueue`** — async embedding queue (ObjectScript). Write nodes now, embeddings appear asynchronously:
|
|
1302
|
+
```python
|
|
1303
|
+
engine.enqueue_for_embedding(["n1", "n2", "n3"], embedding_config="my-model")
|
|
1304
|
+
engine.start_background_embedding(batch_size=100)
|
|
1305
|
+
count = engine.embed_queue_pending()
|
|
1306
|
+
result = engine.process_embed_queue(batch_size=50)
|
|
1307
|
+
```
|
|
1308
|
+
Uses `^EmbedQueue` global + `Graph.KG.EmbedQueue.ProcessBatch()` via `%SYSTEM.Task`.
|
|
1309
|
+
|
|
1310
|
+
### v1.96.2 (2026-05-15)
|
|
1311
|
+
|
|
1312
|
+
**Fix**: `_build_index_registry()` infinite loop when `iris.gref` is a `MagicMock` (external connections via IVR or test mocks). `gref.order()` on a MagicMock returns a MagicMock, which is never `== ""`, causing infinite loop. Fix: `isinstance(name, str)` guard + `range(10000)` hard limit. Reported by IVR session.
|
|
1313
|
+
|
|
1314
|
+
### v1.96.1 (2026-05-15)
|
|
1315
|
+
|
|
1316
|
+
**Fix**: Lazy-load `sentence-transformers` and `torch` to prevent repeated memory allocation. Inline `from sentence_transformers import SentenceTransformer` in `embed_text()`, `embed_nodes()`, `embed_edges()` replaced with module-level singletons (`_get_sentence_transformers()`, `_load_sentence_transformer()`). Prevents torch reference counting from blocking GC between embedding batches.
|
|
1317
|
+
|
|
1318
|
+
### v1.96.0 (2026-05-15)
|
|
1319
|
+
|
|
1320
|
+
**IVG SDK, CLI, Deploy, and iris-embedded-python-wrapper adoption** (spec 160):
|
|
1321
|
+
|
|
1322
|
+
**`iris_vector_graph.sdk`** — new thin HTTP client, zero `intersystems-irispython` required:
|
|
1323
|
+
```python
|
|
1324
|
+
from iris_vector_graph import IVGClient
|
|
1325
|
+
with IVGClient("http://localhost:8200", api_key="...") as client:
|
|
1326
|
+
result = client.execute_cypher("MATCH (n) RETURN count(n)")
|
|
1327
|
+
result = client.execute_aql("FOR v IN 1..2 OUTBOUND @s g RETURN v._key", bind_vars={"s": "n1"})
|
|
1328
|
+
```
|
|
1329
|
+
- `IVGRecord` — dict-style row access: `r["name"]` and `r[0]` both work
|
|
1330
|
+
- `IVGError` / `IVGClientError` / `IVGServerError` — structured exception hierarchy
|
|
1331
|
+
- `AsyncIVGClient` — identical async API
|
|
1332
|
+
- Retry on 5xx (3× exponential backoff)
|
|
1333
|
+
- `ping()`, `schema()`, `server_info()`, `stats()`, `explain()`, `load_ndjson()`
|
|
1334
|
+
|
|
1335
|
+
**`ivg` CLI** — `pip install "iris-vector-graph[cli]"`:
|
|
1336
|
+
```bash
|
|
1337
|
+
ivg connect http://localhost:8200
|
|
1338
|
+
ivg query "MATCH (n) RETURN count(n)"
|
|
1339
|
+
ivg query --aql "FOR v IN 1..2 OUTBOUND @s g RETURN v" --bind s=mesh:D003924
|
|
1340
|
+
ivg load graph.ndjson
|
|
1341
|
+
ivg schema init / status
|
|
1342
|
+
ivg indexes list / rebuild
|
|
1343
|
+
ivg server start --iris-host localhost --iris-port 1972
|
|
1344
|
+
```
|
|
1345
|
+
|
|
1346
|
+
**`deploy/`** folder — four setup paths:
|
|
1347
|
+
- `deploy/docker/compose.yml` — fresh IRIS + IVG server in Docker
|
|
1348
|
+
- `deploy/bolt-on/install.sh` — bolt onto existing IRIS
|
|
1349
|
+
- `deploy/README.md` — decision guide
|
|
1350
|
+
|
|
1351
|
+
**`iris-embedded-python-wrapper` adoption**:
|
|
1352
|
+
- `IRISGraphEngine.from_wrapper(hostname=...)` — new classmethod using `iris.dbapi.connect()`
|
|
1353
|
+
- `cypher_api.py` `_make_engine()` prefers wrapper's `iris.dbapi.connect()` when available
|
|
1354
|
+
- `iris-embedded-python-wrapper>=0.5.20` added to `[full]` extra
|
|
1355
|
+
- `EmbeddedConnection` retained for backward compatibility
|
|
1356
|
+
|
|
1257
1357
|
### v1.95.0 (2026-05-15)
|
|
1258
1358
|
|
|
1259
1359
|
**Admin API** — IVG now has a production-grade admin surface matching Neo4j/ArangoDB:
|
|
@@ -733,6 +733,26 @@ conditions = tool("patient-123") # → {"conditions": [...], "error": None}
|
|
|
733
733
|
|
|
734
734
|
## Changelog
|
|
735
735
|
|
|
736
|
+
### v1.98.0 (2026-05-28)
|
|
737
|
+
- **feat**: Spec 162 — Centrality Suite. Four new graph centrality algorithms shipping via the GraphStore protocol + Cypher procedures, closing the biggest coverage gap vs Neo4j GDS:
|
|
738
|
+
- `engine.degree_centrality(direction, predicate, top_k)` — out/in/both, predicate-filtered, normalized to (n-1)
|
|
739
|
+
- `engine.betweenness_centrality(sample_size, direction, max_hops, top_k, mem_budget_mb, progress_callback)` — Brandes (2001), Brandes-Pich approximation when sampled, per-source memory budget, progress reporting
|
|
740
|
+
- `engine.closeness_centrality(formula, direction, max_hops, top_k, progress_callback)` — `harmonic` (default, robust to disconnection) and `classical` formulas
|
|
741
|
+
- `engine.eigenvector_centrality(max_iter, tol, top_k, progress_callback)` — power iteration over raw adjacency `A`, L2-normalized, matches `networkx.eigenvector_centrality_numpy` (NOT PageRank with α=1)
|
|
742
|
+
- **feat**: 4 Cypher procedures `CALL ivg.degreeCentrality({...}) YIELD node, score, degree`, `CALL ivg.betweenness({...}) YIELD node, score`, `CALL ivg.closeness({...})`, `CALL ivg.eigenvector({...})` with map-parameter syntax. Procedure-call validator rejects unknown keys (FR-029 forward-compat reservation for future `weighted` variants).
|
|
743
|
+
- **feat**: `engine.get_centrality_warnings()` reads `^IVG.warnings("centrality", ...)` for memory-budget skip events; Brandes writes warning entries when per-source predecessor accumulator exceeds `mem_budget_mb`.
|
|
744
|
+
- **feat**: 4 new `GraphStore` protocol methods (`execute_degree_centrality`, `execute_betweenness`, `execute_closeness`, `execute_eigenvector`) + 4 capability keys.
|
|
745
|
+
- **feat**: 4 new Pydantic input models exported from package root: `DegreeCentralityInput`, `BetweennessInput`, `ClosenessInput`, `EigenvectorInput`.
|
|
746
|
+
- **feat**: `scripts/test-container.sh` — single entry point for IRIS test container ops (replaces ad-hoc `IRISContainer.start()` calls). Includes graceful `iris stop IRIS quietly` before `docker rm -f` (Bug T mitigation).
|
|
747
|
+
- **feat**: Container renamed from legacy `gqs-ivg-test` (ephemeral) to `ivg-iris` (persistent, registered in lab_manager registry as `status: active`).
|
|
748
|
+
- **fix (Bug S)**: Native API gref-bypass production path for centrality algorithms — when `iris.createIRIS().classMethodValue('Graph.KG.Centrality', ...)` returns `<CLASS DOES NOT EXIST>` from `%SYS.DBSRV` cache, the Python store automatically falls back to direct `^KG` global access via `iris_inst.set/get/nextSubscript/kill`. Algorithm correctness proven via Pearson > 0.85 with networkx reference on `networkx.betweenness_centrality`, `harmonic_centrality`, `eigenvector_centrality_numpy`, `out_degree_centrality`.
|
|
749
|
+
- **fix (Bug T)**: `iris-devtester>=1.18.1` upstream fix — `IRISContainer.__exit__()` now calls `stop_gracefully()` (graceful `iris stop IRIS quietly`) before Docker SIGKILL, preventing silent row loss on container restart. IVG bumped pin to `iris-devtester>=1.18.1`.
|
|
750
|
+
- **fix (Bug R, false alarm)**: Investigation confirmed `los-iris` slowness from unindexed `rdf_labels.s`/`rdf_props.s` was specific to productivity-framework's container schema; IVG's `initialize_schema()` already creates `idx_labels_s` and `idx_props_s`. No IVG fix needed.
|
|
751
|
+
- **test**: 16 new e2e tests in `tests/e2e/test_centrality_e2e.py` — networkx parity master gate + per-algorithm validation (15 PASS + 1 XFAIL Bug S Cypher path, deeply documented).
|
|
752
|
+
- **test**: 30 new unit tests in `tests/unit/test_centrality_unit.py` and `tests/unit/test_centrality_translator.py` — protocol routing, Pydantic validation, Cypher translator FR-029 enforcement.
|
|
753
|
+
- **docs**: `specs/162-centrality-suite/{spec,plan,research,data-model,quickstart,tasks}.md` — full spec with 5 clarifications integrated, 29 functional requirements, 6 NFRs, 10 user stories.
|
|
754
|
+
- **docs**: `ENGINEERING_DEBT.md` Bug S + Bug T entries with reproduction steps and resolution context.
|
|
755
|
+
|
|
736
756
|
### v1.88.0 (2026-05-07)
|
|
737
757
|
- **feat**: `ffi_kg_build_2hop_exact_int` Rust function — integer-indexed single-pass 2-hop dedup from `^KG("out")`. Writes results to `^ArnoKG("2h")` temp global; `DecodeBuildResults()` ObjectScript method converts to `^KG("deg2p_exact")`
|
|
738
758
|
- **feat**: `KHop2CountExact(src, pred)` ObjectScript method — O(1) `$Get(^KG("deg2p_exact"))`, fallback to `KHop2Count` when not populated. 0.14ms p50 on SF10 (was 70ms)
|
|
@@ -1182,6 +1202,81 @@ Four openCypher gaps closed, all from structured gap analysis against the openCy
|
|
|
1182
1202
|
|
|
1183
1203
|
## Changelog
|
|
1184
1204
|
|
|
1205
|
+
### v1.97.0 (2026-05-16)
|
|
1206
|
+
|
|
1207
|
+
**Three new features closing the gap with NornicDB-style vector-graph fusion:**
|
|
1208
|
+
|
|
1209
|
+
**`CALL ivg.retrieve(query, limit, bm25_name?, vec_label?, rrf_k?)`** — single Cypher procedure for BM25 + vector + RRF fusion. Equivalent to NornicDB's `db.retrieve()`:
|
|
1210
|
+
```cypher
|
|
1211
|
+
CALL ivg.retrieve('insulin resistance', 10) YIELD node, score
|
|
1212
|
+
MATCH (node)-[:INTERACTS_WITH]->(target)
|
|
1213
|
+
RETURN target.node_id, score ORDER BY score DESC
|
|
1214
|
+
```
|
|
1215
|
+
Generates three-CTE SQL (BM25_Retrieve + Vec_Retrieve + Retrieve with FULL OUTER JOIN RRF fusion).
|
|
1216
|
+
|
|
1217
|
+
**`WHERE vector_distance(n, $vec) < 0.3`** — scalar vector similarity predicate in WHERE/RETURN clauses:
|
|
1218
|
+
```cypher
|
|
1219
|
+
MATCH (n:Gene) WHERE vector_distance(n, $vec) < 0.3 RETURN n.node_id
|
|
1220
|
+
MATCH (n) RETURN n.node_id, vector_similarity(n, $vec) AS sim ORDER BY sim DESC LIMIT 10
|
|
1221
|
+
```
|
|
1222
|
+
Translates to `VECTOR_COSINE()` subquery against `kg_NodeEmbeddings`.
|
|
1223
|
+
|
|
1224
|
+
**`Graph.KG.EmbedQueue`** — async embedding queue (ObjectScript). Write nodes now, embeddings appear asynchronously:
|
|
1225
|
+
```python
|
|
1226
|
+
engine.enqueue_for_embedding(["n1", "n2", "n3"], embedding_config="my-model")
|
|
1227
|
+
engine.start_background_embedding(batch_size=100)
|
|
1228
|
+
count = engine.embed_queue_pending()
|
|
1229
|
+
result = engine.process_embed_queue(batch_size=50)
|
|
1230
|
+
```
|
|
1231
|
+
Uses `^EmbedQueue` global + `Graph.KG.EmbedQueue.ProcessBatch()` via `%SYSTEM.Task`.
|
|
1232
|
+
|
|
1233
|
+
### v1.96.2 (2026-05-15)
|
|
1234
|
+
|
|
1235
|
+
**Fix**: `_build_index_registry()` infinite loop when `iris.gref` is a `MagicMock` (external connections via IVR or test mocks). `gref.order()` on a MagicMock returns a MagicMock, which is never `== ""`, causing infinite loop. Fix: `isinstance(name, str)` guard + `range(10000)` hard limit. Reported by IVR session.
|
|
1236
|
+
|
|
1237
|
+
### v1.96.1 (2026-05-15)
|
|
1238
|
+
|
|
1239
|
+
**Fix**: Lazy-load `sentence-transformers` and `torch` to prevent repeated memory allocation. Inline `from sentence_transformers import SentenceTransformer` in `embed_text()`, `embed_nodes()`, `embed_edges()` replaced with module-level singletons (`_get_sentence_transformers()`, `_load_sentence_transformer()`). Prevents torch reference counting from blocking GC between embedding batches.
|
|
1240
|
+
|
|
1241
|
+
### v1.96.0 (2026-05-15)
|
|
1242
|
+
|
|
1243
|
+
**IVG SDK, CLI, Deploy, and iris-embedded-python-wrapper adoption** (spec 160):
|
|
1244
|
+
|
|
1245
|
+
**`iris_vector_graph.sdk`** — new thin HTTP client, zero `intersystems-irispython` required:
|
|
1246
|
+
```python
|
|
1247
|
+
from iris_vector_graph import IVGClient
|
|
1248
|
+
with IVGClient("http://localhost:8200", api_key="...") as client:
|
|
1249
|
+
result = client.execute_cypher("MATCH (n) RETURN count(n)")
|
|
1250
|
+
result = client.execute_aql("FOR v IN 1..2 OUTBOUND @s g RETURN v._key", bind_vars={"s": "n1"})
|
|
1251
|
+
```
|
|
1252
|
+
- `IVGRecord` — dict-style row access: `r["name"]` and `r[0]` both work
|
|
1253
|
+
- `IVGError` / `IVGClientError` / `IVGServerError` — structured exception hierarchy
|
|
1254
|
+
- `AsyncIVGClient` — identical async API
|
|
1255
|
+
- Retry on 5xx (3× exponential backoff)
|
|
1256
|
+
- `ping()`, `schema()`, `server_info()`, `stats()`, `explain()`, `load_ndjson()`
|
|
1257
|
+
|
|
1258
|
+
**`ivg` CLI** — `pip install "iris-vector-graph[cli]"`:
|
|
1259
|
+
```bash
|
|
1260
|
+
ivg connect http://localhost:8200
|
|
1261
|
+
ivg query "MATCH (n) RETURN count(n)"
|
|
1262
|
+
ivg query --aql "FOR v IN 1..2 OUTBOUND @s g RETURN v" --bind s=mesh:D003924
|
|
1263
|
+
ivg load graph.ndjson
|
|
1264
|
+
ivg schema init / status
|
|
1265
|
+
ivg indexes list / rebuild
|
|
1266
|
+
ivg server start --iris-host localhost --iris-port 1972
|
|
1267
|
+
```
|
|
1268
|
+
|
|
1269
|
+
**`deploy/`** folder — four setup paths:
|
|
1270
|
+
- `deploy/docker/compose.yml` — fresh IRIS + IVG server in Docker
|
|
1271
|
+
- `deploy/bolt-on/install.sh` — bolt onto existing IRIS
|
|
1272
|
+
- `deploy/README.md` — decision guide
|
|
1273
|
+
|
|
1274
|
+
**`iris-embedded-python-wrapper` adoption**:
|
|
1275
|
+
- `IRISGraphEngine.from_wrapper(hostname=...)` — new classmethod using `iris.dbapi.connect()`
|
|
1276
|
+
- `cypher_api.py` `_make_engine()` prefers wrapper's `iris.dbapi.connect()` when available
|
|
1277
|
+
- `iris-embedded-python-wrapper>=0.5.20` added to `[full]` extra
|
|
1278
|
+
- `EmbeddedConnection` retained for backward compatibility
|
|
1279
|
+
|
|
1185
1280
|
### v1.95.0 (2026-05-15)
|
|
1186
1281
|
|
|
1187
1282
|
**Admin API** — IVG now has a production-grade admin surface matching Neo4j/ArangoDB:
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/// Centrality algorithms for the Knowledge Graph.
|
|
2
|
+
/// Pure ObjectScript over ^KG globals — no iris module dependency, safe from any call context.
|
|
3
|
+
///
|
|
4
|
+
/// Algorithms (spec 162):
|
|
5
|
+
/// - DegreeCentralityJson — out/in/total-degree centrality, normalized to (n-1)
|
|
6
|
+
/// - BetweennessJson — Brandes' algorithm with optional sampling and memory budget
|
|
7
|
+
/// - ClosenessJson — harmonic (default) or classical formula
|
|
8
|
+
/// - EigenvectorJson — power iteration over raw adjacency A (NOT PageRank with α=1)
|
|
9
|
+
///
|
|
10
|
+
/// Storage (read-only):
|
|
11
|
+
/// ^KG("out", 0, s, p, o) outbound edges (shard-0)
|
|
12
|
+
/// ^KG("in", 0, o, p, s) inbound edges (shard-0)
|
|
13
|
+
/// ^KG("deg", node) total out-degree
|
|
14
|
+
/// ^KG("degp", node, pred) per-predicate out-degree
|
|
15
|
+
///
|
|
16
|
+
/// Process-private scratch (killed on exit):
|
|
17
|
+
/// ^||CENT(-score, node) descending sort buffer (shared across algos)
|
|
18
|
+
/// ^||BC.* Brandes per-source accumulators (Betweenness only)
|
|
19
|
+
/// ^||CL.* Closeness accumulators
|
|
20
|
+
/// ^||EIG.* Eigenvector x and xnew vectors
|
|
21
|
+
///
|
|
22
|
+
/// Durable warning log:
|
|
23
|
+
/// ^IVG.warnings("centrality", $H, source) = "BC mem budget exceeded ..."
|
|
24
|
+
///
|
|
25
|
+
/// Concurrency contract:
|
|
26
|
+
/// Reads ^KG live — no snapshot, no lock. Concurrent mutations during a multi-second
|
|
27
|
+
/// run may produce inconsistent scores. Run on a quiescent graph for reproducibility.
|
|
28
|
+
/// Matches Neo4j GDS contract (FR-021).
|
|
29
|
+
Class Graph.KG.Centrality Extends %RegisteredObject [ SqlSchemaName = Graph_KG ]
|
|
30
|
+
{
|
|
31
|
+
|
|
32
|
+
/// Degree Centrality, normalized to (n-1).
|
|
33
|
+
///
|
|
34
|
+
/// @param direction "out" (default) | "in" | "both"
|
|
35
|
+
/// @param predicate Empty string = all predicates; otherwise filter to one predicate
|
|
36
|
+
/// @param topK Max rows to return (default 10000; 0 = uncapped)
|
|
37
|
+
/// @returns JSON array: [{"id":"node","score":0.42,"degree":17}, ...] sorted desc by score
|
|
38
|
+
ClassMethod DegreeCentralityJson(direction As %String = "out", predicate As %String = "", topK As %Integer = 10000) As %String
|
|
39
|
+
{
|
|
40
|
+
// Count nodes for normalization
|
|
41
|
+
Set nodeCount = 0
|
|
42
|
+
Set node = ""
|
|
43
|
+
For {
|
|
44
|
+
Set node = $Order(^KG("deg", node))
|
|
45
|
+
Quit:node=""
|
|
46
|
+
Set nodeCount = nodeCount + 1
|
|
47
|
+
}
|
|
48
|
+
If nodeCount = 0 Return "[]"
|
|
49
|
+
Set norm = 1.0 / $Select(nodeCount > 1: nodeCount - 1, 1: 1)
|
|
50
|
+
|
|
51
|
+
Kill ^||CENT
|
|
52
|
+
|
|
53
|
+
// Compute degree for each node based on direction + predicate
|
|
54
|
+
Set node = ""
|
|
55
|
+
For {
|
|
56
|
+
Set node = $Order(^KG("deg", node))
|
|
57
|
+
Quit:node=""
|
|
58
|
+
|
|
59
|
+
Set deg = 0
|
|
60
|
+
If predicate = "" {
|
|
61
|
+
// All predicates
|
|
62
|
+
If direction = "out" {
|
|
63
|
+
Set deg = +$Get(^KG("deg", node))
|
|
64
|
+
} ElseIf direction = "in" {
|
|
65
|
+
// Walk ^KG("in", 0, node, p, s) and count
|
|
66
|
+
Set p = ""
|
|
67
|
+
For {
|
|
68
|
+
Set p = $Order(^KG("in", 0, node, p))
|
|
69
|
+
Quit:p=""
|
|
70
|
+
Set s = ""
|
|
71
|
+
For {
|
|
72
|
+
Set s = $Order(^KG("in", 0, node, p, s))
|
|
73
|
+
Quit:s=""
|
|
74
|
+
Set deg = deg + 1
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
} Else {
|
|
78
|
+
// both = out + in
|
|
79
|
+
Set deg = +$Get(^KG("deg", node))
|
|
80
|
+
Set p = ""
|
|
81
|
+
For {
|
|
82
|
+
Set p = $Order(^KG("in", 0, node, p))
|
|
83
|
+
Quit:p=""
|
|
84
|
+
Set s = ""
|
|
85
|
+
For {
|
|
86
|
+
Set s = $Order(^KG("in", 0, node, p, s))
|
|
87
|
+
Quit:s=""
|
|
88
|
+
Set deg = deg + 1
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
} Else {
|
|
93
|
+
// Specific predicate
|
|
94
|
+
If direction = "out" {
|
|
95
|
+
Set deg = +$Get(^KG("degp", node, predicate))
|
|
96
|
+
} ElseIf direction = "in" {
|
|
97
|
+
// Walk ^KG("in", 0, node, predicate, *)
|
|
98
|
+
Set s = ""
|
|
99
|
+
For {
|
|
100
|
+
Set s = $Order(^KG("in", 0, node, predicate, s))
|
|
101
|
+
Quit:s=""
|
|
102
|
+
Set deg = deg + 1
|
|
103
|
+
}
|
|
104
|
+
} Else {
|
|
105
|
+
Set deg = +$Get(^KG("degp", node, predicate))
|
|
106
|
+
Set s = ""
|
|
107
|
+
For {
|
|
108
|
+
Set s = $Order(^KG("in", 0, node, predicate, s))
|
|
109
|
+
Quit:s=""
|
|
110
|
+
Set deg = deg + 1
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
Set score = deg * norm
|
|
116
|
+
// Use negative score for descending $Order
|
|
117
|
+
Set ^||CENT(-score, node) = deg
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Build JSON result array (top-K)
|
|
121
|
+
Set result = ##class(%DynamicArray).%New()
|
|
122
|
+
Set negScore = ""
|
|
123
|
+
Set count = 0
|
|
124
|
+
Set cap = $Select(topK > 0: topK, 1: 999999999)
|
|
125
|
+
For {
|
|
126
|
+
Set negScore = $Order(^||CENT(negScore))
|
|
127
|
+
Quit:negScore=""
|
|
128
|
+
Set n = ""
|
|
129
|
+
For {
|
|
130
|
+
Set n = $Order(^||CENT(negScore, n), 1, deg)
|
|
131
|
+
Quit:n=""
|
|
132
|
+
Set obj = ##class(%DynamicObject).%New()
|
|
133
|
+
Do obj.%Set("id", n)
|
|
134
|
+
Do obj.%Set("score", -negScore, "number")
|
|
135
|
+
Do obj.%Set("degree", deg, "number")
|
|
136
|
+
Do result.%Push(obj)
|
|
137
|
+
Set count = count + 1
|
|
138
|
+
Quit:count>=cap
|
|
139
|
+
}
|
|
140
|
+
Quit:count>=cap
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
Kill ^||CENT
|
|
144
|
+
Return result.%ToJSON()
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/// SQL stored procedure wrapper for DegreeCentralityJson.
|
|
148
|
+
/// Used by the Cypher translator's ivg.degreeCentrality CTE.
|
|
149
|
+
ClassMethod kgDegreeCentrality(direction As %String, predicate As %String, topK As %Integer) As %String [ SqlName = kg_DegreeCentrality, SqlProc ]
|
|
150
|
+
{
|
|
151
|
+
Return ..DegreeCentralityJson(direction, predicate, topK)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
}
|
|
@@ -97,10 +97,8 @@ ClassMethod DeleteAdjacency(s As %String, p As %String, o As %String)
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
|
|
100
|
-
///
|
|
101
|
-
///
|
|
102
|
-
/// predicate: default predicate if using [s, o] pair format.
|
|
103
|
-
/// Returns count of edges written.
|
|
100
|
+
/// DEPRECATED: writes to process-private ^||KG via Python iris.gref — data lost on process exit.
|
|
101
|
+
/// Use BulkIngestEdgesSQL instead. Kept for backward compatibility only.
|
|
104
102
|
ClassMethod BulkIngestEdges(edgesJson As %String, predicate As %String = "R") As %Integer [ Internal, Language = python ]
|
|
105
103
|
{
|
|
106
104
|
import iris, json, warnings
|
|
@@ -124,4 +122,88 @@ ClassMethod BulkIngestEdges(edgesJson As %String, predicate As %String = "R") As
|
|
|
124
122
|
return n
|
|
125
123
|
}
|
|
126
124
|
|
|
125
|
+
/// Bulk ingest edges via SQL INSERT + persistent ^KG global writes.
|
|
126
|
+
/// Writes to BOTH rdf_edges (SQL, queryable via Cypher) AND ^KG globals (BFS acceleration).
|
|
127
|
+
/// edges_json: JSON array of {"s":s,"p":p,"o":o} objects.
|
|
128
|
+
/// Returns count of edges written.
|
|
129
|
+
ClassMethod BulkIngestEdgesSQL(edgesJson As %String, predicate As %String = "KNOWS") As %Integer
|
|
130
|
+
{
|
|
131
|
+
Set data = {}.%FromJSON(edgesJson)
|
|
132
|
+
Set n = 0
|
|
133
|
+
TSTART
|
|
134
|
+
Set iter = data.%GetIterator()
|
|
135
|
+
While iter.%GetNext(.idx, .edge) {
|
|
136
|
+
Set s = edge.s
|
|
137
|
+
Set p = $Select(edge.p'="":edge.p, 1:predicate)
|
|
138
|
+
Set o = edge.o
|
|
139
|
+
If (s = "") || (o = "") { Continue }
|
|
140
|
+
If s = o { Continue }
|
|
141
|
+
&sql(INSERT INTO Graph_KG.rdf_edges (s, p, o_id) VALUES (:s, :p, :o))
|
|
142
|
+
If (SQLCODE '= 0) && (SQLCODE '= -119) { Continue }
|
|
143
|
+
Do ..WriteAdjacency(s, p, o, "1.0")
|
|
144
|
+
Set n = n + 1
|
|
145
|
+
}
|
|
146
|
+
TCOMMIT
|
|
147
|
+
Quit n
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/// Bulk ingest edges from a JSON file path — streams large datasets without MAXSTRING limit.
|
|
151
|
+
ClassMethod BulkIngestEdgesFile(filePath As %String, predicate As %String = "KNOWS") As %Integer
|
|
152
|
+
{
|
|
153
|
+
Set stream = ##class(%Stream.FileCharacter).%New()
|
|
154
|
+
Do stream.LinkToFile(filePath)
|
|
155
|
+
Set json = ""
|
|
156
|
+
While 'stream.AtEnd {
|
|
157
|
+
Set json = json _ stream.Read(32000)
|
|
158
|
+
}
|
|
159
|
+
Quit ..BulkIngestEdgesSQL(json, predicate)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/// Bulk ingest nodes + labels + properties via batched SQL.
|
|
163
|
+
/// nodesJson: JSON array of {"id":id, "labels":["L1",...], "props":{"k":"v",...}} objects.
|
|
164
|
+
/// Returns count of nodes written.
|
|
165
|
+
ClassMethod BulkIngestNodesSQL(nodesJson As %String) As %Integer
|
|
166
|
+
{
|
|
167
|
+
Set data = {}.%FromJSON(nodesJson)
|
|
168
|
+
Set n = 0
|
|
169
|
+
TSTART
|
|
170
|
+
Set iter = data.%GetIterator()
|
|
171
|
+
While iter.%GetNext(.idx, .node) {
|
|
172
|
+
Set id = node.id
|
|
173
|
+
If id = "" { Continue }
|
|
174
|
+
&sql(INSERT INTO Graph_KG.nodes (node_id) VALUES (:id))
|
|
175
|
+
If (SQLCODE '= 0) && (SQLCODE '= -119) { Continue }
|
|
176
|
+
If $IsObject(node.labels) {
|
|
177
|
+
Set liter = node.labels.%GetIterator()
|
|
178
|
+
While liter.%GetNext(.li, .label) {
|
|
179
|
+
If label = "" { Continue }
|
|
180
|
+
&sql(INSERT INTO Graph_KG.rdf_labels (s, label) VALUES (:id, :label))
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
If $IsObject(node.props) {
|
|
184
|
+
Set piter = node.props.%GetIterator()
|
|
185
|
+
While piter.%GetNext(.key, .val) {
|
|
186
|
+
If key = "" { Continue }
|
|
187
|
+
Try {
|
|
188
|
+
Set valStr = $Select($IsObject(val):val.%ToJSON(), $IsValidNum(val):val, 1:""""_$Replace($ZConvert(val,"O","UTF8"),"""","""""")_"""")
|
|
189
|
+
&sql(INSERT INTO Graph_KG.rdf_props (s, "key", val) VALUES (:id, :key, :valStr))
|
|
190
|
+
} Catch ex { }
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
Set n = n + 1
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
If $IsObject(node.props) {
|
|
197
|
+
Set piter = node.props.%GetIterator()
|
|
198
|
+
While piter.%GetNext(.key, .val) {
|
|
199
|
+
If key = "" { Continue }
|
|
200
|
+
Set valStr = $Select($IsObject(val):val.%ToJSON(), 1:""""_$Replace(val,"""","""""")_"""")
|
|
201
|
+
&sql(INSERT INTO Graph_KG.rdf_props (s, "key", val) VALUES (:id, :key, :valStr))
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
Set n = n + 1
|
|
205
|
+
} TCOMMIT
|
|
206
|
+
Quit n
|
|
207
|
+
}
|
|
208
|
+
|
|
127
209
|
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
Class Graph.KG.EmbedQueue Extends %RegisteredObject
|
|
2
|
+
{
|
|
3
|
+
|
|
4
|
+
/// Global layout: ^EmbedQueue(node_id) = $LB(embedding_config, status, queued_at)
|
|
5
|
+
/// status: "pending" | "done" | "error"
|
|
6
|
+
|
|
7
|
+
ClassMethod Enqueue(nodeId As %String, embeddingConfig As %String = "") As %Status
|
|
8
|
+
{
|
|
9
|
+
Set status = "pending"
|
|
10
|
+
Set queuedAt = $ZDateTime($ZDateTimeH($ZDateTime(,3),3),3)
|
|
11
|
+
Set ^EmbedQueue(nodeId) = $LB(embeddingConfig, status, queuedAt)
|
|
12
|
+
Quit $$$OK
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
ClassMethod BulkEnqueue(nodeIds As %DynamicArray, embeddingConfig As %String = "") As %Integer
|
|
16
|
+
{
|
|
17
|
+
Set count = 0
|
|
18
|
+
Set iter = nodeIds.%GetIterator()
|
|
19
|
+
While iter.%GetNext(.idx, .nodeId) {
|
|
20
|
+
Set sc = ..Enqueue(nodeId, embeddingConfig)
|
|
21
|
+
If $$$ISOK(sc) { Set count = count + 1 }
|
|
22
|
+
}
|
|
23
|
+
Quit count
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
ClassMethod ProcessBatch(batchSize As %Integer = 100, timeout As %Integer = 30) As %String
|
|
27
|
+
{
|
|
28
|
+
Set processed = 0
|
|
29
|
+
Set errors = 0
|
|
30
|
+
Set nodeId = ""
|
|
31
|
+
|
|
32
|
+
For {
|
|
33
|
+
Set nodeId = $Order(^EmbedQueue(nodeId))
|
|
34
|
+
Quit:nodeId=""
|
|
35
|
+
Quit:processed>=batchSize
|
|
36
|
+
|
|
37
|
+
Set entry = ^EmbedQueue(nodeId)
|
|
38
|
+
Set embConfig = $List(entry, 1)
|
|
39
|
+
Set status = $List(entry, 2)
|
|
40
|
+
|
|
41
|
+
Continue:status'="pending"
|
|
42
|
+
|
|
43
|
+
Try {
|
|
44
|
+
Set sql = "SELECT EMBEDDING(?, ?) FROM (SELECT 1)"
|
|
45
|
+
Set stmt = ##class(%SQL.Statement).%New()
|
|
46
|
+
Set sc = stmt.%Prepare(sql)
|
|
47
|
+
If $$$ISOK(sc) {
|
|
48
|
+
Set displayName = ##class(Graph.KG.Traversal).GetNodeDisplayText(nodeId)
|
|
49
|
+
If displayName = "" { Set displayName = nodeId }
|
|
50
|
+
Set rs = stmt.%Execute(displayName, embConfig)
|
|
51
|
+
If rs.%SQLCODE = 0 && rs.%Next() {
|
|
52
|
+
Set embVal = rs.%GetData(1)
|
|
53
|
+
If embVal '= "" {
|
|
54
|
+
Set insertSql = "INSERT OR REPLACE INTO Graph_KG.kg_NodeEmbeddings (id, emb) VALUES (?, TO_VECTOR(?, DOUBLE))"
|
|
55
|
+
Set stmt2 = ##class(%SQL.Statement).%New()
|
|
56
|
+
Do stmt2.%Prepare(insertSql)
|
|
57
|
+
Do stmt2.%Execute(nodeId, embVal)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
Set $List(^EmbedQueue(nodeId), 2) = "done"
|
|
62
|
+
Set processed = processed + 1
|
|
63
|
+
} Catch ex {
|
|
64
|
+
Set $List(^EmbedQueue(nodeId), 2) = "error"
|
|
65
|
+
Set errors = errors + 1
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
Set result = {"processed": (processed), "errors": (errors)}
|
|
70
|
+
Quit result.%ToJSON()
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
ClassMethod PendingCount() As %Integer
|
|
74
|
+
{
|
|
75
|
+
Set count = 0
|
|
76
|
+
Set nodeId = ""
|
|
77
|
+
For {
|
|
78
|
+
Set nodeId = $Order(^EmbedQueue(nodeId))
|
|
79
|
+
Quit:nodeId=""
|
|
80
|
+
If $List(^EmbedQueue(nodeId), 2) = "pending" { Set count = count + 1 }
|
|
81
|
+
}
|
|
82
|
+
Quit count
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
ClassMethod ClearDone() As %Integer
|
|
86
|
+
{
|
|
87
|
+
Set cleared = 0
|
|
88
|
+
Set nodeId = ""
|
|
89
|
+
For {
|
|
90
|
+
Set nodeId = $Order(^EmbedQueue(nodeId))
|
|
91
|
+
Quit:nodeId=""
|
|
92
|
+
If $List(^EmbedQueue(nodeId), 2) = "done" {
|
|
93
|
+
Kill ^EmbedQueue(nodeId)
|
|
94
|
+
Set cleared = cleared + 1
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
Quit cleared
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/// Start a background IRIS Task to process the queue
|
|
101
|
+
ClassMethod StartBackgroundTask(batchSize As %Integer = 100) As %String
|
|
102
|
+
{
|
|
103
|
+
Set task = ##class(%SYSTEM.Task).%New()
|
|
104
|
+
Set task.Name = "IVG EmbedQueue Worker"
|
|
105
|
+
Set task.NameSpace = $ZNamespace
|
|
106
|
+
Set task.TaskClass = "Graph.KG.EmbedQueueTask"
|
|
107
|
+
Set sc = task.%Save()
|
|
108
|
+
If $$$ISERR(sc) { Quit "error: "_$System.Status.GetErrorText(sc) }
|
|
109
|
+
Set taskId = task.%Id()
|
|
110
|
+
Do ##class(%SYSTEM.Task).RunNow(taskId)
|
|
111
|
+
Quit taskId
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
}
|
|
@@ -11,11 +11,13 @@ from .capabilities import IRISCapabilities
|
|
|
11
11
|
from .store_protocol import GraphStore
|
|
12
12
|
from .stores import IRISGraphStore
|
|
13
13
|
from .cypher.aql import translate_aql, AQLParseError, AQLTranslationError
|
|
14
|
+
from .sdk import IVGClient, AsyncIVGClient, IVGRecord, IVGError, IVGClientError, IVGServerError
|
|
14
15
|
from ._validate import (
|
|
15
16
|
NodeIdInput, EdgeInput, CypherInput,
|
|
16
17
|
IVFBuildInput, VectorSearchInput,
|
|
17
18
|
BM25BuildInput, BM25SearchInput,
|
|
18
19
|
KHop2Input, TemporalEdgeInput, VecSearchInput,
|
|
20
|
+
DegreeCentralityInput, BetweennessInput, ClosenessInput, EigenvectorInput,
|
|
19
21
|
)
|
|
20
22
|
from .vector_utils import VectorOptimizer
|
|
21
23
|
from .text_search import TextSearchEngine
|
|
@@ -80,4 +82,10 @@ __all__ = [
|
|
|
80
82
|
"translate_aql",
|
|
81
83
|
"AQLParseError",
|
|
82
84
|
"AQLTranslationError",
|
|
85
|
+
"IVGClient",
|
|
86
|
+
"AsyncIVGClient",
|
|
87
|
+
"IVGRecord",
|
|
88
|
+
"IVGError",
|
|
89
|
+
"IVGClientError",
|
|
90
|
+
"IVGServerError",
|
|
83
91
|
]
|