relationalai 0.13.0__tar.gz → 0.13.1__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 (468) hide show
  1. {relationalai-0.13.0 → relationalai-0.13.1}/PKG-INFO +2 -2
  2. {relationalai-0.13.0 → relationalai-0.13.1}/pyproject.toml +2 -2
  3. relationalai-0.13.1/src/relationalai/clients/exec_txn_poller.py +91 -0
  4. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/__init__.py +2 -2
  5. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/direct_access_resources.py +62 -79
  6. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/snowflake.py +138 -31
  7. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/use_index_poller.py +8 -0
  8. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/errors.py +18 -0
  9. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +6 -0
  10. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +335 -84
  11. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai_test_util/fixtures.py +5 -1
  12. {relationalai-0.13.0 → relationalai-0.13.1}/.gitignore +0 -0
  13. {relationalai-0.13.0 → relationalai-0.13.1}/LICENSE +0 -0
  14. {relationalai-0.13.0 → relationalai-0.13.1}/docs/pypi/README.md +0 -0
  15. {relationalai-0.13.0 → relationalai-0.13.1}/frontend/debugger/dist/.gitignore +0 -0
  16. {relationalai-0.13.0 → relationalai-0.13.1}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  17. {relationalai-0.13.0 → relationalai-0.13.1}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  18. {relationalai-0.13.0 → relationalai-0.13.1}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  19. {relationalai-0.13.0 → relationalai-0.13.1}/frontend/debugger/dist/index.html +0 -0
  20. {relationalai-0.13.0 → relationalai-0.13.1}/src/__init__.py +0 -0
  21. {relationalai-0.13.0 → relationalai-0.13.1}/src/raitoolkit/__init__.py +0 -0
  22. {relationalai-0.13.0 → relationalai-0.13.1}/src/raitoolkit/events/__init__.py +0 -0
  23. {relationalai-0.13.0 → relationalai-0.13.1}/src/raitoolkit/procedures/__init__.py +0 -0
  24. {relationalai-0.13.0 → relationalai-0.13.1}/src/raitoolkit/procedures/procedure.py +0 -0
  25. {relationalai-0.13.0 → relationalai-0.13.1}/src/raitoolkit/rel/__init__.py +0 -0
  26. {relationalai-0.13.0 → relationalai-0.13.1}/src/raitoolkit/tables/__init__.py +0 -0
  27. {relationalai-0.13.0 → relationalai-0.13.1}/src/raitoolkit/tasks/__init__.py +0 -0
  28. {relationalai-0.13.0 → relationalai-0.13.1}/src/raitoolkit/tasks/task.py +0 -0
  29. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/__init__.py +0 -0
  30. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/analysis/__init__.py +0 -0
  31. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/analysis/mechanistic.py +0 -0
  32. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/analysis/whynot.py +0 -0
  33. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/auth/__init__.py +0 -0
  34. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/auth/jwt_generator.py +0 -0
  35. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/auth/oauth_callback_server.py +0 -0
  36. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/auth/token_handler.py +0 -0
  37. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/auth/util.py +0 -0
  38. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/__init__.py +0 -0
  39. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/client.py +0 -0
  40. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/config.py +0 -0
  41. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/direct_access_client.py +0 -0
  42. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/hash_util.py +0 -0
  43. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/local.py +0 -0
  44. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/profile_polling.py +0 -0
  45. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/__init__.py +0 -0
  46. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/azure/azure.py +0 -0
  47. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/cache_store.py +0 -0
  48. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/cli_resources.py +0 -0
  49. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -0
  50. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/error_handlers.py +0 -0
  51. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/export_procedure.py.jinja +0 -0
  52. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/resources_factory.py +0 -0
  53. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/use_index_resources.py +0 -0
  54. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/resources/snowflake/util.py +0 -0
  55. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/result_helpers.py +0 -0
  56. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/types.py +0 -0
  57. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/clients/util.py +0 -0
  58. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/compiler.py +0 -0
  59. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/debugging.py +0 -0
  60. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/dependencies.py +0 -0
  61. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/docutils.py +0 -0
  62. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/dsl.py +0 -0
  63. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/__init__.py +0 -0
  64. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/builder/__init__.py +0 -0
  65. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  66. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  67. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  68. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  69. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  70. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  71. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  72. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/devtools/__init__.py +0 -0
  73. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  74. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  75. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/__init__.py +0 -0
  76. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  77. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  78. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  79. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  80. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  81. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  82. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  83. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  84. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  85. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  86. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  87. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  88. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  89. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  90. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  91. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  92. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  93. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  94. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  95. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  96. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  97. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/constants.py +0 -0
  98. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  99. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  100. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  101. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  102. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  103. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  104. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  105. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  106. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  107. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/context.py +0 -0
  108. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  109. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  110. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  111. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  112. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  113. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  114. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  115. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  116. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  117. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  118. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  119. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  120. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  121. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  122. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  123. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  124. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  125. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  126. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  127. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  128. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  129. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  130. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  131. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  132. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  133. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  134. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  135. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  136. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  137. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  138. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  139. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  140. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  141. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  142. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  143. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  144. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  145. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  146. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  147. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  148. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  149. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  150. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  151. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  152. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  153. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  154. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  155. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  156. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  157. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  158. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  159. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  160. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  161. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  162. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  163. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  164. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  165. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  166. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/relations.py +0 -0
  167. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  168. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  169. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  170. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  171. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  172. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  173. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  174. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  175. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/serialization.py +0 -0
  176. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  177. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  178. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  179. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  180. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  181. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  182. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  183. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  184. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  185. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  186. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  187. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  188. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  189. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/types/values.py +0 -0
  190. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/dsl/utils.py +0 -0
  191. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/graphs/__init__.py +0 -0
  192. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/__init__.py +0 -0
  193. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  194. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  195. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  196. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  197. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  198. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  199. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  200. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  201. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  202. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  203. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  204. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  205. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  206. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  207. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  208. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  209. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  210. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  211. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  212. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  213. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  214. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  215. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  216. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/rel/__init__.py +0 -0
  217. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  218. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  219. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  220. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/solvers/__init__.py +0 -0
  221. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/sql/__init__.py +0 -0
  222. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  223. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  224. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/tests/__init__.py +0 -0
  225. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  226. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  227. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  228. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/__init__.py +0 -0
  229. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/base.py +0 -0
  230. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/ci.py +0 -0
  231. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/colab.py +0 -0
  232. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/generic.py +0 -0
  233. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/hex.py +0 -0
  234. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/ipython.py +0 -0
  235. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/jupyter.py +0 -0
  236. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/snowbook.py +0 -0
  237. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/environments/terminal.py +0 -0
  238. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/SF.py +0 -0
  239. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/__init__.py +0 -0
  240. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/graphs.py +0 -0
  241. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/inspect.py +0 -0
  242. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  243. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/api.py +0 -0
  244. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  245. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  246. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  247. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  248. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  249. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  250. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  251. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/options.py +0 -0
  252. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  253. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  254. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  255. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  256. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/README.md +0 -0
  257. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/__init__.py +0 -0
  258. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/api.py +0 -0
  259. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
  260. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
  261. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/code_organization.md +0 -0
  262. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
  263. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
  264. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
  265. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
  266. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
  267. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
  268. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
  269. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
  270. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
  271. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
  272. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
  273. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
  274. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
  275. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
  276. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
  277. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
  278. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/graph.py +0 -0
  279. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
  280. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
  281. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  282. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  283. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
  284. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  285. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  286. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
  287. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
  288. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
  289. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/product_graph.py +0 -0
  290. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
  291. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
  292. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
  293. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
  294. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
  295. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
  296. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
  297. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
  298. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
  299. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
  300. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
  301. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
  302. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  303. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  304. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  305. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  306. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
  307. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
  308. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
  309. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  310. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  311. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  312. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  313. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
  314. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
  315. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  316. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
  317. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
  318. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
  319. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
  320. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/experimental/solvers.py +0 -0
  321. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/loaders/__init__.py +0 -0
  322. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/loaders/csv.py +0 -0
  323. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/loaders/loader.py +0 -0
  324. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/loaders/types.py +0 -0
  325. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/metagen.py +0 -0
  326. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/metamodel.py +0 -0
  327. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/rel.py +0 -0
  328. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/rel_emitter.py +0 -0
  329. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/rel_utils.py +0 -0
  330. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/__init__.py +0 -0
  331. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  332. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/devtools/__init__.py +0 -0
  333. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  334. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  335. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  336. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/internal/__init__.py +0 -0
  337. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/internal/annotations.py +0 -0
  338. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/internal/internal.py +0 -0
  339. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/internal/snowflake.py +0 -0
  340. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/README.md +0 -0
  341. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/__init__.py +0 -0
  342. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/builtins.py +0 -0
  343. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/compiler.py +0 -0
  344. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/constructors.py +0 -0
  345. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/executor.py +0 -0
  346. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  347. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/ir.py +0 -0
  348. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/model2lqp.py +0 -0
  349. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/passes.py +0 -0
  350. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  351. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/primitives.py +0 -0
  352. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  353. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
  354. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -0
  355. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  356. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
  357. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
  358. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -0
  359. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  360. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  361. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/types.py +0 -0
  362. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/utils.py +0 -0
  363. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/lqp/validators.py +0 -0
  364. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  365. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/builtins.py +0 -0
  366. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  367. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  368. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  369. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/executor.py +0 -0
  370. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/factory.py +0 -0
  371. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  372. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/ir.py +0 -0
  373. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  374. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  375. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  376. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  377. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
  378. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
  379. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  380. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  381. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  382. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/types.py +0 -0
  383. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/util.py +0 -0
  384. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  385. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  386. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
  387. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  388. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  389. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
  390. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  391. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  392. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  393. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  394. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  395. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/rel/__init__.py +0 -0
  396. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/rel/builtins.py +0 -0
  397. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/rel/compiler.py +0 -0
  398. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/rel/executor.py +0 -0
  399. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/rel/rel.py +0 -0
  400. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  401. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  402. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/__init__.py +0 -0
  403. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/compiler.py +0 -0
  404. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  405. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  406. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  407. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
  408. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  409. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  410. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  411. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  412. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  413. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/sql/sql.py +0 -0
  414. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/__init__.py +0 -0
  415. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/constraints.py +0 -0
  416. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/datetime.py +0 -0
  417. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/decimals.py +0 -0
  418. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/floats.py +0 -0
  419. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/integers.py +0 -0
  420. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/math.py +0 -0
  421. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/pragmas.py +0 -0
  422. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/re.py +0 -0
  423. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/std.py +0 -0
  424. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/std/strings.py +0 -0
  425. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/tests/__init__.py +0 -0
  426. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/tests/logging.py +0 -0
  427. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  428. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  429. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/semantics/tests/utils.py +0 -0
  430. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/std/__init__.py +0 -0
  431. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/std/aggregates.py +0 -0
  432. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/std/dates.py +0 -0
  433. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/std/graphs.py +0 -0
  434. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/std/inspect.py +0 -0
  435. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/std/math.py +0 -0
  436. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/std/re.py +0 -0
  437. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/std/strings.py +0 -0
  438. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/__init__.py +0 -0
  439. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  440. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/cli.py +0 -0
  441. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/cli_controls.py +0 -0
  442. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/cli_helpers.py +0 -0
  443. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/constants.py +0 -0
  444. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/debugger.py +0 -0
  445. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/debugger_client.py +0 -0
  446. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/debugger_server.py +0 -0
  447. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/dev.py +0 -0
  448. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/notes +0 -0
  449. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/qb_debugger.py +0 -0
  450. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/query_utils.py +0 -0
  451. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/tools/snapshot_viewer.py +0 -0
  452. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/__init__.py +0 -0
  453. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/clean_up_databases.py +0 -0
  454. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/constants.py +0 -0
  455. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/format.py +0 -0
  456. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/graph.py +0 -0
  457. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/list_databases.py +0 -0
  458. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/otel_configuration.py +0 -0
  459. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/otel_handler.py +0 -0
  460. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/snowflake_handler.py +0 -0
  461. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/span_format_test.py +0 -0
  462. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/span_tracker.py +0 -0
  463. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/spans_file_handler.py +0 -0
  464. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/timeout.py +0 -0
  465. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai/util/tracing_handler.py +0 -0
  466. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai_test_util/__init__.py +0 -0
  467. {relationalai-0.13.0 → relationalai-0.13.1}/src/relationalai_test_util/snapshot.py +0 -0
  468. {relationalai-0.13.0 → relationalai-0.13.1}/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.0
3
+ Version: 0.13.1
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
@@ -11,7 +11,7 @@ Requires-Dist: colorama
11
11
  Requires-Dist: cryptography
12
12
  Requires-Dist: gravis
13
13
  Requires-Dist: inquirerpy
14
- Requires-Dist: lqp==0.1.19
14
+ Requires-Dist: lqp==0.2.1
15
15
  Requires-Dist: nicegui==2.16.1
16
16
  Requires-Dist: numpy<2
17
17
  Requires-Dist: opentelemetry-api
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = 'relationalai'
3
- version = '0.13.0'
3
+ version = '0.13.1'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -8,7 +8,7 @@ authors = [
8
8
  ]
9
9
  requires-python = ">= 3.10"
10
10
  dependencies = [
11
- "lqp==0.1.19",
11
+ "lqp==0.2.1",
12
12
  "snowflake-connector-python[secure-local-storage]",
13
13
  "snowflake-snowpark-python>=1.38.0",
14
14
  "typing-extensions",
@@ -0,0 +1,91 @@
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
+ resource: "Resources",
31
+ txn_id: str,
32
+ headers: Optional[Dict] = None,
33
+ txn_start_time: Optional[float] = None,
34
+ ):
35
+ self.res = resource
36
+ self.txn_id = txn_id
37
+ self.headers = headers or {}
38
+ self.txn_start_time = txn_start_time or time.time()
39
+
40
+ def poll(self) -> bool:
41
+ """
42
+ Poll for transaction completion with interactive progress display.
43
+
44
+ Returns:
45
+ True if transaction completed successfully, False otherwise
46
+ """
47
+
48
+ # Don't show duration summary - we handle our own completion message
49
+ with create_progress(
50
+ description="Evaluating Query...",
51
+ success_message="", # We'll handle this ourselves
52
+ leading_newline=False,
53
+ trailing_newline=False,
54
+ show_duration_summary=False,
55
+ ) as progress:
56
+ def check_status() -> bool:
57
+ """Check if transaction is complete."""
58
+ elapsed = time.time() - self.txn_start_time
59
+ # Update the main status with elapsed time
60
+ progress.update_main_status(
61
+ query_progress_message(self.txn_id, elapsed)
62
+ )
63
+ return self.res._check_exec_async_status(self.txn_id, headers=self.headers)
64
+
65
+ with debugging.span("wait", txn_id=self.txn_id):
66
+ poll_with_specified_overhead(check_status, overhead_rate=POLL_OVERHEAD_RATE)
67
+
68
+ # Calculate final duration
69
+ total_duration = time.time() - self.txn_start_time
70
+
71
+ # Update to success message with duration
72
+ progress.update_main_status(
73
+ query_complete_message(self.txn_id, total_duration)
74
+ )
75
+
76
+ return True
77
+
78
+ def query_progress_message(id: str, duration: float) -> str:
79
+ return (
80
+ # Print with whitespace to align with the end of the transaction ID
81
+ f"Evaluating Query... {format_duration(duration):>18}\n" +
82
+ f"{GRAY_COLOR}Query: {id}{ENDC}"
83
+ )
84
+
85
+ def query_complete_message(id: str, duration: float, status_header: bool = False) -> str:
86
+ return (
87
+ (f"{GREEN_COLOR}✅ " if status_header else "") +
88
+ # Print with whitespace to align with the end of the transaction ID
89
+ f"Query Complete: {format_duration(duration):>24}\n" +
90
+ f"{GRAY_COLOR}Query: {id}{ENDC}"
91
+ )
@@ -2,7 +2,7 @@
2
2
  Snowflake resources module.
3
3
  """
4
4
  # Import order matters - Resources must be imported first since other classes depend on it
5
- from .snowflake import Resources, Provider, Graph, SnowflakeClient, APP_NAME, PYREL_ROOT_DB, ExecContext, INTERNAL_ENGINE_SIZES, ENGINE_SIZES_AWS, ENGINE_SIZES_AZURE, PrimaryKey
5
+ from .snowflake import Resources, Provider, Graph, SnowflakeClient, APP_NAME, PYREL_ROOT_DB, ExecContext, INTERNAL_ENGINE_SIZES, ENGINE_SIZES_AWS, ENGINE_SIZES_AZURE, PrimaryKey, PRINT_TXN_PROGRESS_FLAG
6
6
 
7
7
  # These imports depend on Resources, so they come after
8
8
  from .cli_resources import CLIResources
@@ -14,7 +14,7 @@ __all__ = [
14
14
  'Resources', 'DirectAccessResources', 'Provider', 'Graph', 'SnowflakeClient',
15
15
  'APP_NAME', 'PYREL_ROOT_DB', 'CLIResources', 'UseIndexResources', 'ExecContext',
16
16
  'INTERNAL_ENGINE_SIZES', 'ENGINE_SIZES_AWS', 'ENGINE_SIZES_AZURE', 'PrimaryKey',
17
- 'create_resources_instance',
17
+ 'PRINT_TXN_PROGRESS_FLAG', 'create_resources_instance',
18
18
  ]
19
19
 
20
20
 
@@ -12,12 +12,13 @@ from ....environments import runtime_env, SnowbookEnvironment
12
12
  from ...config import Config, ConfigStore, ENDPOINT_FILE
13
13
  from ...direct_access_client import DirectAccessClient
14
14
  from ...types import EngineState
15
- from ...util import get_pyrel_version, poll_with_specified_overhead, safe_json_loads, ms_to_timestamp
16
- from ....errors import ResponseStatusException, QueryTimeoutExceededException
15
+ from ...util import get_pyrel_version, safe_json_loads, ms_to_timestamp
16
+ from ....errors import GuardRailsException, ResponseStatusException, QueryTimeoutExceededException
17
17
  from snowflake.snowpark import Session
18
18
 
19
19
  # Import UseIndexResources to enable use_index functionality with direct access
20
20
  from .use_index_resources import UseIndexResources
21
+ from .snowflake import TxnCreationResult
21
22
 
22
23
  # Import helper functions from util
23
24
  from .util import is_engine_issue as _is_engine_issue, is_database_issue as _is_database_issue, collect_error_messages
@@ -27,6 +28,7 @@ from typing import Iterable
27
28
 
28
29
  # Constants
29
30
  TXN_ABORT_REASON_TIMEOUT = "transaction timeout"
31
+ TXN_ABORT_REASON_GUARD_RAILS = "guard rail violation"
30
32
 
31
33
 
32
34
  class DirectAccessResources(UseIndexResources):
@@ -217,83 +219,59 @@ class DirectAccessResources(UseIndexResources):
217
219
 
218
220
  return response
219
221
 
220
- def _exec_async_v2(
222
+ def _create_v2_txn(
221
223
  self,
222
224
  database: str,
223
- engine: Union[str, None],
225
+ engine: str | None,
224
226
  raw_code: str,
225
- inputs: Dict | None = None,
226
- readonly=True,
227
- nowait_durable=False,
228
- headers: Dict[str, str] | None = None,
229
- bypass_index=False,
230
- language: str = "rel",
231
- query_timeout_mins: int | None = None,
232
- gi_setup_skipped: bool = False,
233
- ):
234
-
235
- with debugging.span("transaction") as txn_span:
236
- with debugging.span("create_v2") as create_span:
237
-
238
- use_graph_index = self.config.get("use_graph_index", USE_GRAPH_INDEX)
239
-
240
- payload = {
241
- "dbname": database,
242
- "engine_name": engine,
243
- "query": raw_code,
244
- "v1_inputs": inputs,
245
- "nowait_durable": nowait_durable,
246
- "readonly": readonly,
247
- "language": language,
248
- }
249
- if query_timeout_mins is None and (timeout_value := self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS)) is not None:
250
- query_timeout_mins = int(timeout_value)
251
- if query_timeout_mins is not None:
252
- payload["timeout_mins"] = query_timeout_mins
253
- query_params={"use_graph_index": str(use_graph_index and not bypass_index)}
254
-
255
- # Add gi_setup_skipped to headers
256
- if headers is None:
257
- headers = {}
258
- headers["gi_setup_skipped"] = str(gi_setup_skipped)
259
- headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
260
-
261
- response = self._txn_request_with_gi_retry(
262
- payload, headers, query_params, engine
263
- )
264
-
265
- artifact_info = {}
266
- response_content = response.json()
227
+ inputs: Dict,
228
+ headers: Dict[str, str],
229
+ readonly: bool,
230
+ nowait_durable: bool,
231
+ bypass_index: bool,
232
+ language: str,
233
+ query_timeout_mins: int | None,
234
+ ) -> TxnCreationResult:
235
+ """
236
+ Create a transaction via direct HTTP access and return the result.
267
237
 
268
- txn_id = response_content["transaction"]['id']
269
- state = response_content["transaction"]['state']
238
+ This override uses HTTP requests instead of SQL stored procedures.
239
+ """
240
+ use_graph_index = self.config.get("use_graph_index", USE_GRAPH_INDEX)
270
241
 
271
- txn_span["txn_id"] = txn_id
272
- create_span["txn_id"] = txn_id
273
- debugging.event("transaction_created", txn_span, txn_id=txn_id)
242
+ payload = {
243
+ "dbname": database,
244
+ "engine_name": engine,
245
+ "query": raw_code,
246
+ "v1_inputs": inputs,
247
+ "nowait_durable": nowait_durable,
248
+ "readonly": readonly,
249
+ "language": language,
250
+ }
251
+ if query_timeout_mins is None and (timeout_value := self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS)) is not None:
252
+ query_timeout_mins = int(timeout_value)
253
+ if query_timeout_mins is not None:
254
+ payload["timeout_mins"] = query_timeout_mins
255
+ query_params = {"use_graph_index": str(use_graph_index and not bypass_index)}
256
+
257
+ response = self._txn_request_with_gi_retry(
258
+ payload, headers, query_params, engine
259
+ )
274
260
 
275
- # fast path: transaction already finished
276
- if state in ["COMPLETED", "ABORTED"]:
277
- if txn_id in self._pending_transactions:
278
- self._pending_transactions.remove(txn_id)
261
+ response_content = response.json()
279
262
 
280
- # Process rows to get the rest of the artifacts
281
- for result in response_content.get("results", []):
282
- filename = result['filename']
283
- # making keys uppercase to match the old behavior
284
- artifact_info[filename] = {k.upper(): v for k, v in result.items()}
263
+ txn_id = response_content["transaction"]['id']
264
+ state = response_content["transaction"]['state']
285
265
 
286
- # Slow path: transaction not done yet; start polling
287
- else:
288
- self._pending_transactions.append(txn_id)
289
- with debugging.span("wait", txn_id=txn_id):
290
- poll_with_specified_overhead(
291
- lambda: self._check_exec_async_status(txn_id, headers=headers), 0.1
292
- )
293
- artifact_info = self._list_exec_async_artifacts(txn_id, headers=headers)
266
+ # Build artifact_info if transaction completed immediately (fast path)
267
+ artifact_info: Dict[str, Dict] = {}
268
+ if state in ["COMPLETED", "ABORTED"]:
269
+ for result in response_content.get("results", []):
270
+ filename = result['filename']
271
+ # making keys uppercase to match the old behavior
272
+ artifact_info[filename] = {k.upper(): v for k, v in result.items()}
294
273
 
295
- with debugging.span("fetch"):
296
- return self._download_results(artifact_info, txn_id, state)
274
+ return TxnCreationResult(txn_id=txn_id, state=state, artifact_info=artifact_info)
297
275
 
298
276
  def _prepare_index(
299
277
  self,
@@ -355,15 +333,20 @@ class DirectAccessResources(UseIndexResources):
355
333
  if txn_id in self._pending_transactions:
356
334
  self._pending_transactions.remove(txn_id)
357
335
 
358
- if status == "ABORTED" and transaction.get("abort_reason", "") == TXN_ABORT_REASON_TIMEOUT:
359
- config_file_path = getattr(self.config, 'file_path', None)
360
- timeout_ms = int(transaction.get("timeout_ms", 0))
361
- timeout_mins = timeout_ms // 60000 if timeout_ms > 0 else int(self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS) or DEFAULT_QUERY_TIMEOUT_MINS)
362
- raise QueryTimeoutExceededException(
363
- timeout_mins=timeout_mins,
364
- query_id=txn_id,
365
- config_file_path=config_file_path,
366
- )
336
+ if status == "ABORTED":
337
+ reason = transaction.get("abort_reason", "")
338
+
339
+ if reason == TXN_ABORT_REASON_TIMEOUT:
340
+ config_file_path = getattr(self.config, 'file_path', None)
341
+ timeout_ms = int(transaction.get("timeout_ms", 0))
342
+ timeout_mins = timeout_ms // 60000 if timeout_ms > 0 else int(self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS) or DEFAULT_QUERY_TIMEOUT_MINS)
343
+ raise QueryTimeoutExceededException(
344
+ timeout_mins=timeout_mins,
345
+ query_id=txn_id,
346
+ config_file_path=config_file_path,
347
+ )
348
+ elif reason == TXN_ABORT_REASON_GUARD_RAILS:
349
+ raise GuardRailsException(response_content.get("progress", {}))
367
350
 
368
351
  # @TODO: Find some way to tunnel the ABORT_REASON out. Azure doesn't have this, but it's handy
369
352
  return status == "COMPLETED" or status == "ABORTED"
@@ -15,6 +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
19
  import snowflake.snowpark
19
20
 
20
21
  from ....rel_utils import sanitize_identifier, to_fqn_relation_name
@@ -54,7 +55,7 @@ from .util import (
54
55
  )
55
56
  from ....environments import runtime_env, HexEnvironment, SnowbookEnvironment
56
57
  from .... import dsl, rel, metamodel as m
57
- from ....errors import EngineProvisioningFailed, EngineNameValidationException, Errors, InvalidAliasError, InvalidEngineSizeError, InvalidSourceTypeWarning, RAIException, HexSessionException, SnowflakeChangeTrackingNotEnabledException, SnowflakeDatabaseException, SnowflakeImportMissingException, SnowflakeInvalidSource, SnowflakeMissingConfigValuesException, SnowflakeProxyAPIDeprecationWarning, SnowflakeProxySourceError, ModelNotFoundException, UnknownSourceWarning, RowsDroppedFromTargetTableWarning, QueryTimeoutExceededException
58
+ from ....errors import EngineProvisioningFailed, EngineNameValidationException, Errors, GuardRailsException, InvalidAliasError, InvalidEngineSizeError, InvalidSourceTypeWarning, RAIException, HexSessionException, SnowflakeChangeTrackingNotEnabledException, SnowflakeDatabaseException, SnowflakeImportMissingException, SnowflakeInvalidSource, SnowflakeMissingConfigValuesException, SnowflakeProxyAPIDeprecationWarning, SnowflakeProxySourceError, ModelNotFoundException, UnknownSourceWarning, RowsDroppedFromTargetTableWarning, QueryTimeoutExceededException
58
59
  from concurrent.futures import ThreadPoolExecutor
59
60
  from datetime import datetime, timedelta
60
61
  from snowflake.snowpark.types import StringType, StructField, StructType
@@ -105,6 +106,16 @@ PYREL_ROOT_DB = 'pyrel_root_db'
105
106
  TERMINAL_TXN_STATES = ["COMPLETED", "ABORTED"]
106
107
 
107
108
  TXN_ABORT_REASON_TIMEOUT = "transaction timeout"
109
+ GUARDRAILS_ABORT_REASON = "guard rail violation"
110
+
111
+ PRINT_TXN_PROGRESS_FLAG = "print_txn_progress"
112
+
113
+ #--------------------------------------------------
114
+ # Helpers
115
+ #--------------------------------------------------
116
+
117
+ def should_print_txn_progress(config) -> bool:
118
+ return bool(config.get(PRINT_TXN_PROGRESS_FLAG, False))
108
119
 
109
120
  #--------------------------------------------------
110
121
  # Resources
@@ -131,6 +142,19 @@ class ExecContext:
131
142
  skip_engine_db_error_retry=self.skip_engine_db_error_retry
132
143
  )
133
144
 
145
+
146
+ @dataclass
147
+ class TxnCreationResult:
148
+ """Result of creating a transaction via _create_v2_txn.
149
+
150
+ This standardizes the response format between different implementations
151
+ (SQL stored procedure vs HTTP direct access).
152
+ """
153
+ txn_id: str
154
+ state: str
155
+ artifact_info: Dict[str, Dict] # Populated if fast-path (state is COMPLETED/ABORTED)
156
+
157
+
134
158
  class Resources(ResourcesBase):
135
159
  def __init__(
136
160
  self,
@@ -1411,15 +1435,18 @@ Otherwise, remove it from your '{profile}' configuration profile.
1411
1435
  if txn_id in self._pending_transactions:
1412
1436
  self._pending_transactions.remove(txn_id)
1413
1437
 
1414
- if status == "ABORTED" and response_row.get("ABORT_REASON", "") == TXN_ABORT_REASON_TIMEOUT:
1415
- config_file_path = getattr(self.config, 'file_path', None)
1416
- # todo: use the timeout returned alongside the transaction as soon as it's exposed
1417
- timeout_mins = int(self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS) or DEFAULT_QUERY_TIMEOUT_MINS)
1418
- raise QueryTimeoutExceededException(
1419
- timeout_mins=timeout_mins,
1420
- query_id=txn_id,
1421
- config_file_path=config_file_path,
1422
- )
1438
+ if status == "ABORTED":
1439
+ if response_row.get("ABORT_REASON", "") == TXN_ABORT_REASON_TIMEOUT:
1440
+ config_file_path = getattr(self.config, 'file_path', None)
1441
+ # todo: use the timeout returned alongside the transaction as soon as it's exposed
1442
+ timeout_mins = int(self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS) or DEFAULT_QUERY_TIMEOUT_MINS)
1443
+ raise QueryTimeoutExceededException(
1444
+ timeout_mins=timeout_mins,
1445
+ query_id=txn_id,
1446
+ config_file_path=config_file_path,
1447
+ )
1448
+ elif response_row.get("ABORT_REASON", "") == GUARDRAILS_ABORT_REASON:
1449
+ raise GuardRailsException()
1423
1450
 
1424
1451
  # @TODO: Find some way to tunnel the ABORT_REASON out. Azure doesn't have this, but it's handy
1425
1452
  return status == "COMPLETED" or status == "ABORTED"
@@ -1654,6 +1681,72 @@ Otherwise, remove it from your '{profile}' configuration profile.
1654
1681
  raise Exception("Failed to create transaction")
1655
1682
  return response
1656
1683
 
1684
+ def _create_v2_txn(
1685
+ self,
1686
+ database: str,
1687
+ engine: str | None,
1688
+ raw_code: str,
1689
+ inputs: Dict,
1690
+ headers: Dict[str, str],
1691
+ readonly: bool,
1692
+ nowait_durable: bool,
1693
+ bypass_index: bool,
1694
+ language: str,
1695
+ query_timeout_mins: int | None,
1696
+ ) -> TxnCreationResult:
1697
+ """
1698
+ Create a transaction and return the result.
1699
+
1700
+ This method handles calling the RAI app stored procedure to create a transaction
1701
+ and parses the response into a standardized TxnCreationResult format.
1702
+
1703
+ This method can be overridden by subclasses (e.g., DirectAccessResources)
1704
+ to use different transport mechanisms (HTTP instead of SQL).
1705
+
1706
+ Args:
1707
+ database: Database/model name
1708
+ engine: Engine name (optional)
1709
+ raw_code: Code to execute (REL, LQP, or SQL)
1710
+ inputs: Input parameters for the query
1711
+ headers: HTTP headers (must be prepared by caller)
1712
+ readonly: Whether the transaction is read-only
1713
+ nowait_durable: Whether to wait for durable writes
1714
+ bypass_index: Whether to bypass graph index setup
1715
+ language: Query language ("rel" or "lqp")
1716
+ query_timeout_mins: Optional query timeout in minutes
1717
+
1718
+ Returns:
1719
+ TxnCreationResult containing txn_id, state, and artifact_info
1720
+ """
1721
+ response = self._exec_rai_app(
1722
+ database=database,
1723
+ engine=engine,
1724
+ raw_code=raw_code,
1725
+ inputs=inputs,
1726
+ readonly=readonly,
1727
+ nowait_durable=nowait_durable,
1728
+ request_headers=headers,
1729
+ bypass_index=bypass_index,
1730
+ language=language,
1731
+ query_timeout_mins=query_timeout_mins,
1732
+ )
1733
+
1734
+ rows = list(iter(response))
1735
+
1736
+ # process the first row since txn_id and state are the same for all rows
1737
+ first_row = rows[0]
1738
+ txn_id = first_row['ID']
1739
+ state = first_row['STATE']
1740
+
1741
+ # Build artifact_info if transaction completed immediately (fast path)
1742
+ artifact_info: Dict[str, Dict] = {}
1743
+ if state in ["COMPLETED", "ABORTED"]:
1744
+ for row in rows:
1745
+ filename = row['FILENAME']
1746
+ artifact_info[filename] = row
1747
+
1748
+ return TxnCreationResult(txn_id=txn_id, state=state, artifact_info=artifact_info)
1749
+
1657
1750
  def _exec_async_v2(
1658
1751
  self,
1659
1752
  database: str,
@@ -1672,15 +1765,20 @@ Otherwise, remove it from your '{profile}' configuration profile.
1672
1765
  High-level async execution method with transaction polling and artifact management.
1673
1766
 
1674
1767
  This is the core method for executing queries asynchronously. It:
1675
- 1. Creates a transaction by calling _exec_rai_app
1768
+ 1. Creates a transaction by calling _create_v2_txn
1676
1769
  2. Handles two execution paths:
1677
1770
  - Fast path: Transaction completes immediately (COMPLETED/ABORTED)
1678
1771
  - Slow path: Transaction is pending, requires polling until completion
1679
1772
  3. Manages pending transactions list
1680
1773
  4. Downloads and returns query results/artifacts
1681
1774
 
1682
- This method is called by _execute_code (base implementation) and can be
1683
- overridden by child classes (e.g., DirectAccessResources uses HTTP instead).
1775
+ This method is called by _execute_code (base implementation), and calls the
1776
+ following methods that can be overridden by child classes (e.g.,
1777
+ DirectAccessResources uses HTTP instead):
1778
+ - _create_v2_txn
1779
+ - _check_exec_async_status
1780
+ - _list_exec_async_artifacts
1781
+ - _download_results
1684
1782
 
1685
1783
  Args:
1686
1784
  database: Database/model name
@@ -1704,53 +1802,62 @@ Otherwise, remove it from your '{profile}' configuration profile.
1704
1802
  query_attrs_dict = json.loads(request_headers.get("X-Query-Attributes", "{}"))
1705
1803
 
1706
1804
  with debugging.span("transaction", **query_attrs_dict) as txn_span:
1805
+ txn_start_time = time.time()
1707
1806
  with debugging.span("create_v2", **query_attrs_dict) as create_span:
1807
+ # Prepare headers for transaction creation
1708
1808
  request_headers['user-agent'] = get_pyrel_version(self.generation)
1709
1809
  request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
1710
1810
  request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
1711
- response = self._exec_rai_app(
1811
+
1812
+ # Create the transaction
1813
+ result = self._create_v2_txn(
1712
1814
  database=database,
1713
1815
  engine=engine,
1714
1816
  raw_code=raw_code,
1715
1817
  inputs=inputs,
1818
+ headers=request_headers,
1716
1819
  readonly=readonly,
1717
1820
  nowait_durable=nowait_durable,
1718
- request_headers=request_headers,
1719
1821
  bypass_index=bypass_index,
1720
1822
  language=language,
1721
1823
  query_timeout_mins=query_timeout_mins,
1722
1824
  )
1723
1825
 
1724
- artifact_info = {}
1725
- rows = list(iter(response))
1726
-
1727
- # process the first row since txn_id and state are the same for all rows
1728
- first_row = rows[0]
1729
- txn_id = first_row['ID']
1730
- state = first_row['STATE']
1731
- filename = first_row['FILENAME']
1826
+ txn_id = result.txn_id
1827
+ state = result.state
1732
1828
 
1733
1829
  txn_span["txn_id"] = txn_id
1734
1830
  create_span["txn_id"] = txn_id
1735
1831
  debugging.event("transaction_created", txn_span, txn_id=txn_id)
1736
1832
 
1833
+ print_txn_progress = should_print_txn_progress(self.config)
1834
+
1737
1835
  # fast path: transaction already finished
1738
1836
  if state in ["COMPLETED", "ABORTED"]:
1837
+ txn_end_time = time.time()
1739
1838
  if txn_id in self._pending_transactions:
1740
1839
  self._pending_transactions.remove(txn_id)
1741
1840
 
1742
- # Process rows to get the rest of the artifacts
1743
- for row in rows:
1744
- filename = row['FILENAME']
1745
- artifact_info[filename] = row
1841
+ artifact_info = result.artifact_info
1842
+
1843
+ txn_duration = txn_end_time - txn_start_time
1844
+ if print_txn_progress:
1845
+ print(
1846
+ query_complete_message(txn_id, txn_duration, status_header=True)
1847
+ )
1746
1848
 
1747
1849
  # Slow path: transaction not done yet; start polling
1748
1850
  else:
1749
1851
  self._pending_transactions.append(txn_id)
1852
+ # Use the interactive poller for transaction status
1750
1853
  with debugging.span("wait", txn_id=txn_id):
1751
- poll_with_specified_overhead(
1752
- lambda: self._check_exec_async_status(txn_id, headers=request_headers), 0.1
1753
- )
1854
+ if print_txn_progress:
1855
+ poller = ExecTxnPoller(resource=self, txn_id=txn_id, headers=request_headers, txn_start_time=txn_start_time)
1856
+ poller.poll()
1857
+ else:
1858
+ poll_with_specified_overhead(
1859
+ lambda: self._check_exec_async_status(txn_id, headers=request_headers), 0.1
1860
+ )
1754
1861
  artifact_info = self._list_exec_async_artifacts(txn_id, headers=request_headers)
1755
1862
 
1756
1863
  with debugging.span("fetch"):
@@ -2408,7 +2515,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
2408
2515
  return None
2409
2516
  return results[0][0]
2410
2517
 
2411
- # CLI methods (list_warehouses, list_compute_pools, list_roles, list_apps,
2518
+ # CLI methods (list_warehouses, list_compute_pools, list_roles, list_apps,
2412
2519
  # list_databases, list_sf_schemas, list_tables) are now in CLIResources class
2413
2520
  # schema_info is kept in base Resources class since it's used by SnowflakeSchema._fetch_info()
2414
2521
 
@@ -189,6 +189,9 @@ class UseIndexPoller:
189
189
  # on every 5th iteration we reset the cdc status, so it will be checked again
190
190
  self.should_check_cdc = True
191
191
 
192
+ # Flag to only check data stream health once in the first call
193
+ self.check_data_stream_health = True
194
+
192
195
  self.wait_for_stream_sync = self.res.config.get(
193
196
  "wait_for_stream_sync", WAIT_FOR_STREAM_SYNC
194
197
  )
@@ -503,6 +506,7 @@ class UseIndexPoller:
503
506
  "init_engine_async": self.init_engine_async,
504
507
  "language": self.language,
505
508
  "data_freshness_mins": self.data_freshness,
509
+ "check_data_stream_health": self.check_data_stream_health
506
510
  })
507
511
 
508
512
  request_headers = debugging.add_current_propagation_headers(self.headers)
@@ -535,6 +539,7 @@ class UseIndexPoller:
535
539
  errors = use_index_data.get("errors", [])
536
540
  relations = use_index_data.get("relations", {})
537
541
  cdc_enabled = use_index_data.get("cdcEnabled", False)
542
+ health_checked = use_index_data.get("healthChecked", False)
538
543
  if self.check_ready_count % ERP_CHECK_FREQUENCY == 0 or not cdc_enabled:
539
544
  self.should_check_cdc = True
540
545
  else:
@@ -542,6 +547,9 @@ class UseIndexPoller:
542
547
 
543
548
  if engines and self.init_engine_async:
544
549
  self.init_engine_async = False
550
+
551
+ if self.check_data_stream_health and health_checked:
552
+ self.check_data_stream_health = False
545
553
 
546
554
  break_loop = False
547
555
  has_stream_errors = False
@@ -2436,6 +2436,24 @@ class QueryTimeoutExceededException(RAIException):
2436
2436
  Consider increasing the 'query_timeout_mins' parameter in your configuration file{f' (stored in {self.config_file_path})' if self.config_file_path else ''} to allow more time for query execution.
2437
2437
  """)
2438
2438
 
2439
+ class GuardRailsException(RAIException):
2440
+ def __init__(self, progress: dict[str, Any]={}):
2441
+ self.name = "Guard Rails Violation"
2442
+ self.message = "Transaction aborted due to guard rails violation."
2443
+ self.progress = progress
2444
+ self.content = self.format_message()
2445
+ super().__init__(self.message, self.name, self.content)
2446
+
2447
+ def format_message(self):
2448
+ messages = [] if self.progress else [self.message]
2449
+ for task in self.progress.get("tasks", {}).values():
2450
+ for warning_type, warning_data in task.get("warnings", {}).items():
2451
+ messages.append(textwrap.dedent(f"""
2452
+ Relation Name: [yellow]{task["task_name"]}[/yellow]
2453
+ Warning: {warning_type}
2454
+ Message: {warning_data["message"]}
2455
+ """))
2456
+ return "\n".join(messages)
2439
2457
 
2440
2458
  #--------------------------------------------------
2441
2459
  # Azure Exceptions