graphforge 0.3.7__tar.gz → 0.3.8__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 (673) hide show
  1. {graphforge-0.3.7 → graphforge-0.3.8}/.github/workflows/changelog-check.yml +4 -0
  2. graphforge-0.3.8/.github/workflows/test.yml +416 -0
  3. {graphforge-0.3.7 → graphforge-0.3.8}/CHANGELOG.md +39 -1
  4. graphforge-0.3.8/PKG-INFO +382 -0
  5. graphforge-0.3.8/README.md +334 -0
  6. {graphforge-0.3.7 → graphforge-0.3.8}/docs/datasets/snap.md +1 -1
  7. graphforge-0.3.8/docs/development/parser-performance-analysis.md +139 -0
  8. graphforge-0.3.8/docs/getting-started/installation.md +43 -0
  9. graphforge-0.3.8/docs/getting-started/quickstart.md +112 -0
  10. {graphforge-0.3.7 → graphforge-0.3.8}/docs/getting-started/tutorial.md +3 -3
  11. graphforge-0.3.8/docs/guide/cypher-guide.md +840 -0
  12. graphforge-0.3.8/docs/index.md +83 -0
  13. graphforge-0.3.8/docs/reference/RELEASE_TRACKING.md +61 -0
  14. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/implementation-status/clauses.md +2 -0
  15. graphforge-0.3.8/docs/reference/implementation-status/functions.md +347 -0
  16. graphforge-0.3.8/docs/reference/opencypher-compatibility-matrix.md +469 -0
  17. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/opencypher-compatibility.md +69 -163
  18. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/opencypher-features/01-clauses.md +1 -1
  19. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/opencypher-features/05-data-types.md +2 -2
  20. graphforge-0.3.8/docs/reference/tck-compliance.md +58 -0
  21. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/tck-inventory.md +1 -1
  22. {graphforge-0.3.7 → graphforge-0.3.8}/docs/use-cases/agent-grounding.md +2 -1
  23. graphforge-0.3.8/docs/use-cases/agent-tool-recall.md +467 -0
  24. graphforge-0.3.8/docs/use-cases/knowledge-graph-construction.md +524 -0
  25. graphforge-0.3.8/docs/use-cases/llm-workflows.md +589 -0
  26. graphforge-0.3.8/docs/use-cases/network-analysis.md +619 -0
  27. {graphforge-0.3.7 → graphforge-0.3.8}/mkdocs.yml +6 -0
  28. {graphforge-0.3.7 → graphforge-0.3.8}/pyproject.toml +15 -3
  29. graphforge-0.3.8/scripts/tck_perf_report.py +179 -0
  30. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/api.py +65 -11
  31. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/ast/__init__.py +2 -0
  32. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/ast/clause.py +34 -18
  33. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/ast/expression.py +46 -7
  34. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/executor/evaluator.py +931 -92
  35. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/executor/executor.py +1258 -318
  36. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/optimizer/join_reorder.py +16 -9
  37. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/optimizer/predicate_utils.py +82 -1
  38. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/parser/cypher.lark +63 -23
  39. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/parser/parser.py +403 -38
  40. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/planner/operators.py +92 -7
  41. graphforge-0.3.8/src/graphforge/planner/planner.py +3267 -0
  42. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/planner/types.py +32 -1
  43. graphforge-0.3.8/src/graphforge/procedures/__init__.py +5 -0
  44. graphforge-0.3.8/src/graphforge/procedures/registry.py +142 -0
  45. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/storage/memory.py +114 -112
  46. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/storage/serialization.py +22 -6
  47. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/types/values.py +401 -60
  48. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_end_to_end_workflows.py +2 -0
  49. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/executor/test_graph_functions.py +6 -6
  50. graphforge-0.3.8/tests/integration/test_call_procedures.py +140 -0
  51. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_column_naming.py +6 -6
  52. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_complex_merge_patterns.py +6 -22
  53. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_create_edge_cases.py +10 -13
  54. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_merge_edge_cases.py +34 -114
  55. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_merge_on_create_real.py +7 -15
  56. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_mixed_type_sort.py +20 -17
  57. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_optional_match.py +9 -3
  58. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_path_binding_variable_length.py +8 -7
  59. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_pattern_predicates.py +2 -2
  60. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_type_functions.py +16 -17
  61. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/conftest.py +433 -82
  62. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/tck_config.yaml +1 -26
  63. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_snap_datasets.py +5 -1
  64. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_evaluator.py +11 -18
  65. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_executor_error_paths.py +5 -5
  66. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_expressions_match.py +31 -1
  67. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_graph_functions.py +6 -6
  68. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_map_property_access.py +13 -8
  69. graphforge-0.3.8/tests/unit/executor/test_optional_expand_bound_dst.py +188 -0
  70. graphforge-0.3.8/tests/unit/executor/test_parenthesized_expr_coverage.py +121 -0
  71. graphforge-0.3.8/tests/unit/executor/test_procedure_call_executor.py +143 -0
  72. graphforge-0.3.8/tests/unit/executor/test_set_extensions.py +143 -0
  73. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_temporal_truncate_arithmetic.py +1 -1
  74. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_type_conversion_complex.py +11 -11
  75. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_statistics.py +3 -3
  76. graphforge-0.3.8/tests/unit/parser/test_call_procedure_parser.py +84 -0
  77. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_parser_caching.py +14 -4
  78. graphforge-0.3.8/tests/unit/planner/test_call_procedure_planner.py +101 -0
  79. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_planner_branch_coverage.py +8 -4
  80. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_planner_edge_cases.py +9 -7
  81. graphforge-0.3.8/tests/unit/planner/test_syntax_error_validation.py +252 -0
  82. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_type_tracking.py +7 -2
  83. graphforge-0.3.8/tests/unit/procedures/__init__.py +0 -0
  84. graphforge-0.3.8/tests/unit/procedures/test_registry.py +138 -0
  85. graphforge-0.3.8/tests/unit/types/test_extreme_temporal_values.py +554 -0
  86. {graphforge-0.3.7 → graphforge-0.3.8}/uv.lock +39 -15
  87. graphforge-0.3.7/.github/workflows/test.yml +0 -227
  88. graphforge-0.3.7/PKG-INFO +0 -1645
  89. graphforge-0.3.7/README.md +0 -1599
  90. graphforge-0.3.7/docs/getting-started/installation.md +0 -44
  91. graphforge-0.3.7/docs/getting-started/quickstart.md +0 -112
  92. graphforge-0.3.7/docs/guide/cypher-guide.md +0 -811
  93. graphforge-0.3.7/docs/index.md +0 -109
  94. graphforge-0.3.7/docs/reference/RELEASE_TRACKING.md +0 -279
  95. graphforge-0.3.7/docs/reference/implementation-status/functions.md +0 -451
  96. graphforge-0.3.7/docs/reference/opencypher-compatibility-matrix.md +0 -539
  97. graphforge-0.3.7/docs/reference/tck-compliance.md +0 -272
  98. graphforge-0.3.7/src/graphforge/planner/planner.py +0 -1478
  99. {graphforge-0.3.7 → graphforge-0.3.8}/.codecov.yml +0 -0
  100. {graphforge-0.3.7 → graphforge-0.3.8}/.coderabbit.yaml +0 -0
  101. {graphforge-0.3.7 → graphforge-0.3.8}/.editorconfig +0 -0
  102. {graphforge-0.3.7 → graphforge-0.3.8}/.github/CODEOWNERS +0 -0
  103. {graphforge-0.3.7 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  104. {graphforge-0.3.7 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  105. {graphforge-0.3.7 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  106. {graphforge-0.3.7 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  107. {graphforge-0.3.7 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  108. {graphforge-0.3.7 → graphforge-0.3.8}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  109. {graphforge-0.3.7 → graphforge-0.3.8}/.github/ISSUE_WORKFLOW.md +0 -0
  110. {graphforge-0.3.7 → graphforge-0.3.8}/.github/SECURITY.md +0 -0
  111. {graphforge-0.3.7 → graphforge-0.3.8}/.github/dependabot.yml +0 -0
  112. {graphforge-0.3.7 → graphforge-0.3.8}/.github/pull_request_template.md +0 -0
  113. {graphforge-0.3.7 → graphforge-0.3.8}/.github/workflows/README.md +0 -0
  114. {graphforge-0.3.7 → graphforge-0.3.8}/.github/workflows/docs.yml +0 -0
  115. {graphforge-0.3.7 → graphforge-0.3.8}/.github/workflows/pr-labeler.yml +0 -0
  116. {graphforge-0.3.7 → graphforge-0.3.8}/.github/workflows/publish.yaml +0 -0
  117. {graphforge-0.3.7 → graphforge-0.3.8}/.github/workflows/release-tracking.yml +0 -0
  118. {graphforge-0.3.7 → graphforge-0.3.8}/.gitignore +0 -0
  119. {graphforge-0.3.7 → graphforge-0.3.8}/.pre-commit-config.yaml +0 -0
  120. {graphforge-0.3.7 → graphforge-0.3.8}/CHANGELOG_v0.3.0.md +0 -0
  121. {graphforge-0.3.7 → graphforge-0.3.8}/CLAUDE.md +0 -0
  122. {graphforge-0.3.7 → graphforge-0.3.8}/CODE_OF_CONDUCT.md +0 -0
  123. {graphforge-0.3.7 → graphforge-0.3.8}/CONTRIBUTING.md +0 -0
  124. {graphforge-0.3.7 → graphforge-0.3.8}/IMPLEMENTATION_PLAN.md +0 -0
  125. {graphforge-0.3.7 → graphforge-0.3.8}/LICENSE +0 -0
  126. {graphforge-0.3.7 → graphforge-0.3.8}/Makefile +0 -0
  127. {graphforge-0.3.7 → graphforge-0.3.8}/RELEASING.md +0 -0
  128. {graphforge-0.3.7 → graphforge-0.3.8}/coverage.json +0 -0
  129. {graphforge-0.3.7 → graphforge-0.3.8}/docs/architecture/ast-and-planning.md +0 -0
  130. {graphforge-0.3.7 → graphforge-0.3.8}/docs/architecture/execution-model.md +0 -0
  131. {graphforge-0.3.7 → graphforge-0.3.8}/docs/architecture/overview.md +0 -0
  132. {graphforge-0.3.7 → graphforge-0.3.8}/docs/architecture/storage-analysis.md +0 -0
  133. {graphforge-0.3.7 → graphforge-0.3.8}/docs/architecture/storage.md +0 -0
  134. {graphforge-0.3.7 → graphforge-0.3.8}/docs/community/code-of-conduct.md +0 -0
  135. {graphforge-0.3.7 → graphforge-0.3.8}/docs/community/security.md +0 -0
  136. {graphforge-0.3.7 → graphforge-0.3.8}/docs/cypher-guide.md +0 -0
  137. {graphforge-0.3.7 → graphforge-0.3.8}/docs/datasets/cypher-script-loading.md +0 -0
  138. {graphforge-0.3.7 → graphforge-0.3.8}/docs/datasets/ldbc.md +0 -0
  139. {graphforge-0.3.7 → graphforge-0.3.8}/docs/datasets/neo4j-examples.md +0 -0
  140. {graphforge-0.3.7 → graphforge-0.3.8}/docs/datasets/networkrepository.md +0 -0
  141. {graphforge-0.3.7 → graphforge-0.3.8}/docs/datasets/overview.md +0 -0
  142. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/QUICKSTART_V0.2.md +0 -0
  143. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/codecov-integration.md +0 -0
  144. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/contributing.md +0 -0
  145. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/documentation-update-summary.md +0 -0
  146. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/phase-1a-completion-report.md +0 -0
  147. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/release-process.md +0 -0
  148. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/release-strategy.md +0 -0
  149. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/requirements.md +0 -0
  150. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/session-2026-01-31-cicd-infrastructure.md +0 -0
  151. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/session-2026-01-31-documentation.md +0 -0
  152. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/session-2026-01-31-regression-fix.md +0 -0
  153. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/session-2026-01-31-with-clause.md +0 -0
  154. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/session-2026-02-01-codecov-setup.md +0 -0
  155. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/session-2026-02-01-column-naming-investigation.md +0 -0
  156. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/session-summary.md +0 -0
  157. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/tck-session-2026-01-31-final.md +0 -0
  158. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/sessions/tck-session-2026-01-31.md +0 -0
  159. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/tck_baseline_analysis_v0.3.md +0 -0
  160. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/testing-setup-complete.md +0 -0
  161. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/testing.md +0 -0
  162. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/v0.2-plan-summary.md +0 -0
  163. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/v0.4-revised-plan.md +0 -0
  164. {graphforge-0.3.7 → graphforge-0.3.8}/docs/development/workflow.md +0 -0
  165. {graphforge-0.3.7 → graphforge-0.3.8}/docs/guide/graph-construction.md +0 -0
  166. {graphforge-0.3.7 → graphforge-0.3.8}/docs/guide/overview.md +0 -0
  167. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/INCOMPLETE_FEATURES_ISSUES.md +0 -0
  168. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/README.md +0 -0
  169. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/VALIDATION_REPORT.md +0 -0
  170. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/api.md +0 -0
  171. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/changelog.md +0 -0
  172. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/column-naming-behavior.md +0 -0
  173. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/feature-aggregation-functions.md +0 -0
  174. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/feature-graph-queries.md +0 -0
  175. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/feature-graph-schema.md +0 -0
  176. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/feature-mapping/clause-to-tck.md +0 -0
  177. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/feature-mapping/function-to-tck.md +0 -0
  178. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/feature-order-by.md +0 -0
  179. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/feature-return-aliasing.md +0 -0
  180. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/implementation-status/operators.md +0 -0
  181. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/implementation-status/patterns.md +0 -0
  182. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/opencypher-features/02-functions.md +0 -0
  183. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/opencypher-features/03-operators.md +0 -0
  184. {graphforge-0.3.7 → graphforge-0.3.8}/docs/reference/opencypher-features/04-patterns.md +0 -0
  185. {graphforge-0.3.7 → graphforge-0.3.8}/docs/releases/implementation-summary.md +0 -0
  186. {graphforge-0.3.7 → graphforge-0.3.8}/docs/releases/next-steps.md +0 -0
  187. {graphforge-0.3.7 → graphforge-0.3.8}/docs/releases/phase-1-complete.md +0 -0
  188. {graphforge-0.3.7 → graphforge-0.3.8}/docs/releases/phase-2-complete.md +0 -0
  189. {graphforge-0.3.7 → graphforge-0.3.8}/docs/releases/phase-3-complete.md +0 -0
  190. {graphforge-0.3.7 → graphforge-0.3.8}/docs/releases/roadmap.md +0 -0
  191. {graphforge-0.3.7 → graphforge-0.3.8}/docs/stylesheets/extra.css +0 -0
  192. {graphforge-0.3.7 → graphforge-0.3.8}/examples/01_social_network.py +0 -0
  193. {graphforge-0.3.7 → graphforge-0.3.8}/examples/02_knowledge_graph.py +0 -0
  194. {graphforge-0.3.7 → graphforge-0.3.8}/examples/03_data_lineage.py +0 -0
  195. {graphforge-0.3.7 → graphforge-0.3.8}/examples/04_citation_network.py +0 -0
  196. {graphforge-0.3.7 → graphforge-0.3.8}/examples/05_migration_from_networkx.py +0 -0
  197. {graphforge-0.3.7 → graphforge-0.3.8}/examples/agent_grounding/ecommerce_agent.ipynb +0 -0
  198. {graphforge-0.3.7 → graphforge-0.3.8}/examples/basic_graph.py +0 -0
  199. {graphforge-0.3.7 → graphforge-0.3.8}/examples/basic_usage.py +0 -0
  200. {graphforge-0.3.7 → graphforge-0.3.8}/scripts/build_feature_graph.py +0 -0
  201. {graphforge-0.3.7 → graphforge-0.3.8}/scripts/bump_version.py +0 -0
  202. {graphforge-0.3.7 → graphforge-0.3.8}/scripts/check_release_needed.py +0 -0
  203. {graphforge-0.3.7 → graphforge-0.3.8}/scripts/inventory_tck.py +0 -0
  204. {graphforge-0.3.7 → graphforge-0.3.8}/scripts/pre-push-check.sh +0 -0
  205. {graphforge-0.3.7 → graphforge-0.3.8}/scripts/tck_metrics.py +0 -0
  206. {graphforge-0.3.7 → graphforge-0.3.8}/scripts/validate_datasets.py +0 -0
  207. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/__init__.py +0 -0
  208. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/ast/pattern.py +0 -0
  209. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/ast/query.py +0 -0
  210. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/__init__.py +0 -0
  211. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/base.py +0 -0
  212. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/data/__init__.py +0 -0
  213. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/data/networkrepository.json +0 -0
  214. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/data/snap.json +0 -0
  215. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/exporters/__init__.py +0 -0
  216. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/exporters/json_graph.py +0 -0
  217. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/formats/__init__.py +0 -0
  218. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/formats/json_graph.py +0 -0
  219. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/loaders/__init__.py +0 -0
  220. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/loaders/compression.py +0 -0
  221. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/loaders/csv.py +0 -0
  222. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/loaders/cypher.py +0 -0
  223. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/loaders/graphml.py +0 -0
  224. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/loaders/json_graph.py +0 -0
  225. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/loaders/ldbc.py +0 -0
  226. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/loaders/ldbc_schema.py +0 -0
  227. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/registry.py +0 -0
  228. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/sources/__init__.py +0 -0
  229. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/sources/graphml.py +0 -0
  230. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/sources/json_graph.py +0 -0
  231. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/sources/ldbc.py +0 -0
  232. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/sources/networkrepository.py +0 -0
  233. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/datasets/sources/snap.py +0 -0
  234. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/executor/__init__.py +0 -0
  235. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/optimizer/__init__.py +0 -0
  236. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/optimizer/cost_model.py +0 -0
  237. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/optimizer/optimizer.py +0 -0
  238. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/optimizer/statistics.py +0 -0
  239. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/parser/__init__.py +0 -0
  240. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/planner/__init__.py +0 -0
  241. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/storage/__init__.py +0 -0
  242. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/storage/pydantic_serialization.py +0 -0
  243. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/storage/sqlite_backend.py +0 -0
  244. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/types/__init__.py +0 -0
  245. {graphforge-0.3.7 → graphforge-0.3.8}/src/graphforge/types/graph.py +0 -0
  246. {graphforge-0.3.7 → graphforge-0.3.8}/tests/README.md +0 -0
  247. {graphforge-0.3.7 → graphforge-0.3.8}/tests/__init__.py +0 -0
  248. {graphforge-0.3.7 → graphforge-0.3.8}/tests/conftest.py +0 -0
  249. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/__init__.py +0 -0
  250. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/conftest.py +0 -0
  251. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_compression.py +0 -0
  252. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_cypher_loader_docs.py +0 -0
  253. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_graphml_loader.py +0 -0
  254. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_json_graph_exporter.py +0 -0
  255. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_json_graph_loader.py +0 -0
  256. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_json_graph_roundtrip.py +0 -0
  257. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_ldbc_loader.py +0 -0
  258. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/datasets/test_networkrepository_loader.py +0 -0
  259. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_aggregation_edge_cases.py +0 -0
  260. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_aggregation_functions_advanced.py +0 -0
  261. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_anonymous_relationships.py +0 -0
  262. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_arithmetic.py +0 -0
  263. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_builder_api.py +0 -0
  264. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_call_subqueries.py +0 -0
  265. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_case_expressions.py +0 -0
  266. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_collect.py +0 -0
  267. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_compact_iso8601.py +0 -0
  268. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_complex_where_predicates.py +0 -0
  269. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_create_clause.py +0 -0
  270. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_delete_null.py +0 -0
  271. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_detach_delete.py +0 -0
  272. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_distinct_clause.py +0 -0
  273. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_e2e_queries.py +0 -0
  274. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_executor_edge_cases.py +0 -0
  275. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_exists_is_empty.py +0 -0
  276. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_graph_element_comparison.py +0 -0
  277. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_hex_octal_literals.py +0 -0
  278. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_iana_timezones.py +0 -0
  279. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_id_function.py +0 -0
  280. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_issues_271_274.py +0 -0
  281. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_label_disjunction.py +0 -0
  282. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_label_predicate.py +0 -0
  283. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_list_comprehension.py +0 -0
  284. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_list_concatenation.py +0 -0
  285. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_list_functions.py +0 -0
  286. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_list_operations.py +0 -0
  287. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_list_path_overloading.py +0 -0
  288. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_list_subscript.py +0 -0
  289. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_logical_operators.py +0 -0
  290. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_map_subscript.py +0 -0
  291. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_match_create.py +0 -0
  292. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_math_functions.py +0 -0
  293. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_math_functions_extended.py +0 -0
  294. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_math_functions_new.py +0 -0
  295. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_merge_on_match_real.py +0 -0
  296. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_nan_handling.py +0 -0
  297. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_null_handling.py +0 -0
  298. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_operator_precedence.py +0 -0
  299. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_optimizer_aggregate_pushdown.py +0 -0
  300. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_optimizer_integration.py +0 -0
  301. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_optimizer_redundant_elimination.py +0 -0
  302. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_optional_match_delete.py +0 -0
  303. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_path_binding.py +0 -0
  304. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_path_functions.py +0 -0
  305. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_pattern_comprehension.py +0 -0
  306. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_persistence.py +0 -0
  307. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_power_operator.py +0 -0
  308. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_predicate_functions.py +0 -0
  309. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_properties_keys_functions.py +0 -0
  310. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_relationship_directions.py +0 -0
  311. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_relationship_uniqueness.py +0 -0
  312. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_remove_clause.py +0 -0
  313. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_set_delete_merge.py +0 -0
  314. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_size_function.py +0 -0
  315. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_skip_limit_expressions.py +0 -0
  316. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_snap_dataset_loading.py +0 -0
  317. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_sort_after_aggregation.py +0 -0
  318. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_spatial_api.py +0 -0
  319. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_sqlite_persistence.py +0 -0
  320. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_startnode_endnode_functions.py +0 -0
  321. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_string_functions.py +0 -0
  322. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_string_functions_new.py +0 -0
  323. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_string_matching.py +0 -0
  324. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_subquery_expressions.py +0 -0
  325. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_temporal_map_constructors.py +0 -0
  326. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_temporal_queries.py +0 -0
  327. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_temporal_select_into.py +0 -0
  328. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_transactions.py +0 -0
  329. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_type_conversion_fixes.py +0 -0
  330. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_union.py +0 -0
  331. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_unwind.py +0 -0
  332. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_variable_length_paths.py +0 -0
  333. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_wildcard_execution.py +0 -0
  334. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_with_aggregation_real.py +0 -0
  335. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_with_clause.py +0 -0
  336. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_with_clause_modifiers.py +0 -0
  337. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_with_clause_positions.py +0 -0
  338. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_with_distinct_skip_limit.py +0 -0
  339. {graphforge-0.3.7 → graphforge-0.3.8}/tests/integration/test_xor_operator.py +0 -0
  340. {graphforge-0.3.7 → graphforge-0.3.8}/tests/property/__init__.py +0 -0
  341. {graphforge-0.3.7 → graphforge-0.3.8}/tests/property/strategies.py +0 -0
  342. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/__init__.py +0 -0
  343. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/coverage_matrix.json +0 -0
  344. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/download_tck.py +0 -0
  345. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/Aggregation1_BasicAggregation.feature +0 -0
  346. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/Match1_SimpleMatches.feature +0 -0
  347. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call1.feature +0 -0
  348. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call2.feature +0 -0
  349. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call3.feature +0 -0
  350. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call4.feature +0 -0
  351. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call5.feature +0 -0
  352. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/call/Call6.feature +0 -0
  353. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create1.feature +0 -0
  354. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create2.feature +0 -0
  355. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create3.feature +0 -0
  356. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create4.feature +0 -0
  357. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create5.feature +0 -0
  358. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/create/Create6.feature +0 -0
  359. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete1.feature +0 -0
  360. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete2.feature +0 -0
  361. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete3.feature +0 -0
  362. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete4.feature +0 -0
  363. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete5.feature +0 -0
  364. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/delete/Delete6.feature +0 -0
  365. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match1.feature +0 -0
  366. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match2.feature +0 -0
  367. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match3.feature +0 -0
  368. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match4.feature +0 -0
  369. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match5.feature +0 -0
  370. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match6.feature +0 -0
  371. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match7.feature +0 -0
  372. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match8.feature +0 -0
  373. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match/Match9.feature +0 -0
  374. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere1.feature +0 -0
  375. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere2.feature +0 -0
  376. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere3.feature +0 -0
  377. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere4.feature +0 -0
  378. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere5.feature +0 -0
  379. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/match-where/MatchWhere6.feature +0 -0
  380. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge1.feature +0 -0
  381. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge2.feature +0 -0
  382. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge3.feature +0 -0
  383. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge4.feature +0 -0
  384. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge5.feature +0 -0
  385. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge6.feature +0 -0
  386. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge7.feature +0 -0
  387. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge8.feature +0 -0
  388. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/merge/Merge9.feature +0 -0
  389. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/remove/Remove1.feature +0 -0
  390. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/remove/Remove2.feature +0 -0
  391. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/remove/Remove3.feature +0 -0
  392. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return1.feature +0 -0
  393. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return2.feature +0 -0
  394. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return3.feature +0 -0
  395. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return4.feature +0 -0
  396. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return5.feature +0 -0
  397. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return6.feature +0 -0
  398. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return7.feature +0 -0
  399. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return/Return8.feature +0 -0
  400. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy1.feature +0 -0
  401. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy2.feature +0 -0
  402. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy3.feature +0 -0
  403. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy4.feature +0 -0
  404. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy5.feature +0 -0
  405. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-orderby/ReturnOrderBy6.feature +0 -0
  406. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-skip-limit/ReturnSkipLimit1.feature +0 -0
  407. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-skip-limit/ReturnSkipLimit2.feature +0 -0
  408. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/return-skip-limit/ReturnSkipLimit3.feature +0 -0
  409. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set1.feature +0 -0
  410. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set2.feature +0 -0
  411. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set3.feature +0 -0
  412. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set4.feature +0 -0
  413. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set5.feature +0 -0
  414. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/set/Set6.feature +0 -0
  415. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/union/Union1.feature +0 -0
  416. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/union/Union2.feature +0 -0
  417. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/union/Union3.feature +0 -0
  418. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/unwind/Unwind1.feature +0 -0
  419. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With1.feature +0 -0
  420. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With2.feature +0 -0
  421. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With3.feature +0 -0
  422. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With4.feature +0 -0
  423. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With5.feature +0 -0
  424. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With6.feature +0 -0
  425. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with/With7.feature +0 -0
  426. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-orderBy/WithOrderBy1.feature +0 -0
  427. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-orderBy/WithOrderBy2.feature +0 -0
  428. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-orderBy/WithOrderBy3.feature +0 -0
  429. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-orderBy/WithOrderBy4.feature +0 -0
  430. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-skip-limit/WithSkipLimit1.feature +0 -0
  431. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-skip-limit/WithSkipLimit2.feature +0 -0
  432. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-skip-limit/WithSkipLimit3.feature +0 -0
  433. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere1.feature +0 -0
  434. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere2.feature +0 -0
  435. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere3.feature +0 -0
  436. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere4.feature +0 -0
  437. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere5.feature +0 -0
  438. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere6.feature +0 -0
  439. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/clauses/with-where/WithWhere7.feature +0 -0
  440. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation1.feature +0 -0
  441. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation2.feature +0 -0
  442. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation3.feature +0 -0
  443. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation4.feature +0 -0
  444. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation5.feature +0 -0
  445. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation6.feature +0 -0
  446. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation7.feature +0 -0
  447. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/aggregation/Aggregation8.feature +0 -0
  448. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean1.feature +0 -0
  449. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean2.feature +0 -0
  450. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean3.feature +0 -0
  451. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean4.feature +0 -0
  452. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/boolean/Boolean5.feature +0 -0
  453. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/comparison/Comparison1.feature +0 -0
  454. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/comparison/Comparison2.feature +0 -0
  455. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/comparison/Comparison3.feature +0 -0
  456. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/comparison/Comparison4.feature +0 -0
  457. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/conditional/Conditional1.feature +0 -0
  458. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/conditional/Conditional2.feature +0 -0
  459. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/existentialSubqueries/ExistentialSubquery1.feature +0 -0
  460. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/existentialSubqueries/ExistentialSubquery2.feature +0 -0
  461. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/existentialSubqueries/ExistentialSubquery3.feature +0 -0
  462. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph1.feature +0 -0
  463. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph2.feature +0 -0
  464. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph3.feature +0 -0
  465. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph4.feature +0 -0
  466. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph5.feature +0 -0
  467. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph6.feature +0 -0
  468. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph7.feature +0 -0
  469. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph8.feature +0 -0
  470. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/graph/Graph9.feature +0 -0
  471. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List1.feature +0 -0
  472. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List10.feature +0 -0
  473. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List11.feature +0 -0
  474. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List12.feature +0 -0
  475. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List2.feature +0 -0
  476. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List3.feature +0 -0
  477. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List4.feature +0 -0
  478. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List5.feature +0 -0
  479. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List6.feature +0 -0
  480. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List7.feature +0 -0
  481. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List8.feature +0 -0
  482. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/list/List9.feature +0 -0
  483. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals1.feature +0 -0
  484. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals2.feature +0 -0
  485. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals3.feature +0 -0
  486. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals4.feature +0 -0
  487. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals5.feature +0 -0
  488. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals6.feature +0 -0
  489. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals7.feature +0 -0
  490. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/literals/Literals8.feature +0 -0
  491. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/map/Map1.feature +0 -0
  492. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/map/Map2.feature +0 -0
  493. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/map/Map3.feature +0 -0
  494. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical1.feature +0 -0
  495. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical10.feature +0 -0
  496. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical11.feature +0 -0
  497. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical12.feature +0 -0
  498. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical13.feature +0 -0
  499. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical14.feature +0 -0
  500. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical15.feature +0 -0
  501. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical16.feature +0 -0
  502. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical17.feature +0 -0
  503. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical2.feature +0 -0
  504. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical3.feature +0 -0
  505. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical4.feature +0 -0
  506. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical5.feature +0 -0
  507. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical6.feature +0 -0
  508. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical7.feature +0 -0
  509. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical8.feature +0 -0
  510. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/mathematical/Mathematical9.feature +0 -0
  511. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/null/Null1.feature +0 -0
  512. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/null/Null2.feature +0 -0
  513. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/null/Null3.feature +0 -0
  514. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/path/Path1.feature +0 -0
  515. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/path/Path2.feature +0 -0
  516. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/path/Path3.feature +0 -0
  517. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/pattern/Pattern1.feature +0 -0
  518. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/pattern/Pattern2.feature +0 -0
  519. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/precedence/Precedence1.feature +0 -0
  520. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/precedence/Precedence2.feature +0 -0
  521. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/precedence/Precedence3.feature +0 -0
  522. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/precedence/Precedence4.feature +0 -0
  523. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier1.feature +0 -0
  524. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier10.feature +0 -0
  525. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier11.feature +0 -0
  526. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier12.feature +0 -0
  527. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier2.feature +0 -0
  528. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier3.feature +0 -0
  529. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier4.feature +0 -0
  530. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier5.feature +0 -0
  531. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier6.feature +0 -0
  532. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier7.feature +0 -0
  533. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier8.feature +0 -0
  534. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/quantifier/Quantifier9.feature +0 -0
  535. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String1.feature +0 -0
  536. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String10.feature +0 -0
  537. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String11.feature +0 -0
  538. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String12.feature +0 -0
  539. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String13.feature +0 -0
  540. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String14.feature +0 -0
  541. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String2.feature +0 -0
  542. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String3.feature +0 -0
  543. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String4.feature +0 -0
  544. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String5.feature +0 -0
  545. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String6.feature +0 -0
  546. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String7.feature +0 -0
  547. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String8.feature +0 -0
  548. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/string/String9.feature +0 -0
  549. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal1.feature +0 -0
  550. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal10.feature +0 -0
  551. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal2.feature +0 -0
  552. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal3.feature +0 -0
  553. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal4.feature +0 -0
  554. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal5.feature +0 -0
  555. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal6.feature +0 -0
  556. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal7.feature +0 -0
  557. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal8.feature +0 -0
  558. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/temporal/Temporal9.feature +0 -0
  559. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion1.feature +0 -0
  560. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion2.feature +0 -0
  561. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion3.feature +0 -0
  562. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion4.feature +0 -0
  563. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion5.feature +0 -0
  564. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/expressions/typeConversion/TypeConversion6.feature +0 -0
  565. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/useCases/countingSubgraphMatches/CountingSubgraphMatches1.feature +0 -0
  566. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/features/official/useCases/triadicSelection/TriadicSelection1.feature +0 -0
  567. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/graphs/binary-tree-1/binary-tree-1.cypher +0 -0
  568. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/graphs/binary-tree-1/binary-tree-1.json +0 -0
  569. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/graphs/binary-tree-2/binary-tree-2.cypher +0 -0
  570. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/graphs/binary-tree-2/binary-tree-2.json +0 -0
  571. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/graphs/named-graphs.adoc +0 -0
  572. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/tck_markers.py +0 -0
  573. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/test_features.py +0 -0
  574. {graphforge-0.3.7 → graphforge-0.3.8}/tests/tck/test_tck_compliance.py +0 -0
  575. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/__init__.py +0 -0
  576. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/api/__init__.py +0 -0
  577. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/api/test_clear.py +0 -0
  578. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/api/test_clone.py +0 -0
  579. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/api/test_cypher_value_conversion.py +0 -0
  580. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/ast/__init__.py +0 -0
  581. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/ast/test_ast_nodes.py +0 -0
  582. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/__init__.py +0 -0
  583. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_csv_loader.py +0 -0
  584. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_cypher_loader.py +0 -0
  585. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_graphml_loader.py +0 -0
  586. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_json_graph_exporter.py +0 -0
  587. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_json_graph_format.py +0 -0
  588. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_json_graph_loader.py +0 -0
  589. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_ldbc_schema.py +0 -0
  590. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_networkrepository.py +0 -0
  591. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_registry.py +0 -0
  592. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/datasets/test_sources_registration.py +0 -0
  593. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/__init__.py +0 -0
  594. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_aggregation_errors.py +0 -0
  595. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_aggregation_functions_advanced.py +0 -0
  596. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_arithmetic_evaluator.py +0 -0
  597. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_evaluator_additional_coverage.py +0 -0
  598. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_evaluator_error_paths.py +0 -0
  599. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_expression_matching.py +0 -0
  600. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_id_function.py +0 -0
  601. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_in_operator.py +0 -0
  602. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_list_functions.py +0 -0
  603. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_list_functions_errors.py +0 -0
  604. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_merge_on_create.py +0 -0
  605. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_merge_on_match.py +0 -0
  606. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_multihop_create.py +0 -0
  607. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_optional_scan_coverage.py +0 -0
  608. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_path_functions.py +0 -0
  609. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_properties_keys_errors.py +0 -0
  610. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_sort_edge_cases.py +0 -0
  611. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_spatial_functions.py +0 -0
  612. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_startnode_endnode_errors.py +0 -0
  613. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_string_functions_new.py +0 -0
  614. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_string_matching_evaluator.py +0 -0
  615. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_subquery_planner_check.py +0 -0
  616. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_temporal_functions.py +0 -0
  617. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_three_valued_logic.py +0 -0
  618. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_undirected_relationship_bugs.py +0 -0
  619. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/executor/test_with_aggregation.py +0 -0
  620. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/__init__.py +0 -0
  621. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_aggregate_pushdown.py +0 -0
  622. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_cost_model.py +0 -0
  623. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_filter_pushdown.py +0 -0
  624. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_join_reorder.py +0 -0
  625. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_optimizer_reuse.py +0 -0
  626. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_predicate_reorder.py +0 -0
  627. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_predicate_utils.py +0 -0
  628. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/optimizer/test_redundant_elimination.py +0 -0
  629. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/__init__.py +0 -0
  630. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_arithmetic_parser.py +0 -0
  631. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_case_parser.py +0 -0
  632. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_collect_parser.py +0 -0
  633. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_delete_parser.py +0 -0
  634. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_float_literals.py +0 -0
  635. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_grammar.py +0 -0
  636. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_hex_octal_literals.py +0 -0
  637. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_label_predicate_parser.py +0 -0
  638. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_merge_on_create.py +0 -0
  639. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_merge_on_match.py +0 -0
  640. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_optional_match_delete.py +0 -0
  641. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_order_by_direction.py +0 -0
  642. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_parser.py +0 -0
  643. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_path_binding.py +0 -0
  644. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_pattern_predicates.py +0 -0
  645. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_remove_parser.py +0 -0
  646. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_string_matching_parser.py +0 -0
  647. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_wildcard_parsing.py +0 -0
  648. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_with_at_query_start.py +0 -0
  649. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/parser/test_with_clause_positions.py +0 -0
  650. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/__init__.py +0 -0
  651. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_expand_multi_hop_operator.py +0 -0
  652. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_operator_validation.py +0 -0
  653. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_operators.py +0 -0
  654. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_planner_comprehensive.py +0 -0
  655. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_remove_planner.py +0 -0
  656. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/planner/test_with_validation.py +0 -0
  657. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/storage/__init__.py +0 -0
  658. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/storage/test_graph_edge_cases.py +0 -0
  659. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/storage/test_memory_store.py +0 -0
  660. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/storage/test_pydantic_serialization.py +0 -0
  661. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/storage/test_serialization_edge_cases.py +0 -0
  662. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/storage/test_spatial_serialization.py +0 -0
  663. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/storage/test_sqlite_backend_adjacency.py +0 -0
  664. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/storage/test_temporal_serialization.py +0 -0
  665. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/test_graph_elements.py +0 -0
  666. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/test_iana_timezone_construction.py +0 -0
  667. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/test_values.py +0 -0
  668. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/types/test_cypher_values_deep_equality.py +0 -0
  669. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/types/test_cypher_values_edge_cases.py +0 -0
  670. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/types/test_graph_element_edge_cases.py +0 -0
  671. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/types/test_path_values.py +0 -0
  672. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/types/test_spatial_values.py +0 -0
  673. {graphforge-0.3.7 → graphforge-0.3.8}/tests/unit/types/test_temporal_values.py +0 -0
@@ -5,6 +5,10 @@ on:
5
5
  branches: [main]
6
6
  types: [opened, synchronize, reopened, labeled, unlabeled]
7
7
 
8
+ permissions:
9
+ contents: read
10
+ pull-requests: write
11
+
8
12
  jobs:
9
13
  check-changelog:
10
14
  name: Verify CHANGELOG Updated
@@ -0,0 +1,416 @@
1
+ name: Test Suite
2
+
3
+ on:
4
+ push:
5
+ branches: ["main", "develop"]
6
+ pull_request:
7
+ branches: ["main"]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ test:
14
+ name: Test Python ${{ matrix.python-version }} on ${{ matrix.os }}
15
+ runs-on: ${{ matrix.os }}
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ os: [ubuntu-latest, macos-latest, windows-latest]
20
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
21
+
22
+ steps:
23
+ - name: Checkout code
24
+ uses: actions/checkout@v6
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v7
28
+ with:
29
+ enable-cache: true
30
+
31
+ - name: Set up Python ${{ matrix.python-version }}
32
+ uses: actions/setup-python@v6
33
+ with:
34
+ python-version: ${{ matrix.python-version }}
35
+
36
+ - name: Install dependencies
37
+ run: uv sync --all-extras
38
+
39
+ - name: Download SNAP ego-facebook dataset
40
+ run: |
41
+ mkdir -p ~/.graphforge/datasets
42
+ curl -L -o ~/.graphforge/datasets/snap-ego-facebook.txt.gz https://snap.stanford.edu/data/facebook_combined.txt.gz
43
+ shell: bash
44
+
45
+ - name: Run unit tests
46
+ run: uv run pytest tests/unit -n auto --junitxml=test-results-unit.xml
47
+
48
+ - name: Run integration tests
49
+ run: uv run pytest tests/integration -n auto -m "not snap" --junitxml=test-results-integration.xml
50
+
51
+ - name: Upload test results to Codecov
52
+ uses: codecov/codecov-action@v5
53
+ if: always()
54
+ with:
55
+ token: ${{ secrets.CODECOV_TOKEN }}
56
+ files: test-results-unit.xml,test-results-integration.xml
57
+ flags: ${{ matrix.os }}-py${{ matrix.python-version }}
58
+ report_type: test_results
59
+ fail_ci_if_error: false
60
+
61
+ lint:
62
+ name: Lint and Format Check
63
+ runs-on: ubuntu-latest
64
+
65
+ steps:
66
+ - name: Checkout code
67
+ uses: actions/checkout@v6
68
+
69
+ - name: Install uv
70
+ uses: astral-sh/setup-uv@v7
71
+
72
+ - name: Set up Python
73
+ uses: actions/setup-python@v6
74
+ with:
75
+ python-version: "3.12"
76
+
77
+ - name: Install dependencies
78
+ run: uv sync --all-extras
79
+
80
+ - name: Check code formatting
81
+ run: uv run ruff format --check .
82
+
83
+ - name: Lint code
84
+ run: uv run ruff check .
85
+
86
+ type-check:
87
+ name: Type Checking (mypy)
88
+ runs-on: ubuntu-latest
89
+
90
+ steps:
91
+ - name: Checkout code
92
+ uses: actions/checkout@v6
93
+
94
+ - name: Install uv
95
+ uses: astral-sh/setup-uv@v7
96
+
97
+ - name: Set up Python
98
+ uses: actions/setup-python@v6
99
+ with:
100
+ python-version: "3.12"
101
+
102
+ - name: Install dependencies
103
+ run: uv sync --all-extras
104
+
105
+ - name: Run mypy type checker
106
+ run: uv run mypy src/graphforge --strict-optional --show-error-codes
107
+
108
+ security:
109
+ name: Security Scanning
110
+ runs-on: ubuntu-latest
111
+
112
+ steps:
113
+ - name: Checkout code
114
+ uses: actions/checkout@v6
115
+
116
+ - name: Install uv
117
+ uses: astral-sh/setup-uv@v7
118
+
119
+ - name: Set up Python
120
+ uses: actions/setup-python@v6
121
+ with:
122
+ python-version: "3.12"
123
+
124
+ - name: Install dependencies
125
+ run: uv sync --all-extras
126
+
127
+ - name: Run bandit security scanner
128
+ run: uv run bandit -c pyproject.toml -r src/
129
+
130
+ tck-regression:
131
+ name: TCK Shard ${{ matrix.group }}/4
132
+ runs-on: ubuntu-latest
133
+ strategy:
134
+ fail-fast: false
135
+ matrix:
136
+ group: [1, 2, 3, 4]
137
+
138
+ steps:
139
+ - name: Checkout code
140
+ uses: actions/checkout@v6
141
+
142
+ - name: Install uv
143
+ uses: astral-sh/setup-uv@v7
144
+
145
+ - name: Set up Python
146
+ uses: actions/setup-python@v6
147
+ with:
148
+ python-version: "3.12"
149
+
150
+ - name: Install dependencies
151
+ run: uv sync --all-extras
152
+
153
+ - name: Restore test durations cache
154
+ uses: actions/cache/restore@v4
155
+ with:
156
+ path: .test_durations
157
+ key: tck-durations-${{ github.ref }}
158
+ restore-keys: tck-durations-
159
+
160
+ - name: Run TCK shard ${{ matrix.group }}/4
161
+ id: tck_tests
162
+ continue-on-error: true
163
+ run: |
164
+ uv run pytest tests/tck/ -n auto \
165
+ --splits 4 --group ${{ matrix.group }} \
166
+ --splitting-algorithm duration_based_chunks \
167
+ --store-durations --durations-path=.test_durations_${{ matrix.group }} \
168
+ --junitxml=test-results-tck-${{ matrix.group }}.xml
169
+
170
+ - name: Upload shard results artifact
171
+ uses: actions/upload-artifact@v4
172
+ if: always()
173
+ with:
174
+ name: tck-shard-${{ matrix.group }}
175
+ path: |
176
+ test-results-tck-${{ matrix.group }}.xml
177
+ .test_durations_${{ matrix.group }}
178
+
179
+ tck-report:
180
+ name: TCK OpenCypher Compliance
181
+ runs-on: ubuntu-latest
182
+ needs: tck-regression
183
+ if: always()
184
+ permissions:
185
+ contents: read
186
+ actions: write
187
+
188
+ steps:
189
+ - name: Checkout code
190
+ uses: actions/checkout@v6
191
+
192
+ - name: Install uv
193
+ uses: astral-sh/setup-uv@v7
194
+
195
+ - name: Set up Python
196
+ uses: actions/setup-python@v6
197
+ with:
198
+ python-version: "3.12"
199
+
200
+ - name: Install dependencies
201
+ run: uv sync --all-extras
202
+
203
+ - name: Download all shard results
204
+ uses: actions/download-artifact@v4
205
+ with:
206
+ pattern: tck-shard-*
207
+ merge-multiple: true
208
+ path: tck-results/
209
+
210
+ - name: Merge JUnit XML results
211
+ run: |
212
+ uv run python3 -c "
213
+ import glob, sys
214
+ from xml.etree import ElementTree as ET
215
+
216
+ files = sorted(glob.glob('tck-results/test-results-tck-*.xml'))
217
+ if not files:
218
+ print('No shard result files found')
219
+ sys.exit(1)
220
+
221
+ root = ET.parse(files[0]).getroot()
222
+ suite = root if root.tag == 'testsuite' else root.find('testsuite')
223
+
224
+ for f in files[1:]:
225
+ tree = ET.parse(f).getroot()
226
+ src = tree if tree.tag == 'testsuite' else tree.find('testsuite')
227
+ for tc in src.findall('testcase'):
228
+ suite.append(tc)
229
+
230
+ tests = len(suite.findall('testcase'))
231
+ failures = len(suite.findall('.//failure'))
232
+ errors = len(suite.findall('.//error'))
233
+ suite.set('tests', str(tests))
234
+ suite.set('failures', str(failures))
235
+ suite.set('errors', str(errors))
236
+
237
+ ET.ElementTree(root).write('test-results-tck.xml', xml_declaration=True, encoding='utf-8')
238
+ print(f'Merged {len(files)} shards: {tests} tests, {failures} failures')
239
+ "
240
+
241
+ - name: Merge test durations for future balancing
242
+ run: |
243
+ uv run python3 -c "
244
+ import glob, json
245
+ files = glob.glob('tck-results/.test_durations_*')
246
+ merged = {}
247
+ for f in files:
248
+ with open(f) as fh:
249
+ merged.update(json.load(fh))
250
+ with open('.test_durations', 'w') as fh:
251
+ json.dump(merged, fh)
252
+ print(f'Merged durations for {len(merged)} tests from {len(files)} shards')
253
+ " || echo "No duration files found, skipping merge"
254
+
255
+ - name: Save test durations cache
256
+ uses: actions/cache/save@v4
257
+ if: always()
258
+ with:
259
+ path: .test_durations
260
+ key: tck-durations-${{ github.ref }}-${{ github.run_id }}
261
+
262
+ - name: Report TCK compliance metrics
263
+ if: always()
264
+ run: uv run python3 scripts/tck_metrics.py test-results-tck.xml
265
+
266
+ - name: Report TCK performance metrics
267
+ if: always()
268
+ run: uv run python3 scripts/tck_perf_report.py test-results-tck.xml --threshold 5
269
+
270
+ - name: Upload TCK results to Codecov
271
+ uses: codecov/codecov-action@v5
272
+ if: always()
273
+ with:
274
+ token: ${{ secrets.CODECOV_TOKEN }}
275
+ files: test-results-tck.xml
276
+ flags: tck-compliance
277
+ report_type: test_results
278
+ fail_ci_if_error: false
279
+
280
+ - name: Upload merged TCK results artifact
281
+ uses: actions/upload-artifact@v4
282
+ if: always()
283
+ with:
284
+ name: tck-test-results
285
+ path: test-results-tck.xml
286
+
287
+ coverage-shard:
288
+ name: Coverage Shard ${{ matrix.group }}/4
289
+ runs-on: ubuntu-latest
290
+ strategy:
291
+ fail-fast: false
292
+ matrix:
293
+ group: [1, 2, 3, 4]
294
+
295
+ steps:
296
+ - name: Checkout code
297
+ uses: actions/checkout@v6
298
+
299
+ - name: Install uv
300
+ uses: astral-sh/setup-uv@v7
301
+
302
+ - name: Set up Python
303
+ uses: actions/setup-python@v6
304
+ with:
305
+ python-version: "3.12"
306
+
307
+ - name: Install dependencies
308
+ run: uv sync --all-extras
309
+
310
+ - name: Download SNAP ego-facebook dataset
311
+ run: |
312
+ mkdir -p ~/.graphforge/datasets
313
+ curl -L -o ~/.graphforge/datasets/snap-ego-facebook.txt.gz https://snap.stanford.edu/data/facebook_combined.txt.gz
314
+ shell: bash
315
+
316
+ - name: Run tests with coverage (shard ${{ matrix.group }}/4)
317
+ run: |
318
+ uv run pytest tests/unit tests/integration \
319
+ --splits 4 --group ${{ matrix.group }} \
320
+ --splitting-algorithm duration_based_chunks \
321
+ -n auto \
322
+ -m "not snap" \
323
+ --cov=src --cov-branch \
324
+ --cov-report=xml:coverage-${{ matrix.group }}.xml \
325
+ --junitxml=test-results-cov-${{ matrix.group }}.xml
326
+
327
+ - name: Upload coverage shard artifact
328
+ uses: actions/upload-artifact@v4
329
+ if: always()
330
+ with:
331
+ name: coverage-shard-${{ matrix.group }}
332
+ path: |
333
+ coverage-${{ matrix.group }}.xml
334
+ test-results-cov-${{ matrix.group }}.xml
335
+
336
+ coverage:
337
+ name: Coverage Report
338
+ runs-on: ubuntu-latest
339
+ needs: coverage-shard
340
+ if: always()
341
+
342
+ steps:
343
+ - name: Checkout code
344
+ uses: actions/checkout@v6
345
+
346
+ - name: Install uv
347
+ uses: astral-sh/setup-uv@v7
348
+
349
+ - name: Set up Python
350
+ uses: actions/setup-python@v6
351
+ with:
352
+ python-version: "3.12"
353
+
354
+ - name: Install dependencies
355
+ run: uv sync --all-extras
356
+
357
+ - name: Download all coverage shards
358
+ uses: actions/download-artifact@v4
359
+ with:
360
+ pattern: coverage-shard-*
361
+ merge-multiple: true
362
+ path: cov-results/
363
+
364
+ - name: Merge coverage reports
365
+ run: |
366
+ uv run python3 -c "
367
+ import glob, sys
368
+ from xml.etree import ElementTree as ET
369
+
370
+ files = sorted(glob.glob('cov-results/coverage-*.xml'))
371
+ if not files:
372
+ print('No coverage files found')
373
+ sys.exit(1)
374
+
375
+ base = ET.parse(files[0])
376
+ base_root = base.getroot()
377
+ base_packages = base_root.find('packages')
378
+
379
+ for f in files[1:]:
380
+ tree = ET.parse(f).getroot()
381
+ for pkg in tree.findall('.//package'):
382
+ base_packages.append(pkg)
383
+
384
+ base.write('coverage.xml', xml_declaration=True, encoding='utf-8')
385
+ print(f'Merged {len(files)} coverage shards')
386
+ "
387
+
388
+ - name: Check coverage threshold
389
+ run: |
390
+ uv run coverage combine cov-results/.coverage* 2>/dev/null || true
391
+ uv run coverage report --fail-under=85 || echo "Coverage below 85% - expected during initial development"
392
+
393
+ - name: Upload coverage to Codecov
394
+ uses: codecov/codecov-action@v5
395
+ with:
396
+ token: ${{ secrets.CODECOV_TOKEN }}
397
+ files: ./coverage.xml
398
+ flags: full-coverage
399
+ name: codecov-full
400
+ fail_ci_if_error: false
401
+
402
+ - name: Upload test results to Codecov
403
+ uses: codecov/codecov-action@v5
404
+ if: always()
405
+ with:
406
+ token: ${{ secrets.CODECOV_TOKEN }}
407
+ files: cov-results/test-results-cov-*.xml
408
+ flags: full-suite
409
+ report_type: test_results
410
+ fail_ci_if_error: false
411
+
412
+ - name: Upload coverage artifacts
413
+ uses: actions/upload-artifact@v4
414
+ with:
415
+ name: coverage-report
416
+ path: coverage.xml
@@ -5,6 +5,44 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.3.8] - 2026-05-02
11
+
12
+ ### Fixed - TCK Feature Completeness (3885/3885 passing)
13
+ - **Nanosecond precision in temporal types** — `CypherDateTime` and `CypherTime` now store a `_ns_residue` (0–999) for sub-microsecond precision; `_components` tuple extended to 8 elements with nanoseconds; construction, accessors, arithmetic, comparison, and serialization all updated (#224)
14
+ - **Statement clock caching** — `now()`, `datetime()`, `date()`, `time()` (without arguments) now return consistent values within a single query by caching the start time via `time.time_ns()` (#224)
15
+ - **Extreme year support** — dates/datetimes outside Python's 1–9999 range now handled via `_WideDate` / `_WideDateTime` classes; durations too large for `timedelta` use `_BigDuration`; Julian Day Number arithmetic for cross-extreme-year duration computation (#224)
16
+ - **IANA timezone name preservation** — `CypherDateTime` stores the IANA zone name (e.g. `Europe/Stockholm`) separately; `.timezone` accessor returns the zone name rather than the numeric offset; `utcoffset()` now receives a concrete datetime for DST-aware lookup (#224)
17
+ - **Aggregate detection in QuantifierExpression** — `ALL(ok IN collect(...) WHERE ok)` patterns now correctly detected as aggregate-containing; planner emits `Aggregate` instead of `Project` (#224)
18
+ - **OPTIONAL MATCH multi-WHERE placement** — multiple `WHERE` clauses no longer overwrite each other; multi-hop OPTIONAL MATCH WHERE is emitted after all hops so all variables are bound (#224)
19
+ - **`coalesce()` type inference** — return type is inferred from argument types so `MATCH (x)` after `WITH coalesce(a, b) AS x` accepts node-typed variables (#224)
20
+ - **Non-deterministic aggregate arguments** — `count(rand())` and similar expressions now raise `AmbiguousAggregationExpression` per the openCypher spec (#224)
21
+ - **Temporal accessor for extreme-year datetimes** — `year`, `month`, `day`, `hour`, `minute`, `second` accessors work on `_WideDateTime`-backed `CypherDateTime` values (#224)
22
+ - **All 23 xfail markers removed** — previously marked as expected failures; all were fixable (#224)
23
+
24
+ ### Added
25
+ - **75-test unit coverage for extreme temporal classes** — `tests/unit/types/test_extreme_temporal_values.py` covers `_WideDate`, `_WideDateTime`, `_BigDuration`, extreme-year construction/accessors, IANA timezone preservation, and large duration handling
26
+
27
+ ### Fixed
28
+ - **WITH clause WHERE filtering and variable scoping** (#362) — `WITH n WHERE n.age > 30` now correctly filters post-projection; chained WITH propagates bindings properly
29
+ - **Triadic OPTIONAL MATCH semantics** (#302 partial) — `OPTIONAL MATCH (a)-[r]->(b)` with pre-bound `b` now correctly filters to only edges reaching that specific destination (LEFT JOIN semantics)
30
+ - **Relationship type disjunction without colon prefix** (#363) — `[:KNOWS|FOLLOWS]` (pipe without colon on subsequent types) now parses correctly
31
+ - **Multi-CREATE variable scoping** (#364 partial) — variables created in one CREATE clause are now visible in subsequent CREATE clauses within the same query
32
+
33
+ ### Performance
34
+ - **O(n²) → O(1) graph statistics updates** (#366) — `_update_statistics_after_add_edge` no longer scans all edges on every insert; replaced with incremental `_unique_sources_by_type` tracking. Eliminated 2,000+ Pydantic `model_copy()` calls per 1,000-node graph by switching to mutable counters with lazy `GraphStatistics` construction
35
+ - **Parser fast path for long CREATE sequences** (#366) — queries with many consecutive CREATE clauses (e.g. the TCK movie graph with 971 CREATEs) are pre-split into batches of 5 before Earley parsing, reducing wall-clock time from 27 minutes to ~26 seconds. See docs/development/parser-performance-analysis.md for full analysis and the LALR(1) migration plan (issue #365)
36
+
37
+ ### CI
38
+ - **TCK sharding across 4 parallel runners** — TCK tests now split using `pytest-split` with duration-based balancing (~4x faster CI)
39
+ - **Coverage sharding** — coverage collection also split across 4 shards and merged in report job
40
+ - **Python 3.14 experimental matrix** — added as non-blocking `continue-on-error` entries
41
+ - **TCK performance reporting** — new `scripts/tck_perf_report.py` runs after each TCK run, reporting tests over 5s and tracking use-case tests (movie graph, school graph) for performance regression detection
42
+
43
+ ### TCK Coverage
44
+ - **3,885 / 3,885 passing (100%)** — first release with zero TCK failures and zero expected failures
45
+
8
46
  ## [0.3.7] - 2026-04-07
9
47
 
10
48
  ### Added - Functions
@@ -38,7 +76,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
38
76
  - **Temporal select-into constructors** (#334) — cross-type temporal projection (`date({date: other})`, `localdatetime({datetime: dt})`, etc.) with component overrides; null propagation, hour-overflow normalization, and timezone conversion all correct
39
77
 
40
78
  ### TCK Coverage
41
- - **~2,894 passing** (up from ~2,507 at v0.3.6) — +387 net new passing scenarios
79
+ - **3,235 / 3,885 passing (83.3%)** (up from ~2,507 at v0.3.6) — +728 net new passing scenarios
42
80
  - Theme: ORDER BY correctness, aggregation, operator precedence, graph semantics, temporal completeness
43
81
 
44
82
  ## [0.3.6] - 2026-02-28