relationalai 0.13.3__tar.gz → 0.13.4__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 (479) hide show
  1. {relationalai-0.13.3 → relationalai-0.13.4}/PKG-INFO +2 -2
  2. {relationalai-0.13.3 → relationalai-0.13.4}/pyproject.toml +2 -2
  3. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/snowflake.py +7 -0
  4. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/use_index_poller.py +1 -1
  5. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/snowflake.py +5 -1
  6. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/executor.py +28 -8
  7. relationalai-0.13.4/src/relationalai/semantics/lqp/export_rewriter.py +40 -0
  8. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/model2lqp.py +3 -0
  9. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/annotate_constraints.py +22 -10
  10. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +31 -2
  11. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/test_snapshot_abstract.py +2 -1
  12. {relationalai-0.13.3 → relationalai-0.13.4}/.gitignore +0 -0
  13. {relationalai-0.13.3 → relationalai-0.13.4}/LICENSE +0 -0
  14. {relationalai-0.13.3 → relationalai-0.13.4}/docs/pypi/README.md +0 -0
  15. {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/.gitignore +0 -0
  16. {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  17. {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  18. {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  19. {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/index.html +0 -0
  20. {relationalai-0.13.3 → relationalai-0.13.4}/src/__init__.py +0 -0
  21. {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/__init__.py +0 -0
  22. {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/events/__init__.py +0 -0
  23. {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/procedures/__init__.py +0 -0
  24. {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/procedures/procedure.py +0 -0
  25. {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/rel/__init__.py +0 -0
  26. {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/tables/__init__.py +0 -0
  27. {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/tasks/__init__.py +0 -0
  28. {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/tasks/task.py +0 -0
  29. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/__init__.py +0 -0
  30. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/analysis/__init__.py +0 -0
  31. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/analysis/mechanistic.py +0 -0
  32. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/analysis/whynot.py +0 -0
  33. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/__init__.py +0 -0
  34. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/jwt_generator.py +0 -0
  35. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/oauth_callback_server.py +0 -0
  36. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/token_handler.py +0 -0
  37. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/util.py +0 -0
  38. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/__init__.py +0 -0
  39. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/client.py +0 -0
  40. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/config.py +0 -0
  41. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/direct_access_client.py +0 -0
  42. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/exec_txn_poller.py +0 -0
  43. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/hash_util.py +0 -0
  44. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/local.py +0 -0
  45. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/profile_polling.py +0 -0
  46. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/__init__.py +0 -0
  47. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/azure/azure.py +0 -0
  48. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/__init__.py +0 -0
  49. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/cache_store.py +0 -0
  50. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/cli_resources.py +0 -0
  51. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/direct_access_resources.py +0 -0
  52. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/engine_service.py +0 -0
  53. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -0
  54. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/error_handlers.py +0 -0
  55. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/export_procedure.py.jinja +0 -0
  56. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/resources_factory.py +0 -0
  57. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/use_index_resources.py +0 -0
  58. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/util.py +0 -0
  59. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/result_helpers.py +0 -0
  60. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/types.py +0 -0
  61. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/util.py +0 -0
  62. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/compiler.py +0 -0
  63. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/debugging.py +0 -0
  64. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/dependencies.py +0 -0
  65. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/docutils.py +0 -0
  66. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/dsl.py +0 -0
  67. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/__init__.py +0 -0
  68. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/__init__.py +0 -0
  69. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  70. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  71. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  72. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  73. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  74. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  75. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  76. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/devtools/__init__.py +0 -0
  77. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  78. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  79. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/__init__.py +0 -0
  80. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  81. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  82. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  83. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  84. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  85. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  86. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  87. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  88. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  89. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  90. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  91. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  92. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  93. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  94. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  95. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  96. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  97. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  98. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  99. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  100. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  101. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/constants.py +0 -0
  102. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  103. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  104. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  105. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  106. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  107. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  108. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  109. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  110. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  111. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/context.py +0 -0
  112. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  113. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  114. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  115. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  116. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  117. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  118. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  119. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  120. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  121. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  122. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  123. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  124. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  125. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  126. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  127. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  128. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  129. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  130. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  131. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  132. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  133. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  134. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  135. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  136. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  137. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  138. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  139. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  140. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  141. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  142. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  143. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  144. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  145. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  146. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  147. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  148. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  149. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  150. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  151. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  152. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  153. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  154. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  155. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  156. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  157. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  158. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  159. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  160. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  161. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  162. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  163. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  164. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  165. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  166. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  167. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  168. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  169. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  170. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/relations.py +0 -0
  171. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  172. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  173. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  174. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  175. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  176. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  177. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  178. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  179. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialization.py +0 -0
  180. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  181. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  182. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  183. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  184. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  185. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  186. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  187. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  188. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  189. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  190. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  191. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  192. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  193. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/types/values.py +0 -0
  194. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/utils.py +0 -0
  195. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/graphs/__init__.py +0 -0
  196. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/__init__.py +0 -0
  197. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  198. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  199. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  200. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  201. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  202. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  203. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  204. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  205. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  206. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  207. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  208. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  209. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  210. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  211. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  212. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  213. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  214. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  215. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  216. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  217. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  218. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  219. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  220. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/rel/__init__.py +0 -0
  221. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  222. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  223. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  224. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/solvers/__init__.py +0 -0
  225. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/sql/__init__.py +0 -0
  226. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  227. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  228. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/tests/__init__.py +0 -0
  229. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  230. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  231. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  232. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/__init__.py +0 -0
  233. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/base.py +0 -0
  234. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/ci.py +0 -0
  235. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/colab.py +0 -0
  236. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/generic.py +0 -0
  237. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/hex.py +0 -0
  238. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/ipython.py +0 -0
  239. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/jupyter.py +0 -0
  240. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/snowbook.py +0 -0
  241. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/terminal.py +0 -0
  242. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/errors.py +0 -0
  243. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/SF.py +0 -0
  244. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/__init__.py +0 -0
  245. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/graphs.py +0 -0
  246. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/inspect.py +0 -0
  247. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  248. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/api.py +0 -0
  249. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  250. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  251. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  252. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  253. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  254. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  255. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  256. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/options.py +0 -0
  257. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  258. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  259. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  260. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  261. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/README.md +0 -0
  262. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/__init__.py +0 -0
  263. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/api.py +0 -0
  264. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
  265. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
  266. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/code_organization.md +0 -0
  267. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
  268. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
  269. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
  270. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
  271. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
  272. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
  273. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
  274. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
  275. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
  276. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
  277. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
  278. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
  279. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
  280. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
  281. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
  282. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
  283. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/graph.py +0 -0
  284. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
  285. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
  286. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  287. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  288. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
  289. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  290. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  291. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
  292. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
  293. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
  294. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/product_graph.py +0 -0
  295. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
  296. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
  297. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
  298. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
  299. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
  300. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
  301. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
  302. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
  303. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
  304. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
  305. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
  306. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
  307. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  308. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  309. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  310. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  311. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
  312. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
  313. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
  314. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  315. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  316. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  317. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  318. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
  319. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
  320. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  321. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
  322. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
  323. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
  324. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
  325. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/solvers.py +0 -0
  326. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/loaders/__init__.py +0 -0
  327. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/loaders/csv.py +0 -0
  328. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/loaders/loader.py +0 -0
  329. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/loaders/types.py +0 -0
  330. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/metagen.py +0 -0
  331. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/metamodel.py +0 -0
  332. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/rel.py +0 -0
  333. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/rel_emitter.py +0 -0
  334. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/rel_utils.py +0 -0
  335. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/__init__.py +0 -0
  336. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  337. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/devtools/__init__.py +0 -0
  338. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  339. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  340. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  341. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/__init__.py +0 -0
  342. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/annotations.py +0 -0
  343. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/internal.py +0 -0
  344. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/README.md +0 -0
  345. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/__init__.py +0 -0
  346. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/algorithms.py +0 -0
  347. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/builtins.py +0 -0
  348. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/compiler.py +0 -0
  349. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/constructors.py +0 -0
  350. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  351. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/ir.py +0 -0
  352. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/passes.py +0 -0
  353. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  354. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/primitives.py +0 -0
  355. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  356. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
  357. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/algorithm.py +0 -0
  358. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  359. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/constants_to_vars.py +0 -0
  360. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/deduplicate_vars.py +0 -0
  361. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/eliminate_data.py +0 -0
  362. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
  363. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
  364. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
  365. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/period_math.py +0 -0
  366. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  367. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  368. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/unify_definitions.py +0 -0
  369. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/types.py +0 -0
  370. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/utils.py +0 -0
  371. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/validators.py +0 -0
  372. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  373. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/builtins.py +0 -0
  374. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  375. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  376. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  377. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/executor.py +0 -0
  378. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/factory.py +0 -0
  379. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  380. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/ir.py +0 -0
  381. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  382. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  383. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  384. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  385. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
  386. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
  387. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  388. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  389. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  390. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/types.py +0 -0
  391. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/util.py +0 -0
  392. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  393. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  394. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
  395. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  396. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  397. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
  398. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  399. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  400. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  401. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  402. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  403. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  404. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/__init__.py +0 -0
  405. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/builtins.py +0 -0
  406. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/compiler.py +0 -0
  407. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/executor.py +0 -0
  408. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/rel.py +0 -0
  409. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  410. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  411. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/__init__.py +0 -0
  412. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/compiler.py +0 -0
  413. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  414. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  415. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  416. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
  417. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  418. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  419. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  420. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  421. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  422. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/sql.py +0 -0
  423. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/__init__.py +0 -0
  424. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/constraints.py +0 -0
  425. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/datetime.py +0 -0
  426. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/decimals.py +0 -0
  427. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/floats.py +0 -0
  428. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/integers.py +0 -0
  429. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/math.py +0 -0
  430. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/pragmas.py +0 -0
  431. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/re.py +0 -0
  432. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/std.py +0 -0
  433. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/strings.py +0 -0
  434. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/__init__.py +0 -0
  435. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/logging.py +0 -0
  436. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/lqp/__init__.py +0 -0
  437. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/lqp/algorithms.py +0 -0
  438. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  439. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/utils.py +0 -0
  440. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/__init__.py +0 -0
  441. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/aggregates.py +0 -0
  442. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/dates.py +0 -0
  443. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/graphs.py +0 -0
  444. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/inspect.py +0 -0
  445. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/math.py +0 -0
  446. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/re.py +0 -0
  447. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/strings.py +0 -0
  448. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/__init__.py +0 -0
  449. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  450. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/cli.py +0 -0
  451. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/cli_controls.py +0 -0
  452. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/cli_helpers.py +0 -0
  453. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/constants.py +0 -0
  454. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/debugger.py +0 -0
  455. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/debugger_client.py +0 -0
  456. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/debugger_server.py +0 -0
  457. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/dev.py +0 -0
  458. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/notes +0 -0
  459. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/qb_debugger.py +0 -0
  460. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/query_utils.py +0 -0
  461. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/snapshot_viewer.py +0 -0
  462. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/__init__.py +0 -0
  463. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/clean_up_databases.py +0 -0
  464. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/constants.py +0 -0
  465. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/format.py +0 -0
  466. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/graph.py +0 -0
  467. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/list_databases.py +0 -0
  468. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/otel_configuration.py +0 -0
  469. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/otel_handler.py +0 -0
  470. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/snowflake_handler.py +0 -0
  471. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/span_format_test.py +0 -0
  472. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/span_tracker.py +0 -0
  473. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/spans_file_handler.py +0 -0
  474. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/timeout.py +0 -0
  475. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/tracing_handler.py +0 -0
  476. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai_test_util/__init__.py +0 -0
  477. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai_test_util/fixtures.py +0 -0
  478. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai_test_util/snapshot.py +0 -0
  479. {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai_test_util/traceback.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.13.3
3
+ Version: 0.13.4
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
@@ -11,7 +11,7 @@ Requires-Dist: colorama
11
11
  Requires-Dist: cryptography
12
12
  Requires-Dist: gravis
13
13
  Requires-Dist: inquirerpy
14
- Requires-Dist: lqp==0.2.1
14
+ Requires-Dist: lqp==0.2.3
15
15
  Requires-Dist: nicegui==2.16.1
16
16
  Requires-Dist: numpy<2
17
17
  Requires-Dist: opentelemetry-api
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = 'relationalai'
3
- version = '0.13.3'
3
+ version = '0.13.4'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -8,7 +8,7 @@ authors = [
8
8
  ]
9
9
  requires-python = ">= 3.10"
10
10
  dependencies = [
11
- "lqp==0.2.1",
11
+ "lqp==0.2.3",
12
12
  "snowflake-connector-python[secure-local-storage]",
13
13
  "snowflake-snowpark-python>=1.38.0",
14
14
  "typing-extensions",
@@ -105,6 +105,9 @@ TXN_ABORT_REASON_TIMEOUT = "transaction timeout"
105
105
  GUARDRAILS_ABORT_REASON = "guard rail violation"
106
106
 
107
107
  PRINT_TXN_PROGRESS_FLAG = "print_txn_progress"
108
+ ENABLE_GUARD_RAILS_FLAG = "enable_guard_rails"
109
+
110
+ ENABLE_GUARD_RAILS_HEADER = "X-RAI-Enable-Guard-Rails"
108
111
 
109
112
  #--------------------------------------------------
110
113
  # Helpers
@@ -113,6 +116,9 @@ PRINT_TXN_PROGRESS_FLAG = "print_txn_progress"
113
116
  def should_print_txn_progress(config) -> bool:
114
117
  return bool(config.get(PRINT_TXN_PROGRESS_FLAG, False))
115
118
 
119
+ def should_enable_guard_rails(config) -> bool:
120
+ return bool(config.get(ENABLE_GUARD_RAILS_FLAG, False))
121
+
116
122
  #--------------------------------------------------
117
123
  # Resources
118
124
  #--------------------------------------------------
@@ -1800,6 +1806,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
1800
1806
  request_headers['user-agent'] = get_pyrel_version(self.generation)
1801
1807
  request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
1802
1808
  request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
1809
+ request_headers[ENABLE_GUARD_RAILS_HEADER] = str(should_enable_guard_rails(self.config))
1803
1810
 
1804
1811
  # Create the transaction
1805
1812
  result = self._create_v2_txn(
@@ -66,7 +66,7 @@ ERP_CHECK_FREQUENCY = 15
66
66
 
67
67
  # Polling behavior constants
68
68
  POLL_OVERHEAD_RATE = 0.1 # Overhead rate for exponential backoff
69
- POLL_MAX_DELAY = 2.5 # Maximum delay between polls in seconds
69
+ POLL_MAX_DELAY = 0 # Maximum delay between polls in seconds
70
70
 
71
71
  # SQL query template for getting stream column hashes
72
72
  # This query calculates a hash of column metadata (name, type, precision, scale, nullable)
@@ -214,6 +214,7 @@ class Table():
214
214
  self._col_names = cols
215
215
  self._iceberg_config = config
216
216
  self._is_iceberg = config is not None
217
+ self._skip_cdc = False
217
218
  info = self._schemas.get((self._database, self._schema))
218
219
  if not info:
219
220
  info = self._schemas[(self._database, self._schema)] = SchemaInfo(self._database, self._schema)
@@ -303,7 +304,10 @@ class Table():
303
304
 
304
305
  def _compile_lookup(self, compiler:b.Compiler, ctx:b.CompilerContext):
305
306
  self._lazy_init()
306
- Table._used_sources.add(self)
307
+ if not self._skip_cdc:
308
+ # Don't do CDC if the underlying data has been loaded
309
+ # directly via `api.load_data`.
310
+ Table._used_sources.add(self)
307
311
  compiler.lookup(self._rel, ctx)
308
312
  return compiler.lookup(b.RelationshipFieldRef(None, self._rel, 0), ctx)
309
313
 
@@ -10,8 +10,9 @@ from snowflake.snowpark import Session
10
10
 
11
11
  from relationalai import debugging
12
12
  from relationalai.errors import NonDefaultLQPSemanticsVersionWarning
13
- from relationalai.semantics.lqp import result_helpers
13
+ from relationalai.semantics.lqp import result_helpers, export_rewriter
14
14
  from relationalai.semantics.metamodel import ir, factory as f, executor as e
15
+ from relationalai.semantics.metamodel.visitor import collect_by_type
15
16
 
16
17
  if TYPE_CHECKING:
17
18
  from relationalai.semantics.internal.internal import Model as InternalModel
@@ -368,7 +369,7 @@ class LQPExecutor(e.Executor):
368
369
  meta=None,
369
370
  )
370
371
 
371
- def compile_lqp(self, model: ir.Model, task: ir.Task):
372
+ def compile_lqp(self, model: ir.Model, task: ir.Task, format: Optional[Literal["pandas", "snowpark", "csv"]] = "pandas"):
372
373
  configure = self._construct_configure()
373
374
  # Merge the epochs into a single transaction. Long term the query bits should all
374
375
  # go into a WhatIf action and the intrinsics could be fused with either of them. But
@@ -394,6 +395,21 @@ class LQPExecutor(e.Executor):
394
395
  result, final_model = self.compiler.compile_inner(query, options)
395
396
  export_info, query_epoch = result
396
397
 
398
+ if format == "csv":
399
+ # Extract original column names from Output
400
+ outputs = collect_by_type(ir.Output, task)
401
+ assert outputs, "No Output found in the task"
402
+ assert len(outputs) == 1, "Multiple Outputs found in the task"
403
+ output = outputs[0]
404
+ original_cols = []
405
+ for alias, _ in output.aliases:
406
+ if not alias:
407
+ continue
408
+ original_cols.append(alias)
409
+ # Use rewriter to filter data_columns
410
+ column_filter = export_rewriter.ExtraColumnsFilter(original_cols)
411
+ query_epoch = column_filter.filter_epoch(query_epoch)
412
+
397
413
  epochs.append(query_epoch)
398
414
  epochs.append(self._compile_undefine_query(query_epoch))
399
415
 
@@ -417,8 +433,7 @@ class LQPExecutor(e.Executor):
417
433
  ) -> DataFrame:
418
434
  self.prepare_data()
419
435
  previous_model = self._last_model
420
-
421
- final_model, export_info, txn_proto = self.compile_lqp(model, task)
436
+ final_model, export_info, txn_proto = self.compile_lqp(model, task, format=format)
422
437
 
423
438
  if self.dry_run:
424
439
  return DataFrame()
@@ -440,7 +455,9 @@ class LQPExecutor(e.Executor):
440
455
  nowait_durable=True,
441
456
  headers=headers,
442
457
  )
443
- assert isinstance(raw_results, TransactionAsyncResponse)
458
+ assert isinstance(raw_results, TransactionAsyncResponse), "Expected TransactionAsyncResponse from LQP execution"
459
+ assert raw_results.transaction is not None, "Transaction result is missing"
460
+ txid = raw_results.transaction['id']
444
461
 
445
462
  try:
446
463
  cols, extra_cols = self._compute_cols(task, final_model)
@@ -453,7 +470,6 @@ class LQPExecutor(e.Executor):
453
470
 
454
471
  if export_to:
455
472
  assert cols, "No columns found in the output"
456
- assert raw_results.transaction, "Invalid transaction result"
457
473
  assert export_info, "Export info should be populated if we are exporting results"
458
474
  result_cols = export_to._col_names
459
475
  if result_cols is not None:
@@ -461,11 +477,15 @@ class LQPExecutor(e.Executor):
461
477
  else:
462
478
  result_cols = [col for col in cols if col not in extra_cols]
463
479
  assert result_cols
464
- self._export(raw_results.transaction['id'], export_info, export_to, cols, result_cols, update)
480
+ self._export(txid, export_info, export_to, cols, result_cols, update)
465
481
 
466
482
  if format == "csv":
467
483
  if export_info is not None and isinstance(export_info, tuple) and isinstance(export_info[0], str):
468
- return DataFrame([export_info[0]], columns=["path"])
484
+ # The full CSV path has two parts. The first part is chosen by the frontend, while
485
+ # the second part is chosen by the backend to avoid collisions. We need to ensure
486
+ # the second part is synchronized with the future changes in the backend.
487
+ full_path = export_info[0] + f"/data_{txid}.gz"
488
+ return DataFrame([full_path], columns=["path"])
469
489
  else:
470
490
  raise ValueError("The CSV export was not successful!")
471
491
 
@@ -0,0 +1,40 @@
1
+ #----------------------------------------------------------------------------------------------
2
+ # This is a custom LQP rewriter that filters extra columns from CSV export. It is used in the
3
+ # LQP executor, when the format="csv", to ensure only intended columns are being exported.
4
+ #----------------------------------------------------------------------------------------------
5
+
6
+ from dataclasses import replace
7
+ from lqp import ir as lqp_ir
8
+
9
+ class ExtraColumnsFilter:
10
+
11
+ def __init__(self, original_cols: list[str]):
12
+ self.original_cols = set(original_cols)
13
+
14
+ def filter_epoch(self, query_epoch: lqp_ir.Epoch) -> lqp_ir.Epoch:
15
+
16
+ # Only process epochs with a single read which is dedicated to Export
17
+ if not (query_epoch.reads and len(query_epoch.reads) == 1):
18
+ return query_epoch
19
+
20
+ old_read = query_epoch.reads[0]
21
+ if not isinstance(old_read.read_type, lqp_ir.Export):
22
+ return query_epoch
23
+
24
+ config = old_read.read_type.config
25
+ assert isinstance(config, lqp_ir.ExportCSVConfig) and config.data_columns is not None, \
26
+ "Expected ExportCSVConfig with data_columns in the read type"
27
+
28
+ data_columns = config.data_columns
29
+
30
+ # Filter data_columns to only include columns in original_cols
31
+ new_data_columns = [col for col in data_columns if col.column_name in self.original_cols]
32
+
33
+ # Reconstruct the nested structure with filtered data_columns
34
+ new_config = replace(old_read.read_type.config, data_columns=new_data_columns)
35
+ new_read_type = replace(old_read.read_type, config=new_config)
36
+ new_read = replace(old_read, read_type=new_read_type)
37
+
38
+ # Return new epoch with updated read
39
+ remaining_reads = list(query_epoch.reads[1:])
40
+ return replace(query_epoch, reads=[new_read] + remaining_reads)
@@ -142,8 +142,11 @@ def _translate_to_constraint_decls(ctx: TranslationCtx, rule: ir.Logical) -> lis
142
142
  lqp_guard = mk_abstraction(lqp_typed_vars, mk_and(lqp_guard_atoms))
143
143
  lqp_keys:list[lqp.Var] = [var for (var, _) in lqp_typed_keys] # type: ignore
144
144
  lqp_values:list[lqp.Var] = [var for (var, _) in lqp_typed_values] # type: ignore
145
+ lqp_id = utils.lqp_hash(fd.canonical_str)
146
+ lqp_name:lqp.RelationId = lqp.RelationId(id=lqp_id, meta=None)
145
147
 
146
148
  fd_decl = lqp.FunctionalDependency(
149
+ name=lqp_name,
147
150
  guard=lqp_guard,
148
151
  keys=lqp_keys,
149
152
  values=lqp_values,
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
-
2
+ from dataclasses import dataclass, field
3
+ from relationalai.clients.config import Config
3
4
  from relationalai.semantics.metamodel import builtins
4
5
  from relationalai.semantics.metamodel.ir import Node, Model, Require
5
6
  from relationalai.semantics.metamodel.compiler import Pass
@@ -10,8 +11,6 @@ from relationalai.semantics.lqp.rewrite.functional_dependencies import (
10
11
  is_valid_unique_constraint, normalized_fd
11
12
  )
12
13
 
13
- _DISABLE_CONSTRAINT_DECLARATIONS = True
14
-
15
14
  class AnnotateConstraints(Pass):
16
15
  """
17
16
  Extends `DischargeConstraints` pass by discharging only those Require nodes that cannot
@@ -29,24 +28,37 @@ class AnnotateConstraints(Pass):
29
28
  def rewrite(self, model: Model, options: dict = {}) -> Model:
30
29
  return AnnotateConstraintsRewriter().walk(model)
31
30
 
32
-
31
+ @dataclass
33
32
  class AnnotateConstraintsRewriter(DischargeConstraintsVisitor):
33
+ emit_constraints: bool = field(default=False)
34
34
  """
35
- Visitor marks all nodes which should be removed from IR model with `discharge` annotation.
35
+ Visitor marks Require nodes with
36
+ - `discharge` if they should be discharged from the metamodel
37
+ - `declare_constraint` if they should be kept and emitted as LQP constraint declarations
38
+
39
+ By default, all constraints are discharged. To enable emitting constraints, set the
40
+ `reasoner.rule.emit_constraints` flag to True in the config file.
41
+ ```toml
42
+ [reasoner.rule]
43
+ emit_constraints = true
44
+ ```
36
45
  """
37
46
 
38
- def _should_be_declarable_constraint(self, node: Require) -> bool:
39
- if _DISABLE_CONSTRAINT_DECLARATIONS:
47
+ def __post_init__(self):
48
+ from relationalai.semantics.internal.internal import overridable_flag
49
+ self.emit_constraints = overridable_flag('reasoner.rule.emit_constraints', Config(), None, False)
50
+
51
+ def _should_declare_constraint(self, node: Require) -> bool:
52
+ if not self.emit_constraints:
40
53
  return False
41
54
  if not is_valid_unique_constraint(node):
42
55
  return False
43
56
  # Currently, we only declare non-structural functional dependencies.
44
57
  fd = normalized_fd(node)
45
- assert fd is not None # already checked by _is_valid_unique_constraint
46
- return not fd.is_structural
58
+ return fd is not None and not fd.is_structural
47
59
 
48
60
  def handle_require(self, node: Require, parent: Node):
49
- if self._should_be_declarable_constraint(node):
61
+ if self._should_declare_constraint(node):
50
62
  return node.reconstruct(
51
63
  node.engine,
52
64
  node.domain,
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
  from typing import Optional, Sequence
3
3
  from relationalai.semantics.internal import internal
4
4
  from relationalai.semantics.metamodel.ir import (
5
- Node, Require, Logical, Var, Relation, Lookup, ScalarType
5
+ Node, Require, Logical, Var, Relation, Lookup, ScalarType, Literal
6
6
  )
7
7
  from relationalai.semantics.metamodel import builtins
8
8
 
@@ -13,7 +13,7 @@ dependencies. The main functionalities provided are:
13
13
  1. Check whether a `Require` node is a valid unique constraint representation
14
14
  2. Represent the uniqueness constraint as a functional dependency
15
15
  3. Check if the functional dependency is structural i.e., can be represented with
16
- `@function(k)` annotation on a single relation.
16
+ `@function(k)` annotation on a single relation.
17
17
 
18
18
  =========================== Structure of unique constraints ================================
19
19
  A `Require` node represents a _unique constraint_ if it meets the following criteria:
@@ -234,6 +234,9 @@ class FunctionalDependency:
234
234
 
235
235
  self._determine_is_structural()
236
236
 
237
+ # compute canonical string representation of the fd
238
+ self._canonical_str = self._compute_canonical_str()
239
+
237
240
  # A functional dependency `φ: X → Y` is _k-functional_ if `φ` consists of a single atom
238
241
  # `R(x1,...,xm,y1,...,yk)` and `X = {x1,...,xm}`. Not all functional dependencies are
239
242
  # k-functional. For instance, `R(x, y, z): {y, z} → {x}` cannot be expressed with
@@ -291,6 +294,32 @@ class FunctionalDependency:
291
294
  values_str = ", ".join([str(var) for var in self.values]).strip()
292
295
  return f"{guard_str}: {{{keys_str}}} -> {{{values_str}}}"
293
296
 
297
+ # computes a canonical string representation of the functional dependency
298
+ def _compute_canonical_str(self) -> str:
299
+ # we construct a stable tuple-term representation of the fd
300
+ fd_term = ("fd",)
301
+ for atom in sorted(self.guard, key=lambda x: x.relation.name):
302
+ atom_term = (atom.relation.name,)
303
+ for arg in atom.args:
304
+ if isinstance(arg, Var):
305
+ atom_term += (("var", arg.name, str(arg.type)),)
306
+ elif isinstance(arg, Literal):
307
+ atom_term += (("lit", arg.value, str(arg.type)),)
308
+ else:
309
+ atom_term += (("arg", str(arg)),)
310
+ fd_term += (atom_term,)
311
+ keys_term = tuple(sorted((("var", v.name, str(v.type)) for v in self.keys)))
312
+ values_term = tuple(sorted((("var", v.name, str(v.type)) for v in self.values)))
313
+ fd_term += (("keys", keys_term), ("values", values_term))
314
+ return str(fd_term)
315
+
316
+ @property
317
+ def canonical_str(self) -> str:
318
+ """
319
+ A canonical string representation (depends on guard atoms, keys, and values).
320
+ """
321
+ return self._canonical_str
322
+
294
323
  def contains_only_declarable_constraints(node: Node) -> bool:
295
324
  """
296
325
  Checks whether the input `Logical` node contains only `Require` nodes annotated with
@@ -20,7 +20,7 @@ class AbstractSnapshotTest(ABC):
20
20
  provider:Provider = cast(SFProvider, Provider()) # type: ignore
21
21
 
22
22
  def run_snapshot_test(self, snapshot, script_path, db_schema=None, use_sql=False, use_lqp=True, use_rel=False,
23
- use_direct_access=False, e2e=False, use_csv=True, e2e_only=False):
23
+ use_direct_access=False, e2e=False, use_csv=True, e2e_only=False, emit_constraints=False):
24
24
  # Resolve use_lqp
25
25
  use_lqp = use_lqp and (not use_rel) # use_rel overrides because use_lqp is default.
26
26
 
@@ -47,6 +47,7 @@ class AbstractSnapshotTest(ABC):
47
47
  'model_suffix': "" if not e2e else f"_{unique_name}",
48
48
  'use_sql': use_sql,
49
49
  'reasoner.rule.use_lqp': use_lqp,
50
+ 'reasoner.rule.emit_constraints': emit_constraints,
50
51
  'keep_model': False,
51
52
  # fix the current time to keep snapshots stable
52
53
  'datetime_now': datetime.datetime.fromisoformat("2025-12-01T12:00:00+00:00"),
File without changes
File without changes