relationalai 0.12.2__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.2 → relationalai-0.12.4}/PKG-INFO +1 -1
  2. {relationalai-0.12.2 → relationalai-0.12.4}/pyproject.toml +1 -1
  3. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/snowflake.py +117 -28
  4. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/use_index_poller.py +3 -0
  5. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/solvers.py +18 -19
  6. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/internal/snowflake.py +2 -3
  7. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/executor.py +39 -9
  8. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/model2lqp.py +0 -1
  9. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/extract_common.py +30 -8
  10. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/builtins.py +6 -6
  11. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/dependency.py +44 -21
  12. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/helpers.py +7 -6
  13. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +1 -4
  14. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/flatten.py +1 -13
  15. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/core.py +803 -121
  16. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/rel/executor.py +13 -6
  17. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/math.py +2 -2
  18. {relationalai-0.12.2 → relationalai-0.12.4}/.gitignore +0 -0
  19. {relationalai-0.12.2 → relationalai-0.12.4}/LICENSE +0 -0
  20. {relationalai-0.12.2 → relationalai-0.12.4}/docs/pypi/README.md +0 -0
  21. {relationalai-0.12.2 → relationalai-0.12.4}/frontend/debugger/dist/.gitignore +0 -0
  22. {relationalai-0.12.2 → relationalai-0.12.4}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  23. {relationalai-0.12.2 → relationalai-0.12.4}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  24. {relationalai-0.12.2 → relationalai-0.12.4}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  25. {relationalai-0.12.2 → relationalai-0.12.4}/frontend/debugger/dist/index.html +0 -0
  26. {relationalai-0.12.2 → relationalai-0.12.4}/src/__init__.py +0 -0
  27. {relationalai-0.12.2 → relationalai-0.12.4}/src/raitoolkit/__init__.py +0 -0
  28. {relationalai-0.12.2 → relationalai-0.12.4}/src/raitoolkit/events/__init__.py +0 -0
  29. {relationalai-0.12.2 → relationalai-0.12.4}/src/raitoolkit/procedures/__init__.py +0 -0
  30. {relationalai-0.12.2 → relationalai-0.12.4}/src/raitoolkit/procedures/procedure.py +0 -0
  31. {relationalai-0.12.2 → relationalai-0.12.4}/src/raitoolkit/rel/__init__.py +0 -0
  32. {relationalai-0.12.2 → relationalai-0.12.4}/src/raitoolkit/tables/__init__.py +0 -0
  33. {relationalai-0.12.2 → relationalai-0.12.4}/src/raitoolkit/tasks/__init__.py +0 -0
  34. {relationalai-0.12.2 → relationalai-0.12.4}/src/raitoolkit/tasks/task.py +0 -0
  35. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/__init__.py +0 -0
  36. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/analysis/__init__.py +0 -0
  37. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/analysis/mechanistic.py +0 -0
  38. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/analysis/whynot.py +0 -0
  39. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/auth/__init__.py +0 -0
  40. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/auth/jwt_generator.py +0 -0
  41. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/auth/oauth_callback_server.py +0 -0
  42. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/auth/token_handler.py +0 -0
  43. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/auth/util.py +0 -0
  44. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/__init__.py +0 -0
  45. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/azure.py +0 -0
  46. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/cache_store.py +0 -0
  47. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/client.py +0 -0
  48. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/config.py +0 -0
  49. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/direct_access_client.py +0 -0
  50. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  51. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/hash_util.py +0 -0
  52. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/profile_polling.py +0 -0
  53. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/result_helpers.py +0 -0
  54. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/types.py +0 -0
  55. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/clients/util.py +0 -0
  56. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/compiler.py +0 -0
  57. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/debugging.py +0 -0
  58. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/dependencies.py +0 -0
  59. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/docutils.py +0 -0
  60. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/dsl.py +0 -0
  61. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/__init__.py +0 -0
  62. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/builder/__init__.py +0 -0
  63. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  64. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  65. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  66. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  67. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  68. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  69. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  70. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/devtools/__init__.py +0 -0
  71. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  72. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  73. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/__init__.py +0 -0
  74. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  75. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  76. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  77. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  78. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  79. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  80. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  81. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  82. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  83. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  84. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  85. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  86. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  87. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  88. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  89. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  90. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  91. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  92. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  93. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  94. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  95. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/constants.py +0 -0
  96. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  97. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  98. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  99. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  100. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  101. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  102. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  103. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  104. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  105. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/context.py +0 -0
  106. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  107. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  108. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  109. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  110. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  111. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  112. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  113. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  114. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  115. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  116. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  117. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  118. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  119. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  120. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  121. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  122. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  123. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  124. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  125. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  126. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  127. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  128. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  129. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  130. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  131. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  132. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  133. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  134. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  135. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  136. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  137. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  138. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  139. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  140. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  141. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  142. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  143. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  144. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  145. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  146. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  147. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  148. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  149. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  150. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  151. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  152. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  153. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  154. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  155. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  156. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  157. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  158. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  159. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  160. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  161. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  162. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  163. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  164. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/relations.py +0 -0
  165. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  166. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  167. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  168. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  169. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  170. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  171. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  172. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  173. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialization.py +0 -0
  174. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  175. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  176. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  177. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  178. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  179. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  180. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  181. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  182. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  183. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  184. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  185. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  186. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  187. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/types/values.py +0 -0
  188. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/dsl/utils.py +0 -0
  189. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/graphs/__init__.py +0 -0
  190. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/__init__.py +0 -0
  191. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  192. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  193. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  194. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  195. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  196. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  197. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  198. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  199. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  200. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  201. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  202. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  203. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  204. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  205. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  206. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  207. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  208. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  209. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  210. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  211. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  212. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  213. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  214. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/__init__.py +0 -0
  215. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/api/__init__.py +0 -0
  216. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/benchmarks/__init__.py +0 -0
  217. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/graph/__init__.py +0 -0
  218. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/__init__.py +0 -0
  219. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/find_paths/__init__.py +0 -0
  220. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_repetition/__init__.py +0 -0
  221. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_upto/__init__.py +0 -0
  222. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/single/__init__.py +0 -0
  223. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_repetition/__init__.py +0 -0
  224. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_upto/__init__.py +0 -0
  225. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/path_algorithms/usp/__init__.py +0 -0
  226. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/rpq/__init__.py +0 -0
  227. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/utilities/__init__.py +0 -0
  228. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/paths/utilities/iterators/__init__.py +0 -0
  229. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/rel/__init__.py +0 -0
  230. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  231. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  232. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  233. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/solvers/__init__.py +0 -0
  234. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/sql/__init__.py +0 -0
  235. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  236. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  237. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/tests/__init__.py +0 -0
  238. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  239. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  240. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  241. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/__init__.py +0 -0
  242. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/base.py +0 -0
  243. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/ci.py +0 -0
  244. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/colab.py +0 -0
  245. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/generic.py +0 -0
  246. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/hex.py +0 -0
  247. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/ipython.py +0 -0
  248. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/jupyter.py +0 -0
  249. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/snowbook.py +0 -0
  250. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/environments/terminal.py +0 -0
  251. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/errors.py +0 -0
  252. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/SF.py +0 -0
  253. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/__init__.py +0 -0
  254. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/graphs.py +0 -0
  255. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/inspect.py +0 -0
  256. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  257. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/api.py +0 -0
  258. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  259. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  260. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  261. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  262. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  263. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  264. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  265. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/options.py +0 -0
  266. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  267. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  268. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  269. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  270. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/paths/__init__.py +0 -0
  271. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/paths/pathfinder.rel +0 -0
  272. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  273. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/loaders/__init__.py +0 -0
  274. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/loaders/csv.py +0 -0
  275. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/loaders/loader.py +0 -0
  276. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/loaders/types.py +0 -0
  277. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/metagen.py +0 -0
  278. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/metamodel.py +0 -0
  279. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/rel.py +0 -0
  280. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/rel_emitter.py +0 -0
  281. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/rel_utils.py +0 -0
  282. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/__init__.py +0 -0
  283. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  284. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/devtools/__init__.py +0 -0
  285. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  286. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  287. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  288. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/internal/__init__.py +0 -0
  289. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/internal/annotations.py +0 -0
  290. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/internal/internal.py +0 -0
  291. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/__init__.py +0 -0
  292. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/builtins.py +0 -0
  293. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/compiler.py +0 -0
  294. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/constructors.py +0 -0
  295. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  296. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/ir.py +0 -0
  297. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/passes.py +0 -0
  298. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  299. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/primitives.py +0 -0
  300. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  301. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
  302. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  303. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
  304. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/fd_constraints.py +0 -0
  305. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  306. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  307. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/types.py +0 -0
  308. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/utils.py +0 -0
  309. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/lqp/validators.py +0 -0
  310. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  311. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  312. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  313. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/executor.py +0 -0
  314. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/factory.py +0 -0
  315. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/ir.py +0 -0
  316. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  317. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  318. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  319. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  320. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  321. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  322. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/types.py +0 -0
  323. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/util.py +0 -0
  324. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  325. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  326. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  327. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  328. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  329. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/README.md +0 -0
  330. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/__init__.py +0 -0
  331. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/api.py +0 -0
  332. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/__init__.py +0 -0
  333. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/grid_graph.py +0 -0
  334. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/code_organization.md +0 -0
  335. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/Movies.ipynb +0 -0
  336. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/basic_example.py +0 -0
  337. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/minimal_engine_warmup.py +0 -0
  338. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movie_example.py +0 -0
  339. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/actedin.csv +0 -0
  340. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/directed.csv +0 -0
  341. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/follows.csv +0 -0
  342. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/movies.csv +0 -0
  343. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/person.csv +0 -0
  344. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/produced.csv +0 -0
  345. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/ratings.csv +0 -0
  346. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/wrote.csv +0 -0
  347. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_benchmark.py +0 -0
  348. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_example.py +0 -0
  349. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/examples/pattern_to_automaton.py +0 -0
  350. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/find_paths_via_automaton.py +0 -0
  351. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/graph.py +0 -0
  352. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/__init__.py +0 -0
  353. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/find_paths.py +0 -0
  354. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  355. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  356. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/single.py +0 -0
  357. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  358. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  359. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-old.py +0 -0
  360. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-tuple.py +0 -0
  361. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp.py +0 -0
  362. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/product_graph.py +0 -0
  363. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/__init__.py +0 -0
  364. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/automaton.py +0 -0
  365. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/diagnostics.py +0 -0
  366. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/filter.py +0 -0
  367. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/glushkov.py +0 -0
  368. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/rpq.py +0 -0
  369. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/rpq/transition.py +0 -0
  370. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_max_length.py +0 -0
  371. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_multiple.py +0 -0
  372. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_single.py +0 -0
  373. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_multiple.py +0 -0
  374. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_single.py +0 -0
  375. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  376. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  377. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  378. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  379. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_paths.py +0 -0
  380. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks.py +0 -0
  381. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks_undirected.py +0 -0
  382. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  383. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  384. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  385. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  386. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_multiple.py +0 -0
  387. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_single.py +0 -0
  388. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/utilities/__init__.py +0 -0
  389. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/utilities/iterators.py +0 -0
  390. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/utilities/prefix_sum.py +0 -0
  391. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/paths/utilities/utilities.py +0 -0
  392. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  393. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  394. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  395. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  396. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  397. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/rel/__init__.py +0 -0
  398. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/rel/builtins.py +0 -0
  399. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/rel/compiler.py +0 -0
  400. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/rel/rel.py +0 -0
  401. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  402. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  403. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/__init__.py +0 -0
  404. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/compiler.py +0 -0
  405. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  406. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  407. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  408. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/executor/snowflake.py +2 -2
  409. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  410. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  411. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  412. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  413. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  414. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/sql/sql.py +0 -0
  415. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/__init__.py +0 -0
  416. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/constraints.py +0 -0
  417. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/datetime.py +0 -0
  418. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/decimals.py +0 -0
  419. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/floats.py +0 -0
  420. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/integers.py +0 -0
  421. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/pragmas.py +0 -0
  422. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/re.py +0 -0
  423. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/std.py +0 -0
  424. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/std/strings.py +0 -0
  425. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/tests/__init__.py +0 -0
  426. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/tests/logging.py +0 -0
  427. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  428. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  429. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/semantics/tests/utils.py +0 -0
  430. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/std/__init__.py +0 -0
  431. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/std/aggregates.py +0 -0
  432. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/std/dates.py +0 -0
  433. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/std/graphs.py +0 -0
  434. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/std/inspect.py +0 -0
  435. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/std/math.py +0 -0
  436. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/std/re.py +0 -0
  437. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/std/strings.py +0 -0
  438. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/__init__.py +0 -0
  439. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  440. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/cli.py +0 -0
  441. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/cli_controls.py +0 -0
  442. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/cli_helpers.py +0 -0
  443. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/constants.py +0 -0
  444. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/debugger.py +0 -0
  445. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/debugger_client.py +0 -0
  446. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/debugger_server.py +0 -0
  447. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/dev.py +0 -0
  448. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/notes +0 -0
  449. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/qb_debugger.py +0 -0
  450. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/query_utils.py +0 -0
  451. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/tools/snapshot_viewer.py +0 -0
  452. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/__init__.py +0 -0
  453. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/clean_up_databases.py +0 -0
  454. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/constants.py +0 -0
  455. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/format.py +0 -0
  456. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/graph.py +0 -0
  457. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/list_databases.py +0 -0
  458. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/otel_configuration.py +0 -0
  459. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/otel_handler.py +0 -0
  460. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/snowflake_handler.py +0 -0
  461. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/span_format_test.py +0 -0
  462. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/span_tracker.py +0 -0
  463. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/spans_file_handler.py +0 -0
  464. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/timeout.py +0 -0
  465. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai/util/tracing_handler.py +0 -0
  466. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai_test_util/__init__.py +0 -0
  467. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai_test_util/fixtures.py +0 -0
  468. {relationalai-0.12.2 → relationalai-0.12.4}/src/relationalai_test_util/snapshot.py +0 -0
  469. {relationalai-0.12.2 → 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.2
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.2'
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
@@ -261,20 +261,7 @@ class SolverModel:
261
261
  remaining_timeout_minutes = calc_remaining_timeout_minutes(
262
262
  start_time, query_timeout_mins, config_file_path=config_file_path
263
263
  )
264
- try:
265
- job_id = solver._exec_job(payload, log_to_console=log_to_console, query_timeout_mins=remaining_timeout_minutes)
266
- except Exception as e:
267
- err_message = str(e).lower()
268
- if isinstance(e, ResponseStatusException):
269
- err_message = e.response.json().get("message", "")
270
- if any(kw in err_message.lower() for kw in ENGINE_ERRORS + WORKER_ERRORS + ENGINE_NOT_READY_MSGS):
271
- solver._auto_create_solver_async()
272
- remaining_timeout_minutes = calc_remaining_timeout_minutes(
273
- start_time, query_timeout_mins, config_file_path=config_file_path
274
- )
275
- job_id = solver._exec_job(payload, log_to_console=log_to_console, query_timeout_mins=remaining_timeout_minutes)
276
- else:
277
- raise e
264
+ job_id = solver._exec_job(payload, log_to_console=log_to_console, query_timeout_mins=remaining_timeout_minutes)
278
265
 
279
266
  # 3. Extract result.
280
267
  remaining_timeout_minutes = calc_remaining_timeout_minutes(
@@ -660,12 +647,24 @@ class Solver:
660
647
  if self.engine is None:
661
648
  raise Exception("Engine not initialized.")
662
649
 
663
- # Make sure the engine is ready.
664
- if self.engine["state"] != "READY":
665
- poll_with_specified_overhead(lambda: self._is_solver_ready(), 0.1)
666
-
667
650
  with debugging.span("job") as job_span:
668
- job_id = self.provider.create_job_async(self.engine["name"], payload, query_timeout_mins=query_timeout_mins)
651
+ # Retry logic. If creating a job fails with an engine
652
+ # related error we will create/resume/... the engine and
653
+ # retry.
654
+ try:
655
+ job_id = self.provider.create_job_async(self.engine["name"], payload, query_timeout_mins=query_timeout_mins)
656
+ except Exception as e:
657
+ err_message = str(e).lower()
658
+ if isinstance(e, ResponseStatusException):
659
+ err_message = e.response.json().get("message", "")
660
+ if any(kw in err_message.lower() for kw in ENGINE_ERRORS + WORKER_ERRORS + ENGINE_NOT_READY_MSGS):
661
+ self._auto_create_solver_async()
662
+ # Wait until the engine is ready.
663
+ poll_with_specified_overhead(lambda: self._is_solver_ready(), 0.1)
664
+ job_id = self.provider.create_job_async(self.engine["name"], payload, query_timeout_mins=query_timeout_mins)
665
+ else:
666
+ raise e
667
+
669
668
  job_span["job_id"] = job_id
670
669
  debugging.event("job_created", job_span, job_id=job_id, engine_name=self.engine["name"], job_type=ENGINE_TYPE_SOLVER)
671
670
  if not isinstance(job_id, str):
@@ -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(
@@ -300,19 +309,41 @@ class LQPExecutor(e.Executor):
300
309
  meta=None,
301
310
  )
302
311
 
312
+ def _compile_undefine_query(self, query_epoch: lqp_ir.Epoch) -> lqp_ir.Epoch:
313
+ fragment_ids = []
314
+
315
+ for write in query_epoch.writes:
316
+ if isinstance(write.write_type, lqp_ir.Define):
317
+ fragment_ids.append(write.write_type.fragment.id)
318
+
319
+ # Construct new Epoch with Undefine operations for all collected fragment IDs
320
+ undefine_writes = [
321
+ lqp_ir.Write(
322
+ write_type=lqp_ir.Undefine(fragment_id=frag_id, meta=None),
323
+ meta=None
324
+ )
325
+ for frag_id in fragment_ids
326
+ ]
327
+
328
+ return lqp_ir.Epoch(
329
+ writes=undefine_writes,
330
+ meta=None,
331
+ )
332
+
303
333
  def compile_lqp(self, model: ir.Model, task: ir.Task):
304
334
  configure = self._construct_configure()
305
335
 
306
336
  model_txn = None
307
337
  if self._last_model != model:
308
338
  with debugging.span("compile", metamodel=model) as install_span:
339
+ install_span["compile_type"] = "model"
309
340
  _, model_txn = self.compiler.compile(model, {"fragment_id": b"model"})
310
341
  model_txn = txn_with_configure(model_txn, configure)
311
- install_span["compile_type"] = "model"
312
342
  install_span["lqp"] = lqp_print.to_string(model_txn, {"print_names": True, "print_debug": False, "print_csv_filename": False})
313
343
  self._last_model = model
314
344
 
315
345
  with debugging.span("compile", metamodel=task) as compile_span:
346
+ compile_span["compile_type"] = "query"
316
347
  query = f.compute_model(f.logical([task]))
317
348
  options = {
318
349
  "wide_outputs": self.wide_outputs,
@@ -321,7 +352,6 @@ class LQPExecutor(e.Executor):
321
352
  result, final_model = self.compiler.compile_inner(query, options)
322
353
  export_info, query_txn = result
323
354
  query_txn = txn_with_configure(query_txn, configure)
324
- compile_span["compile_type"] = "query"
325
355
  compile_span["lqp"] = lqp_print.to_string(query_txn, {"print_names": True, "print_debug": False, "print_csv_filename": False})
326
356
 
327
357
  # Merge the epochs into a single transactions. Long term the query bits should all
@@ -334,11 +364,11 @@ class LQPExecutor(e.Executor):
334
364
  if model_txn is not None:
335
365
  epochs.append(model_txn.epochs[0])
336
366
 
337
- epochs.append(query_txn.epochs[0])
367
+ query_txn_epoch = query_txn.epochs[0]
368
+ epochs.append(query_txn_epoch)
369
+ epochs.append(self._compile_undefine_query(query_txn_epoch))
338
370
 
339
371
  txn = lqp_ir.Transaction(epochs=epochs, configure=configure, meta=None)
340
-
341
- # Revalidate now that we've joined all the epochs.
342
372
  validate_lqp(txn)
343
373
 
344
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:
@@ -265,10 +265,12 @@ class ExtractCommon(Pass):
265
265
  for child in common_body:
266
266
  body_output_vars.update(ctx.info.task_outputs(child))
267
267
 
268
- # Compute the union of input vars across all composites, intersected with output
268
+ # Compute the union of input vars across all non-extracted tasks (basically
269
+ # composites and binders left behind), intersected with output
269
270
  # vars of the common body
270
271
  exposed_vars = OrderedSet.from_iterable(ctx.info.task_inputs(sample)) & body_output_vars
271
- for composite in composites:
272
+ non_extracted_tasks = (binders - common_body) | composites
273
+ for composite in non_extracted_tasks:
272
274
  if composite is sample:
273
275
  continue
274
276
  # compute common input vars
@@ -323,7 +325,6 @@ class ExtractCommon(Pass):
323
325
 
324
326
  return ExtractCommon.ExtractionPlan(common_body, remaining, exposed_vars, local_dependencies, distribute_common_reference)
325
327
 
326
-
327
328
  def _compute_local_dependencies(self, ctx: Context, binders: OrderedSet[ir.Task], composite: ir.Task, exposed_vars: OrderedSet[ir.Var]):
328
329
  """
329
330
  The tasks in common_body will be extracted into a logical that will expose the exposed_vars.
@@ -360,3 +361,24 @@ class ExtractCommon(Pass):
360
361
  if inputs:
361
362
  vars_needed.update(inputs - vars_exposed)
362
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
@@ -112,12 +112,12 @@ log10 = f.relation(
112
112
 
113
113
  log = f.relation(
114
114
  "log",
115
- [f.input_field("a", types.Number), f.input_field("b", types.Number), f.field("c", types.Float)],
115
+ [f.input_field("base", types.Number), f.input_field("value", types.Number), f.field("result", types.Float)],
116
116
  overloads=[
117
- f.relation("log", [f.input_field("a", types.Int64), f.input_field("b", types.Int64), f.field("c", types.Float)]),
118
- f.relation("log", [f.input_field("a", types.Int128), f.input_field("b", types.Int128), f.field("c", types.Float)]),
119
- f.relation("log", [f.input_field("a", types.Float), f.input_field("b", types.Float), f.field("c", types.Float)]),
120
- f.relation("log", [f.input_field("a", types.GenericDecimal), f.input_field("b", types.GenericDecimal), f.field("c", types.Float)]),
117
+ f.relation("log", [f.input_field("base", types.Int64), f.input_field("value", types.Int64), f.field("result", types.Float)]),
118
+ f.relation("log", [f.input_field("base", types.Int128), f.input_field("value", types.Int128), f.field("result", types.Float)]),
119
+ f.relation("log", [f.input_field("base", types.Float), f.input_field("value", types.Float), f.field("result", types.Float)]),
120
+ f.relation("log", [f.input_field("base", types.GenericDecimal), f.input_field("value", types.GenericDecimal), f.field("result", types.Float)]),
121
121
 
122
122
  ],
123
123
  )
@@ -496,7 +496,7 @@ function = f.relation("function", [f.input_field("code", types.Symbol)])
496
496
  function_checked_annotation = f.annotation(function, [f.lit("checked")])
497
497
  function_annotation = f.annotation(function, [])
498
498
 
499
- # Indicates this relation should be tracked in telemetry. Only supported for Relationships.
499
+ # Indicates this relation should be tracked in telemetry. Supported for Relationships and Concepts.
500
500
  # `RAI_BackIR.with_relation_tracking` produces log messages at the start and end of each
501
501
  # SCC evaluation, if any declarations bear the `track` annotation.
502
502
  track = f.relation("track", [