relationalai 0.13.2__tar.gz → 0.13.3__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 (481) hide show
  1. {relationalai-0.13.2 → relationalai-0.13.3}/PKG-INFO +1 -1
  2. {relationalai-0.13.2 → relationalai-0.13.3}/pyproject.toml +1 -1
  3. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/client.py +3 -4
  4. relationalai-0.13.3/src/relationalai/clients/exec_txn_poller.py +122 -0
  5. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/direct_access_resources.py +6 -5
  6. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/snowflake.py +47 -51
  7. relationalai-0.13.3/src/relationalai/semantics/lqp/algorithms.py +173 -0
  8. relationalai-0.13.3/src/relationalai/semantics/lqp/builtins.py +213 -0
  9. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/executor.py +65 -36
  10. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/ir.py +28 -2
  11. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/model2lqp.py +215 -45
  12. relationalai-0.13.3/src/relationalai/semantics/lqp/passes.py +35 -0
  13. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/__init__.py +12 -0
  14. relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/algorithm.py +385 -0
  15. relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/constants_to_vars.py +70 -0
  16. relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/deduplicate_vars.py +104 -0
  17. relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/eliminate_data.py +108 -0
  18. relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/period_math.py +77 -0
  19. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +65 -31
  20. relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/unify_definitions.py +317 -0
  21. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/utils.py +11 -1
  22. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/validators.py +14 -1
  23. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/builtins.py +2 -1
  24. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/compiler.py +2 -1
  25. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/dependency.py +12 -3
  26. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/executor.py +11 -1
  27. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/factory.py +2 -2
  28. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/helpers.py +7 -0
  29. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/ir.py +3 -2
  30. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +30 -20
  31. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/flatten.py +50 -13
  32. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +9 -3
  33. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/typer/checker.py +6 -4
  34. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/typer/typer.py +2 -5
  35. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/visitor.py +4 -3
  36. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +1 -1
  37. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +3 -4
  38. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/compiler.py +2 -1
  39. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/executor.py +3 -2
  40. relationalai-0.13.3/src/relationalai/semantics/tests/lqp/algorithms.py +345 -0
  41. relationalai-0.13.3/src/relationalai/tools/__init__.py +0 -0
  42. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/cli_controls.py +216 -67
  43. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/format.py +5 -2
  44. relationalai-0.13.2/src/relationalai/clients/exec_txn_poller.py +0 -91
  45. relationalai-0.13.2/src/relationalai/semantics/lqp/builtins.py +0 -16
  46. relationalai-0.13.2/src/relationalai/semantics/lqp/passes.py +0 -680
  47. {relationalai-0.13.2 → relationalai-0.13.3}/.gitignore +0 -0
  48. {relationalai-0.13.2 → relationalai-0.13.3}/LICENSE +0 -0
  49. {relationalai-0.13.2 → relationalai-0.13.3}/docs/pypi/README.md +0 -0
  50. {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/.gitignore +0 -0
  51. {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  52. {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  53. {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  54. {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/index.html +0 -0
  55. {relationalai-0.13.2 → relationalai-0.13.3}/src/__init__.py +0 -0
  56. {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/__init__.py +0 -0
  57. {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/events/__init__.py +0 -0
  58. {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/procedures/__init__.py +0 -0
  59. {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/procedures/procedure.py +0 -0
  60. {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/rel/__init__.py +0 -0
  61. {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/tables/__init__.py +0 -0
  62. {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/tasks/__init__.py +0 -0
  63. {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/tasks/task.py +0 -0
  64. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/__init__.py +0 -0
  65. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/analysis/__init__.py +0 -0
  66. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/analysis/mechanistic.py +0 -0
  67. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/analysis/whynot.py +0 -0
  68. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/__init__.py +0 -0
  69. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/jwt_generator.py +0 -0
  70. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/oauth_callback_server.py +0 -0
  71. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/token_handler.py +0 -0
  72. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/util.py +0 -0
  73. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/__init__.py +0 -0
  74. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/config.py +0 -0
  75. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/direct_access_client.py +0 -0
  76. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/hash_util.py +0 -0
  77. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/local.py +0 -0
  78. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/profile_polling.py +0 -0
  79. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/__init__.py +0 -0
  80. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/azure/azure.py +0 -0
  81. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/__init__.py +0 -0
  82. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/cache_store.py +0 -0
  83. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/cli_resources.py +0 -0
  84. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/engine_service.py +0 -0
  85. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -0
  86. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/error_handlers.py +0 -0
  87. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/export_procedure.py.jinja +0 -0
  88. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/resources_factory.py +0 -0
  89. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/use_index_poller.py +0 -0
  90. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/use_index_resources.py +0 -0
  91. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/util.py +0 -0
  92. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/result_helpers.py +0 -0
  93. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/types.py +0 -0
  94. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/util.py +0 -0
  95. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/compiler.py +0 -0
  96. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/debugging.py +0 -0
  97. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/dependencies.py +0 -0
  98. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/docutils.py +0 -0
  99. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/dsl.py +0 -0
  100. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/__init__.py +0 -0
  101. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/__init__.py +0 -0
  102. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  103. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  104. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  105. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  106. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  107. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  108. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  109. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/devtools/__init__.py +0 -0
  110. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  111. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  112. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/__init__.py +0 -0
  113. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  114. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  115. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  116. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  117. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  118. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  119. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  120. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  121. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  122. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  123. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  124. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  125. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  126. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  127. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  128. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  129. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  130. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  131. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  132. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  133. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  134. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/constants.py +0 -0
  135. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  136. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  137. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  138. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  139. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  140. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  141. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  142. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  143. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  144. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/context.py +0 -0
  145. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  146. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  147. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  148. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  149. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  150. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  151. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  152. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  153. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  154. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  155. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  156. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  157. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  158. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  159. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  160. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  161. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  162. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  163. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  164. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  165. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  166. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  167. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  168. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  169. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  170. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  171. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  172. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  173. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  174. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  175. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  176. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  177. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  178. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  179. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  180. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  181. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  182. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  183. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  184. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  185. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  186. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  187. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  188. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  189. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  190. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  191. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  192. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  193. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  194. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  195. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  196. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  197. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  198. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  199. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  200. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  201. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  202. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  203. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/relations.py +0 -0
  204. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  205. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  206. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  207. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  208. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  209. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  210. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  211. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  212. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialization.py +0 -0
  213. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  214. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  215. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  216. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  217. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  218. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  219. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  220. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  221. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  222. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  223. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  224. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  225. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  226. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/types/values.py +0 -0
  227. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/utils.py +0 -0
  228. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/graphs/__init__.py +0 -0
  229. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/__init__.py +0 -0
  230. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  231. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  232. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  233. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  234. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  235. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  236. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  237. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  238. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  239. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  240. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  241. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  242. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  243. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  244. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  245. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  246. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  247. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  248. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  249. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  250. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  251. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  252. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  253. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/rel/__init__.py +0 -0
  254. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  255. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  256. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  257. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/solvers/__init__.py +0 -0
  258. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/sql/__init__.py +0 -0
  259. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  260. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  261. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/tests/__init__.py +0 -0
  262. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  263. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  264. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  265. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/__init__.py +0 -0
  266. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/base.py +0 -0
  267. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/ci.py +0 -0
  268. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/colab.py +0 -0
  269. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/generic.py +0 -0
  270. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/hex.py +0 -0
  271. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/ipython.py +0 -0
  272. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/jupyter.py +0 -0
  273. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/snowbook.py +0 -0
  274. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/terminal.py +0 -0
  275. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/errors.py +0 -0
  276. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/SF.py +0 -0
  277. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/__init__.py +0 -0
  278. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/graphs.py +0 -0
  279. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/inspect.py +0 -0
  280. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  281. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/api.py +0 -0
  282. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  283. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  284. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  285. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  286. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  287. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  288. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  289. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/options.py +0 -0
  290. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  291. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  292. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  293. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  294. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/README.md +0 -0
  295. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/__init__.py +0 -0
  296. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/api.py +0 -0
  297. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
  298. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
  299. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/code_organization.md +0 -0
  300. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
  301. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
  302. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
  303. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
  304. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
  305. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
  306. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
  307. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
  308. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
  309. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
  310. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
  311. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
  312. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
  313. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
  314. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
  315. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
  316. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/graph.py +0 -0
  317. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
  318. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
  319. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  320. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  321. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
  322. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  323. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  324. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
  325. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
  326. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
  327. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/product_graph.py +0 -0
  328. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
  329. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
  330. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
  331. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
  332. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
  333. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
  334. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
  335. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
  336. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
  337. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
  338. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
  339. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
  340. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  341. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  342. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  343. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  344. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
  345. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
  346. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
  347. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  348. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  349. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  350. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  351. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
  352. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
  353. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  354. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
  355. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
  356. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
  357. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
  358. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/solvers.py +0 -0
  359. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/loaders/__init__.py +0 -0
  360. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/loaders/csv.py +0 -0
  361. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/loaders/loader.py +0 -0
  362. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/loaders/types.py +0 -0
  363. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/metagen.py +0 -0
  364. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/metamodel.py +0 -0
  365. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/rel.py +0 -0
  366. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/rel_emitter.py +0 -0
  367. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/rel_utils.py +0 -0
  368. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/__init__.py +0 -0
  369. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  370. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/devtools/__init__.py +0 -0
  371. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  372. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  373. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  374. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/internal/__init__.py +0 -0
  375. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/internal/annotations.py +0 -0
  376. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/internal/internal.py +0 -0
  377. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/internal/snowflake.py +0 -0
  378. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/README.md +0 -0
  379. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/__init__.py +0 -0
  380. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/compiler.py +0 -0
  381. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/constructors.py +0 -0
  382. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  383. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  384. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/primitives.py +0 -0
  385. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  386. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -0
  387. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  388. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
  389. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
  390. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
  391. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -0
  392. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  393. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/types.py +0 -0
  394. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  395. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  396. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  397. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  398. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  399. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  400. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/types.py +0 -0
  401. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/util.py +0 -0
  402. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  403. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
  404. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  405. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  406. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
  407. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  408. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  409. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  410. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  411. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/__init__.py +0 -0
  412. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/builtins.py +0 -0
  413. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/rel.py +0 -0
  414. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  415. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  416. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/__init__.py +0 -0
  417. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/compiler.py +0 -0
  418. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  419. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  420. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  421. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
  422. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  423. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  424. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  425. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  426. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  427. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/sql.py +0 -0
  428. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/__init__.py +0 -0
  429. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/constraints.py +0 -0
  430. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/datetime.py +0 -0
  431. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/decimals.py +0 -0
  432. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/floats.py +0 -0
  433. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/integers.py +0 -0
  434. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/math.py +0 -0
  435. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/pragmas.py +0 -0
  436. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/re.py +0 -0
  437. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/std.py +0 -0
  438. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/strings.py +0 -0
  439. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/__init__.py +0 -0
  440. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/logging.py +0 -0
  441. {relationalai-0.13.2/src/relationalai/tools → relationalai-0.13.3/src/relationalai/semantics/tests/lqp}/__init__.py +0 -0
  442. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  443. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  444. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/utils.py +0 -0
  445. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/__init__.py +0 -0
  446. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/aggregates.py +0 -0
  447. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/dates.py +0 -0
  448. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/graphs.py +0 -0
  449. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/inspect.py +0 -0
  450. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/math.py +0 -0
  451. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/re.py +0 -0
  452. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/strings.py +0 -0
  453. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  454. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/cli.py +0 -0
  455. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/cli_helpers.py +0 -0
  456. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/constants.py +0 -0
  457. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/debugger.py +0 -0
  458. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/debugger_client.py +0 -0
  459. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/debugger_server.py +0 -0
  460. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/dev.py +0 -0
  461. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/notes +0 -0
  462. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/qb_debugger.py +0 -0
  463. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/query_utils.py +0 -0
  464. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/snapshot_viewer.py +0 -0
  465. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/__init__.py +0 -0
  466. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/clean_up_databases.py +0 -0
  467. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/constants.py +0 -0
  468. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/graph.py +0 -0
  469. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/list_databases.py +0 -0
  470. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/otel_configuration.py +0 -0
  471. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/otel_handler.py +0 -0
  472. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/snowflake_handler.py +0 -0
  473. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/span_format_test.py +0 -0
  474. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/span_tracker.py +0 -0
  475. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/spans_file_handler.py +0 -0
  476. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/timeout.py +0 -0
  477. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/tracing_handler.py +0 -0
  478. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai_test_util/__init__.py +0 -0
  479. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai_test_util/fixtures.py +0 -0
  480. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai_test_util/snapshot.py +0 -0
  481. {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai_test_util/traceback.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.13.2
3
+ Version: 0.13.3
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.13.2'
3
+ version = '0.13.3'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -614,7 +614,6 @@ class Client():
614
614
  self._timed_query(
615
615
  "update_registry",
616
616
  dependencies.generate_update_registry(),
617
- readonly=False,
618
617
  abort_on_error=False,
619
618
  )
620
619
 
@@ -623,7 +622,6 @@ class Client():
623
622
  self._timed_query(
624
623
  "update_packages",
625
624
  dependencies.generate_update_packages(),
626
- readonly=False,
627
625
  abort_on_error=False,
628
626
  )
629
627
  else:
@@ -646,10 +644,11 @@ class Client():
646
644
  finally:
647
645
  self._database = database_name
648
646
 
649
- def _timed_query(self, span_name:str, code: str, readonly=True, abort_on_error=True):
647
+ def _timed_query(self, span_name:str, code: str, abort_on_error=True):
650
648
  with debugging.span(span_name, model=self._database) as end_span:
651
649
  start = time.perf_counter()
652
- res, raw = self._query(code, None, end_span, readonly=readonly, abort_on_error=abort_on_error)
650
+ # NOTE hardcoding to readonly=False, read-only Rel transactions are deprecated.
651
+ res, raw = self._query(code, None, end_span, readonly=False, abort_on_error=abort_on_error)
653
652
  debugging.time(span_name, time.perf_counter() - start, code=code)
654
653
  return res, raw
655
654
 
@@ -0,0 +1,122 @@
1
+ from __future__ import annotations
2
+
3
+ import time
4
+ from typing import Dict, Optional, TYPE_CHECKING
5
+
6
+ from relationalai import debugging
7
+ from relationalai.clients.util import poll_with_specified_overhead
8
+ from relationalai.tools.cli_controls import create_progress
9
+ from relationalai.util.format import format_duration
10
+
11
+ if TYPE_CHECKING:
12
+ from relationalai.clients.resources.snowflake import Resources
13
+
14
+ # Polling behavior constants
15
+ POLL_OVERHEAD_RATE = 0.1 # Overhead rate for exponential backoff
16
+
17
+ # Text color constants
18
+ GREEN_COLOR = '\033[92m'
19
+ GRAY_COLOR = '\033[90m'
20
+ ENDC = '\033[0m'
21
+
22
+
23
+ class ExecTxnPoller:
24
+ """
25
+ Encapsulates the polling logic for exec_async transaction completion.
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ print_txn_progress: bool,
31
+ resource: "Resources",
32
+ txn_id: Optional[str] = None,
33
+ headers: Optional[Dict] = None,
34
+ txn_start_time: Optional[float] = None,
35
+ ):
36
+ self.print_txn_progress = print_txn_progress
37
+ self.res = resource
38
+ self.txn_id = txn_id
39
+ self.headers = headers or {}
40
+ self.txn_start_time = txn_start_time or time.time()
41
+
42
+ def __enter__(self) -> ExecTxnPoller:
43
+ if not self.print_txn_progress:
44
+ return self
45
+ self.progress = create_progress(
46
+ description=lambda: self.description_with_timing(),
47
+ success_message="", # We'll handle this ourselves
48
+ leading_newline=False,
49
+ trailing_newline=False,
50
+ show_duration_summary=False,
51
+ )
52
+ self.progress.__enter__()
53
+ return self
54
+
55
+ def __exit__(self, exc_type, exc_value, traceback) -> None:
56
+ if not self.print_txn_progress or self.txn_id is None:
57
+ return
58
+ # Update to success message with duration
59
+ total_duration = time.time() - self.txn_start_time
60
+ txn_id = self.txn_id
61
+ self.progress.update_main_status(
62
+ query_complete_message(txn_id, total_duration)
63
+ )
64
+ self.progress.__exit__(exc_type, exc_value, traceback)
65
+ return
66
+
67
+ def poll(self) -> bool:
68
+ """
69
+ Poll for transaction completion with interactive progress display.
70
+
71
+ Returns:
72
+ True if transaction completed successfully, False otherwise
73
+ """
74
+ if not self.txn_id:
75
+ raise ValueError("Transaction ID must be provided for polling.")
76
+ else:
77
+ txn_id = self.txn_id
78
+
79
+ if self.print_txn_progress:
80
+ # Update the main status to include the new txn_id
81
+ self.progress.update_main_status_fn(
82
+ lambda: self.description_with_timing(txn_id),
83
+ )
84
+
85
+ # Don't show duration summary - we handle our own completion message
86
+ def check_status() -> bool:
87
+ """Check if transaction is complete."""
88
+ finished = self.res._check_exec_async_status(txn_id, headers=self.headers)
89
+ return finished
90
+
91
+ with debugging.span("wait", txn_id=self.txn_id):
92
+ poll_with_specified_overhead(check_status, overhead_rate=POLL_OVERHEAD_RATE)
93
+
94
+
95
+ return True
96
+
97
+ def description_with_timing(self, txn_id: str | None = None) -> str:
98
+ elapsed = time.time() - self.txn_start_time
99
+ if txn_id is None:
100
+ return query_progress_header(elapsed)
101
+ else:
102
+ return query_progress_message(txn_id, elapsed)
103
+
104
+ def query_progress_header(duration: float) -> str:
105
+ # Don't print sub-second decimals, because it updates too fast and is distracting.
106
+ duration_str = format_duration(duration, seconds_decimals=False)
107
+ return f"Evaluating Query... {duration_str:>15}\n"
108
+
109
+ def query_progress_message(id: str, duration: float) -> str:
110
+ return (
111
+ query_progress_header(duration) +
112
+ # Print with whitespace to align with the end of the transaction ID
113
+ f"{GRAY_COLOR}ID: {id}{ENDC}"
114
+ )
115
+
116
+ def query_complete_message(id: str, duration: float, status_header: bool = False) -> str:
117
+ return (
118
+ (f"{GREEN_COLOR}✅ " if status_header else "") +
119
+ # Print with whitespace to align with the end of the transaction ID
120
+ f"Query Complete: {format_duration(duration):>21}\n" +
121
+ f"{GRAY_COLOR}ID: {id}{ENDC}"
122
+ )
@@ -13,7 +13,7 @@ from ...config import Config, ConfigStore, ENDPOINT_FILE
13
13
  from ...direct_access_client import DirectAccessClient
14
14
  from ...types import EngineState
15
15
  from ...util import get_pyrel_version, safe_json_loads, ms_to_timestamp
16
- from ....errors import GuardRailsException, ResponseStatusException, QueryTimeoutExceededException
16
+ from ....errors import GuardRailsException, ResponseStatusException, QueryTimeoutExceededException, RAIException
17
17
  from snowflake.snowpark import Session
18
18
 
19
19
  # Import UseIndexResources to enable use_index functionality with direct access
@@ -163,11 +163,12 @@ class DirectAccessResources(UseIndexResources):
163
163
  headers=headers,
164
164
  )
165
165
  response = _send_request()
166
- except requests.exceptions.ConnectionError as e:
166
+ except (requests.exceptions.ConnectionError, RAIException) as e:
167
167
  messages = collect_error_messages(e)
168
- if any("nameresolutionerror" in msg for msg in messages):
169
- # when we can not resolve the service endpoint, we assume it is outdated
170
- # hence, we try to retrieve it again and query again.
168
+ if any("nameresolutionerror" in msg for msg in messages) or \
169
+ any("could not find the service associated with endpoint" in msg for msg in messages):
170
+ # when we can not resolve the service endpoint or the service is not found,
171
+ # we assume the endpoint is outdated, so we retrieve it again and retry.
171
172
  self.direct_access_client.service_endpoint = self._retrieve_service_endpoint(
172
173
  enforce_update=True,
173
174
  )
@@ -15,7 +15,7 @@ import hashlib
15
15
  from dataclasses import dataclass
16
16
 
17
17
  from ....auth.token_handler import TokenHandler
18
- from relationalai.clients.exec_txn_poller import ExecTxnPoller, query_complete_message
18
+ from relationalai.clients.exec_txn_poller import ExecTxnPoller
19
19
  import snowflake.snowpark
20
20
 
21
21
  from ....rel_utils import sanitize_identifier, to_fqn_relation_name
@@ -1788,65 +1788,61 @@ Otherwise, remove it from your '{profile}' configuration profile.
1788
1788
 
1789
1789
  with debugging.span("transaction", **query_attrs_dict) as txn_span:
1790
1790
  txn_start_time = time.time()
1791
- with debugging.span("create_v2", **query_attrs_dict) as create_span:
1792
- # Prepare headers for transaction creation
1793
- request_headers['user-agent'] = get_pyrel_version(self.generation)
1794
- request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
1795
- request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
1796
-
1797
- # Create the transaction
1798
- result = self._create_v2_txn(
1799
- database=database,
1800
- engine=engine,
1801
- raw_code=raw_code,
1802
- inputs=inputs,
1803
- headers=request_headers,
1804
- readonly=readonly,
1805
- nowait_durable=nowait_durable,
1806
- bypass_index=bypass_index,
1807
- language=language,
1808
- query_timeout_mins=query_timeout_mins,
1809
- )
1791
+ print_txn_progress = should_print_txn_progress(self.config)
1810
1792
 
1811
- txn_id = result.txn_id
1812
- state = result.state
1793
+ with ExecTxnPoller(
1794
+ print_txn_progress=print_txn_progress,
1795
+ resource=self, txn_id=None, headers=request_headers,
1796
+ txn_start_time=txn_start_time
1797
+ ) as poller:
1798
+ with debugging.span("create_v2", **query_attrs_dict) as create_span:
1799
+ # Prepare headers for transaction creation
1800
+ request_headers['user-agent'] = get_pyrel_version(self.generation)
1801
+ request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
1802
+ request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
1803
+
1804
+ # Create the transaction
1805
+ result = self._create_v2_txn(
1806
+ database=database,
1807
+ engine=engine,
1808
+ raw_code=raw_code,
1809
+ inputs=inputs,
1810
+ headers=request_headers,
1811
+ readonly=readonly,
1812
+ nowait_durable=nowait_durable,
1813
+ bypass_index=bypass_index,
1814
+ language=language,
1815
+ query_timeout_mins=query_timeout_mins,
1816
+ )
1813
1817
 
1814
- txn_span["txn_id"] = txn_id
1815
- create_span["txn_id"] = txn_id
1816
- debugging.event("transaction_created", txn_span, txn_id=txn_id)
1818
+ txn_id = result.txn_id
1819
+ state = result.state
1817
1820
 
1818
- print_txn_progress = should_print_txn_progress(self.config)
1821
+ txn_span["txn_id"] = txn_id
1822
+ create_span["txn_id"] = txn_id
1823
+ debugging.event("transaction_created", txn_span, txn_id=txn_id)
1819
1824
 
1820
- # fast path: transaction already finished
1821
- if state in ["COMPLETED", "ABORTED"]:
1822
- txn_end_time = time.time()
1823
- if txn_id in self._pending_transactions:
1824
- self._pending_transactions.remove(txn_id)
1825
+ # Set the transaction ID now that we have it, to update the progress text
1826
+ poller.txn_id = txn_id
1825
1827
 
1826
- artifact_info = result.artifact_info
1828
+ # fast path: transaction already finished
1829
+ if state in ["COMPLETED", "ABORTED"]:
1830
+ if txn_id in self._pending_transactions:
1831
+ self._pending_transactions.remove(txn_id)
1827
1832
 
1828
- txn_duration = txn_end_time - txn_start_time
1829
- if print_txn_progress:
1830
- print(
1831
- query_complete_message(txn_id, txn_duration, status_header=True)
1832
- )
1833
+ artifact_info = result.artifact_info
1833
1834
 
1834
- # Slow path: transaction not done yet; start polling
1835
- else:
1836
- self._pending_transactions.append(txn_id)
1837
- # Use the interactive poller for transaction status
1838
- with debugging.span("wait", txn_id=txn_id):
1839
- if print_txn_progress:
1840
- poller = ExecTxnPoller(resource=self, txn_id=txn_id, headers=request_headers, txn_start_time=txn_start_time)
1835
+ # Slow path: transaction not done yet; start polling
1836
+ else:
1837
+ self._pending_transactions.append(txn_id)
1838
+ # Use the interactive poller for transaction status
1839
+ with debugging.span("wait", txn_id=txn_id):
1841
1840
  poller.poll()
1842
- else:
1843
- poll_with_specified_overhead(
1844
- lambda: self._check_exec_async_status(txn_id, headers=request_headers), 0.1
1845
- )
1846
- artifact_info = self._list_exec_async_artifacts(txn_id, headers=request_headers)
1847
1841
 
1848
- with debugging.span("fetch"):
1849
- return self._download_results(artifact_info, txn_id, state)
1842
+ artifact_info = self._list_exec_async_artifacts(txn_id, headers=request_headers)
1843
+
1844
+ with debugging.span("fetch"):
1845
+ return self._download_results(artifact_info, txn_id, state)
1850
1846
 
1851
1847
  def get_user_based_engine_name(self):
1852
1848
  if not self._session:
@@ -0,0 +1,173 @@
1
+ from typing import TypeGuard
2
+ from relationalai.semantics.metamodel import ir, factory, types
3
+ from relationalai.semantics.metamodel.visitor import Rewriter, collect_by_type
4
+ from relationalai.semantics.lqp import ir as lqp
5
+ from relationalai.semantics.lqp.types import meta_type_to_lqp
6
+ from relationalai.semantics.lqp.builtins import (
7
+ has_empty_annotation, has_assign_annotation, has_upsert_annotation,
8
+ has_monoid_annotation, has_monus_annotation, has_script_annotation,
9
+ has_algorithm_annotation, has_while_annotation, global_annotation,
10
+ empty_annotation, assign_annotation, upsert_annotation, monoid_annotation,
11
+ monus_annotation
12
+ )
13
+
14
+ # Complex tests for Loopy constructs in the metamodel
15
+ def is_script(task: ir.Task) -> TypeGuard[ir.Sequence]:
16
+ """ Check if it is a script i.e., a Sequence with @script annotation. """
17
+ if not isinstance(task, ir.Sequence):
18
+ return False
19
+ return has_script_annotation(task)
20
+
21
+ def is_algorithm_logical(task: ir.Task) -> TypeGuard[ir.Logical]:
22
+ """ Check if it is an algorithm logical i.e., a Logical task with all subtasks being
23
+ algorithm scripts. """
24
+ if not isinstance(task, ir.Logical):
25
+ return False
26
+ return all(is_algorithm_script(subtask) for subtask in task.body)
27
+
28
+ def is_algorithm_script(task: ir.Task) -> TypeGuard[ir.Sequence]:
29
+ """ Check if it is an algorithm script i.e., a Sequence with @script and @algorithm annotations. """
30
+ if not isinstance(task, ir.Sequence):
31
+ return False
32
+ return is_script(task) and has_algorithm_annotation(task)
33
+
34
+ def is_while_loop(task: ir.Task) -> TypeGuard[ir.Loop]:
35
+ """ Check if input is is a while loop i.e., a Loop with @while annotation. """
36
+ if not isinstance(task, ir.Loop):
37
+ return False
38
+ return has_while_annotation(task)
39
+
40
+ def is_while_script(task: ir.Task) -> TypeGuard[ir.Sequence]:
41
+ """ Check if input is a while script i.e., a Sequence with @script and @while annotations. """
42
+ if not isinstance(task, ir.Sequence):
43
+ return False
44
+ return is_script(task) and has_while_annotation(task)
45
+
46
+ # Tools for annotating Loopy constructs
47
+ class LoopyAnnoAdder(Rewriter):
48
+ """ Rewrites a node by adding the given annotation to all Update nodes. """
49
+ def __init__(self, anno: ir.Annotation):
50
+ self.anno = anno
51
+ super().__init__()
52
+
53
+ def handle_update(self, node: ir.Update, parent: ir.Node) -> ir.Update:
54
+ new_annos = list(node.annotations) + [self.anno]
55
+ return factory.update(node.relation, node.args, node.effect, new_annos, node.engine)
56
+
57
+ def mk_global(i: ir.Node):
58
+ return LoopyAnnoAdder(global_annotation()).walk(i)
59
+
60
+ def mk_empty(i: ir.Node):
61
+ return LoopyAnnoAdder(empty_annotation()).walk(i)
62
+
63
+ def mk_assign(i: ir.Node):
64
+ return LoopyAnnoAdder(assign_annotation()).walk(i)
65
+
66
+ def mk_upsert(i: ir.Node, arity: int):
67
+ return LoopyAnnoAdder(upsert_annotation(arity)).walk(i)
68
+
69
+ def mk_monoid(i: ir.Node, monoid_type: ir.ScalarType, monoid_op: str, arity: int):
70
+ return LoopyAnnoAdder(monoid_annotation(monoid_type, monoid_op, arity)).walk(i)
71
+
72
+ def mk_monus(i: ir.Node, monoid_type: ir.ScalarType, monoid_op: str, arity: int):
73
+ return LoopyAnnoAdder(monus_annotation(monoid_type, monoid_op, arity)).walk(i)
74
+
75
+ def construct_monoid(i: ir.Annotation):
76
+ base_type = None
77
+ op = None
78
+ for arg in i.args:
79
+ if isinstance(arg, ir.ScalarType):
80
+ base_type = meta_type_to_lqp(arg)
81
+ elif isinstance(arg, ir.Literal) and arg.type == types.String:
82
+ op = arg.value
83
+ assert isinstance(base_type, lqp.Type) and isinstance(op, str), "Failed to get monoid"
84
+ if op.lower() == "or":
85
+ return lqp.OrMonoid(meta=None)
86
+ elif op.lower() == "sum":
87
+ return lqp.SumMonoid(type=base_type, meta=None)
88
+ elif op.lower() == "min":
89
+ return lqp.MinMonoid(type=base_type, meta=None)
90
+ elif op.lower() == "max":
91
+ return lqp.MaxMonoid(type=base_type, meta=None)
92
+ else:
93
+ assert False, "Failed to get monoid"
94
+
95
+ # Tools for analyzing Loopy constructs
96
+ def is_logical_instruction(node: ir.Node) -> TypeGuard[ir.Logical]:
97
+ if not isinstance(node, ir.Logical):
98
+ return False
99
+ return any(collect_by_type(ir.Update, node)) and not any(collect_by_type(ir.Sequence, node))
100
+
101
+ def get_instruction_body_rels(node: ir.Logical) -> set[ir.Relation]:
102
+ assert is_logical_instruction(node)
103
+ body: set[ir.Relation] = set()
104
+ for update in collect_by_type(ir.Lookup, node):
105
+ body.add(update.relation)
106
+ return body
107
+
108
+ def get_instruction_head_rels(node: ir.Logical) -> set[ir.Relation]:
109
+ assert is_logical_instruction(node)
110
+ heads: set[ir.Relation] = set()
111
+ for update in collect_by_type(ir.Update, node):
112
+ heads.add(update.relation)
113
+ return heads
114
+
115
+ # base Loopy instruction: @empty, @assign, @upsert, @monoid, @monus
116
+ def is_instruction(update: ir.Task) -> TypeGuard[ir.Logical]:
117
+ if not is_logical_instruction(update):
118
+ return False
119
+ for u in collect_by_type(ir.Update, update):
120
+ if (has_empty_annotation(u) or
121
+ has_assign_annotation(u) or
122
+ has_upsert_annotation(u) or
123
+ has_monoid_annotation(u) or
124
+ has_monus_annotation(u)):
125
+ return True
126
+ return False
127
+
128
+ # update Loopy instruction @upsert, @monoid, @monus
129
+ def is_update_instruction(task: ir.Task) -> TypeGuard[ir.Logical]:
130
+ if not is_logical_instruction(task):
131
+ return False
132
+ for u in collect_by_type(ir.Update, task):
133
+ if (has_upsert_annotation(u) or
134
+ has_monoid_annotation(u) or
135
+ has_monus_annotation(u)):
136
+ return True
137
+ return False
138
+
139
+ def is_empty_instruction(node: ir.Node) -> TypeGuard[ir.Logical]:
140
+ """ Check if input is an empty Loopy instruction `empty rel = ∅`"""
141
+ if not is_logical_instruction(node):
142
+ return False
143
+ updates = collect_by_type(ir.Update, node)
144
+ if not any(has_empty_annotation(update) for update in updates):
145
+ return False
146
+
147
+ # At this point, we have the prerequisites for an empty instruction. We check it is
148
+ # well-formed:
149
+ # 1. It has only a single @empty Update operation
150
+ # 2. Has no other operations
151
+ assert len(updates) == 1, "[Loopy] Empty instruction must have single Update operation"
152
+ assert len(node.body) == 1, "[Loopy] Empty instruction must have only a single Update operation"
153
+
154
+ return True
155
+
156
+ # Splits a Loopy instruction into its head updates, body lookups, and other body tasks
157
+ def split_instruction(update_logical: ir.Logical) -> tuple[ir.Update,list[ir.Lookup],list[ir.Task]]:
158
+ assert is_instruction(update_logical)
159
+ lookups = []
160
+ update = None
161
+ others = []
162
+ for task in update_logical.body:
163
+ if isinstance(task, ir.Lookup):
164
+ lookups.append(task)
165
+ elif isinstance(task, ir.Update):
166
+ if update is not None:
167
+ raise AssertionError("[Loopy] Update instruction must have exactly one Update operation")
168
+ update = task
169
+ else:
170
+ others.append(task)
171
+ assert update is not None, "[Loopy] Update instruction must have exactly one Update operation"
172
+
173
+ return update, lookups, others