relationalai 0.11.3__tar.gz → 0.12.0__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 (475) hide show
  1. {relationalai-0.11.3 → relationalai-0.12.0}/PKG-INFO +7 -5
  2. {relationalai-0.11.3 → relationalai-0.12.0}/pyproject.toml +16 -5
  3. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/config.py +7 -0
  4. relationalai-0.12.0/src/relationalai/clients/direct_access_client.py +113 -0
  5. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/snowflake.py +41 -107
  6. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/use_index_poller.py +349 -188
  7. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/bindings/csv.py +2 -2
  8. relationalai-0.12.0/src/relationalai/early_access/metamodel/rewrite/__init__.py +7 -0
  9. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/rel/rewrite/__init__.py +1 -1
  10. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/errors.py +24 -3
  11. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/internal/annotations.py +1 -0
  12. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/internal/internal.py +22 -4
  13. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/builtins.py +1 -0
  14. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/executor.py +61 -12
  15. relationalai-0.12.0/src/relationalai/semantics/lqp/intrinsics.py +23 -0
  16. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/model2lqp.py +13 -4
  17. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/passes.py +4 -6
  18. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/primitives.py +12 -1
  19. {relationalai-0.11.3/src/relationalai/semantics/rel → relationalai-0.12.0/src/relationalai/semantics/lqp}/rewrite/__init__.py +6 -0
  20. relationalai-0.12.0/src/relationalai/semantics/lqp/rewrite/extract_common.py +362 -0
  21. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/builtins.py +20 -2
  22. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/factory.py +3 -2
  23. relationalai-0.12.0/src/relationalai/semantics/metamodel/rewrite/__init__.py +6 -0
  24. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/core.py +273 -71
  25. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +20 -1
  26. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +24 -3
  27. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/rel/builtins.py +5 -1
  28. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/rel/compiler.py +7 -19
  29. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/rel/executor.py +2 -2
  30. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/rel/rel.py +6 -0
  31. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/rel/rel_utils.py +8 -1
  32. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/compiler.py +122 -42
  33. relationalai-0.12.0/src/relationalai/semantics/sql/executor/duck_db.py +52 -0
  34. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/rewrite/denormalize.py +4 -6
  35. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/rewrite/recursive_union.py +23 -3
  36. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/sql.py +27 -0
  37. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/__init__.py +2 -1
  38. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/datetime.py +4 -0
  39. relationalai-0.12.0/src/relationalai/semantics/std/re.py +83 -0
  40. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/strings.py +1 -1
  41. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/cli.py +11 -4
  42. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/cli_controls.py +445 -60
  43. relationalai-0.12.0/src/relationalai/util/format.py +123 -0
  44. relationalai-0.11.3/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -5
  45. relationalai-0.11.3/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -12
  46. relationalai-0.11.3/src/relationalai/semantics/metamodel/rewrite/gc_nodes.py +0 -58
  47. relationalai-0.11.3/src/relationalai/semantics/metamodel/rewrite/list_types.py +0 -109
  48. relationalai-0.11.3/src/relationalai/semantics/rel/rewrite/extract_common.py +0 -451
  49. relationalai-0.11.3/src/relationalai/semantics/sql/executor/duck_db.py +0 -27
  50. relationalai-0.11.3/src/relationalai/util/format.py +0 -46
  51. {relationalai-0.11.3 → relationalai-0.12.0}/.gitignore +0 -0
  52. {relationalai-0.11.3 → relationalai-0.12.0}/LICENSE +0 -0
  53. {relationalai-0.11.3 → relationalai-0.12.0}/docs/pypi/README.md +0 -0
  54. {relationalai-0.11.3 → relationalai-0.12.0}/frontend/debugger/dist/.gitignore +0 -0
  55. {relationalai-0.11.3 → relationalai-0.12.0}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  56. {relationalai-0.11.3 → relationalai-0.12.0}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  57. {relationalai-0.11.3 → relationalai-0.12.0}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  58. {relationalai-0.11.3 → relationalai-0.12.0}/frontend/debugger/dist/index.html +0 -0
  59. {relationalai-0.11.3 → relationalai-0.12.0}/src/__init__.py +0 -0
  60. {relationalai-0.11.3 → relationalai-0.12.0}/src/raitoolkit/__init__.py +0 -0
  61. {relationalai-0.11.3 → relationalai-0.12.0}/src/raitoolkit/events/__init__.py +0 -0
  62. {relationalai-0.11.3 → relationalai-0.12.0}/src/raitoolkit/procedures/__init__.py +0 -0
  63. {relationalai-0.11.3 → relationalai-0.12.0}/src/raitoolkit/procedures/procedure.py +0 -0
  64. {relationalai-0.11.3 → relationalai-0.12.0}/src/raitoolkit/rel/__init__.py +0 -0
  65. {relationalai-0.11.3 → relationalai-0.12.0}/src/raitoolkit/tables/__init__.py +0 -0
  66. {relationalai-0.11.3 → relationalai-0.12.0}/src/raitoolkit/tasks/__init__.py +0 -0
  67. {relationalai-0.11.3 → relationalai-0.12.0}/src/raitoolkit/tasks/task.py +0 -0
  68. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/__init__.py +0 -0
  69. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/analysis/__init__.py +0 -0
  70. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/analysis/mechanistic.py +0 -0
  71. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/analysis/whynot.py +0 -0
  72. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/auth/__init__.py +0 -0
  73. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/auth/jwt_generator.py +0 -0
  74. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/auth/oauth_callback_server.py +0 -0
  75. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/auth/token_handler.py +0 -0
  76. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/auth/util.py +0 -0
  77. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/__init__.py +0 -0
  78. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/azure.py +0 -0
  79. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/cache_store.py +0 -0
  80. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/client.py +0 -0
  81. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  82. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/hash_util.py +0 -0
  83. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/profile_polling.py +0 -0
  84. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/result_helpers.py +0 -0
  85. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/types.py +0 -0
  86. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/clients/util.py +0 -0
  87. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/compiler.py +0 -0
  88. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/debugging.py +0 -0
  89. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/dependencies.py +0 -0
  90. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/docutils.py +0 -0
  91. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/dsl.py +0 -0
  92. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/__init__.py +0 -0
  93. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/builder/__init__.py +0 -0
  94. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  95. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  96. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  97. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  98. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  99. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  100. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  101. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/devtools/__init__.py +0 -0
  102. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  103. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  104. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/__init__.py +0 -0
  105. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  106. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  107. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  108. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  109. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  110. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  111. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  112. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  113. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  114. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  115. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  116. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  117. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  118. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  119. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  120. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  121. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  122. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  123. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  124. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  125. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/constants.py +0 -0
  126. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  127. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  128. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  129. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  130. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  131. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  132. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  133. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  134. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  135. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/context.py +0 -0
  136. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  137. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  138. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  139. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  140. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  141. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  142. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  143. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  144. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  145. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  146. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  147. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  148. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  149. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  150. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  151. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  152. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  153. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  154. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  155. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  156. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  157. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  158. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  159. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  160. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  161. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  162. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  163. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  164. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  165. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  166. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  167. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  168. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  169. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  170. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  171. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  172. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  173. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  174. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  175. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  176. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  177. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  178. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  179. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  180. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  181. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  182. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  183. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  184. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  185. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  186. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  187. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  188. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  189. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  190. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  191. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  192. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  193. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  194. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/relations.py +0 -0
  195. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  196. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  197. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  198. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  199. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  200. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  201. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  202. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  203. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/serialization.py +0 -0
  204. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  205. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  206. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  207. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  208. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  209. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  210. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  211. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  212. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  213. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  214. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  215. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  216. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  217. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/types/values.py +0 -0
  218. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/dsl/utils.py +0 -0
  219. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/graphs/__init__.py +0 -0
  220. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/__init__.py +0 -0
  221. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  222. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  223. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  224. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  225. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  226. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  227. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  228. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  229. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  230. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  231. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  232. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  233. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  234. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  235. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  236. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  237. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  238. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  239. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  240. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  241. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  242. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  243. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/__init__.py +0 -0
  244. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/api/__init__.py +0 -0
  245. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/benchmarks/__init__.py +0 -0
  246. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/graph/__init__.py +0 -0
  247. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/path_algorithms/__init__.py +0 -0
  248. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/path_algorithms/find_paths/__init__.py +0 -0
  249. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_repetition/__init__.py +0 -0
  250. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_upto/__init__.py +0 -0
  251. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/path_algorithms/single/__init__.py +0 -0
  252. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_repetition/__init__.py +0 -0
  253. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_upto/__init__.py +0 -0
  254. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/path_algorithms/usp/__init__.py +0 -0
  255. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/rpq/__init__.py +0 -0
  256. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/utilities/__init__.py +0 -0
  257. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/paths/utilities/iterators/__init__.py +0 -0
  258. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/rel/__init__.py +0 -0
  259. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  260. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  261. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/solvers/__init__.py +0 -0
  262. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/sql/__init__.py +0 -0
  263. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  264. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  265. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/tests/__init__.py +0 -0
  266. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  267. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  268. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  269. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/__init__.py +0 -0
  270. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/base.py +0 -0
  271. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/ci.py +0 -0
  272. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/colab.py +0 -0
  273. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/generic.py +0 -0
  274. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/hex.py +0 -0
  275. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/ipython.py +0 -0
  276. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/jupyter.py +0 -0
  277. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/snowbook.py +0 -0
  278. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/environments/terminal.py +0 -0
  279. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/SF.py +0 -0
  280. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/__init__.py +0 -0
  281. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/graphs.py +0 -0
  282. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/inspect.py +0 -0
  283. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  284. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/api.py +0 -0
  285. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  286. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  287. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  288. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  289. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  290. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  291. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  292. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/options.py +0 -0
  293. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  294. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  295. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  296. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  297. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/paths/__init__.py +0 -0
  298. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/paths/pathfinder.rel +0 -0
  299. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  300. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/experimental/solvers.py +0 -0
  301. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/loaders/__init__.py +0 -0
  302. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/loaders/csv.py +0 -0
  303. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/loaders/loader.py +0 -0
  304. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/loaders/types.py +0 -0
  305. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/metagen.py +0 -0
  306. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/metamodel.py +0 -0
  307. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/rel.py +0 -0
  308. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/rel_emitter.py +0 -0
  309. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/rel_utils.py +0 -0
  310. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/__init__.py +0 -0
  311. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  312. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/devtools/__init__.py +0 -0
  313. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  314. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  315. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  316. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/internal/__init__.py +0 -0
  317. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/internal/snowflake.py +0 -0
  318. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/__init__.py +0 -0
  319. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/compiler.py +0 -0
  320. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/constructors.py +0 -0
  321. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/ir.py +0 -0
  322. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  323. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  324. {relationalai-0.11.3/src/relationalai/semantics/rel → relationalai-0.12.0/src/relationalai/semantics/lqp}/rewrite/cdc.py +0 -0
  325. {relationalai-0.11.3/src/relationalai/semantics/metamodel → relationalai-0.12.0/src/relationalai/semantics/lqp}/rewrite/extract_keys.py +0 -0
  326. {relationalai-0.11.3/src/relationalai/semantics/metamodel → relationalai-0.12.0/src/relationalai/semantics/lqp}/rewrite/fd_constraints.py +0 -0
  327. {relationalai-0.11.3/src/relationalai/semantics/rel → relationalai-0.12.0/src/relationalai/semantics/lqp}/rewrite/quantify_vars.py +0 -0
  328. {relationalai-0.11.3/src/relationalai/semantics/metamodel → relationalai-0.12.0/src/relationalai/semantics/lqp}/rewrite/splinter.py +0 -0
  329. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/types.py +0 -0
  330. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/utils.py +0 -0
  331. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/lqp/validators.py +0 -0
  332. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  333. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  334. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  335. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  336. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/executor.py +0 -0
  337. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  338. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/ir.py +0 -0
  339. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  340. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  341. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  342. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
  343. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  344. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  345. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  346. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/types.py +0 -0
  347. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/util.py +0 -0
  348. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  349. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  350. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  351. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  352. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  353. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/README.md +0 -0
  354. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/__init__.py +0 -0
  355. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/api.py +0 -0
  356. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/__init__.py +0 -0
  357. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/grid_graph.py +0 -0
  358. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/code_organization.md +0 -0
  359. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/Movies.ipynb +0 -0
  360. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/basic_example.py +0 -0
  361. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/minimal_engine_warmup.py +0 -0
  362. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movie_example.py +0 -0
  363. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/actedin.csv +0 -0
  364. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/directed.csv +0 -0
  365. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/follows.csv +0 -0
  366. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/movies.csv +0 -0
  367. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/person.csv +0 -0
  368. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/produced.csv +0 -0
  369. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/ratings.csv +0 -0
  370. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/wrote.csv +0 -0
  371. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_benchmark.py +0 -0
  372. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_example.py +0 -0
  373. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/examples/pattern_to_automaton.py +0 -0
  374. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/find_paths_via_automaton.py +0 -0
  375. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/graph.py +0 -0
  376. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/__init__.py +0 -0
  377. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/find_paths.py +0 -0
  378. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  379. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  380. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/single.py +0 -0
  381. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  382. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  383. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-old.py +0 -0
  384. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-tuple.py +0 -0
  385. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp.py +0 -0
  386. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/product_graph.py +0 -0
  387. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/rpq/__init__.py +0 -0
  388. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/rpq/automaton.py +0 -0
  389. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/rpq/diagnostics.py +0 -0
  390. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/rpq/filter.py +0 -0
  391. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/rpq/glushkov.py +0 -0
  392. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/rpq/rpq.py +0 -0
  393. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/rpq/transition.py +0 -0
  394. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_max_length.py +0 -0
  395. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_multiple.py +0 -0
  396. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_single.py +0 -0
  397. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_multiple.py +0 -0
  398. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_single.py +0 -0
  399. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  400. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  401. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  402. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  403. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_paths.py +0 -0
  404. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks.py +0 -0
  405. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks_undirected.py +0 -0
  406. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  407. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  408. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  409. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  410. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_multiple.py +0 -0
  411. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_single.py +0 -0
  412. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/utilities/__init__.py +0 -0
  413. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/utilities/iterators.py +0 -0
  414. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/utilities/prefix_sum.py +0 -0
  415. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/paths/utilities/utilities.py +0 -0
  416. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  417. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  418. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  419. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/rel/__init__.py +0 -0
  420. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  421. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/__init__.py +0 -0
  422. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  423. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  424. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
  425. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  426. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  427. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  428. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/constraints.py +0 -0
  429. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/decimals.py +0 -0
  430. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/floats.py +0 -0
  431. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/integers.py +0 -0
  432. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/math.py +0 -0
  433. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/pragmas.py +0 -0
  434. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/std/std.py +0 -0
  435. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/tests/__init__.py +0 -0
  436. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/tests/logging.py +0 -0
  437. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  438. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  439. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/semantics/tests/utils.py +0 -0
  440. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/std/__init__.py +0 -0
  441. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/std/aggregates.py +0 -0
  442. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/std/dates.py +0 -0
  443. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/std/graphs.py +0 -0
  444. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/std/inspect.py +0 -0
  445. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/std/math.py +0 -0
  446. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/std/re.py +0 -0
  447. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/std/strings.py +0 -0
  448. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/__init__.py +0 -0
  449. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  450. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/cli_helpers.py +0 -0
  451. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/constants.py +0 -0
  452. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/debugger.py +0 -0
  453. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/debugger_client.py +0 -0
  454. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/debugger_server.py +0 -0
  455. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/dev.py +0 -0
  456. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/notes +0 -0
  457. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/qb_debugger.py +0 -0
  458. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/tools/snapshot_viewer.py +0 -0
  459. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/__init__.py +0 -0
  460. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/clean_up_databases.py +0 -0
  461. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/constants.py +0 -0
  462. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/graph.py +0 -0
  463. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/list_databases.py +0 -0
  464. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/otel_configuration.py +0 -0
  465. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/otel_handler.py +0 -0
  466. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/snowflake_handler.py +0 -0
  467. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/span_format_test.py +0 -0
  468. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/span_tracker.py +0 -0
  469. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/spans_file_handler.py +0 -0
  470. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/timeout.py +0 -0
  471. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai/util/tracing_handler.py +0 -0
  472. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai_test_util/__init__.py +0 -0
  473. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai_test_util/fixtures.py +0 -0
  474. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai_test_util/snapshot.py +0 -0
  475. {relationalai-0.11.3 → relationalai-0.12.0}/src/relationalai_test_util/traceback.py +0 -0
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.11.3
3
+ Version: 0.12.0
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
7
- Requires-Python: >=3.9
7
+ Requires-Python: >=3.10
8
8
  Requires-Dist: aiohttp
9
- Requires-Dist: click<=8.1.8
9
+ Requires-Dist: click==8.2.1
10
10
  Requires-Dist: colorama
11
11
  Requires-Dist: cryptography
12
12
  Requires-Dist: gravis
13
13
  Requires-Dist: inquirerpy
14
14
  Requires-Dist: lqp==0.1.16
15
- Requires-Dist: nicegui
15
+ Requires-Dist: nicegui==2.16.1
16
16
  Requires-Dist: numpy<2
17
17
  Requires-Dist: opentelemetry-api
18
18
  Requires-Dist: opentelemetry-exporter-otlp-proto-http
@@ -21,7 +21,6 @@ Requires-Dist: packaging
21
21
  Requires-Dist: pandas
22
22
  Requires-Dist: pyarrow
23
23
  Requires-Dist: pyjwt
24
- Requires-Dist: rai-sdk>=0.7.5
25
24
  Requires-Dist: requests
26
25
  Requires-Dist: rich
27
26
  Requires-Dist: snowflake-connector-python[secure-local-storage]
@@ -52,6 +51,7 @@ Requires-Dist: pytest-mock; extra == 'dev'
52
51
  Requires-Dist: pytest-snapshot; extra == 'dev'
53
52
  Requires-Dist: pytest-timeout; extra == 'dev'
54
53
  Requires-Dist: ruff; extra == 'dev'
54
+ Requires-Dist: scipy; extra == 'dev'
55
55
  Requires-Dist: sqlite-utils; extra == 'dev'
56
56
  Requires-Dist: sympy; extra == 'dev'
57
57
  Requires-Dist: tablescope; extra == 'dev'
@@ -63,6 +63,8 @@ Requires-Dist: parameterized; extra == 'ea'
63
63
  Requires-Dist: pysmt; extra == 'ea'
64
64
  Requires-Dist: simple-ddl-parser; extra == 'ea'
65
65
  Requires-Dist: xmltodict; extra == 'ea'
66
+ Provides-Extra: legacy
67
+ Requires-Dist: rai-sdk>=0.7.5; extra == 'legacy'
66
68
  Description-Content-Type: text/markdown
67
69
 
68
70
  # The RelationalAI Python Library
@@ -1,25 +1,24 @@
1
1
  [project]
2
2
  name = 'relationalai'
3
- version = '0.11.3'
3
+ version = '0.12.0'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
7
7
  { name="RelationalAI", email="support@relational.ai" },
8
8
  ]
9
- requires-python = ">= 3.9"
9
+ requires-python = ">= 3.10"
10
10
  dependencies = [
11
11
  "lqp==0.1.16",
12
12
  "snowflake-connector-python[secure-local-storage]",
13
13
  "snowflake-snowpark-python>=1.38.0",
14
- "rai-sdk>=0.7.5",
15
14
  "typing-extensions",
16
15
  "rich",
17
- "nicegui",
16
+ "nicegui==2.16.1",
18
17
  "numpy<2",
19
18
  "pandas",
20
19
  "colorama",
21
20
  "inquirerpy",
22
- "click<=8.1.8",
21
+ "click==8.2.1",
23
22
  "gravis",
24
23
  "toml",
25
24
  "tomlkit",
@@ -61,6 +60,7 @@ dev = [
61
60
  "sympy",
62
61
  "duckdb",
63
62
  "polars",
63
+ "scipy"
64
64
  ]
65
65
  ea = [
66
66
  "pysmt",
@@ -70,6 +70,9 @@ ea = [
70
70
  "owlready2",
71
71
  "xmltodict"
72
72
  ]
73
+ legacy = [
74
+ "rai-sdk>=0.7.5"
75
+ ]
73
76
 
74
77
  [project.scripts]
75
78
  rai = "relationalai.tools.cli:cli"
@@ -100,6 +103,14 @@ packages = ["src/relationalai", "src/relationalai_test_util"]
100
103
  [tool.hatch.build.targets.wheel.force-include]
101
104
  "frontend/debugger/dist" = "frontend/debugger/dist"
102
105
 
106
+ [tool.pytest.ini_options]
107
+ testpaths = ["tests"]
108
+ markers = [
109
+ "azure: marks tests as requiring Azure/railib (deselect with '-m \"not azure\"')",
110
+ ]
111
+ # Exclude Azure tests by default
112
+ addopts = "-m 'not azure'"
113
+
103
114
  [tool.pyright]
104
115
  include = ["src", "tests"]
105
116
  exclude = ["**/node_modules", "**/__pycache__", "**/.*", "**/test_cases/*", "src/relationalai/metagen.py", "src/gentest",
@@ -468,6 +468,13 @@ class Config():
468
468
  if not self.file_path:
469
469
  self.file_path = "__inline__"
470
470
  self._handle_snowflake_fallback_configurations()
471
+ # Check if Azure platform is being used without the legacy dependency
472
+ if self.get("platform", "") == "azure":
473
+ try:
474
+ import railib # noqa
475
+ except ImportError:
476
+ from relationalai.errors import AzureLegacyDependencyMissingException
477
+ raise AzureLegacyDependencyMissingException() from None
471
478
 
472
479
  def fetch(self, profile:str|None=None):
473
480
  from relationalai.environments import runtime_env, TerminalEnvironment
@@ -0,0 +1,113 @@
1
+ from __future__ import annotations
2
+
3
+ import requests
4
+ from dataclasses import dataclass
5
+ from urllib.parse import urlencode, quote
6
+ from requests.adapters import HTTPAdapter
7
+ from urllib3.util.retry import Retry
8
+ from typing import Any, Dict, Optional, Tuple
9
+
10
+ from relationalai.auth.token_handler import TokenHandler
11
+ from relationalai.clients.config import Config
12
+ from relationalai.clients.util import get_pyrel_version
13
+ from relationalai import debugging
14
+ from relationalai.tools.constants import Generation
15
+ from relationalai.environments import runtime_env, SnowbookEnvironment
16
+
17
+ @dataclass
18
+ class Endpoint:
19
+ method: str
20
+ endpoint: str
21
+
22
+ class DirectAccessClient:
23
+ """
24
+ DirectAccessClient is a client for direct service access without service function calls.
25
+ """
26
+
27
+ def __init__(self, config: Config, token_handler: TokenHandler, service_endpoint: str, generation: Optional[Generation] = None):
28
+ self._config: Config = config
29
+ self._token_handler: TokenHandler = token_handler
30
+ self.service_endpoint: str = service_endpoint
31
+ self.generation: Optional[Generation] = generation
32
+ self._is_snowflake_notebook = isinstance(runtime_env, SnowbookEnvironment)
33
+ self.endpoints: Dict[str, Endpoint] = {
34
+ "create_txn": Endpoint(method="POST", endpoint="/v1alpha1/transactions"),
35
+ "get_txn": Endpoint(method="GET", endpoint="/v1alpha1/transactions/{txn_id}"),
36
+ "get_txn_artifacts": Endpoint(method="GET", endpoint="/v1alpha1/transactions/{txn_id}/artifacts"),
37
+ "get_txn_problems": Endpoint(method="GET", endpoint="/v1alpha1/transactions/{txn_id}/problems"),
38
+ "get_txn_events": Endpoint(method="GET", endpoint="/v1alpha1/transactions/{txn_id}/events/{stream_name}"),
39
+ "get_package_versions": Endpoint(method="GET", endpoint="/v1alpha1/databases/{db_name}/package_versions"),
40
+ "get_model_package_versions": Endpoint(method="POST", endpoint="/v1alpha1/models/get_package_versions"),
41
+ "create_db": Endpoint(method="POST", endpoint="/v1alpha1/databases"),
42
+ "get_db": Endpoint(method="GET", endpoint="/v1alpha1/databases"),
43
+ "delete_db": Endpoint(method="DELETE", endpoint="/v1alpha1/databases/{db_name}"),
44
+ "release_index": Endpoint(method="POST", endpoint="/v1alpha1/index/release"),
45
+ "list_engines": Endpoint(method="GET", endpoint="/v1alpha1/engines"),
46
+ "get_engine": Endpoint(method="GET", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}"),
47
+ "create_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}"),
48
+ "delete_engine": Endpoint(method="DELETE", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}"),
49
+ "suspend_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}/suspend"),
50
+ "resume_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}/resume_async"),
51
+ "prepare_index": Endpoint(method="POST", endpoint="/v1alpha1/index/prepare"),
52
+ }
53
+ self.http_session = self._create_retry_session()
54
+
55
+ def _create_retry_session(self) -> requests.Session:
56
+ http_session = requests.Session()
57
+ retries = Retry(
58
+ total=3,
59
+ backoff_factor=0.3,
60
+ status_forcelist=[500, 502, 503, 504],
61
+ allowed_methods=frozenset({"GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"}),
62
+ raise_on_status=False
63
+ )
64
+ adapter = HTTPAdapter(max_retries=retries)
65
+ http_session.mount("http://", adapter)
66
+ http_session.mount("https://", adapter)
67
+ http_session.headers.update({"Connection": "keep-alive"})
68
+ return http_session
69
+
70
+ def request(
71
+ self,
72
+ endpoint: str,
73
+ payload: Dict[str, Any] | None = None,
74
+ headers: Dict[str, str] | None = None,
75
+ path_params: Dict[str, str] | None = None,
76
+ query_params: Dict[str, str] | None = None,
77
+ ) -> requests.Response:
78
+ """
79
+ Send a request to the service endpoint.
80
+ """
81
+ url, method = self._prepare_url(endpoint, path_params, query_params)
82
+ request_headers = self._prepare_headers(headers)
83
+ return self.http_session.request(method, url, json=payload, headers=request_headers)
84
+
85
+ def _prepare_url(self, endpoint: str, path_params: Dict[str, str] | None = None, query_params: Dict[str, str] | None = None) -> Tuple[str, str]:
86
+ try:
87
+ ep = self.endpoints[endpoint]
88
+ except KeyError:
89
+ raise ValueError(f"Invalid endpoint: {endpoint}. Available endpoints: {list(self.endpoints.keys())}")
90
+ url = f"{self.service_endpoint}{ep.endpoint}"
91
+ if path_params:
92
+ escaped_path_params = {k: quote(v, safe='') for k, v in path_params.items()}
93
+ url = url.format(**escaped_path_params)
94
+ if query_params:
95
+ url += '?' + urlencode(query_params)
96
+ return url, ep.method
97
+
98
+ def _prepare_headers(self, headers: Dict[str, str] | None) -> Dict[str, str]:
99
+ request_headers = {}
100
+ if headers:
101
+ request_headers.update(headers)
102
+ # Authorization tokens are not needed in a snowflake notebook environment
103
+ if not self._is_snowflake_notebook:
104
+ request_headers["Authorization"] = f'Snowflake Token="{self._token_handler.get_ingress_token(self.service_endpoint)}"'
105
+ # needed for oauth, does no harm for other authentication methods
106
+ request_headers["X-SF-SPCS-Authentication-Method"] = 'OAUTH'
107
+ request_headers["Content-Type"] = 'application/x-www-form-urlencoded'
108
+ request_headers["Accept"] = "application/json"
109
+
110
+ request_headers["user-agent"] = get_pyrel_version(self.generation)
111
+ request_headers["pyrel_program_id"] = debugging.get_program_span_id() or ""
112
+
113
+ return debugging.add_current_propagation_headers(request_headers)
@@ -28,15 +28,11 @@ import requests
28
28
  import snowflake.connector
29
29
  import pyarrow as pa
30
30
 
31
- from dataclasses import dataclass
32
31
  from snowflake.snowpark import Session
33
32
  from snowflake.snowpark.context import get_active_session
34
33
  from . import result_helpers
35
34
  from .. import debugging
36
35
  from typing import Any, Dict, Iterable, Optional, Tuple, List, Literal, Union, cast
37
- from urllib.parse import urlencode, quote
38
- from requests.adapters import HTTPAdapter
39
- from urllib3.util.retry import Retry
40
36
 
41
37
  from pandas import DataFrame
42
38
 
@@ -44,10 +40,11 @@ from ..tools.cli_controls import Spinner
44
40
  from ..clients.types import AvailableModel, EngineState, Import, ImportSource, ImportSourceTable, ImportsStatus, SourceInfo, TransactionAsyncResponse
45
41
  from ..clients.config import Config, ConfigStore, ENDPOINT_FILE
46
42
  from ..clients.client import Client, ExportParams, ProviderBase, ResourcesBase
43
+ from ..clients.direct_access_client import DirectAccessClient
47
44
  from ..clients.util import IdentityParser, escape_for_f_string, get_pyrel_version, get_with_retries, poll_with_specified_overhead, safe_json_loads, sanitize_module_name, scrub_exception, wrap_with_request_id, ms_to_timestamp
48
45
  from ..environments import runtime_env, HexEnvironment, SnowbookEnvironment
49
46
  from .. import dsl, rel, metamodel as m
50
- from ..errors import DuoSecurityFailed, EngineProvisioningFailed, EngineNameValidationException, EngineNotFoundException, EnginePending, EngineSizeMismatchWarning, EngineResumeFailed, Errors, InvalidAliasError, InvalidEngineSizeError, InvalidSourceTypeWarning, RAIAbortedTransactionError, RAIException, HexSessionException, SnowflakeAppMissingException, SnowflakeChangeTrackingNotEnabledException, SnowflakeDatabaseException, SnowflakeImportMissingException, SnowflakeInvalidSource, SnowflakeMissingConfigValuesException, SnowflakeProxyAPIDeprecationWarning, SnowflakeProxySourceError, SnowflakeRaiAppNotStarted, ModelNotFoundException, UnknownSourceWarning, ResponseStatusException, RowsDroppedFromTargetTableWarning
47
+ from ..errors import DuoSecurityFailed, EngineProvisioningFailed, EngineNameValidationException, EngineNotFoundException, EnginePending, EngineSizeMismatchWarning, EngineResumeFailed, Errors, InvalidAliasError, InvalidEngineSizeError, InvalidSourceTypeWarning, RAIAbortedTransactionError, RAIException, HexSessionException, SnowflakeAppMissingException, SnowflakeChangeTrackingNotEnabledException, SnowflakeDatabaseException, SnowflakeImportMissingException, SnowflakeInvalidSource, SnowflakeMissingConfigValuesException, SnowflakeProxyAPIDeprecationWarning, SnowflakeProxySourceError, SnowflakeRaiAppNotStarted, ModelNotFoundException, UnknownSourceWarning, ResponseStatusException, RowsDroppedFromTargetTableWarning, QueryTimeoutExceededException
51
48
  from concurrent.futures import ThreadPoolExecutor
52
49
  from datetime import datetime, date, timedelta
53
50
  from snowflake.snowpark.types import StringType, StructField, StructType
@@ -92,6 +89,8 @@ TERMINAL_TXN_STATES = ["COMPLETED", "ABORTED"]
92
89
 
93
90
  DUO_TEXT = "duo security"
94
91
 
92
+ TXN_ABORT_REASON_TIMEOUT = "transaction timeout"
93
+
95
94
  #--------------------------------------------------
96
95
  # Helpers
97
96
  #--------------------------------------------------
@@ -1307,7 +1306,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
1307
1306
  response = self._exec(f"CALL {APP_NAME}.api.get_transaction('{txn_id}',{headers});")
1308
1307
  assert response, f"No results from get_transaction('{txn_id}')"
1309
1308
 
1310
- response_row = next(iter(response))
1309
+ response_row = next(iter(response)).asDict()
1311
1310
  status: str = response_row['STATE']
1312
1311
 
1313
1312
  # remove the transaction from the pending list if it's completed or aborted
@@ -1315,6 +1314,16 @@ Otherwise, remove it from your '{profile}' configuration profile.
1315
1314
  if txn_id in self._pending_transactions:
1316
1315
  self._pending_transactions.remove(txn_id)
1317
1316
 
1317
+ if status == "ABORTED" and response_row.get("ABORT_REASON", "") == TXN_ABORT_REASON_TIMEOUT:
1318
+ config_file_path = getattr(self.config, 'file_path', None)
1319
+ # todo: use the timeout returned alongside the transaction as soon as it's exposed
1320
+ timeout_mins = int(self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS) or DEFAULT_QUERY_TIMEOUT_MINS)
1321
+ raise QueryTimeoutExceededException(
1322
+ timeout_mins=timeout_mins,
1323
+ query_id=txn_id,
1324
+ config_file_path=config_file_path,
1325
+ )
1326
+
1318
1327
  # @TODO: Find some way to tunnel the ABORT_REASON out. Azure doesn't have this, but it's handy
1319
1328
  return status == "COMPLETED" or status == "ABORTED"
1320
1329
 
@@ -2957,104 +2966,6 @@ def Graph(
2957
2966
  #--------------------------------------------------
2958
2967
  # Note: All direct access components should live in a separate file
2959
2968
 
2960
- @dataclass
2961
- class Endpoint:
2962
- method: str
2963
- endpoint: str
2964
-
2965
- class DirectAccessClient:
2966
- """
2967
- DirectAccessClient is a client for direct service access without service function calls.
2968
- """
2969
-
2970
- def __init__(self, config: Config, token_handler: TokenHandler, service_endpoint: str, generation: Optional[Generation] = None):
2971
- self._config: Config = config
2972
- self._token_handler: TokenHandler = token_handler
2973
- self.service_endpoint: str = service_endpoint
2974
- self.generation: Optional[Generation] = generation
2975
- self._is_snowflake_notebook = isinstance(runtime_env, SnowbookEnvironment)
2976
- self.endpoints: Dict[str, Endpoint] = {
2977
- "create_txn": Endpoint(method="POST", endpoint="/v1alpha1/transactions"),
2978
- "get_txn": Endpoint(method="GET", endpoint="/v1alpha1/transactions/{txn_id}"),
2979
- "get_txn_artifacts": Endpoint(method="GET", endpoint="/v1alpha1/transactions/{txn_id}/artifacts"),
2980
- "get_txn_problems": Endpoint(method="GET", endpoint="/v1alpha1/transactions/{txn_id}/problems"),
2981
- "get_txn_events": Endpoint(method="GET", endpoint="/v1alpha1/transactions/{txn_id}/events/{stream_name}"),
2982
- "get_package_versions": Endpoint(method="GET", endpoint="/v1alpha1/databases/{db_name}/package_versions"),
2983
- "get_model_package_versions": Endpoint(method="POST", endpoint="/v1alpha1/models/get_package_versions"),
2984
- "create_db": Endpoint(method="POST", endpoint="/v1alpha1/databases"),
2985
- "get_db": Endpoint(method="GET", endpoint="/v1alpha1/databases"),
2986
- "delete_db": Endpoint(method="DELETE", endpoint="/v1alpha1/databases/{db_name}"),
2987
- "release_index": Endpoint(method="POST", endpoint="/v1alpha1/index/release"),
2988
- "list_engines": Endpoint(method="GET", endpoint="/v1alpha1/engines"),
2989
- "get_engine": Endpoint(method="GET", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}"),
2990
- "create_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}"),
2991
- "delete_engine": Endpoint(method="DELETE", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}"),
2992
- "suspend_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}/suspend"),
2993
- "resume_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}/resume_async"),
2994
- "prepare_index": Endpoint(method="POST", endpoint="/v1alpha1/index/prepare"),
2995
- }
2996
- self.http_session = self._create_retry_session()
2997
-
2998
- def _create_retry_session(self) -> requests.Session:
2999
- http_session = requests.Session()
3000
- retries = Retry(
3001
- total=3,
3002
- backoff_factor=0.3,
3003
- status_forcelist=[500, 502, 503, 504],
3004
- allowed_methods=frozenset({"GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"}),
3005
- raise_on_status=False
3006
- )
3007
- adapter = HTTPAdapter(max_retries=retries)
3008
- http_session.mount("http://", adapter)
3009
- http_session.mount("https://", adapter)
3010
- http_session.headers.update({"Connection": "keep-alive"})
3011
- return http_session
3012
-
3013
- def request(
3014
- self,
3015
- endpoint: str,
3016
- payload: Dict[str, Any] | None = None,
3017
- headers: Dict[str, str] | None = None,
3018
- path_params: Dict[str, str] | None = None,
3019
- query_params: Dict[str, str] | None = None,
3020
- ) -> requests.Response:
3021
- """
3022
- Send a request to the service endpoint.
3023
- """
3024
- url, method = self._prepare_url(endpoint, path_params, query_params)
3025
- request_headers = self._prepare_headers(headers)
3026
- return self.http_session.request(method, url, json=payload, headers=request_headers)
3027
-
3028
- def _prepare_url(self, endpoint: str, path_params: Dict[str, str] | None = None, query_params: Dict[str, str] | None = None) -> Tuple[str, str]:
3029
- try:
3030
- ep = self.endpoints[endpoint]
3031
- except KeyError:
3032
- raise ValueError(f"Invalid endpoint: {endpoint}. Available endpoints: {list(self.endpoints.keys())}")
3033
- url = f"{self.service_endpoint}{ep.endpoint}"
3034
- if path_params:
3035
- escaped_path_params = {k: quote(v, safe='') for k, v in path_params.items()}
3036
- url = url.format(**escaped_path_params)
3037
- if query_params:
3038
- url += '?' + urlencode(query_params)
3039
- return url, ep.method
3040
-
3041
- def _prepare_headers(self, headers: Dict[str, str] | None) -> Dict[str, str]:
3042
- request_headers = {}
3043
- if headers:
3044
- request_headers.update(headers)
3045
- # Authorization tokens are not needed in a snowflake notebook environment
3046
- if not self._is_snowflake_notebook:
3047
- request_headers["Authorization"] = f'Snowflake Token="{self._token_handler.get_ingress_token(self.service_endpoint)}"'
3048
- # needed for oauth, does no harm for other authentication methods
3049
- request_headers["X-SF-SPCS-Authentication-Method"] = 'OAUTH'
3050
- request_headers["Content-Type"] = 'application/x-www-form-urlencoded'
3051
- request_headers["Accept"] = "application/json"
3052
-
3053
- request_headers["user-agent"] = get_pyrel_version(self.generation)
3054
- request_headers["pyrel_program_id"] = debugging.get_program_span_id() or ""
3055
-
3056
- return debugging.add_current_propagation_headers(request_headers)
3057
-
3058
2969
  class DirectAccessResources(Resources):
3059
2970
  """
3060
2971
  Resources class for Direct Service Access avoiding Snowflake service functions.
@@ -3068,7 +2979,14 @@ class DirectAccessResources(Resources):
3068
2979
  reset_session: bool = False,
3069
2980
  generation: Optional[Generation] = None,
3070
2981
  ):
3071
- super().__init__(generation=generation, profile=profile, config=config, connection=connection, dry_run=dry_run)
2982
+ super().__init__(
2983
+ generation=generation,
2984
+ profile=profile,
2985
+ config=config,
2986
+ connection=connection,
2987
+ reset_session=reset_session,
2988
+ dry_run=dry_run,
2989
+ )
3072
2990
  self._endpoint_info = ConfigStore(ENDPOINT_FILE)
3073
2991
  self._service_endpoint = ""
3074
2992
  self._direct_access_client = None
@@ -3140,7 +3058,12 @@ class DirectAccessResources(Resources):
3140
3058
  try:
3141
3059
  response = _send_request()
3142
3060
  if response.status_code != 200:
3143
- message = response.json().get("message", "")
3061
+ try:
3062
+ message = response.json().get("message", "")
3063
+ except requests.exceptions.JSONDecodeError:
3064
+ raise ResponseStatusException(
3065
+ f"Failed to parse error response from endpoint {endpoint}.", response
3066
+ )
3144
3067
 
3145
3068
  # fix engine on engine error and retry
3146
3069
  if _is_engine_issue(message):
@@ -3305,13 +3228,24 @@ class DirectAccessResources(Resources):
3305
3228
  assert response, f"No results from get_transaction('{txn_id}')"
3306
3229
 
3307
3230
  response_content = response.json()
3308
- status: str = response_content["transaction"]['state']
3231
+ transaction = response_content["transaction"]
3232
+ status: str = transaction['state']
3309
3233
 
3310
3234
  # remove the transaction from the pending list if it's completed or aborted
3311
3235
  if status in ["COMPLETED", "ABORTED"]:
3312
3236
  if txn_id in self._pending_transactions:
3313
3237
  self._pending_transactions.remove(txn_id)
3314
3238
 
3239
+ if status == "ABORTED" and transaction.get("abort_reason", "") == TXN_ABORT_REASON_TIMEOUT:
3240
+ config_file_path = getattr(self.config, 'file_path', None)
3241
+ timeout_ms = int(transaction.get("timeout_ms", 0))
3242
+ 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)
3243
+ raise QueryTimeoutExceededException(
3244
+ timeout_mins=timeout_mins,
3245
+ query_id=txn_id,
3246
+ config_file_path=config_file_path,
3247
+ )
3248
+
3315
3249
  # @TODO: Find some way to tunnel the ABORT_REASON out. Azure doesn't have this, but it's handy
3316
3250
  return status == "COMPLETED" or status == "ABORTED"
3317
3251