relationalai 0.12.10__tar.gz → 0.12.12__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 (459) hide show
  1. {relationalai-0.12.10 → relationalai-0.12.12}/PKG-INFO +1 -1
  2. {relationalai-0.12.10 → relationalai-0.12.12}/pyproject.toml +1 -1
  3. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/snowflake.py +83 -106
  4. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/passes.py +1 -1
  5. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/rewrite/annotate_constraints.py +3 -1
  6. relationalai-0.12.12/src/relationalai/semantics/lqp/rewrite/extract_common.py +338 -0
  7. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +2 -2
  8. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/rewrite/flatten.py +11 -0
  9. relationalai-0.12.10/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -384
  10. {relationalai-0.12.10 → relationalai-0.12.12}/.gitignore +0 -0
  11. {relationalai-0.12.10 → relationalai-0.12.12}/LICENSE +0 -0
  12. {relationalai-0.12.10 → relationalai-0.12.12}/docs/pypi/README.md +0 -0
  13. {relationalai-0.12.10 → relationalai-0.12.12}/frontend/debugger/dist/.gitignore +0 -0
  14. {relationalai-0.12.10 → relationalai-0.12.12}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  15. {relationalai-0.12.10 → relationalai-0.12.12}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  16. {relationalai-0.12.10 → relationalai-0.12.12}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  17. {relationalai-0.12.10 → relationalai-0.12.12}/frontend/debugger/dist/index.html +0 -0
  18. {relationalai-0.12.10 → relationalai-0.12.12}/src/__init__.py +0 -0
  19. {relationalai-0.12.10 → relationalai-0.12.12}/src/raitoolkit/__init__.py +0 -0
  20. {relationalai-0.12.10 → relationalai-0.12.12}/src/raitoolkit/events/__init__.py +0 -0
  21. {relationalai-0.12.10 → relationalai-0.12.12}/src/raitoolkit/procedures/__init__.py +0 -0
  22. {relationalai-0.12.10 → relationalai-0.12.12}/src/raitoolkit/procedures/procedure.py +0 -0
  23. {relationalai-0.12.10 → relationalai-0.12.12}/src/raitoolkit/rel/__init__.py +0 -0
  24. {relationalai-0.12.10 → relationalai-0.12.12}/src/raitoolkit/tables/__init__.py +0 -0
  25. {relationalai-0.12.10 → relationalai-0.12.12}/src/raitoolkit/tasks/__init__.py +0 -0
  26. {relationalai-0.12.10 → relationalai-0.12.12}/src/raitoolkit/tasks/task.py +0 -0
  27. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/__init__.py +0 -0
  28. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/analysis/__init__.py +0 -0
  29. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/analysis/mechanistic.py +0 -0
  30. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/analysis/whynot.py +0 -0
  31. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/auth/__init__.py +0 -0
  32. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/auth/jwt_generator.py +0 -0
  33. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/auth/oauth_callback_server.py +0 -0
  34. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/auth/token_handler.py +0 -0
  35. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/auth/util.py +0 -0
  36. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/__init__.py +0 -0
  37. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/azure.py +0 -0
  38. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/cache_store.py +0 -0
  39. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/client.py +0 -0
  40. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/config.py +0 -0
  41. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/direct_access_client.py +0 -0
  42. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  43. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/hash_util.py +0 -0
  44. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/local.py +0 -0
  45. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/profile_polling.py +0 -0
  46. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/result_helpers.py +0 -0
  47. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/types.py +0 -0
  48. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/use_index_poller.py +0 -0
  49. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/clients/util.py +0 -0
  50. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/compiler.py +0 -0
  51. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/debugging.py +0 -0
  52. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/dependencies.py +0 -0
  53. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/docutils.py +0 -0
  54. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/dsl.py +0 -0
  55. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/__init__.py +0 -0
  56. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/builder/__init__.py +0 -0
  57. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  58. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  59. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  60. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  61. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  62. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  63. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  64. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/devtools/__init__.py +0 -0
  65. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  66. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  67. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/__init__.py +0 -0
  68. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  69. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  70. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  71. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  72. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  73. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  74. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  75. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  76. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  77. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  78. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  79. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  80. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  81. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  82. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  83. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  84. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  85. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  86. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  87. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  88. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  89. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/constants.py +0 -0
  90. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  91. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  92. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  93. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  94. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  95. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  96. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  97. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  98. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  99. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/context.py +0 -0
  100. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  101. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  102. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  103. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  104. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  105. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  106. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  107. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  108. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  109. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  110. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  111. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  112. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  113. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  114. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  115. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  116. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  117. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  118. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  119. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  120. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  121. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  122. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  123. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  124. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  125. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  126. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  127. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  128. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  129. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  130. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  131. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  132. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  133. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  134. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  135. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  136. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  137. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  138. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  139. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  140. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  141. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  142. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  143. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  144. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  145. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  146. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  147. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  148. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  149. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  150. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  151. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  152. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  153. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  154. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  155. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  156. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  157. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  158. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/relations.py +0 -0
  159. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  160. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  161. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  162. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  163. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  164. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  165. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  166. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  167. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/serialization.py +0 -0
  168. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  169. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  170. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  171. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  172. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  173. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  174. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  175. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  176. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  177. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  178. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  179. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  180. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  181. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/types/values.py +0 -0
  182. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/dsl/utils.py +0 -0
  183. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/graphs/__init__.py +0 -0
  184. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/__init__.py +0 -0
  185. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  186. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  187. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  188. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  189. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  190. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  191. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  192. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  193. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  194. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  195. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  196. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  197. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  198. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  199. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  200. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  201. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  202. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  203. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  204. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  205. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  206. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  207. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  208. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/rel/__init__.py +0 -0
  209. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  210. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  211. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  212. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/solvers/__init__.py +0 -0
  213. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/sql/__init__.py +0 -0
  214. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  215. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  216. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/tests/__init__.py +0 -0
  217. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  218. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  219. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  220. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/__init__.py +0 -0
  221. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/base.py +0 -0
  222. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/ci.py +0 -0
  223. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/colab.py +0 -0
  224. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/generic.py +0 -0
  225. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/hex.py +0 -0
  226. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/ipython.py +0 -0
  227. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/jupyter.py +0 -0
  228. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/snowbook.py +0 -0
  229. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/environments/terminal.py +0 -0
  230. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/errors.py +0 -0
  231. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/SF.py +0 -0
  232. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/__init__.py +0 -0
  233. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/graphs.py +0 -0
  234. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/inspect.py +0 -0
  235. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  236. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/api.py +0 -0
  237. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  238. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  239. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  240. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  241. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  242. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  243. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  244. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/options.py +0 -0
  245. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  246. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  247. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  248. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  249. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/README.md +0 -0
  250. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/__init__.py +0 -0
  251. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/api.py +0 -0
  252. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
  253. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
  254. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/code_organization.md +0 -0
  255. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
  256. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
  257. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
  258. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
  259. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
  260. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
  261. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
  262. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
  263. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
  264. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
  265. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
  266. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
  267. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
  268. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
  269. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
  270. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
  271. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/graph.py +0 -0
  272. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
  273. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
  274. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  275. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  276. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
  277. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  278. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  279. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
  280. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
  281. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
  282. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/product_graph.py +0 -0
  283. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
  284. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
  285. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
  286. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
  287. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
  288. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
  289. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
  290. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
  291. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
  292. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
  293. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
  294. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
  295. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  296. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  297. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  298. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  299. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
  300. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
  301. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
  302. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  303. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  304. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  305. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  306. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
  307. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
  308. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  309. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
  310. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
  311. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
  312. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
  313. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/experimental/solvers.py +0 -0
  314. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/loaders/__init__.py +0 -0
  315. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/loaders/csv.py +0 -0
  316. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/loaders/loader.py +0 -0
  317. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/loaders/types.py +0 -0
  318. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/metagen.py +0 -0
  319. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/metamodel.py +0 -0
  320. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/rel.py +0 -0
  321. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/rel_emitter.py +0 -0
  322. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/rel_utils.py +0 -0
  323. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/__init__.py +0 -0
  324. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  325. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/devtools/__init__.py +0 -0
  326. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  327. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  328. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  329. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/internal/__init__.py +0 -0
  330. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/internal/annotations.py +0 -0
  331. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/internal/internal.py +0 -0
  332. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/internal/snowflake.py +0 -0
  333. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/README.md +0 -0
  334. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/__init__.py +0 -0
  335. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/builtins.py +0 -0
  336. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/compiler.py +0 -0
  337. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/constructors.py +0 -0
  338. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/executor.py +0 -0
  339. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  340. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/ir.py +0 -0
  341. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/model2lqp.py +0 -0
  342. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  343. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/primitives.py +0 -0
  344. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  345. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
  346. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  347. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
  348. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
  349. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -0
  350. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  351. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  352. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/types.py +0 -0
  353. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/utils.py +0 -0
  354. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/lqp/validators.py +0 -0
  355. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  356. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/builtins.py +0 -0
  357. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  358. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  359. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  360. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/executor.py +0 -0
  361. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/factory.py +0 -0
  362. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  363. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/ir.py +0 -0
  364. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  365. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  366. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  367. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
  368. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  369. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  370. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  371. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/types.py +0 -0
  372. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/util.py +0 -0
  373. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  374. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  375. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
  376. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  377. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  378. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
  379. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  380. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  381. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  382. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  383. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  384. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  385. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/rel/__init__.py +0 -0
  386. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/rel/builtins.py +0 -0
  387. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/rel/compiler.py +1 -1
  388. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/rel/executor.py +0 -0
  389. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/rel/rel.py +0 -0
  390. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  391. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  392. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/__init__.py +0 -0
  393. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/compiler.py +0 -0
  394. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  395. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  396. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  397. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
  398. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  399. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  400. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  401. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  402. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  403. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/sql/sql.py +0 -0
  404. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/__init__.py +0 -0
  405. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/constraints.py +0 -0
  406. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/datetime.py +0 -0
  407. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/decimals.py +0 -0
  408. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/floats.py +0 -0
  409. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/integers.py +0 -0
  410. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/math.py +0 -0
  411. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/pragmas.py +0 -0
  412. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/re.py +0 -0
  413. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/std.py +0 -0
  414. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/std/strings.py +0 -0
  415. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/tests/__init__.py +0 -0
  416. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/tests/logging.py +0 -0
  417. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  418. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  419. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/semantics/tests/utils.py +0 -0
  420. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/std/__init__.py +0 -0
  421. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/std/aggregates.py +0 -0
  422. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/std/dates.py +0 -0
  423. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/std/graphs.py +0 -0
  424. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/std/inspect.py +0 -0
  425. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/std/math.py +0 -0
  426. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/std/re.py +0 -0
  427. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/std/strings.py +0 -0
  428. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/__init__.py +0 -0
  429. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  430. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/cli.py +0 -0
  431. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/cli_controls.py +0 -0
  432. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/cli_helpers.py +0 -0
  433. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/constants.py +0 -0
  434. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/debugger.py +0 -0
  435. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/debugger_client.py +0 -0
  436. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/debugger_server.py +0 -0
  437. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/dev.py +0 -0
  438. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/notes +0 -0
  439. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/qb_debugger.py +0 -0
  440. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/query_utils.py +0 -0
  441. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/tools/snapshot_viewer.py +0 -0
  442. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/__init__.py +0 -0
  443. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/clean_up_databases.py +0 -0
  444. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/constants.py +0 -0
  445. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/format.py +0 -0
  446. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/graph.py +0 -0
  447. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/list_databases.py +0 -0
  448. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/otel_configuration.py +0 -0
  449. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/otel_handler.py +0 -0
  450. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/snowflake_handler.py +0 -0
  451. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/span_format_test.py +0 -0
  452. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/span_tracker.py +0 -0
  453. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/spans_file_handler.py +0 -0
  454. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/timeout.py +0 -0
  455. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai/util/tracing_handler.py +0 -0
  456. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai_test_util/__init__.py +0 -0
  457. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai_test_util/fixtures.py +0 -0
  458. {relationalai-0.12.10 → relationalai-0.12.12}/src/relationalai_test_util/snapshot.py +0 -0
  459. {relationalai-0.12.10 → relationalai-0.12.12}/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.10
3
+ Version: 0.12.12
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = 'relationalai'
3
- version = '0.12.10'
3
+ version = '0.12.12'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -441,8 +441,7 @@ class Resources(ResourcesBase):
441
441
  code: str,
442
442
  params: List[Any] | Any | None = None,
443
443
  raw: bool = False,
444
- help: bool = True,
445
- skip_auto_create: bool = False
444
+ help: bool = True
446
445
  ) -> Any:
447
446
  # print(f"\n--- sql---\n{code}\n--- end sql---\n")
448
447
  if not self._session:
@@ -459,6 +458,7 @@ class Resources(ResourcesBase):
459
458
  rai_app = self.config.get("rai_app_name", "")
460
459
  current_role = self.config.get("role")
461
460
  engine = self.get_default_engine_name()
461
+ engine_size = self.config.get_default_engine_size()
462
462
  assert isinstance(rai_app, str), f"rai_app_name must be a string, not {type(rai_app)}"
463
463
  assert isinstance(engine, str), f"engine must be a string, not {type(engine)}"
464
464
  print("\n")
@@ -467,10 +467,15 @@ class Resources(ResourcesBase):
467
467
  if re.search(f"database '{rai_app}' does not exist or not authorized.".lower(), orig_message):
468
468
  exception = SnowflakeAppMissingException(rai_app, current_role)
469
469
  raise exception from None
470
- # skip creating the engine if the query is a user transaction. exec_async_v2 will handle that case.
471
- if _is_engine_issue(orig_message) and not skip_auto_create:
470
+ if _is_engine_issue(orig_message) or _is_database_issue(orig_message):
472
471
  try:
473
- self.auto_create_engine(engine)
472
+ self._poll_use_index(
473
+ app_name=self.get_app_name(),
474
+ sources=self.sources,
475
+ model=self.database,
476
+ engine_name=engine,
477
+ engine_size=engine_size
478
+ )
474
479
  return self._exec(code, params, raw=raw, help=help)
475
480
  except EngineNameValidationException as e:
476
481
  raise EngineNameValidationException(engine) from e
@@ -1607,7 +1612,6 @@ Otherwise, remove it from your '{profile}' configuration profile.
1607
1612
  response = self._exec(
1608
1613
  sql_string,
1609
1614
  raw_code,
1610
- skip_auto_create=True,
1611
1615
  )
1612
1616
  if not response:
1613
1617
  raise Exception("Failed to create transaction")
@@ -1625,7 +1629,6 @@ Otherwise, remove it from your '{profile}' configuration profile.
1625
1629
  bypass_index=False,
1626
1630
  language: str = "rel",
1627
1631
  query_timeout_mins: int | None = None,
1628
- gi_setup_skipped: bool = False,
1629
1632
  ):
1630
1633
  if inputs is None:
1631
1634
  inputs = {}
@@ -1635,8 +1638,6 @@ Otherwise, remove it from your '{profile}' configuration profile.
1635
1638
  with debugging.span("transaction", **query_attrs_dict) as txn_span:
1636
1639
  with debugging.span("create_v2", **query_attrs_dict) as create_span:
1637
1640
  request_headers['user-agent'] = get_pyrel_version(self.generation)
1638
- request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
1639
- request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
1640
1641
  response = self._exec_rai_app(
1641
1642
  database=database,
1642
1643
  engine=engine,
@@ -1896,29 +1897,26 @@ Otherwise, remove it from your '{profile}' configuration profile.
1896
1897
  # Exec
1897
1898
  #--------------------------------------------------
1898
1899
 
1899
- def _exec_with_gi_retry(
1900
+ def exec_lqp(
1900
1901
  self,
1901
1902
  database: str,
1902
1903
  engine: str | None,
1903
- raw_code: str,
1904
- inputs: Dict | None,
1905
- readonly: bool,
1906
- nowait_durable: bool,
1907
- headers: Dict | None,
1908
- bypass_index: bool,
1909
- language: str,
1910
- query_timeout_mins: int | None,
1904
+ raw_code: bytes,
1905
+ readonly=True,
1906
+ *,
1907
+ inputs: Dict | None = None,
1908
+ nowait_durable=False,
1909
+ headers: Dict | None = None,
1910
+ bypass_index=False,
1911
+ query_timeout_mins: int | None = None,
1911
1912
  ):
1912
- """Execute with graph index retry logic.
1913
+ raw_code_b64 = base64.b64encode(raw_code).decode("utf-8")
1913
1914
 
1914
- Attempts execution with gi_setup_skipped=True first. If an engine or database
1915
- issue occurs, polls use_index and retries with gi_setup_skipped=False.
1916
- """
1917
1915
  try:
1918
1916
  return self._exec_async_v2(
1919
- database, engine, raw_code, inputs, readonly, nowait_durable,
1920
- headers=headers, bypass_index=bypass_index, language=language,
1921
- query_timeout_mins=query_timeout_mins, gi_setup_skipped=True,
1917
+ database, engine, raw_code_b64, inputs, readonly, nowait_durable,
1918
+ headers=headers, bypass_index=bypass_index, language='lqp',
1919
+ query_timeout_mins=query_timeout_mins,
1922
1920
  )
1923
1921
  except Exception as e:
1924
1922
  err_message = str(e).lower()
@@ -1935,32 +1933,13 @@ Otherwise, remove it from your '{profile}' configuration profile.
1935
1933
  )
1936
1934
 
1937
1935
  return self._exec_async_v2(
1938
- database, engine, raw_code, inputs, readonly, nowait_durable,
1939
- headers=headers, bypass_index=bypass_index, language=language,
1940
- query_timeout_mins=query_timeout_mins, gi_setup_skipped=False,
1936
+ database, engine, raw_code_b64, inputs, readonly, nowait_durable,
1937
+ headers=headers, bypass_index=bypass_index, language='lqp',
1938
+ query_timeout_mins=query_timeout_mins,
1941
1939
  )
1942
1940
  else:
1943
1941
  raise e
1944
1942
 
1945
- def exec_lqp(
1946
- self,
1947
- database: str,
1948
- engine: str | None,
1949
- raw_code: bytes,
1950
- readonly=True,
1951
- *,
1952
- inputs: Dict | None = None,
1953
- nowait_durable=False,
1954
- headers: Dict | None = None,
1955
- bypass_index=False,
1956
- query_timeout_mins: int | None = None,
1957
- ):
1958
- raw_code_b64 = base64.b64encode(raw_code).decode("utf-8")
1959
- return self._exec_with_gi_retry(
1960
- database, engine, raw_code_b64, inputs, readonly, nowait_durable,
1961
- headers, bypass_index, 'lqp', query_timeout_mins
1962
- )
1963
-
1964
1943
 
1965
1944
  def exec_raw(
1966
1945
  self,
@@ -1976,10 +1955,45 @@ Otherwise, remove it from your '{profile}' configuration profile.
1976
1955
  query_timeout_mins: int | None = None,
1977
1956
  ):
1978
1957
  raw_code = raw_code.replace("'", "\\'")
1979
- return self._exec_with_gi_retry(
1980
- database, engine, raw_code, inputs, readonly, nowait_durable,
1981
- headers, bypass_index, 'rel', query_timeout_mins
1982
- )
1958
+
1959
+ try:
1960
+ return self._exec_async_v2(
1961
+ database,
1962
+ engine,
1963
+ raw_code,
1964
+ inputs,
1965
+ readonly,
1966
+ nowait_durable,
1967
+ headers=headers,
1968
+ bypass_index=bypass_index,
1969
+ query_timeout_mins=query_timeout_mins,
1970
+ )
1971
+ except Exception as e:
1972
+ err_message = str(e).lower()
1973
+ if _is_engine_issue(err_message) or _is_database_issue(err_message):
1974
+ engine_name = engine or self.get_default_engine_name()
1975
+ engine_size = self.config.get_default_engine_size()
1976
+ self._poll_use_index(
1977
+ app_name=self.get_app_name(),
1978
+ sources=self.sources,
1979
+ model=database,
1980
+ engine_name=engine_name,
1981
+ engine_size=engine_size,
1982
+ headers=headers,
1983
+ )
1984
+ return self._exec_async_v2(
1985
+ database,
1986
+ engine,
1987
+ raw_code,
1988
+ inputs,
1989
+ readonly,
1990
+ nowait_durable,
1991
+ headers=headers,
1992
+ bypass_index=bypass_index,
1993
+ query_timeout_mins=query_timeout_mins,
1994
+ )
1995
+ else:
1996
+ raise e
1983
1997
 
1984
1998
 
1985
1999
  def format_results(self, results, task:m.Task|None=None) -> Tuple[DataFrame, List[Any]]:
@@ -3300,10 +3314,19 @@ class DirectAccessResources(Resources):
3300
3314
  message = "" # Not used when we check status_code directly
3301
3315
 
3302
3316
  # fix engine on engine error and retry
3303
- # Skip auto-retry if skip_auto_create is True to avoid recursion or to let _exec_async_v2 poll the index.
3304
- if _is_engine_issue(message) and not skip_auto_create:
3305
- engine = payload.get("engine_name", "") if payload else ""
3306
- self.auto_create_engine(engine)
3317
+ # Skip auto-retry if skip_auto_create is True to avoid recursion
3318
+ if (_is_engine_issue(message) and not skip_auto_create) or _is_database_issue(message):
3319
+ engine_name = payload.get("caller_engine_name", "") if payload else ""
3320
+ engine_name = engine_name or self.get_default_engine_name()
3321
+ engine_size = self.config.get_default_engine_size()
3322
+ self._poll_use_index(
3323
+ app_name=self.get_app_name(),
3324
+ sources=self.sources,
3325
+ model=self.database,
3326
+ engine_name=engine_name,
3327
+ engine_size=engine_size,
3328
+ headers=headers,
3329
+ )
3307
3330
  response = _send_request()
3308
3331
  except requests.exceptions.ConnectionError as e:
3309
3332
  if "NameResolutionError" in str(e):
@@ -3317,48 +3340,6 @@ class DirectAccessResources(Resources):
3317
3340
  raise e
3318
3341
  return response
3319
3342
 
3320
- def _txn_request_with_gi_retry(
3321
- self,
3322
- payload: Dict,
3323
- headers: Dict[str, str],
3324
- query_params: Dict,
3325
- engine: Union[str, None],
3326
- ):
3327
- """Make request with graph index retry logic.
3328
-
3329
- Attempts request with gi_setup_skipped=True first. If an engine or database
3330
- issue occurs, polls use_index and retries with gi_setup_skipped=False.
3331
- """
3332
- response = self.request(
3333
- "create_txn", payload=payload, headers=headers, query_params=query_params, skip_auto_create=True
3334
- )
3335
-
3336
- if response.status_code != 200:
3337
- try:
3338
- message = response.json().get("message", "")
3339
- except requests.exceptions.JSONDecodeError:
3340
- message = ""
3341
-
3342
- if _is_engine_issue(message) or _is_database_issue(message):
3343
- engine_name = engine or self.get_default_engine_name()
3344
- engine_size = self.config.get_default_engine_size()
3345
- self._poll_use_index(
3346
- app_name=self.get_app_name(),
3347
- sources=self.sources,
3348
- model=self.database,
3349
- engine_name=engine_name,
3350
- engine_size=engine_size,
3351
- headers=headers,
3352
- )
3353
- headers['gi_setup_skipped'] = 'False'
3354
- response = self.request(
3355
- "create_txn", payload=payload, headers=headers, query_params=query_params, skip_auto_create=True
3356
- )
3357
- else:
3358
- raise ResponseStatusException("Failed to create transaction.", response)
3359
-
3360
- return response
3361
-
3362
3343
  def _exec_async_v2(
3363
3344
  self,
3364
3345
  database: str,
@@ -3371,7 +3352,6 @@ class DirectAccessResources(Resources):
3371
3352
  bypass_index=False,
3372
3353
  language: str = "rel",
3373
3354
  query_timeout_mins: int | None = None,
3374
- gi_setup_skipped: bool = False,
3375
3355
  ):
3376
3356
 
3377
3357
  with debugging.span("transaction") as txn_span:
@@ -3394,16 +3374,13 @@ class DirectAccessResources(Resources):
3394
3374
  payload["timeout_mins"] = query_timeout_mins
3395
3375
  query_params={"use_graph_index": str(use_graph_index and not bypass_index)}
3396
3376
 
3397
- # Add gi_setup_skipped to headers
3398
- if headers is None:
3399
- headers = {}
3400
- headers["gi_setup_skipped"] = str(gi_setup_skipped)
3401
- headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
3402
-
3403
- response = self._txn_request_with_gi_retry(
3404
- payload, headers, query_params, engine
3377
+ response = self.request(
3378
+ "create_txn", payload=payload, headers=headers, query_params=query_params,
3405
3379
  )
3406
3380
 
3381
+ if response.status_code != 200:
3382
+ raise ResponseStatusException("Failed to create transaction.", response)
3383
+
3407
3384
  artifact_info = {}
3408
3385
  response_content = response.json()
3409
3386
 
@@ -29,8 +29,8 @@ def lqp_passes() -> list[Pass]:
29
29
  InferTypes(),
30
30
  DNFUnionSplitter(),
31
31
  ExtractKeys(),
32
- ExtractCommon(),
33
32
  FormatOutputs(),
33
+ ExtractCommon(), # Extracts tasks that will become common after Flatten into their own definition
34
34
  Flatten(),
35
35
  Splinter(), # Splits multi-headed rules into multiple rules
36
36
  QuantifyVars(), # Adds missing existentials
@@ -10,7 +10,7 @@ from relationalai.semantics.lqp.rewrite.functional_dependencies import (
10
10
  is_valid_unique_constraint, normalized_fd
11
11
  )
12
12
 
13
-
13
+ _DISABLE_CONSTRAINT_DECLARATIONS = True
14
14
 
15
15
  class AnnotateConstraints(Pass):
16
16
  """
@@ -36,6 +36,8 @@ class AnnotateConstraintsRewriter(DischargeConstraintsVisitor):
36
36
  """
37
37
 
38
38
  def _should_be_declarable_constraint(self, node: Require) -> bool:
39
+ if _DISABLE_CONSTRAINT_DECLARATIONS:
40
+ return False
39
41
  if not is_valid_unique_constraint(node):
40
42
  return False
41
43
  # Currently, we only declare non-structural functional dependencies.
@@ -0,0 +1,338 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Optional
5
+ from relationalai.semantics.metamodel import ir, factory as f, helpers, visitor
6
+ from relationalai.semantics.metamodel.compiler import Pass
7
+ from relationalai.semantics.metamodel.util import OrderedSet, ordered_set
8
+ from relationalai.semantics.metamodel import dependency
9
+ from relationalai.semantics.metamodel import builtins
10
+
11
+ from functools import reduce
12
+
13
+ class ExtractCommon(Pass):
14
+ """
15
+ Pass to analyze Logical bodies and extract lookups in their own Logical if it makes
16
+ sense. The heuristic is that, if there are multiple lookups, and there are also multiple
17
+ sibling nested logicals that will eventually be extracted by Flatten, then it makes
18
+ sense to extract these logicals into their own "rule", and then make the original body
19
+ just lookup this common rule.
20
+
21
+ From:
22
+ Logical
23
+ Logical
24
+ lookup1
25
+ lookup2
26
+ Logical1 ...
27
+ Logical2 ...
28
+ To:
29
+ Logical
30
+ Logical
31
+ lookup1
32
+ lookup2
33
+ derive common
34
+ Logical
35
+ lookup common
36
+ Logical1 ...
37
+ Logical2 ...
38
+ """
39
+
40
+ # The extraction plan heuristic is as follows:
41
+ #
42
+ # Given a set of binder tasks B and a set of extractable tasks E, we find:
43
+ # - A subset of common tasks C in B, and
44
+ # - A subset of exposed variables V output from tasks in C
45
+ # where:
46
+ # - The intersection of common dependencies of all tasks in E are contained in C
47
+ # (including transitive dependencies)
48
+ # - The union of input variables for all tasks in E intersected with the output
49
+ # variables of tasks in C are contained in V
50
+
51
+ #--------------------------------------------------
52
+ # Public API
53
+ #--------------------------------------------------
54
+ def rewrite(self, model: ir.Model, options:dict={}) -> ir.Model:
55
+ # create the context
56
+ ctx = ExtractCommon.Context(model, options)
57
+
58
+ # rewrite the root
59
+ replacement = self.handle(model.root, ctx)
60
+
61
+ # the new root contains the extracted top level logicals and the rewritten root
62
+ if ctx.rewrite_ctx.top_level:
63
+ new_root = ir.Logical(model.root.engine, tuple(), tuple(ctx.rewrite_ctx.top_level + [replacement]))
64
+ else:
65
+ new_root = replacement
66
+
67
+ # create the new model, updating relations and root
68
+ return ir.Model(
69
+ model.engines,
70
+ OrderedSet.from_iterable(model.relations).update(ctx.rewrite_ctx.relations).frozen(),
71
+ model.types,
72
+ new_root
73
+ )
74
+
75
+ #--------------------------------------------------
76
+ # Extra classes
77
+ #--------------------------------------------------
78
+
79
+ class Context():
80
+ def __init__(self, model: ir.Model, options: dict):
81
+ self.rewrite_ctx = helpers.RewriteContext()
82
+ self.info = dependency.analyze(model.root)
83
+ self.options = options
84
+
85
+ @dataclass
86
+ class ExtractionPlan():
87
+ # tasks to extract to the body of the common logical
88
+ common_body: OrderedSet[ir.Task]
89
+ # tasks to remain in the original body
90
+ remaining_body: OrderedSet[ir.Task]
91
+ # variables to be exposed by the common logical
92
+ exposed_vars: OrderedSet[ir.Var]
93
+ # map from nested composite to the tasks in the common body that still need to be
94
+ # included in its body, because it contains variables not exposed by the common logical
95
+ local_dependencies: dict[ir.Task, OrderedSet[ir.Task]]
96
+ # a reference to the common connection created for this plan, if any
97
+ common_reference: Optional[ir.Lookup] = None
98
+
99
+ #--------------------------------------------------
100
+ # IR handlers
101
+ #--------------------------------------------------
102
+
103
+ def handle(self, task: ir.Task, ctx: Context):
104
+ # Currently we only extract if it's a sequence of Logicals, but we could in the
105
+ # future support other intermediate nodes
106
+ if isinstance(task, ir.Logical):
107
+ return self.handle_logical(task, ctx)
108
+ else:
109
+ return task
110
+
111
+ def handle_logical(self, task: ir.Logical, ctx: Context):
112
+ # Process the original body to find candidates for extraction. Each task is in one
113
+ # of three categories:
114
+ # - Binders: tasks that bind variables. These are candidates for extracting into
115
+ # the common body.
116
+ # - Flattenables: tasks that will later be extracted by the Flatten pass
117
+ # - Other: tasks that are neither binders nor flattenables; these will remain
118
+ # in the body as-is.
119
+
120
+ binders = ordered_set()
121
+ flattenables = ordered_set()
122
+ other = ordered_set()
123
+
124
+ for child in task.body:
125
+ if _is_binder(child):
126
+ binders.add(child)
127
+ elif _is_flattenable(ctx, child):
128
+ flattenables.add(child)
129
+ else:
130
+ other.add(child)
131
+
132
+ # The new body of the rewritten task
133
+ body:OrderedSet[ir.Task] = ordered_set()
134
+
135
+ # Quick check to see if it's worth doing more analysis; we only want to extract
136
+ # common binders if there are multiple, and there are also multiple flattenables
137
+ # that will be extracted by the flatten pass later (so that they can share the
138
+ # extracted logic).
139
+ plan: Optional[ExtractCommon.ExtractionPlan] = None
140
+ if len(binders) > 1 and len(flattenables) > 1:
141
+ plan = _create_extraction_plan(ctx, binders, flattenables, other)
142
+ if plan:
143
+ # plan is worthwhile, extract the common body and add the connection to the body
144
+ exposed_vars = plan.exposed_vars.get_list()
145
+ plan.common_reference = f.lookup(helpers.extract(task, plan.common_body, exposed_vars, ctx.rewrite_ctx, "common"), exposed_vars)
146
+
147
+ # Add plan common reference to the body.
148
+ body.add(plan.common_reference)
149
+
150
+ # recursively handle children
151
+ for child in task.body:
152
+ # skip children that were extracted
153
+ if plan and child not in other and child not in plan.remaining_body and child not in flattenables:
154
+ continue
155
+
156
+ # no plan or child is not a composite, so just add the handled to the body
157
+ if not plan or child not in flattenables:
158
+ body.add(self.handle(child, ctx))
159
+ continue
160
+
161
+ # there is a plan and the child is in composites, so...
162
+ replacement = self.handle(child, ctx)
163
+
164
+ # this child needs either extra local dependencies or the common reference
165
+ if child in plan.local_dependencies:
166
+ # the new body will have maybe the common reference and the local deps
167
+ replacement_body = ordered_set()
168
+
169
+ hoisted = OrderedSet()
170
+ if isinstance(replacement, ir.Logical):
171
+ # if replacement is a logical, just keep the same hoisted vars
172
+ hoisted.update(replacement.hoisted)
173
+ else:
174
+ # otherwise, we need to hoist the vars that are output from local deps
175
+ # and input to the replacement task
176
+ dep_outputs = OrderedSet()
177
+ for d in plan.local_dependencies.get(child, ordered_set()):
178
+ dep_outputs.update(ctx.info.task_outputs(d))
179
+ hoisted.update(dep_outputs & ctx.info.task_inputs(replacement))
180
+
181
+ if child in plan.local_dependencies:
182
+ for local_dep in plan.local_dependencies[child]:
183
+ replacement_body.add(local_dep.clone())
184
+
185
+ if isinstance(replacement, ir.Logical):
186
+ # if the replacements is a logical, we can just add to the body
187
+ body.add(replacement.reconstruct(
188
+ replacement.engine,
189
+ tuple(hoisted.get_list()),
190
+ tuple(replacement_body.update(replacement.body).get_list()),
191
+ replacement.annotations
192
+ ))
193
+ else:
194
+ # Otherwise, wrap the local dependencies in a Lookup where the output
195
+ # variables are hoisted, and keep the computed replacement.
196
+ body.add(f.logical(replacement_body.get_list(), hoisted.get_list(), replacement.engine))
197
+ body.add(replacement)
198
+ else:
199
+ # child does not need extras in the body, just add it to the main body
200
+ body.add(replacement)
201
+
202
+ return ir.Logical(task.engine, task.hoisted, tuple(body))
203
+
204
+
205
+ #--------------------------------------------------
206
+ # Utilities
207
+ #--------------------------------------------------
208
+
209
+ def _create_extraction_plan(ctx: ExtractCommon.Context, binders: OrderedSet[ir.Task], flattenables: OrderedSet[ir.Task], others: OrderedSet[ir.Task]) -> Optional[ExtractCommon.ExtractionPlan]:
210
+ """
211
+ Compute a plan to extract tasks in this frame that are common dependencies
212
+ across these composite tasks.
213
+ """
214
+ # If there are any pragma lookups, then don't extract anything. Pragma lookups are
215
+ # designed to control execution order, and extracting them may affect their
216
+ # semantics.
217
+ for b in binders:
218
+ if isinstance(b, ir.Lookup) and builtins.is_pragma(b.relation):
219
+ return None
220
+
221
+ # Compute intersection of task dependencies
222
+ all_deps = [ctx.info.task_dependencies(f) for f in flattenables]
223
+ deps = reduce(lambda a, b: a & b, all_deps)
224
+ common_body = binders & deps
225
+
226
+ # We don't need to extract anything if there's only zero or one common tasks
227
+ if len(common_body) < 2:
228
+ return None
229
+
230
+ # Keep track of remaining tasks that are not extracted in the common body
231
+ remaining = ordered_set()
232
+
233
+ # Compute the vars that should be output from the common body. These are the union of
234
+ # all input vars across all non-extracted tasks, intersected with output vars of
235
+ # the common body.
236
+
237
+ # First, compute the output vars of the common body
238
+ common_body_output_vars = OrderedSet()
239
+ for child in common_body:
240
+ common_body_output_vars.update(ctx.info.task_outputs(child))
241
+
242
+ # Next, compute the union of the input vars of all non-extracted tasks
243
+ non_extracted_tasks = (binders - common_body) | flattenables | others
244
+ all_exposed_vars: list[OrderedSet[ir.Var]] = []
245
+ for t in non_extracted_tasks:
246
+ input_vars = ctx.info.task_inputs(t)
247
+ all_exposed_vars.append(input_vars if input_vars else OrderedSet())
248
+
249
+ exposed_vars = reduce(lambda a, b: a | b, all_exposed_vars) & common_body_output_vars
250
+
251
+ # If there are no vars in common, then it's not worth extracting
252
+ if not exposed_vars:
253
+ return None
254
+
255
+ # Make sure that all local dependencies of the common body are included in the common
256
+ # body. This is important for the safety of this rewrite.
257
+ for task in common_body:
258
+ local_deps = ctx.info.local_dependencies(task)
259
+ if local_deps:
260
+ common_body.update(local_deps & binders)
261
+
262
+ # check which of the original binders remain, and make sure their dependencies also stay
263
+ for binder in binders:
264
+ if binder not in common_body:
265
+ remaining.add(binder)
266
+ deps = _compute_local_dependencies(ctx, binders, binder, exposed_vars)
267
+ if deps:
268
+ remaining.update(deps)
269
+
270
+ # for each composite, check if there are additional tasks needed, because the task
271
+ # depends on it but it is not exposed by the vars
272
+ local_dependencies: dict[ir.Task, OrderedSet[ir.Task]] = dict()
273
+ for flattenable in flattenables:
274
+ local = _compute_local_dependencies(ctx, binders, flattenable, exposed_vars)
275
+ if local:
276
+ local_dependencies[flattenable] = local
277
+
278
+ return ExtractCommon.ExtractionPlan(common_body, remaining, exposed_vars, local_dependencies)
279
+
280
+ def _compute_local_dependencies(ctx: ExtractCommon.Context, binders: OrderedSet[ir.Task], composite: ir.Task, exposed_vars: OrderedSet[ir.Var]):
281
+ """
282
+ The tasks in common_body will be extracted into a logical that will expose the exposed_vars.
283
+ Compute which additional dependencies are needed specifically for this composite, because
284
+ it depends on some tasks that are extracted to common_body but not exposed by exposed_vars.
285
+ """
286
+
287
+ # working list of vars we still need to fulfill
288
+ inputs = ctx.info.task_inputs(composite)
289
+ if not inputs:
290
+ return None
291
+
292
+ # vars exposed by exposed vars + tasks added to the local body
293
+ vars_exposed = OrderedSet.from_iterable(exposed_vars)
294
+ vars_needed = (inputs - vars_exposed)
295
+ if not vars_needed:
296
+ return None
297
+
298
+ # this is a greedy algorithm that uses the first task in the common body that provides
299
+ # a variable needed; it may result in sub-optimal extraction, but should be correct
300
+ local_body = ordered_set()
301
+ while(vars_needed):
302
+ v = vars_needed.pop()
303
+ for x in binders:
304
+ if x not in local_body:
305
+ # an x that is not yet in local_body can fulfill v
306
+ x_outputs = ctx.info.task_outputs(x)
307
+ if x_outputs and v in x_outputs:
308
+ # add it to local_body and add its outputs to vars exposed
309
+ local_body.add(x)
310
+ vars_exposed.add(x_outputs)
311
+ # but add its inputs the vars now needed
312
+ inputs = ctx.info.task_inputs(x)
313
+ if inputs:
314
+ vars_needed.update(inputs - vars_exposed)
315
+ return local_body
316
+
317
+ def _is_binder(task: ir.Task):
318
+ # If the task itself is a binder
319
+ if any(isinstance(task, binder) for binder in (ir.Lookup, ir.Construct, ir.Exists, ir.Data, ir.Not)):
320
+ return True
321
+
322
+ # If the task is a Logical containing only binders
323
+ if isinstance(task, ir.Logical) and all(_is_binder(c) for c in task.body):
324
+ return True
325
+
326
+ # If the task is a Union containing only binders
327
+ if isinstance(task, ir.Union) and all(_is_binder(c) for c in task.tasks):
328
+ return True
329
+
330
+ return False
331
+
332
+ def _is_flattenable(ctx: ExtractCommon.Context, task: ir.Task):
333
+ # Each output will be flattened into its own top-level def
334
+ if isinstance(task, ir.Output):
335
+ return True
336
+
337
+ extractable_types = (ir.Update, ir.Aggregate, ir.Match, ir.Rank)
338
+ return isinstance(task, ir.Logical) and len(visitor.collect_by_type(extractable_types, task)) > 0