iris-vector-graph 1.94.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.94.0 → iris_vector_graph-1.98.0}/PKG-INFO +138 -8
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/README.md +131 -6
- iris_vector_graph-1.98.0/iris_src/src/Graph/KG/Centrality.cls +154 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/__init__.py +12 -0
- {iris_vector_graph-1.94.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.98.0/iris_vector_graph/cypher/aql/__init__.py +28 -0
- iris_vector_graph-1.98.0/iris_vector_graph/cypher/aql/ast.py +148 -0
- iris_vector_graph-1.98.0/iris_vector_graph/cypher/aql/lexer.py +190 -0
- iris_vector_graph-1.98.0/iris_vector_graph/cypher/aql/parser.py +387 -0
- iris_vector_graph-1.98.0/iris_vector_graph/cypher/aql/translator.py +270 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/translator.py +279 -2
- iris_vector_graph-1.98.0/iris_vector_graph/cypher_api.py +644 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/dbapi_utils.py +3 -3
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/embedded.py +5 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/engine.py +632 -77
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/store_protocol.py +18 -1
- iris_vector_graph-1.98.0/iris_vector_graph/stores/iris_sql_store.py +1320 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/pyproject.toml +9 -2
- {iris_vector_graph-1.94.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_aql_e2e.py +56 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_biomedical_demo.py +22 -16
- 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.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_fraud_demo.py +19 -14
- iris_vector_graph-1.98.0/tests/unit/test_aql_lexer.py +118 -0
- iris_vector_graph-1.98.0/tests/unit/test_aql_parser.py +86 -0
- iris_vector_graph-1.98.0/tests/unit/test_aql_translator.py +229 -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.94.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.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_store_protocol.py +36 -0
- iris_vector_graph-1.94.0/iris_vector_graph/cypher_api.py +0 -340
- iris_vector_graph-1.94.0/iris_vector_graph/stores/iris_sql_store.py +0 -661
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/.gitignore +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/LICENSE +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/demo_biomedical.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/demo_fraud_detection.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/demo_fraud_detection_sql.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/demo_utils.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/demo_working_system.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical/loaders.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical/resolver.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical/types.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical_legacy/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical_legacy/biomedical_engine.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical_legacy/biomedical_schema.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/biomedical_legacy/legacy_wrapper.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/fraud/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/fraud/loaders.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/fraud/resolver.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/domains/fraud/types.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/graphQL.http +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/hybrid_vector_graph_query.cypher +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/examples/rest.http +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Algorithms.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/ArnoAccel.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/BM25Index.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/BenchFormat.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/BenchSeeder.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Benchmark.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Edge.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/GraphIndex.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/IVFIndex.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Loader.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/MCPService.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/MCPToolSet.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/MCPTools.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Meta.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/NKGAccel.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/PLAIDSearch.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/PageRank.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/PyOps.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Service.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Snapshot.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Subgraph.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/TemporalIndex.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/TestEdge.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/Traversal.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/Graph/KG/VecIndex.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/IVG/CypherEngine.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/IVG/Percentile.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/PageRankEmbedded.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/User.Exec.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_src/src/iris/vector/graph/GraphOperators.cls +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/bolt_server.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/0-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/1-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/10-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/11-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/12-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/13-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/14-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/15-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/16-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/17-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/18-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/19-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/20-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/21-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/22-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/23-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/24-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/25-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/26-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/27-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/28-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/29-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/30-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/31-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/32-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/33-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/34-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/35-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/36-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/37-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/38-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/39-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/40-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/41-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/42-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/43-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/44-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/45-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/46-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/47-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/48-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/49-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/50-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/51-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/52-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/53-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/54-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/55-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/56-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/57-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/58-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/59-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/6-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/60-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/61-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/62-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/63-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/64-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/65-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/66-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/67-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/68-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/69-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/7-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/70-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/71-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/72-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/73-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/74-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/75-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/8-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/9-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/app-b124e26129aa436b26fe.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/filter-a7c44e713bf19d31f6b2849160b1bba8.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.eot +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.woff +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.woff2 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.eot +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.woff +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.woff2 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.eot +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.woff +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.woff2 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.eot +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.woff +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.woff2 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Bold.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Italic.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Light.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-LightItalic.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Regular.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Semibold.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/codicon.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/filter.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.eot +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.woff +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.woff2 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/group-by.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.eot +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.woff +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/sort.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/sort1.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/sort2.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/streamline.eot +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/streamline.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/streamline.ttf +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/fonts/streamline.woff +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/group-by-89c6aaa756bc3548cc6ab3d2be4d2862.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/Favorites.mp4 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/Keystrokes.mp4 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/ProjectFiles.mp4 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/ReusableFrame.mp4 +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/SidebarDB_Iinfo.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/Stream.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/aura-logo-inverted.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/aura-logo.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/books.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/clusters.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/community.jpg +0 -0
- {iris_vector_graph-1.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/browserconfig.xml +0 -0
- {iris_vector_graph-1.94.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.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/favicon.ico +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/device-icons/manifest.json +0 -0
- {iris_vector_graph-1.94.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.94.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.94.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.94.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.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/labeled_node.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/more_nodes.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/neo4j-favicon.ico +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/neo4j-logo-inverted.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/neo4j-logo.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/northwind/customer-orders.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/northwind/order-graph.png +0 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/northwind/product-graph.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/one_node.png +0 -0
- {iris_vector_graph-1.94.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.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/query-plan.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/rel-props.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/relationships.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_code_frame.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_cypher_warn.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_editor.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_sidebar.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/images/screen_stream.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/sort-8d6f482c21de572ceeb5ac93623e6c97.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/sort1-d2dc515571213fc0ca99b0341b88e413.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/assets/sort2-31050964e7eb2042325f7bcbba3d58ad.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/bolt-worker-dfa551eb0861cc080843.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/cypher-editor-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/editor-455af92e7e1dc39fdbc8060f6680ab32.worker.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/index.html +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/manifest.json +0 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/HierarchicalLayout.worker-O6WHYssL.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/asciidoc.8O6YIVRy.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/auto-track.BlKugDvg.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/bash.CLAyaf9k.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/c.l4fEI10z.js +0 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/csharp.ChqrQYCS.js +0 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/css.B1LHiudN.js +0 -0
- {iris_vector_graph-1.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher-editor-linting.png +0 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher-reference.gif +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/cypher.C3qdyJ5B.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/docker.CF7EZT1T.js +0 -0
- {iris_vector_graph-1.94.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.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/go.FsJyBHVG.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/graphql.BlTzkzAJ.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/history-quick-search.gif +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index-CY0cZcsW.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index-H7L207gH.css +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.BpRu7Js3.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.C74acnU7.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.CHatcJcU.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.D6ZMQedT.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.DPZla5MT.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.dzIUqrzq.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.leyiHvaQ.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.qJ6VE118.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/index.umd.B9yhfa5Y.js +0 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/java.BBXwBh9f.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/java.CQ1iJ0-D.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/javadoc.UnquSOIj.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/javascript.CYTqTa0W.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/json.BIkJg-Cj.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/jsx.Cy_hP1z6.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/kotlin.D_6l0VkM.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/lintWorker-QNEp56W3.js +0 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/movie-model.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/movies-active-B2SzHIc1.svg +0 -0
- {iris_vector_graph-1.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/php.BKb6XVba.js +0 -0
- {iris_vector_graph-1.94.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.94.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.94.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.94.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.94.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.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/python.tCcUC3U7.js +0 -0
- {iris_vector_graph-1.94.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.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/regex.C_VuIVtC.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/rust.CtSATZMt.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/saved-cypher.gif +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/scalable-graph-visualization.gif +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/sql.CfOAbw6n.js +0 -0
- {iris_vector_graph-1.94.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.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/table-visualization.gif +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/typescript.3Tbm37mD.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/xml-doc.h79Tu9Aw.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/assets/yaml.B-Jvd59g.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/android-chrome-192x192.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/apple-touch-icon.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/favicon-16x16.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/favicon-194x194.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/favicon-32x32.png +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/favicon.ico +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/favicons/safari-pinned-tab.svg +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/index.html +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/preview/manifest.json +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/ui-libs-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/browser_static/vendor-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/bulk_loader.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/capabilities.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/algorithms/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/algorithms/paths.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/ast.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/lexer.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/cypher/parser.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/fhir_bridge.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/fusion.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/constants.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/engine.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/pooling.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/resolvers.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/gql/schema.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/index_protocol.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/models.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/operators.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/py.typed +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/result.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/security.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/status.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/stores/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/text_search.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/utils.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/iris_vector_graph/vector_utils.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/fhir_bridges.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/fraud_sample_data.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/globals_schema.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/graph_path_globals.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/graph_walk_tvf.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/migrations/000_base_schema_iris.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/migrations/001_add_nodepk_table.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/migrations/001_rollback_nodepk.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/migrations/002_add_fk_constraints.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/operators.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/operators_fixed.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/procedures/kg_PageRank.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/rdf_reifications.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/sql/schema.sql +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/TESTING.md +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmark_parser.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/README.md +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/bench.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/bench_utils.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/benchmark_neo4j.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/bfs_benchmark.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/establish_baseline.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/graph_gen.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/ic2_profile.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/iris_baseline_run.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/iris_os_run.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/ldbc_full_loader.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/load_neo4j.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/benchmarks/synthetic_baseline.csv +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/contract/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/contract/test_cypher_api.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/contract/test_cypher_api_errors.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/contract/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/contract/test_graphql_schema.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/contract/test_ppr_api.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/curl_suite.sh +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/conftest.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_approx_count_distinct.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_arno_bfs_global.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_arno_bfs_unified.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_biomedical_ui.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_coerce_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_gaps_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_sprints_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_cypher_vl_path_bfs.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_embedded_wgproto_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_execution_contexts.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_execution_contexts_new.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_fhir_bridges_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_fraud_ui.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_autogen_startup.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_cypher_passthrough.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_node_queries.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_semantic_search.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_gql_traversal.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_graph_kernels_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_hla_kg_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ic13_shortest_path.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ic3_exact_count.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_index_protocol.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_introspection_api.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ivf_insert.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_large_output_chunked.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_lazy_node_resolution.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_multi_query_engine_platform.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_named_paths_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_nkg_index_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_operator_wiring_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_pattern_comprehension_reduce.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_plaid.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_plaid_search_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ppr_cls_fast_path.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_ppr_guided_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_procedure_installation.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_reification_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_schema_procedures_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_store_injection_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_streaming_bfs.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_api.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_ingest.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_multi_context.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_search.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_setup.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_stress_traversal.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_subgraph_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_subquery_call_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_temporal_store_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_untested_methods.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/e2e/test_vecindex_e2e.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/conftest.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/gql/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/gql/test_graphql_mutations.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/gql/test_graphql_nested_queries.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/gql/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/gql/test_graphql_vector_search.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_bidirectional_ppr.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cls_layer.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_advanced.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_enhancements.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_multi_type.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_rd.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_rel_vars.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_single_type.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_untyped.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_embeddings_api.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_fastapi_graphql.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_fhir_bridges_integration.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_named_paths_integration.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_advanced_benchmarks.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_constraints.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_graph_analytics.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_migration.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_performance.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_nodepk_production_scale.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_objectscript_classes.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_pagerank_sql_optimization.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_reification_integration.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_schema_migration.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_stored_procedure_install.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/integration/test_subquery_call_integration.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/performance/conftest.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/performance/scale_benchmark.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/performance/test_ppr_stress.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/performance/test_stress_v1_5.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/run_all_tests.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_iris_rest_api.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_networkx_loader.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_performance_benchmarks.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_pyops_vector_conversion.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_python_operators.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_python_sdk.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_schema_validation.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_sql_queries.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/python/test_vector_functions.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/__init__.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/test_lexer.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/test_lexer_advanced.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/test_parser.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/cypher/test_parser_advanced.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_batch_mutations.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_bfs_arno.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_bm25_index.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_bolt_server.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cls_deployment.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_coverage_boost.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_benchmark.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_benchmark_scale.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_case_when.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_e2e_new_features.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_functions.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_parser.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_posos_bugs.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_procedures.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_translator.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_union_exists.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_var_length.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_edge_embeddings.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_edgeprop_ndjson.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_embed_nodes_params.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_embedded.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_embedded_wgproto.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_dimension_fix.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_embeddings.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_mocked.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_engine_status.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_fhir_bridge.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_fhir_bridges.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_get_nodes.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_graph_kernels.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_graphql_dataloader.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_index_handle.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_index_protocol.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_ingest_formats.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_introspection_api.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_ivf_index.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_ivgresult.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_module_coverage.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_named_graphs.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_named_paths.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_operators_coverage.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_operators_wiring.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_plaid_search.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_ppr_guided_subgraph.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_reification.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_schema_init.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_schema_procedures.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_shortest_path.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_snapshot.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_sql_splitter.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_sql_table_bridge.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_subgraph.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_subquery_call.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_supporting_modules.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_temporal_cypher.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_temporal_edges.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_translator_coverage.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_unified_edge_store.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_validation.py +0 -0
- {iris_vector_graph-1.94.0 → iris_vector_graph-1.98.0}/tests/unit/test_vector_search_routing.py +0 -0
- {iris_vector_graph-1.94.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'
|
|
@@ -188,17 +193,19 @@ The single 2025.1 failure: `SKIP` clause uses `ORDER BY + OFFSET` on JSON_TABLE-
|
|
|
188
193
|
|
|
189
194
|
Two live demos ship in `src/iris_demo_server/`:
|
|
190
195
|
|
|
191
|
-
| Demo | URL | What it shows |
|
|
192
|
-
|
|
193
|
-
| **Fraud Detection** | `http://localhost:8200/fraud` | Real-time fraud scoring, bitemporal audit trails
|
|
194
|
-
| **Biomedical Research** | `http://localhost:8200/bio` | Protein similarity search, pathway traversal, D3 network visualization |
|
|
196
|
+
| Demo | URL | What it shows | Docs |
|
|
197
|
+
|------|-----|--------------|------|
|
|
198
|
+
| **Fraud Detection** | `http://localhost:8200/fraud` | Real-time fraud scoring, ring detection, money mule identification, bitemporal audit trails | [docs/demos/FRAUD_DEMO.md](docs/demos/FRAUD_DEMO.md) |
|
|
199
|
+
| **Biomedical Research** | `http://localhost:8200/bio` | Protein similarity search, pathway traversal, hybrid vector+graph queries, D3 network visualization | [docs/demos/BIOMEDICAL_DEMO.md](docs/demos/BIOMEDICAL_DEMO.md) |
|
|
200
|
+
|
|
201
|
+
The fraud demo is inspired by the [AWS Neptune fraud graph reference notebook](https://github.com/aws/graph-notebook/blob/main/src/graph_notebook/notebooks/01-Neptune-Database/03-Sample-Applications/01-Fraud-Graphs/01-Building-a-Fraud-Graph-Application.ipynb) — the same fraud ring and identity theft patterns (first-party and third-party fraud on credit card transaction data), running on IRIS with Cypher instead of Gremlin.
|
|
195
202
|
|
|
196
203
|
```bash
|
|
197
204
|
# 1. Start IRIS
|
|
198
205
|
docker compose up -d
|
|
199
206
|
|
|
200
207
|
# 2. Install deps (once)
|
|
201
|
-
pip install iris-vector-graph[full]
|
|
208
|
+
pip install "iris-vector-graph[full]"
|
|
202
209
|
|
|
203
210
|
# 3. Start demo server
|
|
204
211
|
python -m uvicorn iris_demo_server.app:app --port 8200 --host 127.0.0.1 \
|
|
@@ -208,7 +215,7 @@ python -m uvicorn iris_demo_server.app:app --port 8200 --host 127.0.0.1 \
|
|
|
208
215
|
open http://localhost:8200
|
|
209
216
|
```
|
|
210
217
|
|
|
211
|
-
The demos use the generic IVG graph engine — no separate backend required.
|
|
218
|
+
The demos use the generic IVG graph engine — no separate backend required.
|
|
212
219
|
|
|
213
220
|
---
|
|
214
221
|
|
|
@@ -803,6 +810,26 @@ conditions = tool("patient-123") # → {"conditions": [...], "error": None}
|
|
|
803
810
|
|
|
804
811
|
## Changelog
|
|
805
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
|
+
|
|
806
833
|
### v1.88.0 (2026-05-07)
|
|
807
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")`
|
|
808
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)
|
|
@@ -1252,6 +1279,109 @@ Four openCypher gaps closed, all from structured gap analysis against the openCy
|
|
|
1252
1279
|
|
|
1253
1280
|
## Changelog
|
|
1254
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
|
+
|
|
1357
|
+
### v1.95.0 (2026-05-15)
|
|
1358
|
+
|
|
1359
|
+
**Admin API** — IVG now has a production-grade admin surface matching Neo4j/ArangoDB:
|
|
1360
|
+
|
|
1361
|
+
**Fixed: `SHOW INDEXES` / `SHOW CONSTRAINTS`** — were empty stubs; now return actual BM25, IVF, HNSW, PLAID, ^KG, ^NKG indexes and uniqueness constraints. Neo4j Browser, LangChain, and all Neo4j-compatible tools now see the real index state on connect.
|
|
1362
|
+
|
|
1363
|
+
**New REST endpoints on the Cypher API:**
|
|
1364
|
+
- `GET /schema` — labels, relationship types, property keys, counts
|
|
1365
|
+
- `GET /indexes` — full index inventory (all types)
|
|
1366
|
+
- `GET /server` — IVG version, IRIS version, namespace, schema status, BFS path
|
|
1367
|
+
- `GET /metrics` — Prometheus-format metrics (node/edge/embedding counts, status)
|
|
1368
|
+
- `GET /stats` — counts by label, predicate, embedding coverage
|
|
1369
|
+
- `POST /admin/schema/init` — initialize schema
|
|
1370
|
+
- `POST /admin/indexes/rebuild` — rebuild ^KG and ^NKG adjacency indexes
|
|
1371
|
+
- `POST /admin/embed` — trigger node embedding
|
|
1372
|
+
- `POST /admin/load` — stream NDJSON graph data
|
|
1373
|
+
- `GET /admin/export` — export graph as NDJSON
|
|
1374
|
+
- `POST /admin/snapshot` — save snapshot to disk
|
|
1375
|
+
- `GET /admin/queries` — list active IRIS queries
|
|
1376
|
+
- `DELETE /admin/queries/{id}` — kill a running query
|
|
1377
|
+
- `POST /admin/explain` — translate Cypher to SQL (debugging + optimization)
|
|
1378
|
+
|
|
1379
|
+
**GraphStore protocol additions** (6 new methods):
|
|
1380
|
+
`get_node_count()`, `get_edge_count()`, `get_labels()`, `get_relationship_types()`, `list_indexes()`, `server_info()`
|
|
1381
|
+
|
|
1382
|
+
**Engine additions:**
|
|
1383
|
+
`engine.list_active_queries()`, `engine.kill_query(id)`
|
|
1384
|
+
|
|
1255
1385
|
### v1.94.0 (2026-05-15)
|
|
1256
1386
|
|
|
1257
1387
|
**GraphStore Protocol** — `IRISGraphEngine` now has a pluggable storage backend (spec 156).
|
|
@@ -116,17 +116,19 @@ The single 2025.1 failure: `SKIP` clause uses `ORDER BY + OFFSET` on JSON_TABLE-
|
|
|
116
116
|
|
|
117
117
|
Two live demos ship in `src/iris_demo_server/`:
|
|
118
118
|
|
|
119
|
-
| Demo | URL | What it shows |
|
|
120
|
-
|
|
121
|
-
| **Fraud Detection** | `http://localhost:8200/fraud` | Real-time fraud scoring, bitemporal audit trails
|
|
122
|
-
| **Biomedical Research** | `http://localhost:8200/bio` | Protein similarity search, pathway traversal, D3 network visualization |
|
|
119
|
+
| Demo | URL | What it shows | Docs |
|
|
120
|
+
|------|-----|--------------|------|
|
|
121
|
+
| **Fraud Detection** | `http://localhost:8200/fraud` | Real-time fraud scoring, ring detection, money mule identification, bitemporal audit trails | [docs/demos/FRAUD_DEMO.md](docs/demos/FRAUD_DEMO.md) |
|
|
122
|
+
| **Biomedical Research** | `http://localhost:8200/bio` | Protein similarity search, pathway traversal, hybrid vector+graph queries, D3 network visualization | [docs/demos/BIOMEDICAL_DEMO.md](docs/demos/BIOMEDICAL_DEMO.md) |
|
|
123
|
+
|
|
124
|
+
The fraud demo is inspired by the [AWS Neptune fraud graph reference notebook](https://github.com/aws/graph-notebook/blob/main/src/graph_notebook/notebooks/01-Neptune-Database/03-Sample-Applications/01-Fraud-Graphs/01-Building-a-Fraud-Graph-Application.ipynb) — the same fraud ring and identity theft patterns (first-party and third-party fraud on credit card transaction data), running on IRIS with Cypher instead of Gremlin.
|
|
123
125
|
|
|
124
126
|
```bash
|
|
125
127
|
# 1. Start IRIS
|
|
126
128
|
docker compose up -d
|
|
127
129
|
|
|
128
130
|
# 2. Install deps (once)
|
|
129
|
-
pip install iris-vector-graph[full]
|
|
131
|
+
pip install "iris-vector-graph[full]"
|
|
130
132
|
|
|
131
133
|
# 3. Start demo server
|
|
132
134
|
python -m uvicorn iris_demo_server.app:app --port 8200 --host 127.0.0.1 \
|
|
@@ -136,7 +138,7 @@ python -m uvicorn iris_demo_server.app:app --port 8200 --host 127.0.0.1 \
|
|
|
136
138
|
open http://localhost:8200
|
|
137
139
|
```
|
|
138
140
|
|
|
139
|
-
The demos use the generic IVG graph engine — no separate backend required.
|
|
141
|
+
The demos use the generic IVG graph engine — no separate backend required.
|
|
140
142
|
|
|
141
143
|
---
|
|
142
144
|
|
|
@@ -731,6 +733,26 @@ conditions = tool("patient-123") # → {"conditions": [...], "error": None}
|
|
|
731
733
|
|
|
732
734
|
## Changelog
|
|
733
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
|
+
|
|
734
756
|
### v1.88.0 (2026-05-07)
|
|
735
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")`
|
|
736
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)
|
|
@@ -1180,6 +1202,109 @@ Four openCypher gaps closed, all from structured gap analysis against the openCy
|
|
|
1180
1202
|
|
|
1181
1203
|
## Changelog
|
|
1182
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
|
+
|
|
1280
|
+
### v1.95.0 (2026-05-15)
|
|
1281
|
+
|
|
1282
|
+
**Admin API** — IVG now has a production-grade admin surface matching Neo4j/ArangoDB:
|
|
1283
|
+
|
|
1284
|
+
**Fixed: `SHOW INDEXES` / `SHOW CONSTRAINTS`** — were empty stubs; now return actual BM25, IVF, HNSW, PLAID, ^KG, ^NKG indexes and uniqueness constraints. Neo4j Browser, LangChain, and all Neo4j-compatible tools now see the real index state on connect.
|
|
1285
|
+
|
|
1286
|
+
**New REST endpoints on the Cypher API:**
|
|
1287
|
+
- `GET /schema` — labels, relationship types, property keys, counts
|
|
1288
|
+
- `GET /indexes` — full index inventory (all types)
|
|
1289
|
+
- `GET /server` — IVG version, IRIS version, namespace, schema status, BFS path
|
|
1290
|
+
- `GET /metrics` — Prometheus-format metrics (node/edge/embedding counts, status)
|
|
1291
|
+
- `GET /stats` — counts by label, predicate, embedding coverage
|
|
1292
|
+
- `POST /admin/schema/init` — initialize schema
|
|
1293
|
+
- `POST /admin/indexes/rebuild` — rebuild ^KG and ^NKG adjacency indexes
|
|
1294
|
+
- `POST /admin/embed` — trigger node embedding
|
|
1295
|
+
- `POST /admin/load` — stream NDJSON graph data
|
|
1296
|
+
- `GET /admin/export` — export graph as NDJSON
|
|
1297
|
+
- `POST /admin/snapshot` — save snapshot to disk
|
|
1298
|
+
- `GET /admin/queries` — list active IRIS queries
|
|
1299
|
+
- `DELETE /admin/queries/{id}` — kill a running query
|
|
1300
|
+
- `POST /admin/explain` — translate Cypher to SQL (debugging + optimization)
|
|
1301
|
+
|
|
1302
|
+
**GraphStore protocol additions** (6 new methods):
|
|
1303
|
+
`get_node_count()`, `get_edge_count()`, `get_labels()`, `get_relationship_types()`, `list_indexes()`, `server_info()`
|
|
1304
|
+
|
|
1305
|
+
**Engine additions:**
|
|
1306
|
+
`engine.list_active_queries()`, `engine.kill_query(id)`
|
|
1307
|
+
|
|
1183
1308
|
### v1.94.0 (2026-05-15)
|
|
1184
1309
|
|
|
1185
1310
|
**GraphStore Protocol** — `IRISGraphEngine` now has a pluggable storage backend (spec 156).
|
|
@@ -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
|
}
|