iris-vector-graph 1.45.2__tar.gz → 1.45.3__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.
Files changed (221) hide show
  1. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/PKG-INFO +6 -1
  2. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/README.md +5 -0
  3. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/cypher/translator.py +19 -1
  4. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/engine.py +14 -2
  5. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/pyproject.toml +1 -1
  6. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_translator.py +31 -0
  7. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/.gitignore +0 -0
  8. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/LICENSE +0 -0
  9. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/demo_biomedical.py +0 -0
  10. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/demo_fraud_detection.py +0 -0
  11. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/demo_fraud_detection_sql.py +0 -0
  12. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/demo_utils.py +0 -0
  13. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/demo_working_system.py +0 -0
  14. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/__init__.py +0 -0
  15. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/biomedical/__init__.py +0 -0
  16. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/biomedical/loaders.py +0 -0
  17. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/biomedical/resolver.py +0 -0
  18. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/biomedical/types.py +0 -0
  19. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/biomedical_legacy/__init__.py +0 -0
  20. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/biomedical_legacy/biomedical_engine.py +0 -0
  21. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/biomedical_legacy/biomedical_schema.py +0 -0
  22. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/biomedical_legacy/legacy_wrapper.py +0 -0
  23. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/fraud/__init__.py +0 -0
  24. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/fraud/loaders.py +0 -0
  25. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/fraud/resolver.py +0 -0
  26. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/domains/fraud/types.py +0 -0
  27. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/graphQL.http +0 -0
  28. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/hybrid_vector_graph_query.cypher +0 -0
  29. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/examples/rest.http +0 -0
  30. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/Algorithms.cls +0 -0
  31. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/ArnoAccel.cls +0 -0
  32. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/BenchFormat.cls +0 -0
  33. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/BenchSeeder.cls +0 -0
  34. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/Benchmark.cls +0 -0
  35. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/Edge.cls +0 -0
  36. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/GraphIndex.cls +0 -0
  37. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/Loader.cls +0 -0
  38. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/MCPService.cls +0 -0
  39. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/MCPToolSet.cls +0 -0
  40. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/MCPTools.cls +0 -0
  41. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/Meta.cls +0 -0
  42. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/PLAIDSearch.cls +0 -0
  43. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/PageRank.cls +0 -0
  44. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/PyOps.cls +0 -0
  45. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/Service.cls +0 -0
  46. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/Subgraph.cls +0 -0
  47. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/TemporalIndex.cls +0 -0
  48. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/TestEdge.cls +0 -0
  49. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/Traversal.cls +0 -0
  50. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/Graph/KG/VecIndex.cls +0 -0
  51. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/PageRankEmbedded.cls +0 -0
  52. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/User.Exec.cls +0 -0
  53. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_src/src/iris/vector/graph/GraphOperators.cls +0 -0
  54. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/__init__.py +0 -0
  55. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/bulk_loader.py +0 -0
  56. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/capabilities.py +0 -0
  57. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/cypher/__init__.py +0 -0
  58. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/cypher/algorithms/__init__.py +0 -0
  59. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/cypher/algorithms/paths.py +0 -0
  60. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/cypher/ast.py +0 -0
  61. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/cypher/lexer.py +0 -0
  62. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/cypher/parser.py +0 -0
  63. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/embedded.py +0 -0
  64. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/fusion.py +0 -0
  65. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/gql/__init__.py +0 -0
  66. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/gql/constants.py +0 -0
  67. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/gql/engine.py +0 -0
  68. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/gql/pooling.py +0 -0
  69. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/gql/resolvers.py +0 -0
  70. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/gql/schema.py +0 -0
  71. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/models.py +0 -0
  72. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/operators.py +0 -0
  73. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/py.typed +0 -0
  74. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/schema.py +0 -0
  75. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/security.py +0 -0
  76. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/text_search.py +0 -0
  77. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/utils.py +0 -0
  78. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/iris_vector_graph/vector_utils.py +0 -0
  79. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/fhir_bridges.sql +0 -0
  80. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/fraud_sample_data.sql +0 -0
  81. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/globals_schema.sql +0 -0
  82. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/graph_path_globals.sql +0 -0
  83. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/graph_walk_tvf.sql +0 -0
  84. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/migrations/000_base_schema_iris.sql +0 -0
  85. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/migrations/001_add_nodepk_table.sql +0 -0
  86. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/migrations/001_rollback_nodepk.sql +0 -0
  87. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/migrations/002_add_fk_constraints.sql +0 -0
  88. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/operators.sql +0 -0
  89. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/operators_fixed.sql +0 -0
  90. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/procedures/kg_PageRank.sql +0 -0
  91. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/rdf_reifications.sql +0 -0
  92. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/sql/schema.sql +0 -0
  93. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/TESTING.md +0 -0
  94. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmark_parser.py +0 -0
  95. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmarks/benchmark_neo4j.py +0 -0
  96. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmarks/bfs_benchmark.py +0 -0
  97. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmarks/establish_baseline.py +0 -0
  98. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmarks/graph_gen.py +0 -0
  99. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmarks/iris_baseline_run.py +0 -0
  100. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmarks/iris_os_run.py +0 -0
  101. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmarks/load_neo4j.py +0 -0
  102. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/benchmarks/synthetic_baseline.csv +0 -0
  103. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/conftest.py +0 -0
  104. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/contract/__init__.py +0 -0
  105. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/contract/test_cypher_api.py +0 -0
  106. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/contract/test_cypher_api_errors.py +0 -0
  107. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/contract/test_graphql_queries.py +0 -0
  108. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/contract/test_graphql_schema.py +0 -0
  109. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/contract/test_ppr_api.py +0 -0
  110. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/__init__.py +0 -0
  111. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/conftest.py +0 -0
  112. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_biomedical_demo.py +0 -0
  113. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_biomedical_ui.py +0 -0
  114. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_cypher_coerce_e2e.py +0 -0
  115. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_cypher_sprints_e2e.py +0 -0
  116. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_cypher_vector_search.py +0 -0
  117. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_fhir_bridges_e2e.py +0 -0
  118. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_fraud_demo.py +0 -0
  119. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_fraud_ui.py +0 -0
  120. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_gql_autogen_startup.py +0 -0
  121. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_gql_cypher_passthrough.py +0 -0
  122. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_gql_node_queries.py +0 -0
  123. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_gql_semantic_search.py +0 -0
  124. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_gql_traversal.py +0 -0
  125. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_graph_kernels_e2e.py +0 -0
  126. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_multi_query_engine_platform.py +0 -0
  127. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_named_paths_e2e.py +0 -0
  128. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_nkg_index_e2e.py +0 -0
  129. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_operator_wiring_e2e.py +0 -0
  130. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_plaid_search_e2e.py +0 -0
  131. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_ppr_cls_fast_path.py +0 -0
  132. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_ppr_guided_e2e.py +0 -0
  133. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_procedure_installation.py +0 -0
  134. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_reification_e2e.py +0 -0
  135. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_schema_procedures_e2e.py +0 -0
  136. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_subgraph_e2e.py +0 -0
  137. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_subquery_call_e2e.py +0 -0
  138. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/e2e/test_vecindex_e2e.py +0 -0
  139. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/__init__.py +0 -0
  140. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/conftest.py +0 -0
  141. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/gql/__init__.py +0 -0
  142. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/gql/test_graphql_mutations.py +0 -0
  143. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/gql/test_graphql_nested_queries.py +0 -0
  144. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/gql/test_graphql_queries.py +0 -0
  145. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/gql/test_graphql_vector_search.py +0 -0
  146. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_bidirectional_ppr.py +0 -0
  147. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cls_layer.py +0 -0
  148. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cypher_advanced.py +0 -0
  149. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cypher_enhancements.py +0 -0
  150. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cypher_multi_type.py +0 -0
  151. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cypher_rd.py +0 -0
  152. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cypher_rel_vars.py +0 -0
  153. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cypher_single_type.py +0 -0
  154. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cypher_untyped.py +0 -0
  155. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_cypher_vector_search.py +0 -0
  156. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_embeddings_api.py +0 -0
  157. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_fastapi_graphql.py +0 -0
  158. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_fhir_bridges_integration.py +0 -0
  159. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_named_paths_integration.py +0 -0
  160. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_nodepk_advanced_benchmarks.py +0 -0
  161. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_nodepk_constraints.py +0 -0
  162. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_nodepk_graph_analytics.py +0 -0
  163. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_nodepk_migration.py +0 -0
  164. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_nodepk_performance.py +0 -0
  165. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_nodepk_production_scale.py +0 -0
  166. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_objectscript_classes.py +0 -0
  167. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_pagerank_sql_optimization.py +0 -0
  168. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_reification_integration.py +0 -0
  169. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_schema_migration.py +0 -0
  170. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_stored_procedure_install.py +0 -0
  171. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/integration/test_subquery_call_integration.py +0 -0
  172. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/performance/conftest.py +0 -0
  173. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/performance/scale_benchmark.py +0 -0
  174. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/performance/test_ppr_stress.py +0 -0
  175. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/performance/test_stress_v1_5.py +0 -0
  176. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/run_all_tests.py +0 -0
  177. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_iris_rest_api.py +0 -0
  178. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_networkx_loader.py +0 -0
  179. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_performance_benchmarks.py +0 -0
  180. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_pyops_vector_conversion.py +0 -0
  181. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_python_operators.py +0 -0
  182. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_python_sdk.py +0 -0
  183. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_schema_validation.py +0 -0
  184. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_sql_queries.py +0 -0
  185. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/python/test_vector_functions.py +0 -0
  186. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/cypher/__init__.py +0 -0
  187. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/cypher/test_lexer.py +0 -0
  188. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/cypher/test_lexer_advanced.py +0 -0
  189. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/cypher/test_parser.py +0 -0
  190. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/cypher/test_parser_advanced.py +0 -0
  191. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_batch_mutations.py +0 -0
  192. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cls_deployment.py +0 -0
  193. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_case_when.py +0 -0
  194. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_functions.py +0 -0
  195. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_parser.py +0 -0
  196. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_posos_bugs.py +0 -0
  197. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_procedures.py +0 -0
  198. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_union_exists.py +0 -0
  199. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_var_length.py +0 -0
  200. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_cypher_vector_search.py +0 -0
  201. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_edgeprop_ndjson.py +0 -0
  202. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_embedded.py +0 -0
  203. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_engine_dimension_fix.py +0 -0
  204. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_engine_embeddings.py +0 -0
  205. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_fhir_bridges.py +0 -0
  206. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_get_nodes.py +0 -0
  207. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_graph_kernels.py +0 -0
  208. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_graphql_dataloader.py +0 -0
  209. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_ingest_formats.py +0 -0
  210. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_named_paths.py +0 -0
  211. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_operators_wiring.py +0 -0
  212. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_plaid_search.py +0 -0
  213. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_ppr_guided_subgraph.py +0 -0
  214. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_reification.py +0 -0
  215. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_schema_procedures.py +0 -0
  216. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_sql_splitter.py +0 -0
  217. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_sql_table_bridge.py +0 -0
  218. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_subgraph.py +0 -0
  219. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_subquery_call.py +0 -0
  220. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_temporal_cypher.py +0 -0
  221. {iris_vector_graph-1.45.2 → iris_vector_graph-1.45.3}/tests/unit/test_temporal_edges.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iris-vector-graph
3
- Version: 1.45.2
3
+ Version: 1.45.3
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/isc-tdyar/iris-vector-graph
6
6
  Project-URL: Documentation, https://github.com/isc-tdyar/iris-vector-graph/tree/main/docs
@@ -474,6 +474,11 @@ anchors = engine.get_kg_anchors(icd_codes=["J18.0", "E11.9"])
474
474
 
475
475
  ## Changelog
476
476
 
477
+ ### v1.45.3 (2026-04-04)
478
+ - `translate_relationship_pattern`: inline property filters on relationship nodes were silently dropped — `MATCH (t)-[:R]->(c {id: 'x'})` returned all nodes instead of filtering. Fixed by applying `source_node.properties` and `target_node.properties` after JOIN construction.
479
+ - `vector_search`: `TO_VECTOR(?, DOUBLE, {dim})` now includes explicit dimension in query cast, resolving type mismatch on IRIS 2025.1 when column dimension is known
480
+ - 2 regression tests added (375 unit tests total)
481
+
477
482
  ### v1.45.2 (2026-04-03)
478
483
  - `embedded.py`: auto-fixes `sys.path` shadowing — ensures `/usr/irissys/lib/python` is first so the embedded `iris` module takes priority over pip-installed `intersystems_irispython`
479
484
  - `embedded.py`: clear error message when shadowed iris (no `iris.sql`) is detected, naming the root cause
@@ -403,6 +403,11 @@ anchors = engine.get_kg_anchors(icd_codes=["J18.0", "E11.9"])
403
403
 
404
404
  ## Changelog
405
405
 
406
+ ### v1.45.3 (2026-04-04)
407
+ - `translate_relationship_pattern`: inline property filters on relationship nodes were silently dropped — `MATCH (t)-[:R]->(c {id: 'x'})` returned all nodes instead of filtering. Fixed by applying `source_node.properties` and `target_node.properties` after JOIN construction.
408
+ - `vector_search`: `TO_VECTOR(?, DOUBLE, {dim})` now includes explicit dimension in query cast, resolving type mismatch on IRIS 2025.1 when column dimension is known
409
+ - 2 regression tests added (375 unit tests total)
410
+
406
411
  ### v1.45.2 (2026-04-03)
407
412
  - `embedded.py`: auto-fixes `sys.path` shadowing — ensures `/usr/irissys/lib/python` is first so the embedded `iris` module takes priority over pip-installed `intersystems_irispython`
408
413
  - `embedded.py`: clear error message when shadowed iris (no `iris.sql`) is detected, naming the root cause
@@ -1141,13 +1141,31 @@ def translate_relationship_pattern(rel, source_node, target_node, context, metad
1141
1141
  else: edge_cond += f" AND {edge_alias}.p IN ({', '.join([context.add_join_param(t) for t in rel.types])})"
1142
1142
 
1143
1143
  context.join_clauses.append(f"{jt} {_table('rdf_edges')} {edge_alias} ON {edge_cond}")
1144
-
1144
+
1145
1145
  if is_new_target and not target_alias.startswith('Stage'):
1146
1146
  context.join_clauses.append(f"{jt} {_table('nodes')} {target_alias} ON {target_on}")
1147
1147
  else:
1148
1148
  # If target node is already joined, add the connection as a WHERE condition
1149
1149
  context.where_conditions.append(target_on)
1150
1150
 
1151
+ # Apply inline property filters from source and target nodes.
1152
+ # These are silently dropped without this block — e.g. MATCH (t)-[:R]->(c {id: 'x'})
1153
+ # returns all nodes instead of filtering, because the relationship path never applies them.
1154
+ for prop_node, prop_alias in ((source_node, source_alias), (target_node, target_alias)):
1155
+ if not prop_node.properties:
1156
+ continue
1157
+ for k, v in prop_node.properties.items():
1158
+ val_sql = translate_expression(v, context, segment="where")
1159
+ if k in ("node_id", "id"):
1160
+ context.where_conditions.append(f"{prop_alias}.node_id = {val_sql}")
1161
+ else:
1162
+ p_alias = context.next_alias("p")
1163
+ context.join_clauses.append(
1164
+ f"{jt} {_table('rdf_props')} {p_alias} "
1165
+ f"ON {p_alias}.s = {prop_alias}.node_id AND {p_alias}.\"key\" = {context.add_join_param(k)}"
1166
+ )
1167
+ context.where_conditions.append(f"{p_alias}.val = {val_sql}")
1168
+
1151
1169
 
1152
1170
  def translate_where_clause(where, context):
1153
1171
  context.where_conditions.append(translate_boolean_expression(where.expression, context))
@@ -1652,7 +1652,7 @@ class IRISGraphEngine:
1652
1652
  raise ValueError(f"Column '{vector_col}' not found in table '{table}'")
1653
1653
  cursor.execute(f"SELECT COUNT(*) FROM {table}")
1654
1654
  row_count = int(cursor.fetchone()[0])
1655
- cursor.execute(f"SELECT {vector_col} FROM {table} WHERE ROWNUM = 1")
1655
+ cursor.execute(f"SELECT TOP 1 {vector_col} FROM {table}")
1656
1656
  sample = cursor.fetchone()
1657
1657
  dimension = None
1658
1658
  if sample and sample[0]:
@@ -1691,7 +1691,19 @@ class IRISGraphEngine:
1691
1691
  query_vec_str = query_embedding
1692
1692
 
1693
1693
  extra = ", ".join(sanitize_identifier(c) for c in (return_cols or []) if c != id_col)
1694
- select_cols = f"t.{id_col}, VECTOR_COSINE(TO_VECTOR(t.{vector_col}), TO_VECTOR(?, DOUBLE)) AS score"
1694
+
1695
+ dim = None
1696
+ if isinstance(query_embedding, list):
1697
+ dim = len(query_embedding)
1698
+ elif isinstance(query_embedding, str):
1699
+ dim = query_embedding.count(",") + 1
1700
+
1701
+ if dim:
1702
+ query_cast = f"TO_VECTOR(?, DOUBLE, {dim})"
1703
+ else:
1704
+ query_cast = "TO_VECTOR(?, DOUBLE)"
1705
+
1706
+ select_cols = f"t.{id_col}, VECTOR_COSINE(t.{vector_col}, {query_cast}) AS score"
1695
1707
  if extra:
1696
1708
  select_cols += f", {extra}"
1697
1709
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "iris-vector-graph"
7
- version = "1.45.2"
7
+ version = "1.45.3"
8
8
  description = "Transactional Graph + Vector retrieval system for InterSystems IRIS with hybrid search, openCypher, and GraphQL APIs"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -101,3 +101,34 @@ def test_translate_pattern_operators():
101
101
  sql3 = translate_to_sql(parsed3)
102
102
  sql_str3 = "\n".join(sql3.sql) if isinstance(sql3.sql, list) else sql3.sql
103
103
  assert "LIKE" in sql_str3
104
+
105
+
106
+ def test_inline_property_filter_on_relationship_target():
107
+ """Inline props on relationship target must generate WHERE conditions, not be silently dropped.
108
+
109
+ Bug: MATCH (t)-[:R]->(c:Label {id: 'x'}) returned all nodes instead of filtering,
110
+ because translate_relationship_pattern did not apply target_node.properties after joining.
111
+ """
112
+ query = "MATCH (t:IServiceTicket)-[:TICKET_FOR]->(c:Customer {id: 'Customer:Northwell'}) RETURN t.id as id"
113
+ parsed = parse_query(query)
114
+ sql_result = translate_to_sql(parsed)
115
+ sql_str = "\n".join(sql_result.sql) if isinstance(sql_result.sql, list) else sql_result.sql
116
+ # SQLQuery.parameters is a list of param-lists (one per statement); flatten to check
117
+ params = [p for plist in sql_result.parameters for p in plist]
118
+
119
+ # The literal is passed as a bind param — check the params list, not the SQL string
120
+ assert "Customer:Northwell" in params, \
121
+ f"Inline property filter on relationship target was dropped — literal not in params: {params}"
122
+ # Must use node_id equality for id/node_id keys (not rdf_props join)
123
+ assert "node_id" in sql_str
124
+
125
+
126
+ def test_inline_property_filter_on_relationship_source():
127
+ """Inline props on relationship source must also generate WHERE conditions."""
128
+ query = "MATCH (t:IServiceTicket {status: 'Open'})-[:TICKET_FOR]->(c:Customer) RETURN c.id as cid"
129
+ parsed = parse_query(query)
130
+ sql_result = translate_to_sql(parsed)
131
+ params = [p for plist in sql_result.parameters for p in plist]
132
+
133
+ assert "Open" in params, \
134
+ f"Inline property filter on relationship source was dropped — literal not in params: {params}"