relationalai 0.12.3__tar.gz → 0.12.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. {relationalai-0.12.3 → relationalai-0.12.4}/PKG-INFO +1 -1
  2. {relationalai-0.12.3 → relationalai-0.12.4}/pyproject.toml +1 -1
  3. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/snowflake.py +117 -28
  4. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/use_index_poller.py +3 -0
  5. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/internal/snowflake.py +2 -3
  6. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/executor.py +15 -10
  7. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/model2lqp.py +0 -1
  8. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/extract_common.py +26 -6
  9. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/dependency.py +14 -11
  10. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/flatten.py +1 -13
  11. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/core.py +72 -26
  12. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/rel/executor.py +13 -6
  13. {relationalai-0.12.3 → relationalai-0.12.4}/.gitignore +0 -0
  14. {relationalai-0.12.3 → relationalai-0.12.4}/LICENSE +0 -0
  15. {relationalai-0.12.3 → relationalai-0.12.4}/docs/pypi/README.md +0 -0
  16. {relationalai-0.12.3 → relationalai-0.12.4}/frontend/debugger/dist/.gitignore +0 -0
  17. {relationalai-0.12.3 → relationalai-0.12.4}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  18. {relationalai-0.12.3 → relationalai-0.12.4}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  19. {relationalai-0.12.3 → relationalai-0.12.4}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  20. {relationalai-0.12.3 → relationalai-0.12.4}/frontend/debugger/dist/index.html +0 -0
  21. {relationalai-0.12.3 → relationalai-0.12.4}/src/__init__.py +0 -0
  22. {relationalai-0.12.3 → relationalai-0.12.4}/src/raitoolkit/__init__.py +0 -0
  23. {relationalai-0.12.3 → relationalai-0.12.4}/src/raitoolkit/events/__init__.py +0 -0
  24. {relationalai-0.12.3 → relationalai-0.12.4}/src/raitoolkit/procedures/__init__.py +0 -0
  25. {relationalai-0.12.3 → relationalai-0.12.4}/src/raitoolkit/procedures/procedure.py +0 -0
  26. {relationalai-0.12.3 → relationalai-0.12.4}/src/raitoolkit/rel/__init__.py +0 -0
  27. {relationalai-0.12.3 → relationalai-0.12.4}/src/raitoolkit/tables/__init__.py +0 -0
  28. {relationalai-0.12.3 → relationalai-0.12.4}/src/raitoolkit/tasks/__init__.py +0 -0
  29. {relationalai-0.12.3 → relationalai-0.12.4}/src/raitoolkit/tasks/task.py +0 -0
  30. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/__init__.py +0 -0
  31. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/analysis/__init__.py +0 -0
  32. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/analysis/mechanistic.py +0 -0
  33. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/analysis/whynot.py +0 -0
  34. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/auth/__init__.py +0 -0
  35. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/auth/jwt_generator.py +0 -0
  36. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/auth/oauth_callback_server.py +0 -0
  37. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/auth/token_handler.py +0 -0
  38. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/auth/util.py +0 -0
  39. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/__init__.py +0 -0
  40. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/azure.py +0 -0
  41. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/cache_store.py +0 -0
  42. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/client.py +0 -0
  43. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/config.py +0 -0
  44. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/direct_access_client.py +0 -0
  45. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  46. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/hash_util.py +0 -0
  47. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/profile_polling.py +0 -0
  48. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/result_helpers.py +0 -0
  49. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/types.py +0 -0
  50. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/clients/util.py +0 -0
  51. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/compiler.py +0 -0
  52. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/debugging.py +0 -0
  53. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/dependencies.py +0 -0
  54. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/docutils.py +0 -0
  55. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/dsl.py +0 -0
  56. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/__init__.py +0 -0
  57. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/builder/__init__.py +0 -0
  58. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  59. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  60. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  61. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  62. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  63. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  64. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  65. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/devtools/__init__.py +0 -0
  66. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  67. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  68. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/__init__.py +0 -0
  69. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  70. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  71. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  72. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  73. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  74. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  75. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  76. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  77. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  78. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  79. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  80. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  81. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  82. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  83. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  84. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  85. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  86. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  87. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  88. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  89. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  90. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/constants.py +0 -0
  91. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  92. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  93. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  94. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  95. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  96. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  97. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  98. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  99. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  100. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/context.py +0 -0
  101. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  102. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  103. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  104. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  105. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  106. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  107. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  108. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  109. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  110. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  111. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  112. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  113. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  114. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  115. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  116. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  117. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  118. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  119. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  120. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  121. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  122. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  123. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  124. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  125. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  126. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  127. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  128. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  129. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  130. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  131. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  132. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  133. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  134. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  135. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  136. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  137. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  138. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  139. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  140. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  141. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  142. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  143. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  144. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  145. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  146. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  147. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  148. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  149. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  150. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  151. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  152. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  153. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  154. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  155. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  156. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  157. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  158. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  159. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/relations.py +0 -0
  160. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  161. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  162. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  163. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  164. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  165. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  166. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  167. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  168. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialization.py +0 -0
  169. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  170. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  171. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  172. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  173. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  174. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  175. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  176. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  177. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  178. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  179. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  180. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  181. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  182. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/types/values.py +0 -0
  183. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/dsl/utils.py +0 -0
  184. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/graphs/__init__.py +0 -0
  185. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/__init__.py +0 -0
  186. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  187. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  188. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  189. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  190. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  191. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  192. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  193. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  194. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  195. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  196. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  197. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  198. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  199. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  200. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  201. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  202. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  203. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  204. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  205. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  206. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  207. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  208. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  209. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/__init__.py +0 -0
  210. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/api/__init__.py +0 -0
  211. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/benchmarks/__init__.py +0 -0
  212. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/graph/__init__.py +0 -0
  213. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/__init__.py +0 -0
  214. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/find_paths/__init__.py +0 -0
  215. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_repetition/__init__.py +0 -0
  216. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_upto/__init__.py +0 -0
  217. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/single/__init__.py +0 -0
  218. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_repetition/__init__.py +0 -0
  219. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_upto/__init__.py +0 -0
  220. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/usp/__init__.py +0 -0
  221. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/rpq/__init__.py +0 -0
  222. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/utilities/__init__.py +0 -0
  223. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/paths/utilities/iterators/__init__.py +0 -0
  224. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/rel/__init__.py +0 -0
  225. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  226. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  227. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  228. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/solvers/__init__.py +0 -0
  229. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/sql/__init__.py +0 -0
  230. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  231. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  232. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/tests/__init__.py +0 -0
  233. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  234. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  235. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  236. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/__init__.py +0 -0
  237. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/base.py +0 -0
  238. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/ci.py +0 -0
  239. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/colab.py +0 -0
  240. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/generic.py +0 -0
  241. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/hex.py +0 -0
  242. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/ipython.py +0 -0
  243. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/jupyter.py +0 -0
  244. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/snowbook.py +0 -0
  245. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/environments/terminal.py +0 -0
  246. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/errors.py +0 -0
  247. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/SF.py +0 -0
  248. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/__init__.py +0 -0
  249. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/graphs.py +0 -0
  250. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/inspect.py +0 -0
  251. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  252. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/api.py +0 -0
  253. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  254. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  255. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  256. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  257. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  258. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  259. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  260. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/options.py +0 -0
  261. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  262. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  263. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  264. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  265. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/paths/__init__.py +0 -0
  266. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/paths/pathfinder.rel +0 -0
  267. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  268. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/experimental/solvers.py +0 -0
  269. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/loaders/__init__.py +0 -0
  270. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/loaders/csv.py +0 -0
  271. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/loaders/loader.py +0 -0
  272. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/loaders/types.py +0 -0
  273. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/metagen.py +0 -0
  274. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/metamodel.py +0 -0
  275. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/rel.py +0 -0
  276. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/rel_emitter.py +0 -0
  277. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/rel_utils.py +0 -0
  278. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/__init__.py +0 -0
  279. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  280. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/devtools/__init__.py +0 -0
  281. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  282. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  283. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  284. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/internal/__init__.py +0 -0
  285. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/internal/annotations.py +0 -0
  286. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/internal/internal.py +0 -0
  287. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/__init__.py +0 -0
  288. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/builtins.py +0 -0
  289. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/compiler.py +0 -0
  290. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/constructors.py +0 -0
  291. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  292. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/ir.py +0 -0
  293. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/passes.py +0 -0
  294. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  295. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/primitives.py +0 -0
  296. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  297. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
  298. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  299. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
  300. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/fd_constraints.py +0 -0
  301. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  302. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  303. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/types.py +0 -0
  304. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/utils.py +0 -0
  305. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/lqp/validators.py +0 -0
  306. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  307. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/builtins.py +0 -0
  308. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  309. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  310. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/executor.py +0 -0
  311. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/factory.py +0 -0
  312. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  313. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/ir.py +0 -0
  314. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  315. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  316. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  317. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  318. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  319. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  320. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  321. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/types.py +0 -0
  322. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/util.py +0 -0
  323. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  324. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  325. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  326. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  327. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  328. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/README.md +0 -0
  329. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/__init__.py +0 -0
  330. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/api.py +0 -0
  331. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/__init__.py +0 -0
  332. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/grid_graph.py +0 -0
  333. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/code_organization.md +0 -0
  334. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/Movies.ipynb +0 -0
  335. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/basic_example.py +0 -0
  336. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/minimal_engine_warmup.py +0 -0
  337. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movie_example.py +0 -0
  338. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/actedin.csv +0 -0
  339. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/directed.csv +0 -0
  340. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/follows.csv +0 -0
  341. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/movies.csv +0 -0
  342. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/person.csv +0 -0
  343. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/produced.csv +0 -0
  344. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/ratings.csv +0 -0
  345. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/wrote.csv +0 -0
  346. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_benchmark.py +0 -0
  347. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_example.py +0 -0
  348. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/pattern_to_automaton.py +0 -0
  349. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/find_paths_via_automaton.py +0 -0
  350. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/graph.py +0 -0
  351. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/__init__.py +0 -0
  352. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/find_paths.py +0 -0
  353. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  354. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  355. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/single.py +0 -0
  356. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  357. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  358. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-old.py +0 -0
  359. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-tuple.py +0 -0
  360. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp.py +0 -0
  361. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/product_graph.py +0 -0
  362. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/__init__.py +0 -0
  363. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/automaton.py +0 -0
  364. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/diagnostics.py +0 -0
  365. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/filter.py +0 -0
  366. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/glushkov.py +0 -0
  367. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/rpq.py +0 -0
  368. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/transition.py +0 -0
  369. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_max_length.py +0 -0
  370. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_multiple.py +0 -0
  371. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_single.py +0 -0
  372. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_multiple.py +0 -0
  373. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_single.py +0 -0
  374. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  375. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  376. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  377. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  378. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_paths.py +0 -0
  379. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks.py +0 -0
  380. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks_undirected.py +0 -0
  381. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  382. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  383. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  384. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  385. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_multiple.py +0 -0
  386. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_single.py +0 -0
  387. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/utilities/__init__.py +0 -0
  388. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/utilities/iterators.py +0 -0
  389. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/utilities/prefix_sum.py +0 -0
  390. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/utilities/utilities.py +0 -0
  391. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  392. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  393. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  394. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  395. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  396. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/rel/__init__.py +0 -0
  397. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/rel/builtins.py +0 -0
  398. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/rel/compiler.py +0 -0
  399. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/rel/rel.py +0 -0
  400. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  401. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  402. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/__init__.py +0 -0
  403. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/compiler.py +0 -0
  404. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  405. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  406. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  407. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/executor/snowflake.py +2 -2
  408. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  409. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  410. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  411. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  412. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  413. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/sql/sql.py +0 -0
  414. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/__init__.py +0 -0
  415. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/constraints.py +0 -0
  416. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/datetime.py +0 -0
  417. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/decimals.py +0 -0
  418. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/floats.py +0 -0
  419. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/integers.py +0 -0
  420. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/math.py +0 -0
  421. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/pragmas.py +0 -0
  422. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/re.py +0 -0
  423. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/std.py +0 -0
  424. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/std/strings.py +0 -0
  425. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/tests/__init__.py +0 -0
  426. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/tests/logging.py +0 -0
  427. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  428. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  429. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/semantics/tests/utils.py +0 -0
  430. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/std/__init__.py +0 -0
  431. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/std/aggregates.py +0 -0
  432. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/std/dates.py +0 -0
  433. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/std/graphs.py +0 -0
  434. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/std/inspect.py +0 -0
  435. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/std/math.py +0 -0
  436. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/std/re.py +0 -0
  437. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/std/strings.py +0 -0
  438. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/__init__.py +0 -0
  439. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  440. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/cli.py +0 -0
  441. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/cli_controls.py +0 -0
  442. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/cli_helpers.py +0 -0
  443. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/constants.py +0 -0
  444. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/debugger.py +0 -0
  445. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/debugger_client.py +0 -0
  446. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/debugger_server.py +0 -0
  447. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/dev.py +0 -0
  448. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/notes +0 -0
  449. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/qb_debugger.py +0 -0
  450. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/query_utils.py +0 -0
  451. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/tools/snapshot_viewer.py +0 -0
  452. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/__init__.py +0 -0
  453. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/clean_up_databases.py +0 -0
  454. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/constants.py +0 -0
  455. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/format.py +0 -0
  456. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/graph.py +0 -0
  457. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/list_databases.py +0 -0
  458. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/otel_configuration.py +0 -0
  459. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/otel_handler.py +0 -0
  460. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/snowflake_handler.py +0 -0
  461. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/span_format_test.py +0 -0
  462. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/span_tracker.py +0 -0
  463. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/spans_file_handler.py +0 -0
  464. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/timeout.py +0 -0
  465. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai/util/tracing_handler.py +0 -0
  466. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai_test_util/__init__.py +0 -0
  467. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai_test_util/fixtures.py +0 -0
  468. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai_test_util/snapshot.py +0 -0
  469. {relationalai-0.12.3 → relationalai-0.12.4}/src/relationalai_test_util/traceback.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.12.3
3
+ Version: 0.12.4
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.3'
3
+ version = '0.12.4'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -83,6 +83,7 @@ FIELD_MAP = {
83
83
  VALID_IMPORT_STATES = ["PENDING", "PROCESSING", "QUARANTINED", "LOADED"]
84
84
  ENGINE_ERRORS = ["engine is suspended", "create/resume", "engine not found", "no engines found", "engine was deleted"]
85
85
  ENGINE_NOT_READY_MSGS = ["engine is in pending", "engine is provisioning"]
86
+ DATABASE_ERRORS = ["database not found"]
86
87
  PYREL_ROOT_DB = 'pyrel_root_db'
87
88
 
88
89
  TERMINAL_TXN_STATES = ["COMPLETED", "ABORTED"]
@@ -281,6 +282,8 @@ def _sanitize_user_name(user: str) -> str:
281
282
  def _is_engine_issue(response_message: str) -> bool:
282
283
  return any(kw in response_message.lower() for kw in ENGINE_ERRORS + ENGINE_NOT_READY_MSGS)
283
284
 
285
+ def _is_database_issue(response_message: str) -> bool:
286
+ return any(kw in response_message.lower() for kw in DATABASE_ERRORS)
284
287
 
285
288
 
286
289
  #--------------------------------------------------
@@ -298,6 +301,7 @@ class Resources(ResourcesBase):
298
301
  dry_run: bool = False,
299
302
  reset_session: bool = False,
300
303
  generation: Generation | None = None,
304
+ language: str = "rel",
301
305
  ):
302
306
  super().__init__(profile, config=config)
303
307
  self._token_handler: TokenHandler | None = None
@@ -315,6 +319,8 @@ class Resources(ResourcesBase):
315
319
  # self.sources contains fully qualified Snowflake table/view names
316
320
  self.sources: set[str] = set()
317
321
  self._sproc_models = None
322
+ self.database = ""
323
+ self.language = language
318
324
  atexit.register(self.cancel_pending_transactions)
319
325
 
320
326
  @property
@@ -452,6 +458,7 @@ class Resources(ResourcesBase):
452
458
  rai_app = self.config.get("rai_app_name", "")
453
459
  current_role = self.config.get("role")
454
460
  engine = self.get_default_engine_name()
461
+ engine_size = self.config.get_default_engine_size()
455
462
  assert isinstance(rai_app, str), f"rai_app_name must be a string, not {type(rai_app)}"
456
463
  assert isinstance(engine, str), f"engine must be a string, not {type(engine)}"
457
464
  print("\n")
@@ -460,9 +467,15 @@ class Resources(ResourcesBase):
460
467
  if re.search(f"database '{rai_app}' does not exist or not authorized.".lower(), orig_message):
461
468
  exception = SnowflakeAppMissingException(rai_app, current_role)
462
469
  raise exception from None
463
- if any(keyword in orig_message for keyword in ENGINE_ERRORS):
470
+ if _is_engine_issue(orig_message) or _is_database_issue(orig_message):
464
471
  try:
465
- 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
+ )
466
479
  return self._exec(code, params, raw=raw, help=help)
467
480
  except EngineNameValidationException as e:
468
481
  raise EngineNameValidationException(engine) from e
@@ -767,7 +780,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
767
780
  keep_database = not force and self.config.get("reuse_model", True)
768
781
  with debugging.span("release_index", name=name, keep_database=keep_database, language=language):
769
782
  #TODO add headers to release_index
770
- response = self._exec(f"call {APP_NAME}.api.release_index('{name}', OBJECT_CONSTRUCT('keep_database', {keep_database}, 'language', '{language}'));")
783
+ response = self._exec(f"call {APP_NAME}.api.release_index('{name}', OBJECT_CONSTRUCT('keep_database', {keep_database}, 'language', '{language}', 'user_agent', '{get_pyrel_version(self.generation)}'));")
771
784
  if response:
772
785
  result = next(iter(response))
773
786
  obj = json.loads(result["RELEASE_INDEX"])
@@ -788,14 +801,13 @@ Otherwise, remove it from your '{profile}' configuration profile.
788
801
  headers = debugging.gen_current_propagation_headers()
789
802
  self._exec(f"call {APP_NAME}.api.clone_database('{target_name}', '{source_name}', {nowait_durable}, {headers});")
790
803
 
791
- def poll_use_index(
804
+ def _poll_use_index(
792
805
  self,
793
806
  app_name: str,
794
807
  sources: Iterable[str],
795
808
  model: str,
796
809
  engine_name: str,
797
810
  engine_size: str | None = None,
798
- language: str = "rel",
799
811
  program_span_id: str | None = None,
800
812
  headers: Dict | None = None,
801
813
  ):
@@ -806,12 +818,36 @@ Otherwise, remove it from your '{profile}' configuration profile.
806
818
  model,
807
819
  engine_name,
808
820
  engine_size,
809
- language,
821
+ self.language,
810
822
  program_span_id,
811
823
  headers,
812
824
  self.generation
813
825
  ).poll()
814
826
 
827
+ def maybe_poll_use_index(
828
+ self,
829
+ app_name: str,
830
+ sources: Iterable[str],
831
+ model: str,
832
+ engine_name: str,
833
+ engine_size: str | None = None,
834
+ program_span_id: str | None = None,
835
+ headers: Dict | None = None,
836
+ ):
837
+ """Only call _poll_use_index if there are sources to process."""
838
+ sources_list = list(sources)
839
+ self.database = model
840
+ if sources_list:
841
+ return self._poll_use_index(
842
+ app_name=app_name,
843
+ sources=sources_list,
844
+ model=model,
845
+ engine_name=engine_name,
846
+ engine_size=engine_size,
847
+ program_span_id=program_span_id,
848
+ headers=headers,
849
+ )
850
+
815
851
  #--------------------------------------------------
816
852
  # Models
817
853
  #--------------------------------------------------
@@ -1868,9 +1904,19 @@ Otherwise, remove it from your '{profile}' configuration profile.
1868
1904
  )
1869
1905
  except Exception as e:
1870
1906
  err_message = str(e).lower()
1871
- if _is_engine_issue(err_message):
1872
- self.auto_create_engine(engine, headers=headers)
1873
- self._exec_async_v2(
1907
+ if _is_engine_issue(err_message) or _is_database_issue(err_message):
1908
+ engine_name = engine or self.get_default_engine_name()
1909
+ engine_size = self.config.get_default_engine_size()
1910
+ self._poll_use_index(
1911
+ app_name=self.get_app_name(),
1912
+ sources=self.sources,
1913
+ model=database,
1914
+ engine_name=engine_name,
1915
+ engine_size=engine_size,
1916
+ headers=headers,
1917
+ )
1918
+
1919
+ return self._exec_async_v2(
1874
1920
  database, engine, raw_code_b64, inputs, readonly, nowait_durable,
1875
1921
  headers=headers, bypass_index=bypass_index, language='lqp',
1876
1922
  query_timeout_mins=query_timeout_mins,
@@ -1908,8 +1954,17 @@ Otherwise, remove it from your '{profile}' configuration profile.
1908
1954
  )
1909
1955
  except Exception as e:
1910
1956
  err_message = str(e).lower()
1911
- if _is_engine_issue(err_message):
1912
- self.auto_create_engine(engine, headers=headers)
1957
+ if _is_engine_issue(err_message) or _is_database_issue(err_message):
1958
+ engine_name = engine or self.get_default_engine_name()
1959
+ engine_size = self.config.get_default_engine_size()
1960
+ self._poll_use_index(
1961
+ app_name=self.get_app_name(),
1962
+ sources=self.sources,
1963
+ model=database,
1964
+ engine_name=engine_name,
1965
+ engine_size=engine_size,
1966
+ headers=headers,
1967
+ )
1913
1968
  return self._exec_async_v2(
1914
1969
  database,
1915
1970
  engine,
@@ -2972,13 +3027,12 @@ class SnowflakeClient(Client):
2972
3027
 
2973
3028
  query_attrs_dict = json.loads(headers.get("X-Query-Attributes", "{}")) if headers else {}
2974
3029
  with debugging.span("poll_use_index", sources=self.resources.sources, model=model, engine=engine_name, **query_attrs_dict):
2975
- self.poll_use_index(
3030
+ self.maybe_poll_use_index(
2976
3031
  app_name=app_name,
2977
3032
  sources=self.resources.sources,
2978
3033
  model=model,
2979
3034
  engine_name=engine_name,
2980
3035
  engine_size=engine_size,
2981
- language="rel",
2982
3036
  program_span_id=program_span_id,
2983
3037
  headers=headers
2984
3038
  )
@@ -2989,29 +3043,24 @@ class SnowflakeClient(Client):
2989
3043
  if isolated and not self.keep_model:
2990
3044
  atexit.register(self.delete_database)
2991
3045
 
2992
- # Polling for use_index
2993
- # if data is ready, break the loop
2994
- # if data is not ready, print the status of the tables or engines
2995
- # if data is not ready and there are errors, collect the errors and raise exceptions
2996
- def poll_use_index(
3046
+ def maybe_poll_use_index(
2997
3047
  self,
2998
3048
  app_name: str,
2999
3049
  sources: Iterable[str],
3000
3050
  model: str,
3001
3051
  engine_name: str,
3002
3052
  engine_size: str | None = None,
3003
- language: str = "rel",
3004
3053
  program_span_id: str | None = None,
3005
3054
  headers: Dict | None = None,
3006
3055
  ):
3056
+ """Only call _poll_use_index if there are sources to process."""
3007
3057
  assert isinstance(self.resources, Resources)
3008
- return self.resources.poll_use_index(
3058
+ return self.resources.maybe_poll_use_index(
3009
3059
  app_name=app_name,
3010
3060
  sources=sources,
3011
3061
  model=model,
3012
3062
  engine_name=engine_name,
3013
3063
  engine_size=engine_size,
3014
- language=language,
3015
3064
  program_span_id=program_span_id,
3016
3065
  headers=headers
3017
3066
  )
@@ -3136,6 +3185,7 @@ class DirectAccessResources(Resources):
3136
3185
  dry_run: bool = False,
3137
3186
  reset_session: bool = False,
3138
3187
  generation: Optional[Generation] = None,
3188
+ language: str = "rel",
3139
3189
  ):
3140
3190
  super().__init__(
3141
3191
  generation=generation,
@@ -3144,11 +3194,13 @@ class DirectAccessResources(Resources):
3144
3194
  connection=connection,
3145
3195
  reset_session=reset_session,
3146
3196
  dry_run=dry_run,
3197
+ language=language,
3147
3198
  )
3148
3199
  self._endpoint_info = ConfigStore(ENDPOINT_FILE)
3149
3200
  self._service_endpoint = ""
3150
3201
  self._direct_access_client = None
3151
3202
  self.generation = generation
3203
+ self.database = ""
3152
3204
 
3153
3205
  @property
3154
3206
  def service_endpoint(self) -> str:
@@ -3226,9 +3278,18 @@ class DirectAccessResources(Resources):
3226
3278
 
3227
3279
  # fix engine on engine error and retry
3228
3280
  # Skip auto-retry if skip_auto_create is True to avoid recursion
3229
- if _is_engine_issue(message) and not skip_auto_create:
3230
- engine = payload.get("engine_name", "") if payload else ""
3231
- self.auto_create_engine(engine)
3281
+ if (_is_engine_issue(message) and not skip_auto_create) or _is_database_issue(message):
3282
+ engine_name = payload.get("caller_engine_name", "") if payload else ""
3283
+ engine_name = engine_name or self.get_default_engine_name()
3284
+ engine_size = self.config.get_default_engine_size()
3285
+ self._poll_use_index(
3286
+ app_name=self.get_app_name(),
3287
+ sources=self.sources,
3288
+ model=self.database,
3289
+ engine_name=engine_name,
3290
+ engine_size=engine_size,
3291
+ headers=headers,
3292
+ )
3232
3293
  response = _send_request()
3233
3294
  except requests.exceptions.ConnectionError as e:
3234
3295
  if "NameResolutionError" in str(e):
@@ -3356,14 +3417,13 @@ class DirectAccessResources(Resources):
3356
3417
 
3357
3418
  return response.json()
3358
3419
 
3359
- def poll_use_index(
3420
+ def _poll_use_index(
3360
3421
  self,
3361
3422
  app_name: str,
3362
3423
  sources: Iterable[str],
3363
3424
  model: str,
3364
3425
  engine_name: str,
3365
3426
  engine_size: str | None = None,
3366
- language: str = "rel",
3367
3427
  program_span_id: str | None = None,
3368
3428
  headers: Dict | None = None,
3369
3429
  ):
@@ -3374,12 +3434,36 @@ class DirectAccessResources(Resources):
3374
3434
  model=model,
3375
3435
  engine_name=engine_name,
3376
3436
  engine_size=engine_size,
3377
- language=language,
3437
+ language=self.language,
3378
3438
  program_span_id=program_span_id,
3379
3439
  headers=headers,
3380
3440
  generation=self.generation,
3381
3441
  ).poll()
3382
3442
 
3443
+ def maybe_poll_use_index(
3444
+ self,
3445
+ app_name: str,
3446
+ sources: Iterable[str],
3447
+ model: str,
3448
+ engine_name: str,
3449
+ engine_size: str | None = None,
3450
+ program_span_id: str | None = None,
3451
+ headers: Dict | None = None,
3452
+ ):
3453
+ """Only call _poll_use_index if there are sources to process."""
3454
+ sources_list = list(sources)
3455
+ self.database = model
3456
+ if sources_list:
3457
+ return self._poll_use_index(
3458
+ app_name=app_name,
3459
+ sources=sources_list,
3460
+ model=model,
3461
+ engine_name=engine_name,
3462
+ engine_size=engine_size,
3463
+ program_span_id=program_span_id,
3464
+ headers=headers,
3465
+ )
3466
+
3383
3467
  def _check_exec_async_status(self, txn_id: str, headers: Dict[str, str] | None = None) -> bool:
3384
3468
  """Check whether the given transaction has completed."""
3385
3469
 
@@ -3522,7 +3606,12 @@ class DirectAccessResources(Resources):
3522
3606
  with debugging.span("release_index", name=name, keep_database=keep_database, language=language):
3523
3607
  response = self.request(
3524
3608
  "release_index",
3525
- payload={"model_name": name, "keep_database": keep_database, "language": language},
3609
+ payload={
3610
+ "model_name": name,
3611
+ "keep_database": keep_database,
3612
+ "language": language,
3613
+ "user_agent": get_pyrel_version(self.generation),
3614
+ },
3526
3615
  headers=prop_hdrs,
3527
3616
  )
3528
3617
  if (
@@ -527,6 +527,9 @@ class UseIndexPoller:
527
527
  else:
528
528
  self.should_check_cdc = False
529
529
 
530
+ if engines and self.init_engine_async:
531
+ self.init_engine_async = False
532
+
530
533
  break_loop = False
531
534
  has_stream_errors = False
532
535
  has_general_errors = False
@@ -264,12 +264,11 @@ class Table():
264
264
  else:
265
265
  me = self._rel._field_refs[0]
266
266
  b.where(self).define(concept(me))
267
- # if there are no keys all the fields must be properties
268
- rel_func = b.Relationship if keys else b.Property
267
+ # All the fields are treated as properties
269
268
  for field in self._rel._fields[1:]:
270
269
  field_name = sanitize_identifier(field.name.lower())
271
270
  if field_name not in key_dict:
272
- r = rel_func(
271
+ r = b.Property(
273
272
  f"{{{concept}}} has {{{field_name}:{field.type_str}}}",
274
273
  parent=concept,
275
274
  short_name=field_name,
@@ -56,7 +56,15 @@ class LQPExecutor(e.Executor):
56
56
  resource_class = rai.clients.snowflake.Resources
57
57
  if self.config.get("use_direct_access", USE_DIRECT_ACCESS):
58
58
  resource_class = rai.clients.snowflake.DirectAccessResources
59
- self._resources = resource_class(dry_run=self.dry_run, config=self.config, generation=rai.Generation.QB, connection=self.connection)
59
+ # NOTE: language="lqp" is not strictly required for LQP execution, but it
60
+ # will significantly improve performance.
61
+ self._resources = resource_class(
62
+ dry_run=self.dry_run,
63
+ config=self.config,
64
+ generation=rai.Generation.QB,
65
+ connection=self.connection,
66
+ language="lqp",
67
+ )
60
68
  if not self.dry_run:
61
69
  self.engine = self._resources.get_default_engine_name()
62
70
  if not self.keep_model:
@@ -88,13 +96,12 @@ class LQPExecutor(e.Executor):
88
96
  assert self.engine is not None
89
97
 
90
98
  with debugging.span("poll_use_index", sources=sources, model=model, engine=engine_name):
91
- resources.poll_use_index(
99
+ resources.maybe_poll_use_index(
92
100
  app_name=app_name,
93
101
  sources=sources,
94
102
  model=model,
95
103
  engine_name=self.engine,
96
104
  engine_size=engine_size,
97
- language="lqp",
98
105
  program_span_id=program_span_id,
99
106
  )
100
107
 
@@ -280,6 +287,8 @@ class LQPExecutor(e.Executor):
280
287
  """Construct an epoch that defines a number of built-in definitions used by the
281
288
  emitter."""
282
289
  with debugging.span("compile_intrinsics") as span:
290
+ span["compile_type"] = "intrinsics"
291
+
283
292
  debug_info = lqp_ir.DebugInfo(id_to_orig_name={}, meta=None)
284
293
  intrinsics_fragment = lqp_ir.Fragment(
285
294
  id = lqp_ir.FragmentId(id=b"__pyrel_lqp_intrinsics", meta=None),
@@ -290,7 +299,7 @@ class LQPExecutor(e.Executor):
290
299
  meta = None,
291
300
  )
292
301
 
293
- span["compile_type"] = "intrinsics"
302
+
294
303
  span["lqp"] = lqp_print.to_string(intrinsics_fragment, {"print_names": True, "print_debug": False, "print_csv_filename": False})
295
304
 
296
305
  return lqp_ir.Epoch(
@@ -327,13 +336,14 @@ class LQPExecutor(e.Executor):
327
336
  model_txn = None
328
337
  if self._last_model != model:
329
338
  with debugging.span("compile", metamodel=model) as install_span:
339
+ install_span["compile_type"] = "model"
330
340
  _, model_txn = self.compiler.compile(model, {"fragment_id": b"model"})
331
341
  model_txn = txn_with_configure(model_txn, configure)
332
- install_span["compile_type"] = "model"
333
342
  install_span["lqp"] = lqp_print.to_string(model_txn, {"print_names": True, "print_debug": False, "print_csv_filename": False})
334
343
  self._last_model = model
335
344
 
336
345
  with debugging.span("compile", metamodel=task) as compile_span:
346
+ compile_span["compile_type"] = "query"
337
347
  query = f.compute_model(f.logical([task]))
338
348
  options = {
339
349
  "wide_outputs": self.wide_outputs,
@@ -342,7 +352,6 @@ class LQPExecutor(e.Executor):
342
352
  result, final_model = self.compiler.compile_inner(query, options)
343
353
  export_info, query_txn = result
344
354
  query_txn = txn_with_configure(query_txn, configure)
345
- compile_span["compile_type"] = "query"
346
355
  compile_span["lqp"] = lqp_print.to_string(query_txn, {"print_names": True, "print_debug": False, "print_csv_filename": False})
347
356
 
348
357
  # Merge the epochs into a single transactions. Long term the query bits should all
@@ -356,14 +365,10 @@ class LQPExecutor(e.Executor):
356
365
  epochs.append(model_txn.epochs[0])
357
366
 
358
367
  query_txn_epoch = query_txn.epochs[0]
359
-
360
368
  epochs.append(query_txn_epoch)
361
-
362
369
  epochs.append(self._compile_undefine_query(query_txn_epoch))
363
370
 
364
371
  txn = lqp_ir.Transaction(epochs=epochs, configure=configure, meta=None)
365
-
366
- # Revalidate now that we've joined all the epochs.
367
372
  validate_lqp(txn)
368
373
 
369
374
  txn_proto = convert_transaction(txn)
@@ -62,7 +62,6 @@ def to_lqp(model: ir.Model, fragment_name: bytes, ctx: TranslationCtx) -> tuple[
62
62
  meta=None,
63
63
  )
64
64
 
65
- lqp.validate_lqp(txn)
66
65
  return (export_info, txn)
67
66
 
68
67
  def _effect_bindings(effect: Union[ir.Output, ir.Update]) -> list[ir.Value]:
@@ -2,8 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from typing import Optional
5
- from relationalai.semantics.metamodel.rewrite import flatten
6
- from relationalai.semantics.metamodel import ir, factory as f, helpers
5
+ from relationalai.semantics.metamodel import ir, factory as f, helpers, visitor
7
6
  from relationalai.semantics.metamodel.compiler import Pass, group_tasks
8
7
  from relationalai.semantics.metamodel.util import OrderedSet, ordered_set
9
8
  from relationalai.semantics.metamodel import dependency
@@ -52,7 +51,7 @@ class ExtractCommon(Pass):
52
51
  #--------------------------------------------------
53
52
  def rewrite(self, model: ir.Model, options:dict={}) -> ir.Model:
54
53
  # create the context
55
- ctx = ExtractCommon.Context(model)
54
+ ctx = ExtractCommon.Context(model, options)
56
55
 
57
56
  # rewrite the root
58
57
  replacement = self.handle(model.root, ctx)
@@ -76,9 +75,10 @@ class ExtractCommon(Pass):
76
75
  #--------------------------------------------------
77
76
 
78
77
  class Context():
79
- def __init__(self, model: ir.Model):
78
+ def __init__(self, model: ir.Model, options: dict):
80
79
  self.rewrite_ctx = helpers.RewriteContext()
81
80
  self.info = dependency.analyze(model.root)
81
+ self.options = options
82
82
 
83
83
  def handle(self, task: ir.Task, ctx: Context):
84
84
  # currently we only extract if it's a sequence of Logicals, but we could in the
@@ -107,7 +107,7 @@ class ExtractCommon(Pass):
107
107
  # extracted logic).
108
108
  plan = None
109
109
  if len(binders) > 1 and composites_and_effects:
110
- extractables = flatten.extractables(composites_and_effects)
110
+ extractables = self._get_extractables(ctx, composites_and_effects)
111
111
  # only makes sense to extract common if at least one nested composite will be
112
112
  # extracted during Flatten
113
113
  if extractables:
@@ -325,7 +325,6 @@ class ExtractCommon(Pass):
325
325
 
326
326
  return ExtractCommon.ExtractionPlan(common_body, remaining, exposed_vars, local_dependencies, distribute_common_reference)
327
327
 
328
-
329
328
  def _compute_local_dependencies(self, ctx: Context, binders: OrderedSet[ir.Task], composite: ir.Task, exposed_vars: OrderedSet[ir.Var]):
330
329
  """
331
330
  The tasks in common_body will be extracted into a logical that will expose the exposed_vars.
@@ -362,3 +361,24 @@ class ExtractCommon(Pass):
362
361
  if inputs:
363
362
  vars_needed.update(inputs - vars_exposed)
364
363
  return local_body
364
+
365
+ def _get_extractables(self, ctx: Context, composites: OrderedSet[ir.Task]):
366
+ """
367
+ Extractables are tasks that will eventually be extracted by the Flatten pass later.
368
+ Given a set of tasks, return the extractable ones.
369
+ """
370
+ def _extractable(t: ir.Task):
371
+ # With GNF outputs (i.e., wide_outputs = False), the output tasks will be
372
+ # extracted into separate top-level single-column outputs.
373
+ if isinstance(t, ir.Output) and not ctx.options.get("wide_outputs", False):
374
+ return True
375
+
376
+ extractable_types = (ir.Update, ir.Aggregate, ir.Match, ir.Union, ir.Rank)
377
+ return isinstance(t, ir.Logical) and len(visitor.collect_by_type(extractable_types, t)) > 0
378
+
379
+ extractables = []
380
+ for t in composites:
381
+ if _extractable(t):
382
+ extractables.append(t)
383
+
384
+ return extractables
@@ -96,8 +96,12 @@ class DependencyInfo():
96
96
  # start with the cluster dependencies, because cluster represents the task we
97
97
  # care about
98
98
  queue.extend(cluster.dependencies)
99
+ seen = set()
99
100
  while queue:
100
101
  cluster = queue.pop()
102
+ if cluster.id in seen:
103
+ continue
104
+ seen.add(cluster.id)
101
105
  deps.update(cluster.content)
102
106
  queue.extend(cluster.dependencies)
103
107
 
@@ -625,12 +629,14 @@ class BindingAnalysis(visitor.Visitor):
625
629
  # TODO: this is similar to what's done below in visit_lookup, modularize
626
630
  if builtins.is_eq(child.relation):
627
631
  x, y = child.args[0], child.args[1]
632
+ # Compute input/output vars of the equality
628
633
  if isinstance(x, ir.Var) and not isinstance(y, ir.Var):
629
- grounds.add(x)
630
- self.output(child, x)
634
+ # Variable x is potentially grounded by other expressions at
635
+ # level in the Logical. If it is, then we should mark it as
636
+ # input (which is done later).
637
+ potentially_grounded.add((child, x, x))
631
638
  elif not isinstance(x, ir.Var) and isinstance(y, ir.Var):
632
- grounds.add(y)
633
- self.output(child, y)
639
+ potentially_grounded.add((child, y, y))
634
640
  elif isinstance(x, ir.Var) and isinstance(y, ir.Var):
635
641
  # mark as potentially grounded, if any is grounded in other atoms then we later ground both
636
642
  potentially_grounded.add((child, x, y))
@@ -779,22 +785,19 @@ class BindingAnalysis(visitor.Visitor):
779
785
  if builtins.is_eq(node.relation):
780
786
  # Most cases are covered already at the parent level if the equality is part of
781
787
  # a Logical. The remaining cases are when the equality is a child of a
782
- # non-Logical.
788
+ # non-Logical, or if its variables are not ground elsewhere in the Logical.
783
789
  if self.info.task_inputs(node) or self.info.task_outputs(node):
784
790
  # already covered
785
791
  pass
786
792
  else:
787
793
  x, y = node.args[0], node.args[1]
788
- if isinstance(x, ir.Var) and not isinstance(y, ir.Var):
789
- self.output(node, x)
790
- elif not isinstance(x, ir.Var) and isinstance(y, ir.Var):
791
- self.output(node, y)
792
- elif isinstance(x, ir.Var) and isinstance(y, ir.Var):
793
- grounds = self._grounded[-1] if self._grounded else ordered_set()
794
+ grounds = self._grounded[-1] if self._grounded else ordered_set()
795
+ if isinstance(x, ir.Var):
794
796
  if x in grounds:
795
797
  self.input(node, x)
796
798
  else:
797
799
  self.output(node, x)
800
+ if isinstance(y, ir.Var):
798
801
  if y in grounds:
799
802
  self.input(node, y)
800
803
  else:
@@ -3,7 +3,7 @@ from dataclasses import dataclass
3
3
  from typing import cast, Optional, TypeVar
4
4
  from typing import Tuple
5
5
 
6
- from relationalai.semantics.metamodel import builtins, ir, factory as f, helpers, types, visitor
6
+ from relationalai.semantics.metamodel import builtins, ir, factory as f, helpers, types
7
7
  from relationalai.semantics.metamodel.compiler import Pass, group_tasks
8
8
  from relationalai.semantics.metamodel.util import OrderedSet, ordered_set, NameCache
9
9
  from relationalai.semantics.metamodel import dependency
@@ -611,18 +611,6 @@ def set_union(s1: Optional[OrderedSet[T]], s2: Optional[OrderedSet[T]]) -> list:
611
611
  return s2.get_list()
612
612
  return []
613
613
 
614
- def extractable(t: ir.Task):
615
- """
616
- Whether this task is a Logical that will be extracted as a top level by this
617
- pass, because it has an aggregation, effects, match, union, etc.
618
- """
619
- extractable_types = (ir.Update, ir.Aggregate, ir.Match, ir.Union, ir.Rank)
620
- return isinstance(t, ir.Logical) and len(visitor.collect_by_type(extractable_types, t)) > 0
621
-
622
- def extractables(composites: OrderedSet[ir.Task]):
623
- """ Filter the set of composites, keeping only the extractable ones. """
624
- return list(filter(extractable, composites))
625
-
626
614
  def negate(lookup: ir.Lookup, values: int):
627
615
  """
628
616
  Return a negation of this reference, where the last `values` arguments are to