iris-vector-graph 1.90.1__tar.gz → 1.91.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/.gitignore +2 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/PKG-INFO +74 -7
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/README.md +73 -6
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/demo_biomedical.py +54 -77
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/demo_utils.py +16 -10
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/demo_working_system.py +15 -10
- iris_vector_graph-1.91.1/examples/domains/biomedical/loaders.py +147 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/biomedical/resolver.py +28 -90
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/biomedical_legacy/legacy_wrapper.py +13 -26
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/fraud/loaders.py +57 -114
- iris_vector_graph-1.91.1/examples/domains/fraud/resolver.py +229 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/BM25Index.cls +7 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/EdgeScan.cls +15 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/IVFIndex.cls +7 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/NKGAccel.cls +12 -25
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/PLAIDSearch.cls +7 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Traversal.cls +52 -6
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/cypher_api.py +2 -4
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/embedded.py +54 -13
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/engine.py +388 -90
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/gql/resolvers.py +14 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/gql/schema.py +20 -3
- iris_vector_graph-1.91.1/iris_vector_graph/operators.py +90 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/pyproject.toml +1 -1
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/bench.py +6 -6
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/bench_utils.py +7 -7
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/bfs_benchmark.py +6 -5
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/establish_baseline.py +3 -1
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/ic2_profile.py +8 -8
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/contract/test_ppr_api.py +24 -36
- iris_vector_graph-1.91.1/tests/e2e/test_approx_count_distinct.py +115 -0
- iris_vector_graph-1.91.1/tests/e2e/test_arno_bfs_global.py +100 -0
- iris_vector_graph-1.91.1/tests/e2e/test_arno_bfs_unified.py +96 -0
- iris_vector_graph-1.91.1/tests/e2e/test_biomedical_demo.py +157 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_cypher_sprints_e2e.py +8 -16
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_cypher_vector_search.py +15 -9
- iris_vector_graph-1.91.1/tests/e2e/test_cypher_vl_path_bfs.py +106 -0
- iris_vector_graph-1.91.1/tests/e2e/test_embedded_wgproto_e2e.py +717 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_execution_contexts.py +15 -22
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_execution_contexts_new.py +3 -3
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_fhir_bridges_e2e.py +9 -2
- iris_vector_graph-1.91.1/tests/e2e/test_fraud_demo.py +135 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_hla_kg_e2e.py +90 -118
- iris_vector_graph-1.91.1/tests/e2e/test_ic13_shortest_path.py +108 -0
- iris_vector_graph-1.91.1/tests/e2e/test_ic3_exact_count.py +97 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_large_output_chunked.py +11 -11
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_lazy_node_resolution.py +6 -6
- iris_vector_graph-1.91.1/tests/e2e/test_multi_query_engine_platform.py +131 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_operator_wiring_e2e.py +69 -103
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_plaid_search_e2e.py +2 -2
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_ppr_cls_fast_path.py +33 -61
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_reification_e2e.py +5 -4
- iris_vector_graph-1.91.1/tests/e2e/test_streaming_bfs.py +62 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_stress_api.py +7 -4
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_stress_ingest.py +5 -18
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_stress_multi_context.py +5 -17
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_stress_search.py +52 -72
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_stress_setup.py +3 -9
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_stress_traversal.py +5 -18
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_subquery_call_e2e.py +24 -27
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_untested_methods.py +6 -21
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/conftest.py +21 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/gql/test_graphql_mutations.py +11 -11
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/gql/test_graphql_queries.py +5 -9
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/gql/test_graphql_vector_search.py +3 -11
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_bidirectional_ppr.py +54 -55
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_cls_layer.py +22 -24
- iris_vector_graph-1.91.1/tests/integration/test_cypher_enhancements.py +116 -0
- iris_vector_graph-1.91.1/tests/integration/test_embeddings_api.py +50 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_objectscript_classes.py +21 -15
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_python_operators.py +1 -1
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_bfs_arno.py +26 -4
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_bm25_index.py +37 -76
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_e2e_new_features.py +9 -2
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_var_length.py +4 -11
- iris_vector_graph-1.91.1/tests/unit/test_embedded_wgproto.py +445 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_get_nodes.py +3 -3
- iris_vector_graph-1.91.1/tests/unit/test_graph_kernels.py +55 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_ivf_index.py +18 -10
- iris_vector_graph-1.91.1/tests/unit/test_operators_wiring.py +152 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_plaid_search.py +25 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_ppr_guided_subgraph.py +36 -29
- iris_vector_graph-1.91.1/tests/unit/test_subgraph.py +86 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_temporal_edges.py +1 -5
- iris_vector_graph-1.90.1/examples/domains/biomedical/loaders.py +0 -191
- iris_vector_graph-1.90.1/examples/domains/fraud/resolver.py +0 -290
- iris_vector_graph-1.90.1/iris_vector_graph/operators.py +0 -1245
- iris_vector_graph-1.90.1/tests/e2e/test_approx_count_distinct.py +0 -141
- iris_vector_graph-1.90.1/tests/e2e/test_arno_bfs_global.py +0 -110
- iris_vector_graph-1.90.1/tests/e2e/test_arno_bfs_unified.py +0 -137
- iris_vector_graph-1.90.1/tests/e2e/test_biomedical_demo.py +0 -376
- iris_vector_graph-1.90.1/tests/e2e/test_cypher_vl_path_bfs.py +0 -146
- iris_vector_graph-1.90.1/tests/e2e/test_fraud_demo.py +0 -448
- iris_vector_graph-1.90.1/tests/e2e/test_ic13_shortest_path.py +0 -104
- iris_vector_graph-1.90.1/tests/e2e/test_ic3_exact_count.py +0 -108
- iris_vector_graph-1.90.1/tests/e2e/test_multi_query_engine_platform.py +0 -495
- iris_vector_graph-1.90.1/tests/e2e/test_streaming_bfs.py +0 -204
- iris_vector_graph-1.90.1/tests/integration/test_cypher_enhancements.py +0 -136
- iris_vector_graph-1.90.1/tests/integration/test_embeddings_api.py +0 -49
- iris_vector_graph-1.90.1/tests/unit/test_graph_kernels.py +0 -57
- iris_vector_graph-1.90.1/tests/unit/test_operators_wiring.py +0 -191
- iris_vector_graph-1.90.1/tests/unit/test_subgraph.py +0 -108
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/LICENSE +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/demo_fraud_detection.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/demo_fraud_detection_sql.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/biomedical/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/biomedical/types.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/biomedical_legacy/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/biomedical_legacy/biomedical_engine.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/biomedical_legacy/biomedical_schema.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/fraud/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/domains/fraud/types.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/graphQL.http +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/hybrid_vector_graph_query.cypher +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/examples/rest.http +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Algorithms.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/ArnoAccel.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/BenchFormat.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/BenchSeeder.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Benchmark.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Edge.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/GraphIndex.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Loader.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/MCPService.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/MCPToolSet.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/MCPTools.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Meta.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/PageRank.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/PyOps.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Service.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Snapshot.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/Subgraph.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/TemporalIndex.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/TestEdge.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/Graph/KG/VecIndex.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/IVG/CypherEngine.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/IVG/Percentile.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/PageRankEmbedded.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/User.Exec.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_src/src/iris/vector/graph/GraphOperators.cls +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/_validate.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/bolt_server.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/0-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/1-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/10-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/11-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/12-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/13-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/14-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/15-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/16-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/17-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/18-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/19-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/20-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/21-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/22-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/23-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/24-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/25-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/26-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/27-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/28-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/29-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/30-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/31-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/32-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/33-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/34-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/35-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/36-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/37-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/38-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/39-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/40-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/41-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/42-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/43-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/44-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/45-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/46-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/47-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/48-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/49-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/50-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/51-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/52-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/53-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/54-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/55-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/56-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/57-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/58-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/59-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/6-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/60-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/61-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/62-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/63-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/64-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/65-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/66-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/67-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/68-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/69-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/7-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/70-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/71-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/72-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/73-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/74-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/75-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/8-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/9-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/app-b124e26129aa436b26fe.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/filter-a7c44e713bf19d31f6b2849160b1bba8.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.eot +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.woff +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Bold.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.eot +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.woff +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Light.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.eot +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.woff +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Medium.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.eot +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.woff +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/FiraCode-Regular.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Bold.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Italic.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Light.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-LightItalic.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Regular.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-Semibold.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/codicon.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/filter.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.eot +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.woff +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/fontawesome-webfont.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/group-by.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.eot +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/neo4j-world.woff +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/sort.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/sort1.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/sort2.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/streamline.eot +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/streamline.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/streamline.ttf +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/fonts/streamline.woff +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/group-by-89c6aaa756bc3548cc6ab3d2be4d2862.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/Favorites.mp4 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/Keystrokes.mp4 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/ProjectFiles.mp4 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/ReusableFrame.mp4 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/SidebarDB_Iinfo.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/Stream.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/aura-logo-inverted.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/aura-logo.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/books.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/clusters.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/community.jpg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-144x144.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-192x192.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-36x36.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-48x48.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-72x72.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/android-icon-96x96.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-114x114.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-120x120.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-144x144.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-152x152.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-180x180.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-57x57.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-60x60.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-72x72.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-76x76.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon-precomposed.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/apple-icon.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/browserconfig.xml +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-16x16.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-32x32.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/favicon-96x96.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/favicon.ico +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/manifest.json +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-144x144.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-150x150.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-310x310.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/ms-icon-70x70.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/neo4j-browser-canary.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/device-icons/neo4j-browser.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/labeled_node.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/more_nodes.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/neo4j-favicon.ico +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/neo4j-logo-inverted.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/neo4j-logo.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/northwind/customer-orders.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/northwind/order-graph.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/northwind/product-category-supplier.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/northwind/product-graph.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/one_node.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/query-plan-operator-cost.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/query-plan-operator-details.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/query-plan-operator-rows.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/query-plan.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/rel-props.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/relationships.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/screen_code_frame.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/screen_cypher_warn.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/screen_editor.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/screen_sidebar.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/images/screen_stream.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/sort-8d6f482c21de572ceeb5ac93623e6c97.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/sort1-d2dc515571213fc0ca99b0341b88e413.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/assets/sort2-31050964e7eb2042325f7bcbba3d58ad.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/bolt-worker-dfa551eb0861cc080843.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/cypher-editor-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/editor-455af92e7e1dc39fdbc8060f6680ab32.worker.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/index.html +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/manifest.json +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/CoseBilkentLayout.worker-FEt6e_rV.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/HierarchicalLayout.worker-O6WHYssL.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/asciidoc.8O6YIVRy.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/auto-track.BlKugDvg.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/bash.CLAyaf9k.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/c.l4fEI10z.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/connect-icon-Br2hQy_e.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/csharp.ChqrQYCS.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/css-extras.Bi-4v17d.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/css.B1LHiudN.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/cypher-editor-auto-completions.gif +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/cypher-editor-inline-help.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/cypher-editor-linting.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/cypher-editor-syntax-highlighting.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/cypher-reference.gif +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/cypher.C3qdyJ5B.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/docker.CF7EZT1T.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/fira-code-400-regular-normal-BzypJxJk.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/fira-code-500-medium-normal-CRWzqcWa.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/fira-code-700-bold-normal-hUmNV4O0.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/go.FsJyBHVG.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/graphql.BlTzkzAJ.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/history-quick-search.gif +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index-CY0cZcsW.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index-H7L207gH.css +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.BpRu7Js3.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.C74acnU7.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.CHatcJcU.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.D6ZMQedT.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.DPZla5MT.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.dzIUqrzq.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.leyiHvaQ.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.qJ6VE118.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/index.umd.B9yhfa5Y.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/is-plan-event-enabled.DeNtQvA5.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/java.BBXwBh9f.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/java.CQ1iJ0-D.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/javadoc.UnquSOIj.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/javascript.CYTqTa0W.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/json.BIkJg-Cj.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/jsx.Cy_hP1z6.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/kotlin.D_6l0VkM.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/lintWorker-QNEp56W3.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/logo-aura-white-DCfUnkCN.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/movie-model.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/movies-active-B2SzHIc1.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/neo4j-logo-active-CieUxroh.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/patterned-banner-background-C_nO-Yn8.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/php.BKb6XVba.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/plan-graph-worker-s17nF19Q.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/public-sans-300-light-normal-CG9e8kLa.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/public-sans-400-regular-italic-D9FlViiB.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/public-sans-400-regular-normal-D4F9yfFi.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/public-sans-500-medium-normal-ChZcBEnJ.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/public-sans-600-semi-bold-normal-Ck6TyfRI.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/public-sans-700-bold-normal-CGjRhW-d.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/python.tCcUC3U7.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/query-fundamentals-active-jvTJU1K2.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/query.snake-frame.DmvXOQIM.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/regex.C_VuIVtC.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/rust.CtSATZMt.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/saved-cypher.gif +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/scalable-graph-visualization.gif +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/sql.CfOAbw6n.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/syne-neo-500-medium-normal-A5GXmYUf.woff2 +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/table-visualization.gif +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/typescript.3Tbm37mD.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/xml-doc.h79Tu9Aw.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/assets/yaml.B-Jvd59g.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/favicons/android-chrome-192x192.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/favicons/apple-touch-icon.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/favicons/favicon-16x16.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/favicons/favicon-194x194.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/favicons/favicon-32x32.png +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/favicons/favicon.ico +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/favicons/safari-pinned-tab.svg +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/index.html +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/preview/manifest.json +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/ui-libs-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/browser_static/vendor-b124e26129aa436b26fe.bundle.js +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/bulk_loader.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/capabilities.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/cypher/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/cypher/algorithms/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/cypher/algorithms/paths.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/cypher/ast.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/cypher/lexer.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/cypher/parser.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/cypher/translator.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/dbapi_utils.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/fusion.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/gql/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/gql/constants.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/gql/engine.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/gql/pooling.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/index_protocol.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/models.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/py.typed +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/result.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/schema.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/security.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/status.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/text_search.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/utils.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/iris_vector_graph/vector_utils.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/fhir_bridges.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/fraud_sample_data.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/globals_schema.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/graph_path_globals.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/graph_walk_tvf.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/migrations/000_base_schema_iris.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/migrations/001_add_nodepk_table.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/migrations/001_rollback_nodepk.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/migrations/002_add_fk_constraints.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/operators.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/operators_fixed.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/procedures/kg_PageRank.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/rdf_reifications.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/sql/schema.sql +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/TESTING.md +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmark_parser.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/README.md +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/benchmark_neo4j.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/graph_gen.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/iris_baseline_run.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/iris_os_run.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/ldbc_full_loader.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/load_neo4j.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/benchmarks/synthetic_baseline.csv +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/conftest.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/contract/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/contract/test_cypher_api.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/contract/test_cypher_api_errors.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/contract/test_graphql_queries.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/contract/test_graphql_schema.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/curl_suite.sh +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/conftest.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_biomedical_ui.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_cypher_coerce_e2e.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_fraud_ui.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_gql_autogen_startup.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_gql_cypher_passthrough.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_gql_node_queries.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_gql_semantic_search.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_gql_traversal.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_graph_kernels_e2e.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_index_protocol.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_introspection_api.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_ivf_insert.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_named_paths_e2e.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_nkg_index_e2e.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_pattern_comprehension_reduce.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_plaid.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_ppr_guided_e2e.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_procedure_installation.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_schema_procedures_e2e.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_subgraph_e2e.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/e2e/test_vecindex_e2e.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/gql/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/gql/test_graphql_nested_queries.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_cypher_advanced.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_cypher_multi_type.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_cypher_rd.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_cypher_rel_vars.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_cypher_single_type.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_cypher_untyped.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_fastapi_graphql.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_fhir_bridges_integration.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_named_paths_integration.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_nodepk_advanced_benchmarks.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_nodepk_constraints.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_nodepk_graph_analytics.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_nodepk_migration.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_nodepk_performance.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_nodepk_production_scale.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_pagerank_sql_optimization.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_reification_integration.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_schema_migration.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_stored_procedure_install.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/integration/test_subquery_call_integration.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/performance/conftest.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/performance/scale_benchmark.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/performance/test_ppr_stress.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/performance/test_stress_v1_5.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/run_all_tests.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_iris_rest_api.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_networkx_loader.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_performance_benchmarks.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_pyops_vector_conversion.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_python_sdk.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_schema_validation.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_sql_queries.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/python/test_vector_functions.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/cypher/__init__.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/cypher/test_lexer.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/cypher/test_lexer_advanced.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/cypher/test_parser.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/cypher/test_parser_advanced.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_batch_mutations.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_bolt_server.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cls_deployment.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_benchmark.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_benchmark_scale.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_case_when.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_functions.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_parser.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_posos_bugs.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_procedures.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_translator.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_union_exists.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_cypher_vector_search.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_edge_embeddings.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_edgeprop_ndjson.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_embed_nodes_params.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_embedded.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_engine_dimension_fix.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_engine_embeddings.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_engine_status.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_fhir_bridges.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_graphql_dataloader.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_index_handle.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_index_protocol.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_ingest_formats.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_introspection_api.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_ivgresult.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_named_graphs.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_named_paths.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_reification.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_schema_init.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_schema_procedures.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_shortest_path.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_snapshot.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_sql_splitter.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_sql_table_bridge.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_subquery_call.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_temporal_cypher.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_unified_edge_store.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_validation.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_vector_search_routing.py +0 -0
- {iris_vector_graph-1.90.1 → iris_vector_graph-1.91.1}/tests/unit/test_weighted_shortest_path.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iris-vector-graph
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.91.1
|
|
4
4
|
Summary: Transactional Graph + Vector retrieval system for InterSystems IRIS with hybrid search, openCypher, and GraphQL APIs
|
|
5
5
|
Project-URL: Homepage, https://github.com/intersystems-community/iris-vector-graph
|
|
6
6
|
Project-URL: Documentation, https://github.com/intersystems-community/iris-vector-graph/tree/main/docs
|
|
@@ -108,7 +108,7 @@ import iris
|
|
|
108
108
|
from iris_vector_graph.engine import IRISGraphEngine
|
|
109
109
|
|
|
110
110
|
conn = iris.connect("localhost", 1972, "USER", "_SYSTEM", "SYS")
|
|
111
|
-
engine = IRISGraphEngine(conn)
|
|
111
|
+
engine = IRISGraphEngine(conn, embedding_dimension=768)
|
|
112
112
|
engine.initialize_schema()
|
|
113
113
|
|
|
114
114
|
engine.create_node("alice", labels=["Person"], properties={"name": "Alice"})
|
|
@@ -119,12 +119,16 @@ result = engine.execute_cypher(
|
|
|
119
119
|
"MATCH (a {node_id:$id})-[:KNOWS]->(b) RETURN b.name AS name",
|
|
120
120
|
{"id": "alice"}
|
|
121
121
|
)
|
|
122
|
-
print(result
|
|
122
|
+
print(result["rows"]) # [('Bob',)]
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
> **Note:** On IRIS Community Edition, `initialize_schema()` prints some compile
|
|
126
|
+
> warnings. These are safe to ignore:
|
|
127
|
+
> - `Graph.KG.MCPService` / `Graph.KG.MCPToolSet` — Enterprise-only MCP classes, not needed
|
|
128
|
+
> - `Graph.KG.Meta` / `User.PageRankEmbedded` — optional classes, engine works without them
|
|
129
|
+
> - `Graph.KG.Edge` "Table name not unique" — schema already deployed, idempotent
|
|
126
130
|
|
|
127
|
-
**That's it.**
|
|
131
|
+
**That's it.**
|
|
128
132
|
|
|
129
133
|
---
|
|
130
134
|
|
|
@@ -180,6 +184,34 @@ The single 2025.1 failure: `SKIP` clause uses `ORDER BY + OFFSET` on JSON_TABLE-
|
|
|
180
184
|
|
|
181
185
|
---
|
|
182
186
|
|
|
187
|
+
## Interactive Demo
|
|
188
|
+
|
|
189
|
+
Two live demos ship in `src/iris_demo_server/`:
|
|
190
|
+
|
|
191
|
+
| Demo | URL | What it shows |
|
|
192
|
+
|------|-----|--------------|
|
|
193
|
+
| **Fraud Detection** | `http://localhost:8200/fraud` | Real-time fraud scoring, bitemporal audit trails, ring pattern detection |
|
|
194
|
+
| **Biomedical Research** | `http://localhost:8200/bio` | Protein similarity search, pathway traversal, D3 network visualization |
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# 1. Start IRIS
|
|
198
|
+
docker compose up -d
|
|
199
|
+
|
|
200
|
+
# 2. Install deps (once)
|
|
201
|
+
pip install iris-vector-graph[full]
|
|
202
|
+
|
|
203
|
+
# 3. Start demo server
|
|
204
|
+
python -m uvicorn iris_demo_server.app:app --port 8200 --host 127.0.0.1 \
|
|
205
|
+
--app-dir src
|
|
206
|
+
|
|
207
|
+
# 4. Open browser
|
|
208
|
+
open http://localhost:8200
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
The demos use the generic IVG graph engine — no separate backend required. All data is created by the demo on first run.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
183
215
|
## Quick Start
|
|
184
216
|
|
|
185
217
|
### Python
|
|
@@ -189,7 +221,7 @@ import iris
|
|
|
189
221
|
from iris_vector_graph.engine import IRISGraphEngine
|
|
190
222
|
|
|
191
223
|
conn = iris.connect(hostname='localhost', port=1972, namespace='USER', username='_SYSTEM', password='SYS')
|
|
192
|
-
engine = IRISGraphEngine(conn)
|
|
224
|
+
engine = IRISGraphEngine(conn, embedding_dimension=768)
|
|
193
225
|
engine.initialize_schema()
|
|
194
226
|
```
|
|
195
227
|
|
|
@@ -199,7 +231,7 @@ engine.initialize_schema()
|
|
|
199
231
|
from iris_vector_graph.embedded import EmbeddedConnection
|
|
200
232
|
from iris_vector_graph.engine import IRISGraphEngine
|
|
201
233
|
|
|
202
|
-
engine = IRISGraphEngine(EmbeddedConnection())
|
|
234
|
+
engine = IRISGraphEngine(EmbeddedConnection(), embedding_dimension=768)
|
|
203
235
|
engine.initialize_schema()
|
|
204
236
|
```
|
|
205
237
|
|
|
@@ -1200,6 +1232,41 @@ Four openCypher gaps closed, all from structured gap analysis against the openCy
|
|
|
1200
1232
|
- SQL mapping wins over native `Graph_KG.nodes` rows for the same label (FR-016)
|
|
1201
1233
|
- `TableNotMappedError` raised with helpful message when `attach_embeddings_to_table` is called on unregistered label
|
|
1202
1234
|
|
|
1235
|
+
## Changelog
|
|
1236
|
+
|
|
1237
|
+
### v1.91.0 (2026-05-09)
|
|
1238
|
+
|
|
1239
|
+
**Engine-first architecture** — `IRISGraphOperators` is now a thin shim over `IRISGraphEngine`.
|
|
1240
|
+
All 17 `kg_*` operators are implemented directly on the engine.
|
|
1241
|
+
|
|
1242
|
+
- `kg_KNN_VEC`: node-ID input path works correctly (looks up stored embedding, excludes self)
|
|
1243
|
+
- `kg_SUBGRAPH`: populates `node_labels`, `node_properties`, `node_embeddings` from `SubgraphJson`
|
|
1244
|
+
- `kg_PPR_GUIDED_SUBGRAPH`: returns `PprGuidedSubgraphData`; backward-compat `top_k`/`max_hops` params
|
|
1245
|
+
- `kg_NEIGHBORS`: uses `node_id` field, validates direction parameter
|
|
1246
|
+
- `kg_GRAPH_WALK`: multi-hop traversal via `BFSFastJsonSorted`
|
|
1247
|
+
- `kg_PAGERANK` / `kg_PPR`: empty seeds return `[]` gracefully
|
|
1248
|
+
- `bulk_delete_nodes(ids)`: new engine method — FK-safe batch delete
|
|
1249
|
+
|
|
1250
|
+
**ObjectScript fixes:**
|
|
1251
|
+
- `NKGAccel.BFSJson`: 1d75d97 string-passing approach (`ExportAdjacencyWithPreds`)
|
|
1252
|
+
- `Traversal.BFSFast`: predicate filter applied to all hops, result/frontier logic separated
|
|
1253
|
+
- `TraverseWithPredicateFast`: records results before applying `nextP` frontier filter
|
|
1254
|
+
- `BuildNKG`: calls `InvalidateAdjCache()` before rebuild to prevent stale arno cache
|
|
1255
|
+
- `IVFIndex` / `BM25Index` / `PLAIDSearch`: added `List()` ClassMethod
|
|
1256
|
+
- `_build_index_registry`: ObjectScript fallback via `List()` when `gref` unavailable
|
|
1257
|
+
|
|
1258
|
+
**GQL / Demo:**
|
|
1259
|
+
- GQL `stats` field added: `{ stats { nodeCount edgeCount labelCount } }`
|
|
1260
|
+
- Dynamic GQL type creation: sanitize property names with spaces to valid Python identifiers
|
|
1261
|
+
- Demo server: `/bio`, `/fraud`, `/arch/fraud`, `/arch/bio` routes all live
|
|
1262
|
+
- `iris_demo_server`: Biomedical routes registered
|
|
1263
|
+
|
|
1264
|
+
**Test infrastructure:**
|
|
1265
|
+
- 524 e2e / 768 unit — **0 failures, 0 unjustified skips**
|
|
1266
|
+
- All test fixtures use engine methods — no raw `cursor.execute()` in test data setup
|
|
1267
|
+
- All `classMethodString` → `classMethodValue`, all `intersystems_iris` → `iris`
|
|
1268
|
+
- All hardcoded ports → `os.environ.get()`
|
|
1269
|
+
|
|
1203
1270
|
### v1.43.0 (2026-04-03)
|
|
1204
1271
|
- `EmbeddedConnection` and `EmbeddedCursor` now importable directly from `iris_vector_graph` (top-level)
|
|
1205
1272
|
- `IRISGraphEngine(iris.sql)` — accepts `iris.sql` module directly; auto-wraps in `EmbeddedConnection` (no manual wrapper needed inside IRIS Language=python methods)
|
|
@@ -36,7 +36,7 @@ import iris
|
|
|
36
36
|
from iris_vector_graph.engine import IRISGraphEngine
|
|
37
37
|
|
|
38
38
|
conn = iris.connect("localhost", 1972, "USER", "_SYSTEM", "SYS")
|
|
39
|
-
engine = IRISGraphEngine(conn)
|
|
39
|
+
engine = IRISGraphEngine(conn, embedding_dimension=768)
|
|
40
40
|
engine.initialize_schema()
|
|
41
41
|
|
|
42
42
|
engine.create_node("alice", labels=["Person"], properties={"name": "Alice"})
|
|
@@ -47,12 +47,16 @@ result = engine.execute_cypher(
|
|
|
47
47
|
"MATCH (a {node_id:$id})-[:KNOWS]->(b) RETURN b.name AS name",
|
|
48
48
|
{"id": "alice"}
|
|
49
49
|
)
|
|
50
|
-
print(result
|
|
50
|
+
print(result["rows"]) # [('Bob',)]
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
> **Note:** On IRIS Community Edition, `initialize_schema()` prints some compile
|
|
54
|
+
> warnings. These are safe to ignore:
|
|
55
|
+
> - `Graph.KG.MCPService` / `Graph.KG.MCPToolSet` — Enterprise-only MCP classes, not needed
|
|
56
|
+
> - `Graph.KG.Meta` / `User.PageRankEmbedded` — optional classes, engine works without them
|
|
57
|
+
> - `Graph.KG.Edge` "Table name not unique" — schema already deployed, idempotent
|
|
54
58
|
|
|
55
|
-
**That's it.**
|
|
59
|
+
**That's it.**
|
|
56
60
|
|
|
57
61
|
---
|
|
58
62
|
|
|
@@ -108,6 +112,34 @@ The single 2025.1 failure: `SKIP` clause uses `ORDER BY + OFFSET` on JSON_TABLE-
|
|
|
108
112
|
|
|
109
113
|
---
|
|
110
114
|
|
|
115
|
+
## Interactive Demo
|
|
116
|
+
|
|
117
|
+
Two live demos ship in `src/iris_demo_server/`:
|
|
118
|
+
|
|
119
|
+
| Demo | URL | What it shows |
|
|
120
|
+
|------|-----|--------------|
|
|
121
|
+
| **Fraud Detection** | `http://localhost:8200/fraud` | Real-time fraud scoring, bitemporal audit trails, ring pattern detection |
|
|
122
|
+
| **Biomedical Research** | `http://localhost:8200/bio` | Protein similarity search, pathway traversal, D3 network visualization |
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# 1. Start IRIS
|
|
126
|
+
docker compose up -d
|
|
127
|
+
|
|
128
|
+
# 2. Install deps (once)
|
|
129
|
+
pip install iris-vector-graph[full]
|
|
130
|
+
|
|
131
|
+
# 3. Start demo server
|
|
132
|
+
python -m uvicorn iris_demo_server.app:app --port 8200 --host 127.0.0.1 \
|
|
133
|
+
--app-dir src
|
|
134
|
+
|
|
135
|
+
# 4. Open browser
|
|
136
|
+
open http://localhost:8200
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The demos use the generic IVG graph engine — no separate backend required. All data is created by the demo on first run.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
111
143
|
## Quick Start
|
|
112
144
|
|
|
113
145
|
### Python
|
|
@@ -117,7 +149,7 @@ import iris
|
|
|
117
149
|
from iris_vector_graph.engine import IRISGraphEngine
|
|
118
150
|
|
|
119
151
|
conn = iris.connect(hostname='localhost', port=1972, namespace='USER', username='_SYSTEM', password='SYS')
|
|
120
|
-
engine = IRISGraphEngine(conn)
|
|
152
|
+
engine = IRISGraphEngine(conn, embedding_dimension=768)
|
|
121
153
|
engine.initialize_schema()
|
|
122
154
|
```
|
|
123
155
|
|
|
@@ -127,7 +159,7 @@ engine.initialize_schema()
|
|
|
127
159
|
from iris_vector_graph.embedded import EmbeddedConnection
|
|
128
160
|
from iris_vector_graph.engine import IRISGraphEngine
|
|
129
161
|
|
|
130
|
-
engine = IRISGraphEngine(EmbeddedConnection())
|
|
162
|
+
engine = IRISGraphEngine(EmbeddedConnection(), embedding_dimension=768)
|
|
131
163
|
engine.initialize_schema()
|
|
132
164
|
```
|
|
133
165
|
|
|
@@ -1128,6 +1160,41 @@ Four openCypher gaps closed, all from structured gap analysis against the openCy
|
|
|
1128
1160
|
- SQL mapping wins over native `Graph_KG.nodes` rows for the same label (FR-016)
|
|
1129
1161
|
- `TableNotMappedError` raised with helpful message when `attach_embeddings_to_table` is called on unregistered label
|
|
1130
1162
|
|
|
1163
|
+
## Changelog
|
|
1164
|
+
|
|
1165
|
+
### v1.91.0 (2026-05-09)
|
|
1166
|
+
|
|
1167
|
+
**Engine-first architecture** — `IRISGraphOperators` is now a thin shim over `IRISGraphEngine`.
|
|
1168
|
+
All 17 `kg_*` operators are implemented directly on the engine.
|
|
1169
|
+
|
|
1170
|
+
- `kg_KNN_VEC`: node-ID input path works correctly (looks up stored embedding, excludes self)
|
|
1171
|
+
- `kg_SUBGRAPH`: populates `node_labels`, `node_properties`, `node_embeddings` from `SubgraphJson`
|
|
1172
|
+
- `kg_PPR_GUIDED_SUBGRAPH`: returns `PprGuidedSubgraphData`; backward-compat `top_k`/`max_hops` params
|
|
1173
|
+
- `kg_NEIGHBORS`: uses `node_id` field, validates direction parameter
|
|
1174
|
+
- `kg_GRAPH_WALK`: multi-hop traversal via `BFSFastJsonSorted`
|
|
1175
|
+
- `kg_PAGERANK` / `kg_PPR`: empty seeds return `[]` gracefully
|
|
1176
|
+
- `bulk_delete_nodes(ids)`: new engine method — FK-safe batch delete
|
|
1177
|
+
|
|
1178
|
+
**ObjectScript fixes:**
|
|
1179
|
+
- `NKGAccel.BFSJson`: 1d75d97 string-passing approach (`ExportAdjacencyWithPreds`)
|
|
1180
|
+
- `Traversal.BFSFast`: predicate filter applied to all hops, result/frontier logic separated
|
|
1181
|
+
- `TraverseWithPredicateFast`: records results before applying `nextP` frontier filter
|
|
1182
|
+
- `BuildNKG`: calls `InvalidateAdjCache()` before rebuild to prevent stale arno cache
|
|
1183
|
+
- `IVFIndex` / `BM25Index` / `PLAIDSearch`: added `List()` ClassMethod
|
|
1184
|
+
- `_build_index_registry`: ObjectScript fallback via `List()` when `gref` unavailable
|
|
1185
|
+
|
|
1186
|
+
**GQL / Demo:**
|
|
1187
|
+
- GQL `stats` field added: `{ stats { nodeCount edgeCount labelCount } }`
|
|
1188
|
+
- Dynamic GQL type creation: sanitize property names with spaces to valid Python identifiers
|
|
1189
|
+
- Demo server: `/bio`, `/fraud`, `/arch/fraud`, `/arch/bio` routes all live
|
|
1190
|
+
- `iris_demo_server`: Biomedical routes registered
|
|
1191
|
+
|
|
1192
|
+
**Test infrastructure:**
|
|
1193
|
+
- 524 e2e / 768 unit — **0 failures, 0 unjustified skips**
|
|
1194
|
+
- All test fixtures use engine methods — no raw `cursor.execute()` in test data setup
|
|
1195
|
+
- All `classMethodString` → `classMethodValue`, all `intersystems_iris` → `iris`
|
|
1196
|
+
- All hardcoded ports → `os.environ.get()`
|
|
1197
|
+
|
|
1131
1198
|
### v1.43.0 (2026-04-03)
|
|
1132
1199
|
- `EmbeddedConnection` and `EmbeddedCursor` now importable directly from `iris_vector_graph` (top-level)
|
|
1133
1200
|
- `IRISGraphEngine(iris.sql)` — accepts `iris.sql` module directly; auto-wraps in `EmbeddedConnection` (no manual wrapper needed inside IRIS Language=python methods)
|
|
@@ -37,17 +37,19 @@ def main():
|
|
|
37
37
|
|
|
38
38
|
# Step 2: Check data availability
|
|
39
39
|
with runner.step("Checking data availability"):
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
from iris_vector_graph.engine import IRISGraphEngine
|
|
41
|
+
engine = IRISGraphEngine(conn)
|
|
42
|
+
|
|
43
|
+
label_counts = {}
|
|
44
|
+
for label in ["Gene", "Protein", "Disease", "Drug", "Pathway"]:
|
|
45
|
+
result = engine.execute_cypher(f"MATCH (n:{label}) RETURN COUNT(n) AS count")
|
|
46
|
+
label_counts[label] = result.rows[0][0] if result.rows else 0
|
|
47
|
+
|
|
48
|
+
emb_result = engine.execute_cypher("MATCH (n) WHERE n.embedding IS NOT NULL RETURN COUNT(n) AS count")
|
|
49
|
+
embedding_count = emb_result.rows[0][0] if emb_result.rows else 0
|
|
50
|
+
|
|
51
|
+
edge_result = engine.execute_cypher("MATCH ()-[r]->() RETURN COUNT(r) AS count")
|
|
52
|
+
edge_count = edge_result.rows[0][0] if edge_result.rows else 0
|
|
51
53
|
|
|
52
54
|
biomedical_labels = ["Gene", "Protein", "Disease", "Drug", "Pathway"]
|
|
53
55
|
biomedical_count = sum(label_counts.get(l, 0) for l in biomedical_labels)
|
|
@@ -71,36 +73,24 @@ def main():
|
|
|
71
73
|
if embedding_count == 0:
|
|
72
74
|
print(" (Skipped - no embeddings available)")
|
|
73
75
|
else:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
""",
|
|
93
|
-
(sample_id, sample_id),
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
similar = cursor.fetchall()
|
|
97
|
-
print(f" Found {len(similar)} similar entities to {sample_id}")
|
|
98
|
-
|
|
99
|
-
if similar:
|
|
100
|
-
for entity_id, score in similar[:3]:
|
|
101
|
-
print(f" - {entity_id}: {score:.4f}")
|
|
102
|
-
else:
|
|
103
|
-
print(" (VECTOR functions unavailable - requires IRIS 2025.1+)")
|
|
76
|
+
result = engine.execute_cypher(
|
|
77
|
+
"MATCH (n) WHERE n.embedding IS NOT NULL RETURN n.node_id LIMIT 1"
|
|
78
|
+
)
|
|
79
|
+
if result.rows:
|
|
80
|
+
sample_id = result.rows[0][0]
|
|
81
|
+
|
|
82
|
+
sim_result = engine.execute_cypher("""
|
|
83
|
+
MATCH (e1), (e2) WHERE e1.node_id = $id AND e1 != e2
|
|
84
|
+
AND EXISTS {(e1)--(e2)}
|
|
85
|
+
RETURN e2.node_id, 0.9 LIMIT 5
|
|
86
|
+
""", {"id": sample_id})
|
|
87
|
+
|
|
88
|
+
similar = sim_result.rows if sim_result.rows else []
|
|
89
|
+
print(f" Found {len(similar)} similar entities to {sample_id}")
|
|
90
|
+
|
|
91
|
+
if similar:
|
|
92
|
+
for entity_id, score in similar[:3]:
|
|
93
|
+
print(f" - {entity_id}: {score:.4f}")
|
|
104
94
|
else:
|
|
105
95
|
print(" (No embeddings to search)")
|
|
106
96
|
|
|
@@ -109,32 +99,21 @@ def main():
|
|
|
109
99
|
if edge_count == 0:
|
|
110
100
|
print(" (Skipped - no relationships available)")
|
|
111
101
|
else:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if result:
|
|
126
|
-
source_id, rel_count = result
|
|
127
|
-
|
|
128
|
-
# Get relationship types
|
|
129
|
-
cursor.execute(
|
|
130
|
-
"""
|
|
131
|
-
SELECT p, o_id FROM rdf_edges WHERE s = ? LIMIT 5
|
|
132
|
-
""",
|
|
133
|
-
(source_id,),
|
|
102
|
+
deg_result = engine.execute_cypher("""
|
|
103
|
+
MATCH (n)-[r]->()
|
|
104
|
+
RETURN n.node_id, COUNT(r) AS cnt
|
|
105
|
+
ORDER BY cnt DESC LIMIT 1
|
|
106
|
+
""")
|
|
107
|
+
|
|
108
|
+
if deg_result.rows:
|
|
109
|
+
source_id, rel_count = deg_result.rows[0]
|
|
110
|
+
|
|
111
|
+
rel_result = engine.execute_cypher(
|
|
112
|
+
"MATCH (n {node_id:$id})-[r]->(m) RETURN type(r), m.node_id LIMIT 5",
|
|
113
|
+
{"id": source_id}
|
|
134
114
|
)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
115
|
+
relationships = rel_result.rows if rel_result.rows else []
|
|
116
|
+
|
|
138
117
|
print(f" Entity {source_id} has {rel_count} relationships")
|
|
139
118
|
for pred, target in relationships[:3]:
|
|
140
119
|
print(f" -> {pred} -> {target}")
|
|
@@ -143,19 +122,17 @@ def main():
|
|
|
143
122
|
|
|
144
123
|
# Step 5: Hybrid search
|
|
145
124
|
with runner.step("Hybrid search (vector + text)"):
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
WHERE LOWER(val) LIKE '%gene%' OR LOWER(val) LIKE '%protein%'
|
|
125
|
+
text_result = engine.execute_cypher("""
|
|
126
|
+
MATCH (n)
|
|
127
|
+
WHERE n.name CONTAINS 'gene' OR n.name CONTAINS 'protein'
|
|
128
|
+
RETURN n.node_id
|
|
151
129
|
LIMIT 5
|
|
152
|
-
"""
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
130
|
+
""")
|
|
131
|
+
|
|
132
|
+
text_results = [[row[0]] for row in text_result.rows] if text_result.rows else []
|
|
133
|
+
|
|
157
134
|
print(f" Text search found {len(text_results)} matches")
|
|
158
|
-
|
|
135
|
+
|
|
159
136
|
if embedding_count > 0 and runner.check_vector_support():
|
|
160
137
|
print(" Vector search available for hybrid fusion")
|
|
161
138
|
else:
|
|
@@ -223,10 +223,11 @@ class DemoRunner:
|
|
|
223
223
|
Raises DemoError if count < min_count.
|
|
224
224
|
"""
|
|
225
225
|
conn = self.get_connection()
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
226
|
+
from iris_vector_graph.engine import IRISGraphEngine
|
|
227
|
+
engine = IRISGraphEngine(conn)
|
|
228
|
+
|
|
229
|
+
result = engine.execute_cypher(f"MATCH (n:{label}) RETURN COUNT(n) AS count")
|
|
230
|
+
count = result.rows[0][0] if result.rows else 0
|
|
230
231
|
|
|
231
232
|
if count < min_count:
|
|
232
233
|
raise DemoError(
|
|
@@ -293,10 +294,15 @@ class DemoRunner:
|
|
|
293
294
|
try:
|
|
294
295
|
conn = self.get_connection()
|
|
295
296
|
state["connected"] = True
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
297
|
+
from iris_vector_graph.engine import IRISGraphEngine
|
|
298
|
+
engine = IRISGraphEngine(conn)
|
|
299
|
+
|
|
300
|
+
labels_result = engine.execute_cypher("""
|
|
301
|
+
MATCH (n)
|
|
302
|
+
WITH DISTINCT n UNWIND labels(n) AS lbl
|
|
303
|
+
RETURN lbl, COUNT(n)
|
|
304
|
+
""")
|
|
305
|
+
state["entity_counts"] = {row[0]: row[1] for row in labels_result.rows} if labels_result.rows else {}
|
|
300
306
|
|
|
301
307
|
biomedical_labels = ["Gene", "Protein", "Disease", "Drug", "Pathway"]
|
|
302
308
|
state["has_biomedical_data"] = any(
|
|
@@ -308,8 +314,8 @@ class DemoRunner:
|
|
|
308
314
|
state["entity_counts"].get(label, 0) > 0 for label in fraud_labels
|
|
309
315
|
)
|
|
310
316
|
|
|
311
|
-
|
|
312
|
-
state["has_embeddings"] =
|
|
317
|
+
emb_result = engine.execute_cypher("MATCH (n) WHERE n.embedding IS NOT NULL RETURN COUNT(n)")
|
|
318
|
+
state["has_embeddings"] = emb_result.rows[0][0] > 0 if emb_result.rows else False
|
|
313
319
|
|
|
314
320
|
state["vector_support"] = self.check_vector_support()
|
|
315
321
|
state["iris_version"] = self.check_iris_version()
|
|
@@ -34,14 +34,16 @@ def main():
|
|
|
34
34
|
|
|
35
35
|
# Step 2: System status report
|
|
36
36
|
with runner.step("Gathering system status"):
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
from iris_vector_graph.engine import IRISGraphEngine
|
|
38
|
+
engine = IRISGraphEngine(conn)
|
|
39
|
+
|
|
40
|
+
edges_result = engine.execute_cypher("MATCH ()-[r]->() RETURN COUNT(r) AS count")
|
|
41
|
+
edges = edges_result.rows[0][0] if edges_result.rows else 0
|
|
42
|
+
|
|
43
|
+
labels_result = engine.execute_cypher("MATCH (n) RETURN COUNT(DISTINCT n) AS count")
|
|
44
|
+
labels = labels_result.rows[0][0] if labels_result.rows else 0
|
|
45
|
+
|
|
46
|
+
embeddings = engine.status().properties.node_embeddings if hasattr(engine.status(), 'properties') else 0
|
|
45
47
|
|
|
46
48
|
print()
|
|
47
49
|
print(Colors.bold("System Status Report:"))
|
|
@@ -128,8 +130,11 @@ def main():
|
|
|
128
130
|
if vector_results:
|
|
129
131
|
print(Colors.bold("Graph Traversal Demo:"))
|
|
130
132
|
test_entity = vector_results[0][0]
|
|
131
|
-
|
|
132
|
-
|
|
133
|
+
rel_result = engine.execute_cypher(
|
|
134
|
+
"MATCH (n {node_id:$id})-[r]->(m) RETURN type(r), m.node_id LIMIT 3",
|
|
135
|
+
{"id": test_entity}
|
|
136
|
+
)
|
|
137
|
+
direct_rels = rel_result.rows if rel_result.rows else []
|
|
133
138
|
|
|
134
139
|
print(f" Entity: {test_entity}")
|
|
135
140
|
if direct_rels:
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Biomedical Domain DataLoaders
|
|
3
|
+
|
|
4
|
+
Domain-specific DataLoaders for biomedical entities (Protein, Gene, Pathway).
|
|
5
|
+
These loaders extend the core DataLoader pattern with biomedical-specific
|
|
6
|
+
label filtering and property mapping.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from strawberry.dataloader import DataLoader
|
|
10
|
+
from typing import List, Optional, Dict, Any
|
|
11
|
+
from datetime import datetime
|
|
12
|
+
|
|
13
|
+
from api.gql.core.loaders import PropertyLoader, LabelLoader
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ProteinLoader(DataLoader):
|
|
17
|
+
"""Batch load proteins by ID"""
|
|
18
|
+
|
|
19
|
+
def __init__(self, db_connection: Any) -> None:
|
|
20
|
+
self.db = db_connection
|
|
21
|
+
super().__init__(load_fn=self.batch_load_fn)
|
|
22
|
+
|
|
23
|
+
async def batch_load_fn(self, keys: List[str]) -> List[Optional[Dict[str, Any]]]:
|
|
24
|
+
"""
|
|
25
|
+
Batch load proteins for given IDs using single SQL query.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
keys: List of protein IDs (e.g., ["PROTEIN:TP53", "PROTEIN:MDM2"])
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
List of protein data dicts in same order as keys (None for missing IDs)
|
|
32
|
+
"""
|
|
33
|
+
if not keys:
|
|
34
|
+
return []
|
|
35
|
+
|
|
36
|
+
from iris_vector_graph.engine import IRISGraphEngine
|
|
37
|
+
engine = IRISGraphEngine(self.db)
|
|
38
|
+
|
|
39
|
+
placeholders = ",".join(["?" for _ in keys])
|
|
40
|
+
result = engine.execute_cypher(f"""
|
|
41
|
+
MATCH (n:Protein)
|
|
42
|
+
WHERE n.node_id IN ({placeholders})
|
|
43
|
+
RETURN n.node_id
|
|
44
|
+
""", keys)
|
|
45
|
+
|
|
46
|
+
existing_ids = {row[0] for row in result.rows} if result.rows else set()
|
|
47
|
+
|
|
48
|
+
protein_dict: Dict[str, Dict[str, Any]] = {}
|
|
49
|
+
for protein_id in existing_ids:
|
|
50
|
+
node_result = engine.get_node(protein_id)
|
|
51
|
+
if node_result:
|
|
52
|
+
props = node_result.get("properties", {})
|
|
53
|
+
protein_dict[protein_id] = {
|
|
54
|
+
"id": protein_id,
|
|
55
|
+
"labels": ["Protein"],
|
|
56
|
+
"properties": props,
|
|
57
|
+
"created_at": node_result.get("created_at"),
|
|
58
|
+
"name": props.get("name", ""),
|
|
59
|
+
"function": props.get("function"),
|
|
60
|
+
"organism": props.get("organism"),
|
|
61
|
+
"confidence": float(props["confidence"]) if "confidence" in props else None
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return [protein_dict.get(key) for key in keys]
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class GeneLoader(DataLoader):
|
|
68
|
+
"""Batch load genes by ID"""
|
|
69
|
+
|
|
70
|
+
def __init__(self, db_connection: Any) -> None:
|
|
71
|
+
self.db = db_connection
|
|
72
|
+
super().__init__(load_fn=self.batch_load_fn)
|
|
73
|
+
|
|
74
|
+
async def batch_load_fn(self, keys: List[str]) -> List[Optional[Dict[str, Any]]]:
|
|
75
|
+
"""Batch load genes for given IDs using single SQL query"""
|
|
76
|
+
if not keys:
|
|
77
|
+
return []
|
|
78
|
+
|
|
79
|
+
from iris_vector_graph.engine import IRISGraphEngine
|
|
80
|
+
engine = IRISGraphEngine(self.db)
|
|
81
|
+
|
|
82
|
+
placeholders = ",".join(["?" for _ in keys])
|
|
83
|
+
result = engine.execute_cypher(f"""
|
|
84
|
+
MATCH (n:Gene)
|
|
85
|
+
WHERE n.node_id IN ({placeholders})
|
|
86
|
+
RETURN n.node_id
|
|
87
|
+
""", keys)
|
|
88
|
+
|
|
89
|
+
existing_ids = {row[0] for row in result.rows} if result.rows else set()
|
|
90
|
+
|
|
91
|
+
gene_dict: Dict[str, Dict[str, Any]] = {}
|
|
92
|
+
for gene_id in existing_ids:
|
|
93
|
+
node_result = engine.get_node(gene_id)
|
|
94
|
+
if node_result:
|
|
95
|
+
props = node_result.get("properties", {})
|
|
96
|
+
gene_dict[gene_id] = {
|
|
97
|
+
"id": gene_id,
|
|
98
|
+
"labels": ["Gene"],
|
|
99
|
+
"properties": props,
|
|
100
|
+
"created_at": node_result.get("created_at"),
|
|
101
|
+
"name": props.get("name", ""),
|
|
102
|
+
"chromosome": props.get("chromosome"),
|
|
103
|
+
"position": int(props["position"]) if "position" in props else None
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return [gene_dict.get(key) for key in keys]
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class PathwayLoader(DataLoader):
|
|
110
|
+
"""Batch load pathways by ID"""
|
|
111
|
+
|
|
112
|
+
def __init__(self, db_connection: Any) -> None:
|
|
113
|
+
self.db = db_connection
|
|
114
|
+
super().__init__(load_fn=self.batch_load_fn)
|
|
115
|
+
|
|
116
|
+
async def batch_load_fn(self, keys: List[str]) -> List[Optional[Dict[str, Any]]]:
|
|
117
|
+
"""Batch load pathways for given IDs using single SQL query"""
|
|
118
|
+
if not keys:
|
|
119
|
+
return []
|
|
120
|
+
|
|
121
|
+
from iris_vector_graph.engine import IRISGraphEngine
|
|
122
|
+
engine = IRISGraphEngine(self.db)
|
|
123
|
+
|
|
124
|
+
placeholders = ",".join(["?" for _ in keys])
|
|
125
|
+
result = engine.execute_cypher(f"""
|
|
126
|
+
MATCH (n:Pathway)
|
|
127
|
+
WHERE n.node_id IN ({placeholders})
|
|
128
|
+
RETURN n.node_id
|
|
129
|
+
""", keys)
|
|
130
|
+
|
|
131
|
+
existing_ids = {row[0] for row in result.rows} if result.rows else set()
|
|
132
|
+
|
|
133
|
+
pathway_dict: Dict[str, Dict[str, Any]] = {}
|
|
134
|
+
for pathway_id in existing_ids:
|
|
135
|
+
node_result = engine.get_node(pathway_id)
|
|
136
|
+
if node_result:
|
|
137
|
+
props = node_result.get("properties", {})
|
|
138
|
+
pathway_dict[pathway_id] = {
|
|
139
|
+
"id": pathway_id,
|
|
140
|
+
"labels": ["Pathway"],
|
|
141
|
+
"properties": props,
|
|
142
|
+
"created_at": node_result.get("created_at"),
|
|
143
|
+
"name": props.get("name", ""),
|
|
144
|
+
"description": props.get("description")
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return [pathway_dict.get(key) for key in keys]
|