relationalai 0.12.6__tar.gz → 0.12.7__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 (454) hide show
  1. {relationalai-0.12.6 → relationalai-0.12.7}/PKG-INFO +2 -2
  2. {relationalai-0.12.6 → relationalai-0.12.7}/pyproject.toml +9 -2
  3. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/snowflake.py +11 -2
  4. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/constructors/__init__.py +2 -2
  5. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/rewrite/__init__.py +2 -2
  6. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/internal.py +1 -4
  7. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/snowflake.py +14 -1
  8. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/constructors.py +0 -5
  9. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/executor.py +34 -10
  10. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/intrinsics.py +2 -2
  11. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/model2lqp.py +10 -7
  12. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/passes.py +27 -8
  13. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/primitives.py +15 -15
  14. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/__init__.py +2 -2
  15. relationalai-0.12.6/src/relationalai/semantics/lqp/rewrite/fd_constraints.py → relationalai-0.12.7/src/relationalai/semantics/lqp/rewrite/function_annotations.py +4 -4
  16. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/utils.py +17 -13
  17. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/compiler.py +2 -2
  18. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/executor.py +30 -8
  19. relationalai-0.12.7/src/relationalai/semantics/snowflake/__init__.py +3 -0
  20. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/executor/snowflake.py +6 -2
  21. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/test_snapshot_abstract.py +5 -4
  22. relationalai-0.12.6/src/relationalai/semantics/snowflake/__init__.py +0 -3
  23. {relationalai-0.12.6 → relationalai-0.12.7}/.gitignore +0 -0
  24. {relationalai-0.12.6 → relationalai-0.12.7}/LICENSE +0 -0
  25. {relationalai-0.12.6 → relationalai-0.12.7}/docs/pypi/README.md +0 -0
  26. {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/.gitignore +0 -0
  27. {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  28. {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  29. {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  30. {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/index.html +0 -0
  31. {relationalai-0.12.6 → relationalai-0.12.7}/src/__init__.py +0 -0
  32. {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/__init__.py +0 -0
  33. {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/events/__init__.py +0 -0
  34. {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/procedures/__init__.py +0 -0
  35. {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/procedures/procedure.py +0 -0
  36. {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/rel/__init__.py +0 -0
  37. {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/tables/__init__.py +0 -0
  38. {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/tasks/__init__.py +0 -0
  39. {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/tasks/task.py +0 -0
  40. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/__init__.py +0 -0
  41. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/analysis/__init__.py +0 -0
  42. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/analysis/mechanistic.py +0 -0
  43. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/analysis/whynot.py +0 -0
  44. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/__init__.py +0 -0
  45. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/jwt_generator.py +0 -0
  46. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/oauth_callback_server.py +0 -0
  47. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/token_handler.py +0 -0
  48. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/util.py +0 -0
  49. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/__init__.py +0 -0
  50. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/azure.py +0 -0
  51. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/cache_store.py +0 -0
  52. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/client.py +0 -0
  53. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/config.py +0 -0
  54. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/direct_access_client.py +0 -0
  55. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  56. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/hash_util.py +0 -0
  57. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/profile_polling.py +0 -0
  58. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/result_helpers.py +0 -0
  59. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/types.py +0 -0
  60. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/use_index_poller.py +0 -0
  61. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/util.py +0 -0
  62. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/compiler.py +0 -0
  63. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/debugging.py +0 -0
  64. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/dependencies.py +0 -0
  65. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/docutils.py +0 -0
  66. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/dsl.py +0 -0
  67. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/__init__.py +0 -0
  68. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/__init__.py +0 -0
  69. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  70. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  71. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  72. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  73. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  74. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  75. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  76. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/devtools/__init__.py +0 -0
  77. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  78. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  79. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/__init__.py +0 -0
  80. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  81. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  82. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  83. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  84. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  85. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  86. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  87. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  88. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  89. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  90. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  91. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  92. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  93. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  94. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  95. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  96. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  97. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  98. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  99. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  100. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  101. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/constants.py +0 -0
  102. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  103. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  104. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  105. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  106. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  107. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  108. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  109. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  110. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  111. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/context.py +0 -0
  112. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  113. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  114. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  115. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  116. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  117. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  118. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  119. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  120. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  121. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  122. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  123. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  124. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  125. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  126. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  127. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  128. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  129. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  130. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  131. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  132. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  133. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  134. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  135. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  136. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  137. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  138. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  139. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  140. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  141. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  142. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  143. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  144. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  145. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  146. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  147. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  148. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  149. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  150. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  151. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  152. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  153. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  154. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  155. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  156. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  157. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  158. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  159. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  160. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  161. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  162. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  163. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  164. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  165. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  166. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  167. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  168. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  169. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  170. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/relations.py +0 -0
  171. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  172. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  173. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  174. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  175. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  176. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  177. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  178. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  179. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialization.py +0 -0
  180. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  181. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  182. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  183. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  184. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  185. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  186. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  187. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  188. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  189. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  190. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  191. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  192. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  193. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/types/values.py +0 -0
  194. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/utils.py +0 -0
  195. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/graphs/__init__.py +0 -0
  196. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/__init__.py +0 -0
  197. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  198. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  199. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  200. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  201. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  202. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  203. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  204. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  205. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  206. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  207. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  208. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  209. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  210. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  211. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  212. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  213. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  214. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  215. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  216. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  217. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  218. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/rel/__init__.py +0 -0
  219. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  220. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  221. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  222. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/solvers/__init__.py +0 -0
  223. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/sql/__init__.py +0 -0
  224. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  225. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  226. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/tests/__init__.py +0 -0
  227. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  228. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  229. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  230. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/__init__.py +0 -0
  231. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/base.py +0 -0
  232. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/ci.py +0 -0
  233. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/colab.py +0 -0
  234. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/generic.py +0 -0
  235. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/hex.py +0 -0
  236. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/ipython.py +0 -0
  237. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/jupyter.py +0 -0
  238. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/snowbook.py +0 -0
  239. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/terminal.py +0 -0
  240. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/errors.py +0 -0
  241. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/SF.py +0 -0
  242. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/__init__.py +0 -0
  243. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/graphs.py +0 -0
  244. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/inspect.py +0 -0
  245. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  246. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/api.py +0 -0
  247. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  248. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  249. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  250. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  251. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  252. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  253. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  254. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/options.py +0 -0
  255. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  256. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  257. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  258. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  259. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/README.md +0 -0
  260. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/__init__.py +0 -0
  261. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/api.py +0 -0
  262. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
  263. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
  264. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/code_organization.md +0 -0
  265. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
  266. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
  267. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
  268. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
  269. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
  270. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
  271. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
  272. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
  273. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
  274. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
  275. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
  276. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
  277. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
  278. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
  279. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
  280. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
  281. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/graph.py +0 -0
  282. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
  283. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
  284. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  285. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  286. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
  287. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  288. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  289. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
  290. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
  291. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
  292. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/product_graph.py +0 -0
  293. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
  294. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
  295. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
  296. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
  297. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
  298. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
  299. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
  300. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
  301. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
  302. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
  303. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
  304. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
  305. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  306. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  307. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  308. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  309. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
  310. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
  311. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
  312. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  313. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  314. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  315. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  316. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
  317. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
  318. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  319. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
  320. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
  321. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
  322. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
  323. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/solvers.py +0 -0
  324. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/loaders/__init__.py +0 -0
  325. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/loaders/csv.py +0 -0
  326. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/loaders/loader.py +0 -0
  327. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/loaders/types.py +0 -0
  328. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/metagen.py +0 -0
  329. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/metamodel.py +0 -0
  330. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/rel.py +0 -0
  331. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/rel_emitter.py +0 -0
  332. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/rel_utils.py +0 -0
  333. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/__init__.py +0 -0
  334. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  335. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/devtools/__init__.py +0 -0
  336. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  337. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  338. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  339. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/__init__.py +0 -0
  340. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/annotations.py +0 -0
  341. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/__init__.py +0 -0
  342. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/builtins.py +0 -0
  343. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/compiler.py +0 -0
  344. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/ir.py +0 -0
  345. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  346. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  347. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  348. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
  349. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
  350. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  351. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  352. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/types.py +0 -0
  353. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/validators.py +0 -0
  354. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  355. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/builtins.py +0 -0
  356. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  357. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  358. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  359. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/executor.py +0 -0
  360. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/factory.py +0 -0
  361. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  362. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/ir.py +0 -0
  363. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  364. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  365. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  366. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  367. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
  368. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  369. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  370. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  371. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/types.py +0 -0
  372. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/util.py +0 -0
  373. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  374. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  375. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
  376. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  377. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  378. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
  379. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  380. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  381. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  382. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  383. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  384. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  385. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/__init__.py +0 -0
  386. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/builtins.py +0 -0
  387. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/rel.py +0 -0
  388. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  389. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/__init__.py +0 -0
  390. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/compiler.py +0 -0
  391. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  392. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  393. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  394. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  395. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  396. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  397. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  398. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  399. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/sql.py +0 -0
  400. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/__init__.py +0 -0
  401. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/constraints.py +0 -0
  402. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/datetime.py +0 -0
  403. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/decimals.py +0 -0
  404. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/floats.py +0 -0
  405. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/integers.py +0 -0
  406. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/math.py +0 -0
  407. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/pragmas.py +0 -0
  408. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/re.py +0 -0
  409. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/std.py +0 -0
  410. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/strings.py +0 -0
  411. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/__init__.py +0 -0
  412. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/logging.py +0 -0
  413. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  414. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/utils.py +0 -0
  415. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/__init__.py +0 -0
  416. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/aggregates.py +0 -0
  417. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/dates.py +0 -0
  418. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/graphs.py +0 -0
  419. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/inspect.py +0 -0
  420. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/math.py +0 -0
  421. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/re.py +0 -0
  422. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/strings.py +0 -0
  423. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/__init__.py +0 -0
  424. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  425. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/cli.py +0 -0
  426. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/cli_controls.py +0 -0
  427. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/cli_helpers.py +0 -0
  428. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/constants.py +0 -0
  429. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/debugger.py +0 -0
  430. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/debugger_client.py +0 -0
  431. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/debugger_server.py +0 -0
  432. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/dev.py +0 -0
  433. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/notes +0 -0
  434. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/qb_debugger.py +0 -0
  435. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/query_utils.py +0 -0
  436. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/snapshot_viewer.py +0 -0
  437. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/__init__.py +0 -0
  438. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/clean_up_databases.py +0 -0
  439. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/constants.py +0 -0
  440. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/format.py +0 -0
  441. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/graph.py +0 -0
  442. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/list_databases.py +0 -0
  443. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/otel_configuration.py +0 -0
  444. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/otel_handler.py +0 -0
  445. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/snowflake_handler.py +0 -0
  446. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/span_format_test.py +0 -0
  447. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/span_tracker.py +0 -0
  448. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/spans_file_handler.py +0 -0
  449. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/timeout.py +0 -0
  450. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/tracing_handler.py +0 -0
  451. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai_test_util/__init__.py +0 -0
  452. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai_test_util/fixtures.py +0 -0
  453. {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai_test_util/snapshot.py +0 -0
  454. {relationalai-0.12.6 → relationalai-0.12.7}/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.12.6
3
+ Version: 0.12.7
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.1.16
14
+ Requires-Dist: lqp==0.1.18
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.12.6'
3
+ version = '0.12.7'
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.1.16",
11
+ "lqp==0.1.18",
12
12
  "snowflake-connector-python[secure-local-storage]",
13
13
  "snowflake-snowpark-python>=1.38.0",
14
14
  "typing-extensions",
@@ -121,3 +121,10 @@ reportMissingTypeStubs = false
121
121
  pythonVersion = "3.9"
122
122
  typeCheckingMode = "standard"
123
123
  reportUnusedExpression = false
124
+
125
+ [tool.coverage.paths]
126
+ source = [
127
+ "src/relationalai",
128
+ ".venv/*/lib/python*/site-packages/relationalai",
129
+ ".venv/*/Lib/site-packages/relationalai"
130
+ ]
@@ -2842,6 +2842,15 @@ class SnowflakeTable(dsl.Type):
2842
2842
  else:
2843
2843
  self(snowflake_id=id).set(**{prop_ident: val})
2844
2844
 
2845
+ # Because we're bypassing a bunch of the normal Type.add machinery here,
2846
+ # we need to manually account for the case where people are using value types.
2847
+ def wrapped(x):
2848
+ if not model._config.get("compiler.use_value_types", False):
2849
+ return x
2850
+ other_id = dsl.create_var()
2851
+ model._action(dsl.build.construct(self._type, [x, other_id]))
2852
+ return other_id
2853
+
2845
2854
  # new UInt128 schema mapping rules
2846
2855
  with model.rule(dynamic=True, globalize=True, source=self._source):
2847
2856
  id = dsl.create_var()
@@ -2851,7 +2860,7 @@ class SnowflakeTable(dsl.Type):
2851
2860
  # for avoiding a non-blocking warning
2852
2861
  edb(dsl.Symbol("METADATA$KEY"), id)
2853
2862
  std.rel.UInt128(id)
2854
- self.add(id, snowflake_id=id)
2863
+ self.add(wrapped(id), snowflake_id=id)
2855
2864
 
2856
2865
  for prop, prop_type in self._schema["columns"].items():
2857
2866
  _prop = prop
@@ -2873,7 +2882,7 @@ class SnowflakeTable(dsl.Type):
2873
2882
  model._check_property(_prop._prop)
2874
2883
  raw_relation = getattr(std.rel, prop_ident)
2875
2884
  dsl.tag(raw_relation, dsl.Builtins.FunctionAnnotation)
2876
- raw_relation.add(id, val)
2885
+ raw_relation.add(wrapped(id), val)
2877
2886
 
2878
2887
  def namespace(self):
2879
2888
  return f"{self._parent._parent._name}.{self._parent._name}"
@@ -2,12 +2,12 @@ import warnings
2
2
 
3
3
  from relationalai.semantics.lqp.constructors import (
4
4
  mk_abstraction, mk_and, mk_exists, mk_or, mk_pragma, mk_primitive,
5
- mk_specialized_value, mk_type, mk_value, mk_var
5
+ mk_specialized_value, mk_type, mk_value
6
6
  )
7
7
 
8
8
  __all__ = [
9
9
  "mk_abstraction", "mk_and", "mk_exists", "mk_or", "mk_pragma", "mk_primitive", "mk_specialized_value", "mk_type",
10
- "mk_value", "mk_var"
10
+ "mk_value"
11
11
  ]
12
12
 
13
13
  warnings.warn(
@@ -1,7 +1,7 @@
1
1
  from relationalai.semantics.metamodel.rewrite import Flatten, \
2
2
  DNFUnionSplitter, ExtractNestedLogicals, flatten
3
3
  from relationalai.semantics.lqp.rewrite import Splinter, \
4
- ExtractKeys, FDConstraints
4
+ ExtractKeys, FunctionAnnotations
5
5
 
6
6
  __all__ = ["Splinter", "Flatten", "DNFUnionSplitter", "ExtractKeys",
7
- "ExtractNestedLogicals", "FDConstraints", "flatten"]
7
+ "ExtractNestedLogicals", "FunctionAnnotations", "flatten"]
@@ -2550,8 +2550,6 @@ class Fragment():
2550
2550
  from .snowflake import Table
2551
2551
  assert isinstance(table, Table), "Only Snowflake tables are supported for now"
2552
2552
 
2553
- result_cols = table._col_names
2554
-
2555
2553
  clone = Fragment(parent=self)
2556
2554
  clone._is_export = True
2557
2555
  qb_model = clone._model or Model("anon")
@@ -2559,8 +2557,7 @@ class Fragment():
2559
2557
  clone._source = runtime_env.get_source_pos()
2560
2558
  with debugging.span("query", dsl=str(clone), **with_source(clone), meta=clone._meta):
2561
2559
  query_task = qb_model._compiler.fragment(clone)
2562
- qb_model._to_executor().execute(ir_model, query_task, result_cols=result_cols, export_to=table._fqn, update=update, meta=clone._meta)
2563
-
2560
+ qb_model._to_executor().execute(ir_model, query_task, export_to=table, update=update, meta=clone._meta)
2564
2561
 
2565
2562
  #--------------------------------------------------
2566
2563
  # Select / Where
@@ -12,7 +12,18 @@ from . import internal as b, annotations as anns
12
12
  from relationalai import debugging
13
13
  from relationalai.errors import UnsupportedColumnTypesWarning
14
14
  from snowflake.snowpark.context import get_active_session
15
+ from typing import ClassVar, Optional
15
16
 
17
+ #--------------------------------------------------
18
+ # Iceberg Configuration
19
+ #--------------------------------------------------
20
+ @dataclass
21
+ class IcebergConfig:
22
+ """Configuration for exporting to Iceberg tables."""
23
+ external_volume: str | None = None
24
+ default: ClassVar[Optional["IcebergConfig"]]
25
+
26
+ IcebergConfig.default = IcebergConfig()
16
27
  #--------------------------------------------------
17
28
  # Helpers
18
29
  #--------------------------------------------------
@@ -191,7 +202,7 @@ class Table():
191
202
  _schemas:dict[tuple[str, str], SchemaInfo] = {}
192
203
  _used_sources:OrderedSet[Table] = ordered_set()
193
204
 
194
- def __init__(self, fqn:str, cols:list[str]|None=None, schema:dict[str, str|b.Concept]|None=None) -> None:
205
+ def __init__(self, fqn:str, cols:list[str]|None=None, schema:dict[str, str|b.Concept]|None=None, config: IcebergConfig|None=None) -> None:
195
206
  self._fqn = fqn
196
207
  parser = IdentityParser(fqn, require_all_parts=True)
197
208
  self._database, self._schema, self._table, self._fqn = parser.to_list()
@@ -201,6 +212,8 @@ class Table():
201
212
  self._ref = self._concept.ref("row_id")
202
213
  self._cols = {}
203
214
  self._col_names = cols
215
+ self._iceberg_config = config
216
+ self._is_iceberg = config is not None
204
217
  info = self._schemas.get((self._database, self._schema))
205
218
  if not info:
206
219
  info = self._schemas[(self._database, self._schema)] = SchemaInfo(self._database, self._schema)
@@ -1,6 +1,5 @@
1
1
  from typing import Tuple
2
2
  from relationalai.semantics.lqp import ir as lqp
3
- from relationalai.semantics.metamodel.ir import sanitize
4
3
 
5
4
  def mk_and(args: list[lqp.Formula]) -> lqp.Formula:
6
5
  # Flatten nested conjunctions
@@ -49,10 +48,6 @@ def mk_specialized_value(value) -> lqp.SpecializedValue:
49
48
  def mk_value(value) -> lqp.Value:
50
49
  return lqp.Value(value=value, meta=None)
51
50
 
52
- def mk_var(name: str) -> lqp.Var:
53
- _name = '_' if name == '_' else sanitize(name)
54
- return lqp.Var(name=_name, meta=None)
55
-
56
51
  def mk_type(typename: lqp.TypeName, parameters: list[lqp.Value]=[]) -> lqp.Type:
57
52
  return lqp.Type(type_name=typename, parameters=parameters, meta=None)
58
53
 
@@ -4,7 +4,7 @@ import atexit
4
4
  import re
5
5
 
6
6
  from pandas import DataFrame
7
- from typing import Any, Optional, Literal
7
+ from typing import Any, Optional, Literal, TYPE_CHECKING
8
8
  from snowflake.snowpark import Session
9
9
  import relationalai as rai
10
10
 
@@ -20,10 +20,14 @@ from relationalai.semantics.lqp.ir import convert_transaction, validate_lqp
20
20
  from relationalai.clients.config import Config
21
21
  from relationalai.clients.snowflake import APP_NAME
22
22
  from relationalai.clients.types import TransactionAsyncResponse
23
- from relationalai.clients.util import IdentityParser
23
+ from relationalai.clients.util import IdentityParser, escape_for_f_string
24
24
  from relationalai.tools.constants import USE_DIRECT_ACCESS, QUERY_ATTRIBUTES_HEADER
25
25
  from relationalai.tools.query_utils import prepare_metadata_for_headers
26
26
 
27
+ if TYPE_CHECKING:
28
+ from relationalai.semantics.snowflake import Table
29
+
30
+
27
31
  class LQPExecutor(e.Executor):
28
32
  """Executes LQP using the RAI client."""
29
33
 
@@ -172,12 +176,12 @@ class LQPExecutor(e.Executor):
172
176
  elif len(all_errors) > 1:
173
177
  raise errors.RAIExceptionSet(all_errors)
174
178
 
175
- def _export(self, txn_id: str, export_info: tuple, dest_fqn: str, actual_cols: list[str], declared_cols: list[str], update:bool):
179
+ def _export(self, txn_id: str, export_info: tuple, dest: Table, actual_cols: list[str], declared_cols: list[str], update: bool):
176
180
  # At this point of the export, we assume that a CSV file has already been written
177
181
  # to the Snowflake Native App stage area. Thus, the purpose of this method is to
178
182
  # copy the data from the CSV file to the destination table.
179
183
  _exec = self.resources._exec
180
- dest_database, dest_schema, dest_table, _ = IdentityParser(dest_fqn, require_all_parts=True).to_list()
184
+ dest_database, dest_schema, dest_table, _ = IdentityParser(dest._fqn, require_all_parts=True).to_list()
181
185
  filename = export_info[0]
182
186
  result_table_name = filename + "_table"
183
187
 
@@ -203,8 +207,28 @@ class LQPExecutor(e.Executor):
203
207
  # destination table. This step also cleans up the result table.
204
208
  out_sample = _exec(f"select * from {APP_NAME}.results.{result_table_name} limit 1;")
205
209
  names = self._build_projection(declared_cols, actual_cols, column_fields, out_sample)
210
+ dest_fqn = dest._fqn
206
211
  try:
207
212
  if not update:
213
+ createTableLogic = f"""
214
+ CREATE TABLE {dest_fqn} AS
215
+ SELECT {names}
216
+ FROM {APP_NAME}.results.{result_table_name};
217
+ """
218
+ if dest._is_iceberg:
219
+ assert dest._iceberg_config is not None
220
+ external_volume_clause = ""
221
+ if dest._iceberg_config.external_volume:
222
+ external_volume_clause = f"EXTERNAL_VOLUME = '{dest._iceberg_config.external_volume}'"
223
+ createTableLogic = f"""
224
+ CREATE ICEBERG TABLE {dest_fqn}
225
+ CATALOG = "SNOWFLAKE"
226
+ {external_volume_clause}
227
+ AS
228
+ SELECT {names}
229
+ FROM {APP_NAME}.results.{result_table_name};
230
+ """
231
+
208
232
  _exec(f"""
209
233
  BEGIN
210
234
  -- Check if table exists
@@ -227,9 +251,7 @@ class LQPExecutor(e.Executor):
227
251
  ELSE
228
252
  -- Create table based on the SELECT
229
253
  EXECUTE IMMEDIATE '
230
- CREATE TABLE {dest_fqn} AS
231
- SELECT {names}
232
- FROM {APP_NAME}.results.{result_table_name};
254
+ {escape_for_f_string(createTableLogic)}
233
255
  ';
234
256
  END IF;
235
257
  END;
@@ -376,7 +398,7 @@ class LQPExecutor(e.Executor):
376
398
  return final_model, export_info, txn_proto
377
399
 
378
400
  # TODO (azreika): This should probably be split up into exporting and other processing. There are quite a lot of arguments here...
379
- def _process_results(self, task: ir.Task, final_model: ir.Model, raw_results: TransactionAsyncResponse, result_cols: Optional[list[str]], export_info: Optional[tuple], export_to: Optional[str], update: bool) -> DataFrame:
401
+ def _process_results(self, task: ir.Task, final_model: ir.Model, raw_results: TransactionAsyncResponse, export_info: Optional[tuple], export_to: Optional[Table], update: bool) -> DataFrame:
380
402
  cols, extra_cols = self._compute_cols(task, final_model)
381
403
 
382
404
  df, errs = result_helpers.format_results(raw_results, cols)
@@ -391,6 +413,8 @@ class LQPExecutor(e.Executor):
391
413
  assert cols, "No columns found in the output"
392
414
  assert isinstance(raw_results, TransactionAsyncResponse) and raw_results.transaction, "Invalid transaction result"
393
415
 
416
+ result_cols = export_to._col_names
417
+
394
418
  if result_cols is not None:
395
419
  assert all(col in result_cols or col in extra_cols for col in cols)
396
420
  else:
@@ -403,7 +427,7 @@ class LQPExecutor(e.Executor):
403
427
  return self._postprocess_df(self.config, df, extra_cols)
404
428
 
405
429
  def execute(self, model: ir.Model, task: ir.Task, format: Literal["pandas", "snowpark"] = "pandas",
406
- result_cols: Optional[list[str]] = None, export_to: Optional[str] = None,
430
+ export_to: Optional[Table] = None,
407
431
  update: bool = False, meta: dict[str, Any] | None = None) -> DataFrame:
408
432
  self.prepare_data()
409
433
  previous_model = self._last_model
@@ -433,7 +457,7 @@ class LQPExecutor(e.Executor):
433
457
  assert isinstance(raw_results, TransactionAsyncResponse)
434
458
 
435
459
  try:
436
- return self._process_results(task, final_model, raw_results, result_cols, export_info, export_to, update)
460
+ return self._process_results(task, final_model, raw_results, export_info, export_to, update)
437
461
  except Exception as e:
438
462
  # If processing the results failed, revert to the previous model.
439
463
  self._last_model = previous_model
@@ -1,13 +1,13 @@
1
1
  from datetime import datetime, timezone
2
2
 
3
3
  from relationalai.semantics.lqp import ir as lqp
4
- from relationalai.semantics.lqp.constructors import mk_abstraction, mk_value, mk_var, mk_type, mk_primitive
4
+ from relationalai.semantics.lqp.constructors import mk_abstraction, mk_value, mk_type, mk_primitive
5
5
  from relationalai.semantics.lqp.utils import lqp_hash
6
6
 
7
7
  def mk_intrinsic_datetime_now() -> lqp.Def:
8
8
  """Constructs a definition of the current datetime."""
9
9
  id = lqp_hash("__pyrel_lqp_intrinsic_datetime_now")
10
- out = mk_var("out")
10
+ out = lqp.Var(name="out", meta=None)
11
11
  out_type = mk_type(lqp.TypeName.DATETIME)
12
12
  now = mk_value(lqp.DateTimeValue(value=datetime.now(timezone.utc), meta=None))
13
13
  datetime_now = mk_abstraction(
@@ -7,7 +7,7 @@ from relationalai.semantics.lqp.pragmas import pragma_to_lqp_name
7
7
  from relationalai.semantics.lqp.types import meta_type_to_lqp
8
8
  from relationalai.semantics.lqp.constructors import (
9
9
  mk_abstraction, mk_and, mk_exists, mk_or, mk_pragma, mk_primitive,
10
- mk_specialized_value, mk_type, mk_value, mk_var, mk_attribute
10
+ mk_specialized_value, mk_type, mk_value, mk_attribute
11
11
  )
12
12
  from relationalai.semantics.lqp.utils import TranslationCtx, gen_unique_var
13
13
  from relationalai.semantics.lqp.validators import assert_valid_input
@@ -253,7 +253,7 @@ def _translate_rank(ctx: TranslationCtx, rank: ir.Rank, body: lqp.Formula) -> lq
253
253
  # to convert it to Int128.
254
254
  result_var, _ = _translate_term(ctx, rank.result)
255
255
  # The primitive will return an Int64 result, so we need a var to hold the intermediary.
256
- result_64_var = gen_unique_var(ctx, "rank_result_64")
256
+ result_64_var = gen_unique_var(ctx, "v_rank")
257
257
  result_64_type = mk_type(lqp.TypeName.INT)
258
258
 
259
259
  cast = lqp.Cast(input=result_64_var, result=result_var, meta=None)
@@ -306,7 +306,7 @@ def _translate_descending_rank(ctx: TranslationCtx, limit: int, result: lqp.Var,
306
306
  aggr_abstr_args = new_abstr_args + [(count_var, count_type)]
307
307
  count_aggr = lqp.Reduce(
308
308
  op=lqp_operator(
309
- ctx.var_names,
309
+ ctx,
310
310
  "count",
311
311
  "count",
312
312
  mk_type(lqp.TypeName.INT)
@@ -431,7 +431,7 @@ def _translate_aggregate(ctx: TranslationCtx, aggr: ir.Aggregate, body: lqp.Form
431
431
  (sum_var, sum_type) = abstr_args[-2]
432
432
 
433
433
  result = lqp.Reduce(
434
- op=lqp_avg_op(ctx.var_names, aggr.aggregation.name, sum_var.name, sum_type),
434
+ op=lqp_avg_op(ctx, aggr.aggregation.name, sum_var.name, sum_type),
435
435
  body=mk_abstraction(abstr_args, body),
436
436
  terms=[sum_result, count_result],
437
437
  meta=None,
@@ -464,7 +464,7 @@ def _translate_aggregate(ctx: TranslationCtx, aggr: ir.Aggregate, body: lqp.Form
464
464
 
465
465
  # Group-bys do not need to be handled at all, since they are introduced outside already
466
466
  reduce = lqp.Reduce(
467
- op=lqp_operator(ctx.var_names, aggr.aggregation.name, aggr_arg.name, aggr_arg_type),
467
+ op=lqp_operator(ctx, aggr.aggregation.name, aggr_arg.name, aggr_arg_type),
468
468
  body=mk_abstraction(abstr_args, body),
469
469
  terms=output_vars,
470
470
  meta=None
@@ -523,9 +523,8 @@ def _translate_term(ctx: TranslationCtx, term: ir.Value) -> Tuple[lqp.Term, lqp.
523
523
  # TODO: ScalarType is not like other terms, should be handled separately.
524
524
  return to_lqp_value(term.name, types.String), meta_type_to_lqp(types.String)
525
525
  elif isinstance(term, ir.Var):
526
- name = ctx.var_names.get_name_by_id(term.id, term.name)
527
526
  t = meta_type_to_lqp(term.type)
528
- return mk_var(name), t
527
+ return _translate_var(ctx, term), t
529
528
  else:
530
529
  assert isinstance(term, ir.Literal), f"Cannot translate value {term!r} of type {type(term)} to LQP Term; neither Var nor Literal."
531
530
  v = to_lqp_value(term.value, term.type)
@@ -801,3 +800,7 @@ def _translate_join(ctx: TranslationCtx, task: ir.Lookup) -> lqp.Formula:
801
800
  output_term = _translate_term(ctx, target)[0]
802
801
 
803
802
  return lqp.Reduce(meta=None, op=op, body=body, terms=[output_term])
803
+
804
+ def _translate_var(ctx: TranslationCtx, term: ir.Var) -> lqp.Var:
805
+ name = ctx.var_names.get_name_by_id(term.id, term.name)
806
+ return lqp.Var(name=name, meta=None)
@@ -7,16 +7,18 @@ from relationalai.semantics.metamodel.util import FrozenOrderedSet
7
7
  from relationalai.semantics.metamodel.rewrite import Flatten
8
8
 
9
9
  from ..metamodel.rewrite import DischargeConstraints, DNFUnionSplitter, ExtractNestedLogicals
10
- from .rewrite import CDC, ExtractCommon, ExtractKeys, FDConstraints, QuantifyVars, Splinter
10
+ from .rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter
11
11
 
12
12
  from relationalai.semantics.lqp.utils import output_names
13
13
 
14
14
  from typing import cast, List, Sequence, Tuple, Union, Optional, Iterable
15
15
  from collections import defaultdict
16
+ import pandas as pd
17
+ import hashlib
16
18
 
17
19
  def lqp_passes() -> list[Pass]:
18
20
  return [
19
- FDConstraints(),
21
+ FunctionAnnotations(),
20
22
  DischargeConstraints(),
21
23
  Checker(),
22
24
  CDC(), # specialize to physical relations before extracting nested and typing
@@ -337,7 +339,7 @@ class UnifyDefinitions(Pass):
337
339
  )
338
340
 
339
341
  # Creates intermediary relations for all Data nodes and replaces said Data nodes
340
- # with a Lookup into these created relations.
342
+ # with a Lookup into these created relations. Reuse duplicate created relations.
341
343
  class EliminateData(Pass):
342
344
  def rewrite(self, model: ir.Model, options:dict={}) -> ir.Model:
343
345
  r = self.DataRewriter()
@@ -350,17 +352,25 @@ class EliminateData(Pass):
350
352
  # Counter for naming new relations.
351
353
  # It must be that new_count == len new_updates == len new_relations.
352
354
  new_count: int
355
+ # Cache for Data nodes to avoid creating duplicate intermediary relations
356
+ data_cache: dict[str, ir.Relation]
353
357
 
354
358
  def __init__(self):
355
359
  self.new_relations = []
356
360
  self.new_updates = []
357
361
  self.new_count = 0
362
+ self.data_cache = {}
358
363
  super().__init__()
359
364
 
360
- # Create a new intermediary relation representing the Data (and pop it in
361
- # new_updates/new_relations) and replace this Data with a Lookup of said
362
- # intermediary.
363
- def handle_data(self, node: ir.Data, parent: ir.Node) -> ir.Lookup:
365
+ # Create a cache key for a Data node based on its structure and content
366
+ def _data_cache_key(self, node: ir.Data) -> str:
367
+ values = pd.util.hash_pandas_object(node.data).values
368
+ return hashlib.sha256(bytes(values)).hexdigest()
369
+
370
+ def _intermediary_relation(self, node: ir.Data) -> ir.Relation:
371
+ cache_key = self._data_cache_key(node)
372
+ if cache_key in self.data_cache:
373
+ return self.data_cache[cache_key]
364
374
  self.new_count += 1
365
375
  intermediary_name = f"formerly_Data_{self.new_count}"
366
376
 
@@ -379,7 +389,6 @@ class EliminateData(Pass):
379
389
  f.lookup(rel_builtins.eq, [f.literal(val), var])
380
390
  for (val, var) in zip(row, node.vars)
381
391
  ],
382
- hoisted = node.vars,
383
392
  )
384
393
  for row in node
385
394
  ],
@@ -390,6 +399,16 @@ class EliminateData(Pass):
390
399
  ])
391
400
  self.new_updates.append(intermediary_update)
392
401
 
402
+ # Cache the result for reuse
403
+ self.data_cache[cache_key] = intermediary_relation
404
+
405
+ return intermediary_relation
406
+
407
+ # Create a new intermediary relation representing the Data (and pop it in
408
+ # new_updates/new_relations) and replace this Data with a Lookup of said
409
+ # intermediary.
410
+ def handle_data(self, node: ir.Data, parent: ir.Node) -> ir.Lookup:
411
+ intermediary_relation = self._intermediary_relation(node)
393
412
  replacement_lookup = f.lookup(intermediary_relation, node.vars)
394
413
 
395
414
  return replacement_lookup
@@ -1,8 +1,8 @@
1
1
  from relationalai.semantics.metamodel.types import digits_to_bits
2
2
  from relationalai.semantics.lqp import ir as lqp
3
3
  from relationalai.semantics.lqp.types import is_numeric
4
- from relationalai.semantics.lqp.utils import UniqueNames, lqp_hash
5
- from relationalai.semantics.lqp.constructors import mk_primitive, mk_specialized_value, mk_type, mk_value, mk_var
4
+ from relationalai.semantics.lqp.utils import TranslationCtx, gen_unique_var, lqp_hash
5
+ from relationalai.semantics.lqp.constructors import mk_primitive, mk_specialized_value, mk_type, mk_value
6
6
 
7
7
  rel_to_lqp = {
8
8
  "=": "rel_primitive_eq",
@@ -205,15 +205,15 @@ def is_monotype(name: str) -> bool:
205
205
 
206
206
  # We take the name and type of the variable that we're summing over, so that we can generate
207
207
  # recognizable names for the variables in the reduce operation and preserve the type.
208
- def lqp_avg_op(names: UniqueNames, op_name: str, sum_name: str, sum_type: lqp.Type) -> lqp.Abstraction:
208
+ def lqp_avg_op(ctx: TranslationCtx, op_name: str, sum_name: str, sum_type: lqp.Type) -> lqp.Abstraction:
209
209
  count_type = mk_type(lqp.TypeName.INT)
210
210
  vars = [
211
- (mk_var(names.get_name(sum_name)), sum_type),
212
- (mk_var(names.get_name("counter")), count_type),
213
- (mk_var(names.get_name(sum_name)), sum_type),
214
- (mk_var(names.get_name("one")), count_type),
215
- (mk_var(names.get_name("sum")), sum_type),
216
- (mk_var(names.get_name("count")), count_type),
211
+ (gen_unique_var(ctx, sum_name), sum_type),
212
+ (gen_unique_var(ctx, "counter"), count_type),
213
+ (gen_unique_var(ctx, sum_name), sum_type),
214
+ (gen_unique_var(ctx, "one"), count_type),
215
+ (gen_unique_var(ctx, "sum"), sum_type),
216
+ (gen_unique_var(ctx, "count"), count_type),
217
217
  ]
218
218
 
219
219
  x1 = vars[0][0]
@@ -233,10 +233,10 @@ def lqp_avg_op(names: UniqueNames, op_name: str, sum_name: str, sum_type: lqp.Ty
233
233
  return lqp.Abstraction(vars=vars, value=body, meta=None)
234
234
 
235
235
  # Default handler for aggregation operations in LQP.
236
- def lqp_agg_op(names: UniqueNames, op_name: str, aggr_arg_name: str, aggr_arg_type: lqp.Type) -> lqp.Abstraction:
237
- x = mk_var(names.get_name(f"x_{aggr_arg_name}"))
238
- y = mk_var(names.get_name(f"y_{aggr_arg_name}"))
239
- z = mk_var(names.get_name(f"z_{aggr_arg_name}"))
236
+ def lqp_agg_op(ctx: TranslationCtx, op_name: str, aggr_arg_name: str, aggr_arg_type: lqp.Type) -> lqp.Abstraction:
237
+ x = gen_unique_var(ctx, f"x_{aggr_arg_name}")
238
+ y = gen_unique_var(ctx, f"y_{aggr_arg_name}")
239
+ z = gen_unique_var(ctx, f"z_{aggr_arg_name}")
240
240
  ts = [(x, aggr_arg_type), (y, aggr_arg_type), (z, aggr_arg_type)]
241
241
 
242
242
  name = agg_to_lqp.get(op_name, op_name)
@@ -244,9 +244,9 @@ def lqp_agg_op(names: UniqueNames, op_name: str, aggr_arg_name: str, aggr_arg_ty
244
244
 
245
245
  return lqp.Abstraction(vars=ts, value=body, meta=None)
246
246
 
247
- def lqp_operator(names: UniqueNames, op_name: str, aggr_arg_name: str, aggr_arg_type: lqp.Type) -> lqp.Abstraction:
247
+ def lqp_operator(ctx: TranslationCtx, op_name: str, aggr_arg_name: str, aggr_arg_type: lqp.Type) -> lqp.Abstraction:
248
248
  # TODO: Can we just pass through unknown operations?
249
249
  if op_name not in agg_to_lqp:
250
250
  raise NotImplementedError(f"Unsupported aggregation: {op_name}")
251
251
 
252
- return lqp_agg_op(names, op_name, aggr_arg_name, aggr_arg_type)
252
+ return lqp_agg_op(ctx, op_name, aggr_arg_name, aggr_arg_type)
@@ -1,7 +1,7 @@
1
1
  from .cdc import CDC
2
2
  from .extract_common import ExtractCommon
3
3
  from .extract_keys import ExtractKeys
4
- from .fd_constraints import FDConstraints
4
+ from .function_annotations import FunctionAnnotations
5
5
  from .quantify_vars import QuantifyVars
6
6
  from .splinter import Splinter
7
7
 
@@ -9,7 +9,7 @@ __all__ = [
9
9
  "CDC",
10
10
  "ExtractCommon",
11
11
  "ExtractKeys",
12
- "FDConstraints",
12
+ "FunctionAnnotations",
13
13
  "QuantifyVars",
14
14
  "Splinter",
15
15
  ]
@@ -5,7 +5,7 @@ from relationalai.semantics.metamodel import ir, compiler as c, visitor as v, bu
5
5
  from relationalai.semantics.metamodel.util import OrderedSet, ordered_set
6
6
 
7
7
 
8
- class FDConstraints(c.Pass):
8
+ class FunctionAnnotations(c.Pass):
9
9
  """
10
10
  Pass marks all appropriate relations with `function` annotation.
11
11
  Criteria:
@@ -17,7 +17,7 @@ class FDConstraints(c.Pass):
17
17
  collect_fd = CollectFunctionalRelationsVisitor()
18
18
  new_model = collect_fd.walk(model)
19
19
  # mark relations collected by previous visitor with `@function` annotation
20
- return FDConstraintsVisitor(collect_fd.functional_relations).walk(new_model)
20
+ return FunctionalAnnotationsVisitor(collect_fd.functional_relations).walk(new_model)
21
21
 
22
22
 
23
23
  @dataclass
@@ -57,9 +57,9 @@ class CollectFunctionalRelationsVisitor(v.Rewriter):
57
57
 
58
58
 
59
59
  @dataclass
60
- class FDConstraintsVisitor(v.Rewriter):
60
+ class FunctionalAnnotationsVisitor(v.Rewriter):
61
61
  """
62
- This visitor marks functional_relations with `functional` annotation.
62
+ This visitor marks functional_relations with `function` annotation.
63
63
  """
64
64
 
65
65
  def __init__(self, functional_relations: OrderedSet):
@@ -1,5 +1,6 @@
1
1
  from relationalai.semantics.lqp import ir as lqp
2
2
  from relationalai.semantics.metamodel import ir
3
+ from relationalai.semantics.metamodel.helpers import sanitize
3
4
  from relationalai.semantics.metamodel.util import FrozenOrderedSet
4
5
 
5
6
  from hashlib import sha256
@@ -13,21 +14,24 @@ class UniqueNames:
13
14
  self.id_to_name = dict[int,str]()
14
15
 
15
16
  def get_name(self, name: str) -> str:
16
- if name in self.seen:
17
- self.seen[name] += 1
18
- id = self.seen[name]
19
- # If the original name has a suffix we can get collisions with generated names,
20
- # so test the new name.
21
- while f"{name}_{id}" in self.seen:
22
- id += 1
23
- self.seen[name] = id
24
- new_name = f"{name}_{id}"
25
- self.seen[new_name] = 1
26
- return new_name
27
- else:
17
+ # Names will eventually be sanitized, which could cause collisions, so we
18
+ # do the sanitization here.
19
+ name = '_' if name == '_' else sanitize(name)
20
+ if name not in self.seen:
28
21
  self.seen[name] = 1
29
22
  return f"{name}"
30
23
 
24
+ self.seen[name] += 1
25
+ id = self.seen[name]
26
+ # If the original name has a suffix we can get collisions with generated names,
27
+ # so test the new name.
28
+ while f"{name}_{id}" in self.seen:
29
+ id += 1
30
+ self.seen[name] = id
31
+ new_name = f"{name}_{id}"
32
+ self.seen[new_name] = 1
33
+ return new_name
34
+
31
35
  # Get a unique name for the given id. If the id is already in the map, return the
32
36
  # existing name. Otherwise, generate a new name using the suggested_name and
33
37
  # store it in the map.
@@ -55,7 +59,7 @@ def gen_rel_id(ctx: TranslationCtx, orig_name: str, suffix: str = "") -> lqp.Rel
55
59
  ctx.rel_id_to_orig_name[relation_id] = orig_name
56
60
  return relation_id
57
61
 
58
- def gen_unique_var(ctx: TranslationCtx, name_hint: str):
62
+ def gen_unique_var(ctx: TranslationCtx, name_hint: str) -> lqp.Var:
59
63
  """
60
64
  Generate a new variable with a unique name based on the provided hint.
61
65
  """
@@ -12,7 +12,7 @@ from relationalai.semantics.metamodel.util import OrderedSet, group_by, NameCach
12
12
  from relationalai.semantics.rel import rel, rel_utils as u, builtins as rel_bt
13
13
 
14
14
  from ..metamodel.rewrite import (Flatten, ExtractNestedLogicals, DNFUnionSplitter, DischargeConstraints)
15
- from ..lqp.rewrite import CDC, ExtractCommon, ExtractKeys, FDConstraints, QuantifyVars, Splinter
15
+ from ..lqp.rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter
16
16
 
17
17
  import math
18
18
 
@@ -24,7 +24,7 @@ import math
24
24
  class Compiler(c.Compiler):
25
25
  def __init__(self):
26
26
  super().__init__([
27
- FDConstraints(),
27
+ FunctionAnnotations(),
28
28
  DischargeConstraints(),
29
29
  Checker(),
30
30
  CDC(), # specialize to physical relations before extracting nested and typing