relationalai 0.12.0__tar.gz → 0.12.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. {relationalai-0.12.0 → relationalai-0.12.2}/PKG-INFO +1 -1
  2. {relationalai-0.12.0 → relationalai-0.12.2}/pyproject.toml +1 -1
  3. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/direct_access_client.py +5 -0
  4. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/snowflake.py +259 -91
  5. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/types.py +4 -1
  6. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/use_index_poller.py +96 -55
  7. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/util.py +9 -0
  8. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/dsl.py +1 -2
  9. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/snowbook.py +10 -1
  10. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/solvers.py +283 -79
  11. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/internal/internal.py +24 -5
  12. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/executor.py +22 -6
  13. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/model2lqp.py +4 -2
  14. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/executor.py +2 -1
  15. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/rewrite/flatten.py +8 -7
  16. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/core.py +1174 -226
  17. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/rel/executor.py +30 -12
  18. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/executor/snowflake.py +1 -1
  19. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/cli.py +6 -2
  20. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/cli_controls.py +334 -352
  21. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/constants.py +1 -0
  22. relationalai-0.12.2/src/relationalai/tools/query_utils.py +27 -0
  23. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/otel_configuration.py +1 -1
  24. {relationalai-0.12.0 → relationalai-0.12.2}/.gitignore +0 -0
  25. {relationalai-0.12.0 → relationalai-0.12.2}/LICENSE +0 -0
  26. {relationalai-0.12.0 → relationalai-0.12.2}/docs/pypi/README.md +0 -0
  27. {relationalai-0.12.0 → relationalai-0.12.2}/frontend/debugger/dist/.gitignore +0 -0
  28. {relationalai-0.12.0 → relationalai-0.12.2}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  29. {relationalai-0.12.0 → relationalai-0.12.2}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  30. {relationalai-0.12.0 → relationalai-0.12.2}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  31. {relationalai-0.12.0 → relationalai-0.12.2}/frontend/debugger/dist/index.html +0 -0
  32. {relationalai-0.12.0 → relationalai-0.12.2}/src/__init__.py +0 -0
  33. {relationalai-0.12.0 → relationalai-0.12.2}/src/raitoolkit/__init__.py +0 -0
  34. {relationalai-0.12.0 → relationalai-0.12.2}/src/raitoolkit/events/__init__.py +0 -0
  35. {relationalai-0.12.0 → relationalai-0.12.2}/src/raitoolkit/procedures/__init__.py +0 -0
  36. {relationalai-0.12.0 → relationalai-0.12.2}/src/raitoolkit/procedures/procedure.py +0 -0
  37. {relationalai-0.12.0 → relationalai-0.12.2}/src/raitoolkit/rel/__init__.py +0 -0
  38. {relationalai-0.12.0 → relationalai-0.12.2}/src/raitoolkit/tables/__init__.py +0 -0
  39. {relationalai-0.12.0 → relationalai-0.12.2}/src/raitoolkit/tasks/__init__.py +0 -0
  40. {relationalai-0.12.0 → relationalai-0.12.2}/src/raitoolkit/tasks/task.py +0 -0
  41. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/__init__.py +0 -0
  42. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/analysis/__init__.py +0 -0
  43. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/analysis/mechanistic.py +0 -0
  44. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/analysis/whynot.py +0 -0
  45. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/auth/__init__.py +0 -0
  46. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/auth/jwt_generator.py +0 -0
  47. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/auth/oauth_callback_server.py +0 -0
  48. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/auth/token_handler.py +0 -0
  49. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/auth/util.py +0 -0
  50. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/__init__.py +0 -0
  51. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/azure.py +0 -0
  52. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/cache_store.py +0 -0
  53. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/client.py +0 -0
  54. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/config.py +0 -0
  55. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  56. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/hash_util.py +0 -0
  57. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/profile_polling.py +0 -0
  58. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/clients/result_helpers.py +0 -0
  59. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/compiler.py +0 -0
  60. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/debugging.py +0 -0
  61. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/dependencies.py +0 -0
  62. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/docutils.py +0 -0
  63. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/__init__.py +0 -0
  64. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/builder/__init__.py +0 -0
  65. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  66. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  67. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  68. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  69. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  70. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  71. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  72. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/devtools/__init__.py +0 -0
  73. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  74. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  75. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/__init__.py +0 -0
  76. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  77. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  78. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  79. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  80. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  81. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  82. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  83. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  84. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  85. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  86. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  87. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  88. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  89. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  90. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  91. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  92. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  93. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  94. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  95. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  96. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  97. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/constants.py +0 -0
  98. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  99. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  100. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  101. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  102. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  103. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  104. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  105. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  106. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  107. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/context.py +0 -0
  108. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  109. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  110. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  111. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  112. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  113. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  114. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  115. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  116. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  117. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  118. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  119. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  120. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  121. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  122. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  123. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  124. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  125. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  126. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  127. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  128. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  129. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  130. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  131. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  132. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  133. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  134. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  135. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  136. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  137. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  138. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  139. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  140. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  141. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  142. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  143. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  144. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  145. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  146. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  147. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  148. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  149. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  150. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  151. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  152. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  153. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  154. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  155. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  156. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  157. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  158. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  159. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  160. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  161. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  162. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  163. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  164. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  165. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  166. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/relations.py +0 -0
  167. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  168. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  169. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  170. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  171. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  172. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  173. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  174. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  175. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/serialization.py +0 -0
  176. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  177. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  178. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  179. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  180. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  181. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  182. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  183. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  184. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  185. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  186. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  187. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  188. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  189. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/types/values.py +0 -0
  190. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/dsl/utils.py +0 -0
  191. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/graphs/__init__.py +0 -0
  192. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/__init__.py +0 -0
  193. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  194. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  195. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  196. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  197. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  198. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  199. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  200. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  201. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  202. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  203. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  204. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  205. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  206. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  207. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  208. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  209. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  210. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  211. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  212. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  213. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  214. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  215. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  216. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/__init__.py +0 -0
  217. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/api/__init__.py +0 -0
  218. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/benchmarks/__init__.py +0 -0
  219. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/graph/__init__.py +0 -0
  220. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/path_algorithms/__init__.py +0 -0
  221. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/path_algorithms/find_paths/__init__.py +0 -0
  222. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_repetition/__init__.py +0 -0
  223. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_upto/__init__.py +0 -0
  224. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/path_algorithms/single/__init__.py +0 -0
  225. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_repetition/__init__.py +0 -0
  226. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_upto/__init__.py +0 -0
  227. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/path_algorithms/usp/__init__.py +0 -0
  228. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/rpq/__init__.py +0 -0
  229. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/utilities/__init__.py +0 -0
  230. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/paths/utilities/iterators/__init__.py +0 -0
  231. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/rel/__init__.py +0 -0
  232. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  233. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  234. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  235. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/solvers/__init__.py +0 -0
  236. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/sql/__init__.py +0 -0
  237. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  238. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  239. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/tests/__init__.py +0 -0
  240. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  241. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  242. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  243. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/__init__.py +0 -0
  244. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/base.py +0 -0
  245. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/ci.py +0 -0
  246. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/colab.py +0 -0
  247. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/generic.py +0 -0
  248. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/hex.py +0 -0
  249. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/ipython.py +0 -0
  250. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/jupyter.py +0 -0
  251. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/environments/terminal.py +0 -0
  252. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/errors.py +0 -0
  253. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/SF.py +0 -0
  254. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/__init__.py +0 -0
  255. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/graphs.py +0 -0
  256. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/inspect.py +0 -0
  257. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  258. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/api.py +0 -0
  259. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  260. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  261. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  262. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  263. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  264. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  265. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  266. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/options.py +0 -0
  267. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  268. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  269. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  270. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  271. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/paths/__init__.py +0 -0
  272. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/paths/pathfinder.rel +0 -0
  273. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  274. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/loaders/__init__.py +0 -0
  275. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/loaders/csv.py +0 -0
  276. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/loaders/loader.py +0 -0
  277. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/loaders/types.py +0 -0
  278. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/metagen.py +0 -0
  279. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/metamodel.py +0 -0
  280. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/rel.py +0 -0
  281. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/rel_emitter.py +0 -0
  282. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/rel_utils.py +0 -0
  283. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/__init__.py +0 -0
  284. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  285. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/devtools/__init__.py +0 -0
  286. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  287. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  288. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  289. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/internal/__init__.py +0 -0
  290. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/internal/annotations.py +0 -0
  291. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/internal/snowflake.py +0 -0
  292. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/__init__.py +0 -0
  293. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/builtins.py +0 -0
  294. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/compiler.py +0 -0
  295. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/constructors.py +0 -0
  296. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  297. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/ir.py +0 -0
  298. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/passes.py +0 -0
  299. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  300. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/primitives.py +0 -0
  301. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  302. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
  303. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  304. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
  305. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
  306. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/rewrite/fd_constraints.py +0 -0
  307. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  308. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  309. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/types.py +0 -0
  310. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/utils.py +0 -0
  311. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/lqp/validators.py +0 -0
  312. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  313. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/builtins.py +0 -0
  314. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  315. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  316. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  317. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/factory.py +0 -0
  318. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  319. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/ir.py +0 -0
  320. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  321. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  322. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  323. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  324. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  325. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  326. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  327. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/types.py +0 -0
  328. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/util.py +0 -0
  329. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  330. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  331. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  332. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  333. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  334. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/README.md +0 -0
  335. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/__init__.py +0 -0
  336. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/api.py +0 -0
  337. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/__init__.py +0 -0
  338. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/grid_graph.py +0 -0
  339. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/code_organization.md +0 -0
  340. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/Movies.ipynb +0 -0
  341. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/basic_example.py +0 -0
  342. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/minimal_engine_warmup.py +0 -0
  343. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movie_example.py +0 -0
  344. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/actedin.csv +0 -0
  345. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/directed.csv +0 -0
  346. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/follows.csv +0 -0
  347. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/movies.csv +0 -0
  348. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/person.csv +0 -0
  349. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/produced.csv +0 -0
  350. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/ratings.csv +0 -0
  351. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/wrote.csv +0 -0
  352. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_benchmark.py +0 -0
  353. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_example.py +0 -0
  354. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/examples/pattern_to_automaton.py +0 -0
  355. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/find_paths_via_automaton.py +0 -0
  356. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/graph.py +0 -0
  357. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/__init__.py +0 -0
  358. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/find_paths.py +0 -0
  359. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  360. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  361. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/single.py +0 -0
  362. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  363. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  364. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-old.py +0 -0
  365. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-tuple.py +0 -0
  366. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp.py +0 -0
  367. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/product_graph.py +0 -0
  368. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/rpq/__init__.py +0 -0
  369. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/rpq/automaton.py +0 -0
  370. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/rpq/diagnostics.py +0 -0
  371. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/rpq/filter.py +0 -0
  372. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/rpq/glushkov.py +0 -0
  373. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/rpq/rpq.py +0 -0
  374. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/rpq/transition.py +0 -0
  375. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_max_length.py +0 -0
  376. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_multiple.py +0 -0
  377. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_single.py +0 -0
  378. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_multiple.py +0 -0
  379. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_single.py +0 -0
  380. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  381. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  382. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  383. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  384. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_paths.py +0 -0
  385. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks.py +0 -0
  386. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks_undirected.py +0 -0
  387. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  388. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  389. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  390. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  391. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_multiple.py +0 -0
  392. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_single.py +0 -0
  393. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/utilities/__init__.py +0 -0
  394. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/utilities/iterators.py +0 -0
  395. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/utilities/prefix_sum.py +0 -0
  396. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/paths/utilities/utilities.py +0 -0
  397. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  398. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  399. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  400. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  401. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  402. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/rel/__init__.py +0 -0
  403. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/rel/builtins.py +0 -0
  404. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/rel/compiler.py +0 -0
  405. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/rel/rel.py +0 -0
  406. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  407. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  408. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/__init__.py +0 -0
  409. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/compiler.py +0 -0
  410. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  411. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  412. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  413. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  414. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  415. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  416. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  417. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  418. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/sql/sql.py +0 -0
  419. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/__init__.py +0 -0
  420. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/constraints.py +0 -0
  421. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/datetime.py +0 -0
  422. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/decimals.py +0 -0
  423. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/floats.py +0 -0
  424. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/integers.py +0 -0
  425. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/math.py +0 -0
  426. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/pragmas.py +0 -0
  427. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/re.py +0 -0
  428. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/std.py +0 -0
  429. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/std/strings.py +0 -0
  430. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/tests/__init__.py +0 -0
  431. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/tests/logging.py +0 -0
  432. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  433. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  434. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/semantics/tests/utils.py +0 -0
  435. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/std/__init__.py +0 -0
  436. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/std/aggregates.py +0 -0
  437. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/std/dates.py +0 -0
  438. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/std/graphs.py +0 -0
  439. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/std/inspect.py +0 -0
  440. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/std/math.py +0 -0
  441. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/std/re.py +0 -0
  442. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/std/strings.py +0 -0
  443. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/__init__.py +0 -0
  444. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  445. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/cli_helpers.py +0 -0
  446. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/debugger.py +0 -0
  447. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/debugger_client.py +0 -0
  448. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/debugger_server.py +0 -0
  449. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/dev.py +0 -0
  450. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/notes +0 -0
  451. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/qb_debugger.py +0 -0
  452. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/tools/snapshot_viewer.py +0 -0
  453. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/__init__.py +0 -0
  454. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/clean_up_databases.py +0 -0
  455. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/constants.py +0 -0
  456. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/format.py +0 -0
  457. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/graph.py +0 -0
  458. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/list_databases.py +0 -0
  459. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/otel_handler.py +0 -0
  460. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/snowflake_handler.py +0 -0
  461. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/span_format_test.py +0 -0
  462. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/span_tracker.py +0 -0
  463. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/spans_file_handler.py +0 -0
  464. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/timeout.py +0 -0
  465. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai/util/tracing_handler.py +0 -0
  466. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai_test_util/__init__.py +0 -0
  467. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai_test_util/fixtures.py +0 -0
  468. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai_test_util/snapshot.py +0 -0
  469. {relationalai-0.12.0 → relationalai-0.12.2}/src/relationalai_test_util/traceback.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.12.0
3
+ Version: 0.12.2
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = 'relationalai'
3
- version = '0.12.0'
3
+ version = '0.12.2'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -49,6 +49,11 @@ class DirectAccessClient:
49
49
  "suspend_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}/suspend"),
50
50
  "resume_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}/resume_async"),
51
51
  "prepare_index": Endpoint(method="POST", endpoint="/v1alpha1/index/prepare"),
52
+ "get_job": Endpoint(method="GET", endpoint="/v1alpha1/jobs/{job_type}/{job_id}"),
53
+ "list_jobs": Endpoint(method="GET", endpoint="/v1alpha1/jobs"),
54
+ "get_job_events": Endpoint(method="GET", endpoint="/v1alpha1/jobs/{job_type}/{job_id}/events/{stream_name}"),
55
+ "create_job": Endpoint(method="POST", endpoint="/v1alpha1/jobs"),
56
+ "cancel_job": Endpoint(method="POST", endpoint="/v1alpha1/jobs/{job_type}/{job_id}/cancel"),
52
57
  }
53
58
  self.http_session = self._create_retry_session()
54
59
 
@@ -41,7 +41,7 @@ from ..clients.types import AvailableModel, EngineState, Import, ImportSource, I
41
41
  from ..clients.config import Config, ConfigStore, ENDPOINT_FILE
42
42
  from ..clients.client import Client, ExportParams, ProviderBase, ResourcesBase
43
43
  from ..clients.direct_access_client import DirectAccessClient
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
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, normalize_datetime
45
45
  from ..environments import runtime_env, HexEnvironment, SnowbookEnvironment
46
46
  from .. import dsl, rel, metamodel as m
47
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
@@ -761,13 +761,13 @@ Otherwise, remove it from your '{profile}' configuration profile.
761
761
  with debugging.span("create_model", name=name):
762
762
  self._exec(f"call {APP_NAME}.api.create_database('{name}', false, {debugging.gen_current_propagation_headers()});")
763
763
 
764
- def delete_graph(self, name:str, force=False):
764
+ def delete_graph(self, name:str, force=False, language:str="rel"):
765
765
  prop_hdrs = debugging.gen_current_propagation_headers()
766
766
  if self.config.get("use_graph_index", USE_GRAPH_INDEX):
767
767
  keep_database = not force and self.config.get("reuse_model", True)
768
- with debugging.span("release_index", name=name, keep_database=keep_database):
768
+ with debugging.span("release_index", name=name, keep_database=keep_database, language=language):
769
769
  #TODO add headers to release_index
770
- response = self._exec(f"call {APP_NAME}.api.release_index('{name}', OBJECT_CONSTRUCT('keep_database', {keep_database}));")
770
+ response = self._exec(f"call {APP_NAME}.api.release_index('{name}', OBJECT_CONSTRUCT('keep_database', {keep_database}, 'language', '{language}'));")
771
771
  if response:
772
772
  result = next(iter(response))
773
773
  obj = json.loads(result["RELEASE_INDEX"])
@@ -795,6 +795,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
795
795
  model: str,
796
796
  engine_name: str,
797
797
  engine_size: str | None = None,
798
+ language: str = "rel",
798
799
  program_span_id: str | None = None,
799
800
  headers: Dict | None = None,
800
801
  ):
@@ -805,6 +806,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
805
806
  model,
806
807
  engine_name,
807
808
  engine_size,
809
+ language,
808
810
  program_span_id,
809
811
  headers,
810
812
  self.generation
@@ -1867,7 +1869,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
1867
1869
  except Exception as e:
1868
1870
  err_message = str(e).lower()
1869
1871
  if _is_engine_issue(err_message):
1870
- self.auto_create_engine(engine)
1872
+ self.auto_create_engine(engine, headers=headers)
1871
1873
  self._exec_async_v2(
1872
1874
  database, engine, raw_code_b64, inputs, readonly, nowait_durable,
1873
1875
  headers=headers, bypass_index=bypass_index, language='lqp',
@@ -1907,7 +1909,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
1907
1909
  except Exception as e:
1908
1910
  err_message = str(e).lower()
1909
1911
  if _is_engine_issue(err_message):
1910
- self.auto_create_engine(engine)
1912
+ self.auto_create_engine(engine, headers=headers)
1911
1913
  return self._exec_async_v2(
1912
1914
  database,
1913
1915
  engine,
@@ -1970,9 +1972,9 @@ Otherwise, remove it from your '{profile}' configuration profile.
1970
1972
  if use_graph_index:
1971
1973
  # we do not provide a default value for query_timeout_mins so that we can control the default on app level
1972
1974
  if query_timeout_mins is not None:
1973
- res = self._exec(f"call {APP_NAME}.api.exec_into_table(?, ?, ?, ?, ?, ?, ?, ?);", [database, engine, raw_code, output_table, readonly, nowait_durable, skip_invalid_data, query_timeout_mins])
1975
+ res = self._exec(f"call {APP_NAME}.api.exec_into_table(?, ?, ?, ?, ?, NULL, ?, {headers}, ?, ?);", [database, engine, raw_code, output_table, readonly, nowait_durable, skip_invalid_data, query_timeout_mins])
1974
1976
  else:
1975
- res = self._exec(f"call {APP_NAME}.api.exec_into_table(?, ?, ?, ?, ?, ?, ?);", [database, engine, raw_code, output_table, readonly, nowait_durable, skip_invalid_data])
1977
+ res = self._exec(f"call {APP_NAME}.api.exec_into_table(?, ?, ?, ?, ?, NULL, ?, {headers}, ?);", [database, engine, raw_code, output_table, readonly, nowait_durable, skip_invalid_data])
1976
1978
  txn_id = json.loads(res[0]["EXEC_INTO_TABLE"])["rai_transaction_id"]
1977
1979
  rejected_rows = json.loads(res[0]["EXEC_INTO_TABLE"]).get("rejected_rows", [])
1978
1980
  rejected_rows_count = json.loads(res[0]["EXEC_INTO_TABLE"]).get("rejected_rows_count", 0)
@@ -2047,9 +2049,10 @@ Otherwise, remove it from your '{profile}' configuration profile.
2047
2049
  app_name = self.get_app_name()
2048
2050
 
2049
2051
  source_types = dict[str, SourceInfo]()
2050
- partitioned_sources: dict[str, dict[str, list[str]]] = defaultdict(
2052
+ partitioned_sources: dict[str, dict[str, list[dict[str, str]]]] = defaultdict(
2051
2053
  lambda: defaultdict(list)
2052
2054
  )
2055
+ fqn_to_parts: dict[str, tuple[str, str, str]] = {}
2053
2056
 
2054
2057
  for source in sources:
2055
2058
  parser = IdentityParser(source, True)
@@ -2057,82 +2060,219 @@ Otherwise, remove it from your '{profile}' configuration profile.
2057
2060
  assert len(parsed) == 4, f"Invalid source: {source}"
2058
2061
  db, schema, entity, identity = parsed
2059
2062
  assert db and schema and entity and identity, f"Invalid source: {source}"
2060
- source_types[identity] = cast(SourceInfo, {"type": None, "state": "", "columns_hash": None})
2061
- partitioned_sources[db][schema].append(entity)
2062
-
2063
- # TODO: Move to NA layer
2064
- query = (
2065
- " UNION ALL ".join(
2066
- f"""SELECT
2067
- inf.FQN,
2068
- inf.KIND,
2069
- inf.COLUMNS_HASH,
2070
- IFF(DATEDIFF(second, ds.created_at::TIMESTAMP, inf.LAST_DDL::TIMESTAMP) > 0, 'STALE', 'CURRENT') AS STATE
2071
- FROM (
2072
- SELECT (SELECT {app_name}.api.normalize_fq_ids(ARRAY_CONSTRUCT(FQ_OBJECT_NAME))[0]:identifier::string) as FQ_OBJECT_NAME,
2073
- CREATED_AT FROM {app_name}.api.data_streams
2074
- WHERE RAI_DATABASE = '{PYREL_ROOT_DB}'
2075
- ) ds
2076
- RIGHT JOIN (
2063
+ source_types[identity] = cast(
2064
+ SourceInfo,
2065
+ {
2066
+ "type": None,
2067
+ "state": "",
2068
+ "columns_hash": None,
2069
+ "table_created_at": None,
2070
+ "stream_created_at": None,
2071
+ "last_ddl": None,
2072
+ },
2073
+ )
2074
+ partitioned_sources[db][schema].append({"entity": entity, "identity": identity})
2075
+ fqn_to_parts[identity] = (db, schema, entity)
2076
+
2077
+ if not partitioned_sources:
2078
+ return source_types
2079
+
2080
+ state_queries: list[str] = []
2081
+ for db, schemas in partitioned_sources.items():
2082
+ select_rows: list[str] = []
2083
+ for schema, tables in schemas.items():
2084
+ for table_info in tables:
2085
+ select_rows.append(
2086
+ "SELECT "
2087
+ f"{IdentityParser.to_sql_value(db)} AS catalog_name, "
2088
+ f"{IdentityParser.to_sql_value(schema)} AS schema_name, "
2089
+ f"{IdentityParser.to_sql_value(table_info['entity'])} AS table_name"
2090
+ )
2091
+
2092
+ if not select_rows:
2093
+ continue
2094
+
2095
+ target_entities_clause = "\n UNION ALL\n ".join(select_rows)
2096
+ # Main query:
2097
+ # 1. Enumerate the target tables via target_entities.
2098
+ # 2. Pull their metadata (last_altered, type) from INFORMATION_SCHEMA.TABLES.
2099
+ # 3. Look up the most recent stream activity for those FQNs only.
2100
+ # 4. Capture creation timestamps and use last_ddl vs created_at to classify each target,
2101
+ # so we mark tables as stale when they were recreated even if column hashes still match.
2102
+ state_queries.append(
2103
+ f"""WITH target_entities AS (
2104
+ {target_entities_clause}
2105
+ ),
2106
+ table_info AS (
2107
+ SELECT
2108
+ {app_name}.api.normalize_fq_ids(
2109
+ ARRAY_CONSTRUCT(
2110
+ CASE
2111
+ WHEN t.table_catalog = UPPER(t.table_catalog) THEN t.table_catalog
2112
+ ELSE '"' || t.table_catalog || '"'
2113
+ END || '.' ||
2114
+ CASE
2115
+ WHEN t.table_schema = UPPER(t.table_schema) THEN t.table_schema
2116
+ ELSE '"' || t.table_schema || '"'
2117
+ END || '.' ||
2118
+ CASE
2119
+ WHEN t.table_name = UPPER(t.table_name) THEN t.table_name
2120
+ ELSE '"' || t.table_name || '"'
2121
+ END
2122
+ )
2123
+ )[0]:identifier::string AS fqn,
2124
+ CONVERT_TIMEZONE('UTC', t.last_altered) AS last_ddl,
2125
+ CONVERT_TIMEZONE('UTC', t.created) AS table_created_at,
2126
+ t.table_type AS kind
2127
+ FROM {db}.INFORMATION_SCHEMA.tables t
2128
+ JOIN target_entities te
2129
+ ON t.table_catalog = te.catalog_name
2130
+ AND t.table_schema = te.schema_name
2131
+ AND t.table_name = te.table_name
2132
+ ),
2133
+ stream_activity AS (
2134
+ SELECT
2135
+ sa.fqn,
2136
+ MAX(sa.created_at) AS created_at
2137
+ FROM (
2138
+ SELECT
2139
+ {app_name}.api.normalize_fq_ids(ARRAY_CONSTRUCT(fq_object_name))[0]:identifier::string AS fqn,
2140
+ created_at
2141
+ FROM {app_name}.api.data_streams
2142
+ WHERE rai_database = '{PYREL_ROOT_DB}'
2143
+ ) sa
2144
+ JOIN table_info ti
2145
+ ON sa.fqn = ti.fqn
2146
+ GROUP BY sa.fqn
2147
+ )
2077
2148
  SELECT
2078
- (SELECT {app_name}.api.normalize_fq_ids(
2079
- ARRAY_CONSTRUCT(
2080
- CASE
2081
- WHEN t.TABLE_CATALOG = UPPER(t.TABLE_CATALOG) THEN t.TABLE_CATALOG
2082
- ELSE '"' || t.TABLE_CATALOG || '"'
2083
- END || '.' ||
2084
- CASE
2085
- WHEN t.TABLE_SCHEMA = UPPER(t.TABLE_SCHEMA) THEN t.TABLE_SCHEMA
2086
- ELSE '"' || t.TABLE_SCHEMA || '"'
2087
- END || '.' ||
2088
- CASE
2089
- WHEN t.TABLE_NAME = UPPER(t.TABLE_NAME) THEN t.TABLE_NAME
2090
- ELSE '"' || t.TABLE_NAME || '"'
2091
- END
2092
- )
2093
- )[0]:identifier::string) as FQN,
2094
- CONVERT_TIMEZONE('UTC', LAST_DDL) AS LAST_DDL,
2095
- TABLE_TYPE as KIND,
2096
- SHA2(LISTAGG(
2097
- COLUMN_NAME ||
2098
- CASE
2099
- WHEN c.NUMERIC_PRECISION IS NOT NULL AND c.NUMERIC_SCALE IS NOT NULL
2100
- THEN c.DATA_TYPE || '(' || c.NUMERIC_PRECISION || ',' || c.NUMERIC_SCALE || ')'
2101
- WHEN c.DATETIME_PRECISION IS NOT NULL
2102
- THEN c.DATA_TYPE || '(0,' || c.DATETIME_PRECISION || ')'
2103
- WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT NULL
2104
- THEN c.DATA_TYPE || '(' || c.CHARACTER_MAXIMUM_LENGTH || ')'
2105
- ELSE c.DATA_TYPE
2106
- END ||
2107
- IS_NULLABLE,
2108
- ','
2109
- ) WITHIN GROUP (ORDER BY COLUMN_NAME), 256) as COLUMNS_HASH
2110
- FROM {db}.INFORMATION_SCHEMA.TABLES t
2111
- JOIN {db}.INFORMATION_SCHEMA.COLUMNS c
2112
- ON t.TABLE_CATALOG = c.TABLE_CATALOG
2113
- AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
2114
- AND t.TABLE_NAME = c.TABLE_NAME
2115
- WHERE t.TABLE_CATALOG = {IdentityParser.to_sql_value(db)} AND ({" OR ".join(
2116
- f"(t.TABLE_SCHEMA = {IdentityParser.to_sql_value(schema)} AND t.TABLE_NAME IN ({','.join(f'{IdentityParser.to_sql_value(table)}' for table in tables)}))"
2117
- for schema, tables in schemas.items()
2118
- )})
2119
- GROUP BY t.TABLE_CATALOG, t.TABLE_SCHEMA, t.TABLE_NAME, t.LAST_DDL, t.TABLE_TYPE
2120
- ) inf on inf.FQN = ds.FQ_OBJECT_NAME
2121
- """
2122
- for db, schemas in partitioned_sources.items()
2149
+ ti.fqn,
2150
+ ti.kind,
2151
+ ti.last_ddl,
2152
+ ti.table_created_at,
2153
+ sa.created_at AS stream_created_at,
2154
+ IFF(
2155
+ DATEDIFF(second, sa.created_at::timestamp, ti.last_ddl::timestamp) > 0,
2156
+ 'STALE',
2157
+ 'CURRENT'
2158
+ ) AS state
2159
+ FROM table_info ti
2160
+ LEFT JOIN stream_activity sa
2161
+ ON sa.fqn = ti.fqn
2162
+ """
2123
2163
  )
2124
- + ";"
2164
+
2165
+ stale_fqns: list[str] = []
2166
+ for state_query in state_queries:
2167
+ for row in self._exec(state_query):
2168
+ row_dict = row.as_dict() if hasattr(row, "as_dict") else dict(row)
2169
+ row_fqn = row_dict["FQN"]
2170
+ parser = IdentityParser(row_fqn, True)
2171
+ fqn = parser.identity
2172
+ assert fqn, f"Error parsing returned FQN: {row_fqn}"
2173
+
2174
+ source_types[fqn]["type"] = (
2175
+ "TABLE" if row_dict["KIND"] == "BASE TABLE" else row_dict["KIND"]
2176
+ )
2177
+ source_types[fqn]["state"] = row_dict["STATE"]
2178
+ source_types[fqn]["last_ddl"] = normalize_datetime(row_dict.get("LAST_DDL"))
2179
+ source_types[fqn]["table_created_at"] = normalize_datetime(row_dict.get("TABLE_CREATED_AT"))
2180
+ source_types[fqn]["stream_created_at"] = normalize_datetime(row_dict.get("STREAM_CREATED_AT"))
2181
+ if row_dict["STATE"] == "STALE":
2182
+ stale_fqns.append(fqn)
2183
+
2184
+ if not stale_fqns:
2185
+ return source_types
2186
+
2187
+ # We batch stale tables by database/schema so each Snowflake query can hash
2188
+ # multiple objects at once instead of issuing one statement per table.
2189
+ stale_partitioned: dict[str, dict[str, list[dict[str, str]]]] = defaultdict(
2190
+ lambda: defaultdict(list)
2125
2191
  )
2192
+ for fqn in stale_fqns:
2193
+ db, schema, table = fqn_to_parts[fqn]
2194
+ stale_partitioned[db][schema].append({"table": table, "identity": fqn})
2195
+
2196
+ # Build one hash query per database, grouping schemas/tables inside so we submit
2197
+ # at most a handful of set-based statements to Snowflake.
2198
+ for db, schemas in stale_partitioned.items():
2199
+ column_select_rows: list[str] = []
2200
+ for schema, tables in schemas.items():
2201
+ for table_info in tables:
2202
+ # Build the literal rows for this db/schema so we can join back
2203
+ # against INFORMATION_SCHEMA.COLUMNS in a single statement.
2204
+ column_select_rows.append(
2205
+ "SELECT "
2206
+ f"{IdentityParser.to_sql_value(db)} AS catalog_name, "
2207
+ f"{IdentityParser.to_sql_value(schema)} AS schema_name, "
2208
+ f"{IdentityParser.to_sql_value(table_info['table'])} AS table_name"
2209
+ )
2126
2210
 
2127
- for row in self._exec(query):
2128
- row_fqn = row["FQN"]
2129
- parser = IdentityParser(row_fqn, True)
2130
- fqn = parser.identity
2131
- assert fqn, f"Error parsing returned FQN: {row_fqn}"
2211
+ if not column_select_rows:
2212
+ continue
2132
2213
 
2133
- source_types[fqn]["type"] = "TABLE" if row["KIND"] == "BASE TABLE" else row["KIND"]
2134
- source_types[fqn]["columns_hash"] = row["COLUMNS_HASH"]
2135
- source_types[fqn]["state"] = row["STATE"]
2214
+ target_entities_clause = "\n UNION ALL\n ".join(column_select_rows)
2215
+ # Main query: compute deterministic column hashes for every stale table
2216
+ # in this database/schema batch so we can compare schemas without a round trip per table.
2217
+ column_query = f"""WITH target_entities AS (
2218
+ {target_entities_clause}
2219
+ ),
2220
+ column_info AS (
2221
+ SELECT
2222
+ {app_name}.api.normalize_fq_ids(
2223
+ ARRAY_CONSTRUCT(
2224
+ CASE
2225
+ WHEN c.table_catalog = UPPER(c.table_catalog) THEN c.table_catalog
2226
+ ELSE '"' || c.table_catalog || '"'
2227
+ END || '.' ||
2228
+ CASE
2229
+ WHEN c.table_schema = UPPER(c.table_schema) THEN c.table_schema
2230
+ ELSE '"' || c.table_schema || '"'
2231
+ END || '.' ||
2232
+ CASE
2233
+ WHEN c.table_name = UPPER(c.table_name) THEN c.table_name
2234
+ ELSE '"' || c.table_name || '"'
2235
+ END
2236
+ )
2237
+ )[0]:identifier::string AS fqn,
2238
+ c.column_name,
2239
+ CASE
2240
+ WHEN c.numeric_precision IS NOT NULL AND c.numeric_scale IS NOT NULL
2241
+ THEN c.data_type || '(' || c.numeric_precision || ',' || c.numeric_scale || ')'
2242
+ WHEN c.datetime_precision IS NOT NULL
2243
+ THEN c.data_type || '(0,' || c.datetime_precision || ')'
2244
+ WHEN c.character_maximum_length IS NOT NULL
2245
+ THEN c.data_type || '(' || c.character_maximum_length || ')'
2246
+ ELSE c.data_type
2247
+ END AS type_signature,
2248
+ IFF(c.is_nullable = 'YES', 'YES', 'NO') AS nullable_flag
2249
+ FROM {db}.INFORMATION_SCHEMA.COLUMNS c
2250
+ JOIN target_entities te
2251
+ ON c.table_catalog = te.catalog_name
2252
+ AND c.table_schema = te.schema_name
2253
+ AND c.table_name = te.table_name
2254
+ )
2255
+ SELECT
2256
+ fqn,
2257
+ HEX_ENCODE(
2258
+ HASH_AGG(
2259
+ HASH(
2260
+ column_name,
2261
+ type_signature,
2262
+ nullable_flag
2263
+ )
2264
+ )
2265
+ ) AS columns_hash
2266
+ FROM column_info
2267
+ GROUP BY fqn
2268
+ """
2269
+
2270
+ for row in self._exec(column_query):
2271
+ row_fqn = row["FQN"]
2272
+ parser = IdentityParser(row_fqn, True)
2273
+ fqn = parser.identity
2274
+ assert fqn, f"Error parsing returned FQN: {row_fqn}"
2275
+ source_types[fqn]["columns_hash"] = row["COLUMNS_HASH"]
2136
2276
 
2137
2277
  return source_types
2138
2278
 
@@ -2142,12 +2282,13 @@ Otherwise, remove it from your '{profile}' configuration profile.
2142
2282
  invalid_sources = {}
2143
2283
  source_references = []
2144
2284
  for source, info in source_info.items():
2145
- if info['type'] is None:
2285
+ source_type = info.get("type")
2286
+ if source_type is None:
2146
2287
  missing_sources.append(source)
2147
- elif info['type'] not in ("TABLE", "VIEW"):
2148
- invalid_sources[source] = info['type']
2288
+ elif source_type not in ("TABLE", "VIEW"):
2289
+ invalid_sources[source] = source_type
2149
2290
  else:
2150
- source_references.append(f"{app_name}.api.object_reference('{info['type']}', '{source}')")
2291
+ source_references.append(f"{app_name}.api.object_reference('{source_type}', '{source}')")
2151
2292
 
2152
2293
  if missing_sources:
2153
2294
  current_role = self.get_sf_session().get_current_role()
@@ -2831,7 +2972,16 @@ class SnowflakeClient(Client):
2831
2972
 
2832
2973
  query_attrs_dict = json.loads(headers.get("X-Query-Attributes", "{}")) if headers else {}
2833
2974
  with debugging.span("poll_use_index", sources=self.resources.sources, model=model, engine=engine_name, **query_attrs_dict):
2834
- self.poll_use_index(app_name, self.resources.sources, model, engine_name, engine_size, program_span_id, headers=headers)
2975
+ self.poll_use_index(
2976
+ app_name=app_name,
2977
+ sources=self.resources.sources,
2978
+ model=model,
2979
+ engine_name=engine_name,
2980
+ engine_size=engine_size,
2981
+ language="rel",
2982
+ program_span_id=program_span_id,
2983
+ headers=headers
2984
+ )
2835
2985
 
2836
2986
  self.last_database_version = len(self.resources.sources)
2837
2987
  self._manage_packages()
@@ -2850,12 +3000,20 @@ class SnowflakeClient(Client):
2850
3000
  model: str,
2851
3001
  engine_name: str,
2852
3002
  engine_size: str | None = None,
3003
+ language: str = "rel",
2853
3004
  program_span_id: str | None = None,
2854
3005
  headers: Dict | None = None,
2855
3006
  ):
2856
3007
  assert isinstance(self.resources, Resources)
2857
3008
  return self.resources.poll_use_index(
2858
- app_name, sources, model, engine_name, engine_size, program_span_id, headers=headers
3009
+ app_name=app_name,
3010
+ sources=sources,
3011
+ model=model,
3012
+ engine_name=engine_name,
3013
+ engine_size=engine_size,
3014
+ language=language,
3015
+ program_span_id=program_span_id,
3016
+ headers=headers
2859
3017
  )
2860
3018
 
2861
3019
 
@@ -3045,6 +3203,7 @@ class DirectAccessResources(Resources):
3045
3203
  headers: Dict[str, str] | None = None,
3046
3204
  path_params: Dict[str, str] | None = None,
3047
3205
  query_params: Dict[str, str] | None = None,
3206
+ skip_auto_create: bool = False,
3048
3207
  ) -> requests.Response:
3049
3208
  with debugging.span("direct_access_request"):
3050
3209
  def _send_request():
@@ -3066,7 +3225,8 @@ class DirectAccessResources(Resources):
3066
3225
  )
3067
3226
 
3068
3227
  # fix engine on engine error and retry
3069
- if _is_engine_issue(message):
3228
+ # Skip auto-retry if skip_auto_create is True to avoid recursion
3229
+ if _is_engine_issue(message) and not skip_auto_create:
3070
3230
  engine = payload.get("engine_name", "") if payload else ""
3071
3231
  self.auto_create_engine(engine)
3072
3232
  response = _send_request()
@@ -3161,6 +3321,7 @@ class DirectAccessResources(Resources):
3161
3321
  model: str,
3162
3322
  engine_name: str,
3163
3323
  engine_size: str = "",
3324
+ language: str = "rel",
3164
3325
  rai_relations: List[str] | None = None,
3165
3326
  pyrel_program_id: str | None = None,
3166
3327
  skip_pull_relations: bool = False,
@@ -3176,6 +3337,7 @@ class DirectAccessResources(Resources):
3176
3337
  payload = {
3177
3338
  "model_name": model,
3178
3339
  "caller_engine_name": engine_name,
3340
+ "language": language,
3179
3341
  "pyrel_program_id": pyrel_program_id,
3180
3342
  "skip_pull_relations": skip_pull_relations,
3181
3343
  "rai_relations": rai_relations or [],
@@ -3201,6 +3363,7 @@ class DirectAccessResources(Resources):
3201
3363
  model: str,
3202
3364
  engine_name: str,
3203
3365
  engine_size: str | None = None,
3366
+ language: str = "rel",
3204
3367
  program_span_id: str | None = None,
3205
3368
  headers: Dict | None = None,
3206
3369
  ):
@@ -3211,6 +3374,7 @@ class DirectAccessResources(Resources):
3211
3374
  model=model,
3212
3375
  engine_name=engine_name,
3213
3376
  engine_size=engine_size,
3377
+ language=language,
3214
3378
  program_span_id=program_span_id,
3215
3379
  headers=headers,
3216
3380
  generation=self.generation,
@@ -3351,14 +3515,14 @@ class DirectAccessResources(Resources):
3351
3515
  with debugging.span("create_model", dbname=name):
3352
3516
  return self._create_database(name,"")
3353
3517
 
3354
- def delete_graph(self, name:str, force=False):
3518
+ def delete_graph(self, name:str, force=False, language: str = "rel"):
3355
3519
  prop_hdrs = debugging.gen_current_propagation_headers()
3356
3520
  if self.config.get("use_graph_index", USE_GRAPH_INDEX):
3357
3521
  keep_database = not force and self.config.get("reuse_model", True)
3358
- with debugging.span("release_index", name=name, keep_database=keep_database):
3522
+ with debugging.span("release_index", name=name, keep_database=keep_database, language=language):
3359
3523
  response = self.request(
3360
3524
  "release_index",
3361
- payload={"model_name": name, "keep_database": keep_database},
3525
+ payload={"model_name": name, "keep_database": keep_database, "language": language},
3362
3526
  headers=prop_hdrs,
3363
3527
  )
3364
3528
  if (
@@ -3431,7 +3595,7 @@ class DirectAccessResources(Resources):
3431
3595
  return sorted(engines, key=lambda x: x["name"])
3432
3596
 
3433
3597
  def get_engine(self, name: str):
3434
- response = self.request("get_engine", path_params={"engine_name": name, "engine_type": "logic"})
3598
+ response = self.request("get_engine", path_params={"engine_name": name, "engine_type": "logic"}, skip_auto_create=True)
3435
3599
  if response.status_code == 404: # engine not found return 404
3436
3600
  return None
3437
3601
  elif response.status_code != 200:
@@ -3478,6 +3642,7 @@ class DirectAccessResources(Resources):
3478
3642
  payload=payload,
3479
3643
  path_params={"engine_type": "logic"},
3480
3644
  headers=headers,
3645
+ skip_auto_create=True,
3481
3646
  )
3482
3647
  if response.status_code != 200:
3483
3648
  raise ResponseStatusException(
@@ -3489,6 +3654,7 @@ class DirectAccessResources(Resources):
3489
3654
  "delete_engine",
3490
3655
  path_params={"engine_name": name, "engine_type": "logic"},
3491
3656
  headers=headers,
3657
+ skip_auto_create=True,
3492
3658
  )
3493
3659
  if response.status_code != 200:
3494
3660
  raise ResponseStatusException(
@@ -3499,6 +3665,7 @@ class DirectAccessResources(Resources):
3499
3665
  response = self.request(
3500
3666
  "suspend_engine",
3501
3667
  path_params={"engine_name": name, "engine_type": "logic"},
3668
+ skip_auto_create=True,
3502
3669
  )
3503
3670
  if response.status_code != 200:
3504
3671
  raise ResponseStatusException(
@@ -3510,6 +3677,7 @@ class DirectAccessResources(Resources):
3510
3677
  "resume_engine",
3511
3678
  path_params={"engine_name": name, "engine_type": "logic"},
3512
3679
  headers=headers,
3680
+ skip_auto_create=True,
3513
3681
  )
3514
3682
  if response.status_code != 200:
3515
3683
  raise ResponseStatusException(
@@ -38,10 +38,13 @@ class EngineState(TypedDict):
38
38
  auto_suspend: int|None
39
39
  suspends_at: datetime|None
40
40
 
41
- class SourceInfo(TypedDict):
41
+ class SourceInfo(TypedDict, total=False):
42
42
  type: str|None
43
43
  state: str
44
44
  columns_hash: str|None
45
+ table_created_at: datetime|None
46
+ stream_created_at: datetime|None
47
+ last_ddl: datetime|None
45
48
  source: str
46
49
 
47
50