relationalai 0.11.2__tar.gz → 0.11.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. {relationalai-0.11.2 → relationalai-0.11.3}/.gitignore +1 -0
  2. {relationalai-0.11.2 → relationalai-0.11.3}/PKG-INFO +1 -1
  3. {relationalai-0.11.2 → relationalai-0.11.3}/pyproject.toml +1 -1
  4. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/snowflake.py +38 -14
  5. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/types.py +1 -0
  6. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/use_index_poller.py +165 -58
  7. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/__init__.py +1 -1
  8. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/csv.py +2 -2
  9. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/executor.py +8 -6
  10. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/model2lqp.py +3 -2
  11. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/passes.py +1 -1
  12. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/primitives.py +26 -13
  13. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/builtins.py +144 -10
  14. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/helpers.py +78 -2
  15. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/core.py +289 -38
  16. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rel_utils.py +29 -0
  17. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/compiler.py +444 -187
  18. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/result_helpers.py +7 -0
  19. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/snowflake.py +9 -2
  20. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/sql.py +93 -46
  21. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/__init__.py +8 -4
  22. relationalai-0.11.3/src/relationalai/semantics/std/datetime.py +359 -0
  23. relationalai-0.11.3/src/relationalai/semantics/std/math.py +141 -0
  24. relationalai-0.11.2/src/relationalai/semantics/std/dates.py +0 -213
  25. relationalai-0.11.2/src/relationalai/semantics/std/math.py +0 -64
  26. {relationalai-0.11.2 → relationalai-0.11.3}/LICENSE +0 -0
  27. {relationalai-0.11.2 → relationalai-0.11.3}/docs/pypi/README.md +0 -0
  28. {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/.gitignore +0 -0
  29. {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  30. {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  31. {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  32. {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/index.html +0 -0
  33. {relationalai-0.11.2 → relationalai-0.11.3}/src/__init__.py +0 -0
  34. {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/__init__.py +0 -0
  35. {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/events/__init__.py +0 -0
  36. {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/procedures/__init__.py +0 -0
  37. {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/procedures/procedure.py +0 -0
  38. {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/rel/__init__.py +0 -0
  39. {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/tables/__init__.py +0 -0
  40. {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/tasks/__init__.py +0 -0
  41. {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/tasks/task.py +0 -0
  42. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/__init__.py +0 -0
  43. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/analysis/__init__.py +0 -0
  44. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/analysis/mechanistic.py +0 -0
  45. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/analysis/whynot.py +0 -0
  46. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/__init__.py +0 -0
  47. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/jwt_generator.py +0 -0
  48. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/oauth_callback_server.py +0 -0
  49. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/token_handler.py +0 -0
  50. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/util.py +0 -0
  51. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/__init__.py +0 -0
  52. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/azure.py +0 -0
  53. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/cache_store.py +0 -0
  54. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/client.py +0 -0
  55. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/config.py +0 -0
  56. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  57. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/hash_util.py +0 -0
  58. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/profile_polling.py +0 -0
  59. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/result_helpers.py +0 -0
  60. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/util.py +0 -0
  61. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/compiler.py +0 -0
  62. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/debugging.py +0 -0
  63. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/dependencies.py +0 -0
  64. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/docutils.py +0 -0
  65. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/dsl.py +0 -0
  66. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/__init__.py +0 -0
  67. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/__init__.py +0 -0
  68. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  69. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  70. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  71. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  72. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  73. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  74. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/devtools/__init__.py +0 -0
  75. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  76. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  77. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/__init__.py +0 -0
  78. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  79. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  80. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  81. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  82. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  83. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  84. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  85. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  86. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  87. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  88. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  89. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  90. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  91. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  92. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  93. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  94. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  95. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  96. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  97. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  98. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/constants.py +0 -0
  99. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  100. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  101. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  102. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  103. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  104. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  105. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  106. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  107. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  108. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/context.py +0 -0
  109. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  110. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  111. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  112. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  113. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  114. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  115. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  116. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  117. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  118. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  119. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  120. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  121. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  122. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  123. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  124. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  125. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  126. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  127. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  128. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  129. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  130. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  131. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  132. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  133. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  134. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  135. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  136. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  137. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  138. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  139. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  140. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  141. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  142. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  143. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  144. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  145. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  146. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  147. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  148. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  149. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  150. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  151. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  152. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  153. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  154. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  155. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  156. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  157. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  158. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  159. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  160. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  161. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  162. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  163. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  164. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  165. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  166. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  167. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/relations.py +0 -0
  168. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  169. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  170. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  171. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  172. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  173. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  174. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  175. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  176. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialization.py +0 -0
  177. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  178. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  179. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  180. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  181. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  182. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  183. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  184. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  185. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  186. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  187. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  188. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  189. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  190. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/values.py +0 -0
  191. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/utils.py +0 -0
  192. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/graphs/__init__.py +0 -0
  193. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/__init__.py +0 -0
  194. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  195. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  196. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  197. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  198. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  199. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  200. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  201. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  202. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  203. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  204. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  205. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  206. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  207. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  208. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  209. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  210. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  211. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  212. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  213. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  214. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  215. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  216. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  217. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/__init__.py +0 -0
  218. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/api/__init__.py +0 -0
  219. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/benchmarks/__init__.py +0 -0
  220. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/graph/__init__.py +0 -0
  221. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/__init__.py +0 -0
  222. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/find_paths/__init__.py +0 -0
  223. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_repetition/__init__.py +0 -0
  224. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_upto/__init__.py +0 -0
  225. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/single/__init__.py +0 -0
  226. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_repetition/__init__.py +0 -0
  227. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_upto/__init__.py +0 -0
  228. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/usp/__init__.py +0 -0
  229. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/rpq/__init__.py +0 -0
  230. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/utilities/__init__.py +0 -0
  231. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/utilities/iterators/__init__.py +0 -0
  232. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/rel/__init__.py +0 -0
  233. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  234. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  235. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  236. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/solvers/__init__.py +0 -0
  237. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/sql/__init__.py +0 -0
  238. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  239. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  240. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/tests/__init__.py +0 -0
  241. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  242. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  243. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  244. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/__init__.py +0 -0
  245. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/base.py +0 -0
  246. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/ci.py +0 -0
  247. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/colab.py +0 -0
  248. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/generic.py +0 -0
  249. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/hex.py +0 -0
  250. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/ipython.py +0 -0
  251. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/jupyter.py +0 -0
  252. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/snowbook.py +0 -0
  253. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/terminal.py +0 -0
  254. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/errors.py +0 -0
  255. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/SF.py +0 -0
  256. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/__init__.py +0 -0
  257. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/graphs.py +0 -0
  258. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/inspect.py +0 -0
  259. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  260. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/api.py +0 -0
  261. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  262. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  263. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  264. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  265. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  266. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  267. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  268. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/options.py +0 -0
  269. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  270. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  271. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  272. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  273. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/paths/__init__.py +0 -0
  274. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/paths/pathfinder.rel +0 -0
  275. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  276. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/solvers.py +0 -0
  277. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/loaders/__init__.py +0 -0
  278. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/loaders/csv.py +0 -0
  279. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/loaders/loader.py +0 -0
  280. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/loaders/types.py +0 -0
  281. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/metagen.py +0 -0
  282. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/metamodel.py +0 -0
  283. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/rel.py +0 -0
  284. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/rel_emitter.py +0 -0
  285. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/rel_utils.py +0 -0
  286. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/__init__.py +0 -0
  287. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  288. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/devtools/__init__.py +0 -0
  289. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  290. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  291. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  292. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/internal/__init__.py +0 -0
  293. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/internal/annotations.py +0 -0
  294. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/internal/internal.py +0 -0
  295. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/internal/snowflake.py +0 -0
  296. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/__init__.py +0 -0
  297. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/builtins.py +0 -0
  298. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/compiler.py +0 -0
  299. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/constructors.py +0 -0
  300. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/ir.py +0 -0
  301. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  302. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  303. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/types.py +0 -0
  304. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/utils.py +0 -0
  305. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/validators.py +0 -0
  306. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  307. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  308. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  309. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  310. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/executor.py +0 -0
  311. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/factory.py +0 -0
  312. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/ir.py +0 -0
  313. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  314. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  315. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  316. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/extract_keys.py +0 -0
  317. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  318. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/fd_constraints.py +0 -0
  319. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
  320. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/gc_nodes.py +0 -0
  321. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/list_types.py +0 -0
  322. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/splinter.py +0 -0
  323. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  324. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  325. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  326. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/types.py +0 -0
  327. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/util.py +0 -0
  328. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  329. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  330. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  331. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  332. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  333. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/README.md +0 -0
  334. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/__init__.py +0 -0
  335. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/api.py +0 -0
  336. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/__init__.py +0 -0
  337. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/grid_graph.py +0 -0
  338. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/code_organization.md +0 -0
  339. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/Movies.ipynb +0 -0
  340. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/basic_example.py +0 -0
  341. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/minimal_engine_warmup.py +0 -0
  342. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movie_example.py +0 -0
  343. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/actedin.csv +0 -0
  344. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/directed.csv +0 -0
  345. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/follows.csv +0 -0
  346. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/movies.csv +0 -0
  347. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/person.csv +0 -0
  348. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/produced.csv +0 -0
  349. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/ratings.csv +0 -0
  350. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/wrote.csv +0 -0
  351. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_benchmark.py +0 -0
  352. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_example.py +0 -0
  353. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/pattern_to_automaton.py +0 -0
  354. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/find_paths_via_automaton.py +0 -0
  355. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/graph.py +0 -0
  356. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/__init__.py +0 -0
  357. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/find_paths.py +0 -0
  358. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  359. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  360. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/single.py +0 -0
  361. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  362. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  363. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-old.py +0 -0
  364. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-tuple.py +0 -0
  365. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp.py +0 -0
  366. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/product_graph.py +0 -0
  367. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/__init__.py +0 -0
  368. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/automaton.py +0 -0
  369. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/diagnostics.py +0 -0
  370. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/filter.py +0 -0
  371. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/glushkov.py +0 -0
  372. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/rpq.py +0 -0
  373. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/transition.py +0 -0
  374. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_max_length.py +0 -0
  375. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_multiple.py +0 -0
  376. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_single.py +0 -0
  377. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_multiple.py +0 -0
  378. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_single.py +0 -0
  379. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  380. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  381. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  382. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  383. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_paths.py +0 -0
  384. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks.py +0 -0
  385. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks_undirected.py +0 -0
  386. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  387. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  388. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  389. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  390. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_multiple.py +0 -0
  391. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_single.py +0 -0
  392. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/__init__.py +0 -0
  393. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/iterators.py +0 -0
  394. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/prefix_sum.py +0 -0
  395. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/utilities.py +0 -0
  396. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  397. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  398. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  399. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  400. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  401. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/__init__.py +0 -0
  402. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/builtins.py +0 -0
  403. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/compiler.py +0 -0
  404. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/executor.py +0 -0
  405. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rel.py +0 -0
  406. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/__init__.py +0 -0
  407. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/cdc.py +0 -0
  408. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/extract_common.py +0 -0
  409. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/quantify_vars.py +0 -0
  410. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  411. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/__init__.py +0 -0
  412. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  413. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  414. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  415. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  416. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  417. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  418. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  419. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/constraints.py +0 -0
  420. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/decimals.py +0 -0
  421. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/floats.py +0 -0
  422. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/integers.py +0 -0
  423. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/pragmas.py +0 -0
  424. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/std.py +0 -0
  425. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/strings.py +0 -0
  426. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/__init__.py +0 -0
  427. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/logging.py +0 -0
  428. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  429. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  430. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/utils.py +0 -0
  431. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/__init__.py +0 -0
  432. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/aggregates.py +0 -0
  433. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/dates.py +0 -0
  434. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/graphs.py +0 -0
  435. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/inspect.py +0 -0
  436. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/math.py +0 -0
  437. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/re.py +0 -0
  438. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/strings.py +0 -0
  439. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/__init__.py +0 -0
  440. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  441. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/cli.py +0 -0
  442. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/cli_controls.py +0 -0
  443. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/cli_helpers.py +0 -0
  444. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/constants.py +0 -0
  445. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/debugger.py +0 -0
  446. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/debugger_client.py +0 -0
  447. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/debugger_server.py +0 -0
  448. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/dev.py +0 -0
  449. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/notes +0 -0
  450. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/qb_debugger.py +0 -0
  451. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/snapshot_viewer.py +0 -0
  452. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/__init__.py +0 -0
  453. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/clean_up_databases.py +0 -0
  454. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/constants.py +0 -0
  455. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/format.py +0 -0
  456. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/graph.py +0 -0
  457. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/list_databases.py +0 -0
  458. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/otel_configuration.py +0 -0
  459. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/otel_handler.py +0 -0
  460. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/snowflake_handler.py +0 -0
  461. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/span_format_test.py +0 -0
  462. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/span_tracker.py +0 -0
  463. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/spans_file_handler.py +0 -0
  464. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/timeout.py +0 -0
  465. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/tracing_handler.py +0 -0
  466. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai_test_util/__init__.py +0 -0
  467. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai_test_util/fixtures.py +0 -0
  468. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai_test_util/snapshot.py +0 -0
  469. {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai_test_util/traceback.py +0 -0
@@ -37,3 +37,4 @@ relationalai*.zip
37
37
  logs/
38
38
  .envrc
39
39
  metadata.json
40
+ dev-notes/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.11.2
3
+ Version: 0.11.3
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = 'relationalai'
3
- version = '0.11.2'
3
+ version = '0.11.3'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -2048,7 +2048,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
2048
2048
  assert len(parsed) == 4, f"Invalid source: {source}"
2049
2049
  db, schema, entity, identity = parsed
2050
2050
  assert db and schema and entity and identity, f"Invalid source: {source}"
2051
- source_types[identity] = cast(SourceInfo, {"type": None, "state": ""})
2051
+ source_types[identity] = cast(SourceInfo, {"type": None, "state": "", "columns_hash": None})
2052
2052
  partitioned_sources[db][schema].append(entity)
2053
2053
 
2054
2054
  # TODO: Move to NA layer
@@ -2057,6 +2057,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
2057
2057
  f"""SELECT
2058
2058
  inf.FQN,
2059
2059
  inf.KIND,
2060
+ inf.COLUMNS_HASH,
2060
2061
  IFF(DATEDIFF(second, ds.created_at::TIMESTAMP, inf.LAST_DDL::TIMESTAMP) > 0, 'STALE', 'CURRENT') AS STATE
2061
2062
  FROM (
2062
2063
  SELECT (SELECT {app_name}.api.normalize_fq_ids(ARRAY_CONSTRUCT(FQ_OBJECT_NAME))[0]:identifier::string) as FQ_OBJECT_NAME,
@@ -2068,26 +2069,45 @@ Otherwise, remove it from your '{profile}' configuration profile.
2068
2069
  (SELECT {app_name}.api.normalize_fq_ids(
2069
2070
  ARRAY_CONSTRUCT(
2070
2071
  CASE
2071
- WHEN TABLE_CATALOG = UPPER(TABLE_CATALOG) THEN TABLE_CATALOG
2072
- ELSE '"' || TABLE_CATALOG || '"'
2072
+ WHEN t.TABLE_CATALOG = UPPER(t.TABLE_CATALOG) THEN t.TABLE_CATALOG
2073
+ ELSE '"' || t.TABLE_CATALOG || '"'
2073
2074
  END || '.' ||
2074
2075
  CASE
2075
- WHEN TABLE_SCHEMA = UPPER(TABLE_SCHEMA) THEN TABLE_SCHEMA
2076
- ELSE '"' || TABLE_SCHEMA || '"'
2076
+ WHEN t.TABLE_SCHEMA = UPPER(t.TABLE_SCHEMA) THEN t.TABLE_SCHEMA
2077
+ ELSE '"' || t.TABLE_SCHEMA || '"'
2077
2078
  END || '.' ||
2078
2079
  CASE
2079
- WHEN TABLE_NAME = UPPER(TABLE_NAME) THEN TABLE_NAME
2080
- ELSE '"' || TABLE_NAME || '"'
2080
+ WHEN t.TABLE_NAME = UPPER(t.TABLE_NAME) THEN t.TABLE_NAME
2081
+ ELSE '"' || t.TABLE_NAME || '"'
2081
2082
  END
2082
2083
  )
2083
2084
  )[0]:identifier::string) as FQN,
2084
2085
  CONVERT_TIMEZONE('UTC', LAST_DDL) AS LAST_DDL,
2085
- TABLE_TYPE as KIND
2086
- FROM {db}.INFORMATION_SCHEMA.TABLES
2087
- WHERE TABLE_CATALOG = {IdentityParser.to_sql_value(db)} AND ({" OR ".join(
2088
- f"(TABLE_SCHEMA = {IdentityParser.to_sql_value(schema)} AND TABLE_NAME IN ({','.join(f'{IdentityParser.to_sql_value(table)}' for table in tables)}))"
2086
+ TABLE_TYPE as KIND,
2087
+ SHA2(LISTAGG(
2088
+ COLUMN_NAME ||
2089
+ CASE
2090
+ WHEN c.NUMERIC_PRECISION IS NOT NULL AND c.NUMERIC_SCALE IS NOT NULL
2091
+ THEN c.DATA_TYPE || '(' || c.NUMERIC_PRECISION || ',' || c.NUMERIC_SCALE || ')'
2092
+ WHEN c.DATETIME_PRECISION IS NOT NULL
2093
+ THEN c.DATA_TYPE || '(0,' || c.DATETIME_PRECISION || ')'
2094
+ WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT NULL
2095
+ THEN c.DATA_TYPE || '(' || c.CHARACTER_MAXIMUM_LENGTH || ')'
2096
+ ELSE c.DATA_TYPE
2097
+ END ||
2098
+ IS_NULLABLE,
2099
+ ','
2100
+ ) WITHIN GROUP (ORDER BY COLUMN_NAME), 256) as COLUMNS_HASH
2101
+ FROM {db}.INFORMATION_SCHEMA.TABLES t
2102
+ JOIN {db}.INFORMATION_SCHEMA.COLUMNS c
2103
+ ON t.TABLE_CATALOG = c.TABLE_CATALOG
2104
+ AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
2105
+ AND t.TABLE_NAME = c.TABLE_NAME
2106
+ WHERE t.TABLE_CATALOG = {IdentityParser.to_sql_value(db)} AND ({" OR ".join(
2107
+ 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)}))"
2089
2108
  for schema, tables in schemas.items()
2090
2109
  )})
2110
+ GROUP BY t.TABLE_CATALOG, t.TABLE_SCHEMA, t.TABLE_NAME, t.LAST_DDL, t.TABLE_TYPE
2091
2111
  ) inf on inf.FQN = ds.FQ_OBJECT_NAME
2092
2112
  """
2093
2113
  for db, schemas in partitioned_sources.items()
@@ -2102,6 +2122,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
2102
2122
  assert fqn, f"Error parsing returned FQN: {row_fqn}"
2103
2123
 
2104
2124
  source_types[fqn]["type"] = "TABLE" if row["KIND"] == "BASE TABLE" else row["KIND"]
2125
+ source_types[fqn]["columns_hash"] = row["COLUMNS_HASH"]
2105
2126
  source_types[fqn]["state"] = row["STATE"]
2106
2127
 
2107
2128
  return source_types
@@ -3058,10 +3079,13 @@ class DirectAccessResources(Resources):
3058
3079
  return self._retrieve_service_endpoint()
3059
3080
 
3060
3081
  def _retrieve_service_endpoint(self, enforce_update=False) -> str:
3082
+ account = self.config.get("account")
3083
+ app_name = self.config.get("rai_app_name")
3084
+ service_endpoint_key = f"{account}.{app_name}.service_endpoint"
3061
3085
  if self._service_endpoint and not enforce_update:
3062
3086
  return self._service_endpoint
3063
- if self._endpoint_info.get("service_endpoint", "") and not enforce_update:
3064
- self._service_endpoint = str(self._endpoint_info.get("service_endpoint", ""))
3087
+ if self._endpoint_info.get(service_endpoint_key, "") and not enforce_update:
3088
+ self._service_endpoint = str(self._endpoint_info.get(service_endpoint_key, ""))
3065
3089
  return self._service_endpoint
3066
3090
 
3067
3091
  is_snowflake_notebook = isinstance(runtime_env, SnowbookEnvironment)
@@ -3073,7 +3097,7 @@ class DirectAccessResources(Resources):
3073
3097
  else:
3074
3098
  self._service_endpoint = f"https://{result[0]['SERVICE_ENDPOINT']}"
3075
3099
 
3076
- self._endpoint_info.set("service_endpoint", self._service_endpoint)
3100
+ self._endpoint_info.set(service_endpoint_key, self._service_endpoint)
3077
3101
  # save the endpoint to `ENDPOINT_FILE` to avoid calling the endpoint with every
3078
3102
  # pyrel execution
3079
3103
  try:
@@ -41,6 +41,7 @@ class EngineState(TypedDict):
41
41
  class SourceInfo(TypedDict):
42
42
  type: str|None
43
43
  state: str
44
+ columns_hash: str|None
44
45
  source: str
45
46
 
46
47
 
@@ -155,72 +155,179 @@ class UseIndexPoller:
155
155
  # Complete the subtask immediately since it's just informational
156
156
  progress.complete_sub_task("cache_usage")
157
157
 
158
+ def _get_stream_column_hashes(self, sources: List[str]) -> Dict[str, str]:
159
+ """
160
+ Query data_streams to get current column hashes for the given sources.
161
+
162
+ Returns a dict mapping FQN -> column hash.
163
+ """
164
+ from relationalai.clients.snowflake import PYREL_ROOT_DB
165
+
166
+ fqn_list = ", ".join([f"'{source}'" for source in sources])
167
+
168
+ hash_query = f"""
169
+ SELECT
170
+ FQ_OBJECT_NAME,
171
+ SHA2(
172
+ LISTAGG(
173
+ value:name::VARCHAR ||
174
+ CASE
175
+ WHEN value:precision IS NOT NULL AND value:scale IS NOT NULL
176
+ THEN CASE value:type::VARCHAR
177
+ WHEN 'FIXED' THEN 'NUMBER'
178
+ WHEN 'REAL' THEN 'FLOAT'
179
+ WHEN 'TEXT' THEN 'TEXT'
180
+ ELSE value:type::VARCHAR
181
+ END || '(' || value:precision || ',' || value:scale || ')'
182
+ WHEN value:precision IS NOT NULL AND value:scale IS NULL
183
+ THEN CASE value:type::VARCHAR
184
+ WHEN 'FIXED' THEN 'NUMBER'
185
+ WHEN 'REAL' THEN 'FLOAT'
186
+ WHEN 'TEXT' THEN 'TEXT'
187
+ ELSE value:type::VARCHAR
188
+ END || '(0,' || value:precision || ')'
189
+ WHEN value:length IS NOT NULL
190
+ THEN CASE value:type::VARCHAR
191
+ WHEN 'FIXED' THEN 'NUMBER'
192
+ WHEN 'REAL' THEN 'FLOAT'
193
+ WHEN 'TEXT' THEN 'TEXT'
194
+ ELSE value:type::VARCHAR
195
+ END || '(' || value:length || ')'
196
+ ELSE CASE value:type::VARCHAR
197
+ WHEN 'FIXED' THEN 'NUMBER'
198
+ WHEN 'REAL' THEN 'FLOAT'
199
+ WHEN 'TEXT' THEN 'TEXT'
200
+ ELSE value:type::VARCHAR
201
+ END
202
+ END ||
203
+ CASE WHEN value:nullable::BOOLEAN THEN 'YES' ELSE 'NO' END,
204
+ ','
205
+ ) WITHIN GROUP (ORDER BY value:name::VARCHAR),
206
+ 256
207
+ ) AS STREAM_HASH
208
+ FROM {self.app_name}.api.data_streams,
209
+ LATERAL FLATTEN(input => COLUMNS) f
210
+ WHERE RAI_DATABASE = '{PYREL_ROOT_DB}' AND FQ_OBJECT_NAME IN ({fqn_list})
211
+ GROUP BY FQ_OBJECT_NAME;
212
+ """
213
+
214
+ hash_results = self.res._exec(hash_query)
215
+ return {row["FQ_OBJECT_NAME"]: row["STREAM_HASH"] for row in hash_results}
216
+
217
+ def _filter_truly_stale_sources(self, stale_sources: List[str]) -> List[str]:
218
+ """
219
+ Filter stale sources to only include those with mismatched column hashes.
220
+
221
+ A source is truly stale if:
222
+ - The stream doesn't exist (needs to be created), OR
223
+ - The column hashes don't match (needs to be recreated)
224
+ """
225
+ stream_hashes = self._get_stream_column_hashes(stale_sources)
226
+
227
+ truly_stale = []
228
+ for source in stale_sources:
229
+ source_hash = self.source_info[source].get("columns_hash")
230
+ stream_hash = stream_hashes.get(source)
231
+
232
+ # Debug prints to see hash comparison
233
+ # print(f"\n[DEBUG] Source: {source}")
234
+ # print(f" Source table hash: {source_hash}")
235
+ # print(f" Stream hash: {stream_hash}")
236
+ # print(f" Match: {source_hash == stream_hash}")
237
+ # print(f" Action: {'KEEP (valid)' if stream_hash is not None and source_hash == stream_hash else 'DELETE (stale)'}")
238
+
239
+ if stream_hash is None or source_hash != stream_hash:
240
+ truly_stale.append(source)
241
+
242
+ # print(f"\n[DEBUG] Stale sources summary:")
243
+ # print(f" Total candidates: {len(stale_sources)}")
244
+ # print(f" Truly stale: {len(truly_stale)}")
245
+ # print(f" Skipped (valid): {len(stale_sources) - len(truly_stale)}\n")
246
+
247
+ return truly_stale
248
+
249
+ def _add_deletion_subtasks(self, progress, sources: List[str]) -> None:
250
+ """Add progress subtasks for source deletion."""
251
+ if len(sources) <= MAX_INDIVIDUAL_SUBTASKS:
252
+ for i, source in enumerate(sources):
253
+ progress.add_sub_task(
254
+ f"Removing stale stream {source} ({i+1}/{len(sources)})",
255
+ task_id=f"stale_source_{i}"
256
+ )
257
+ else:
258
+ progress.add_sub_task(
259
+ f"Removing {len(sources)} stale data sources",
260
+ task_id="stale_sources_summary"
261
+ )
262
+
263
+ def _complete_deletion_subtasks(self, progress, sources: List[str], deleted_count: int) -> None:
264
+ """Complete progress subtasks for source deletion."""
265
+ if len(sources) <= MAX_INDIVIDUAL_SUBTASKS:
266
+ for i in range(len(sources)):
267
+ if f"stale_source_{i}" in progress._tasks:
268
+ progress.complete_sub_task(f"stale_source_{i}")
269
+ else:
270
+ if "stale_sources_summary" in progress._tasks:
271
+ if deleted_count > 0:
272
+ s = "s" if deleted_count > 1 else ""
273
+ progress.update_sub_task(
274
+ "stale_sources_summary",
275
+ f"Removed {deleted_count} stale data source{s}"
276
+ )
277
+ progress.complete_sub_task("stale_sources_summary")
278
+
158
279
  def _maybe_delete_stale(self, progress) -> None:
280
+ """Check for and delete stale data streams that need recreation."""
159
281
  with debugging.span("check_sources"):
160
- # Source tables that have been altered/changed since the last stream creation
161
282
  stale_sources = [
162
283
  source
163
284
  for source, info in self.source_info.items()
164
285
  if info["state"] == "STALE"
165
286
  ]
166
- if stale_sources:
167
- with DebuggingSpan("validate_sources"):
168
- try:
169
- # Delete all stale streams, so use_index could recreate them again
170
- from relationalai.clients.snowflake import PYREL_ROOT_DB
171
- query = f"CALL {self.app_name}.api.delete_data_streams({stale_sources}, '{PYREL_ROOT_DB}');"
172
-
173
- # Add subtasks based on count
174
- if len(stale_sources) <= MAX_INDIVIDUAL_SUBTASKS:
175
- # Add individual subtasks for each stale source
176
- for i, source in enumerate(stale_sources):
177
- progress.add_sub_task(f"Removing stale stream {source} ({i+1}/{len(stale_sources)})", task_id=f"stale_source_{i}")
178
- else:
179
- # Add single summary subtask for many sources
180
- progress.add_sub_task(f"Removing {len(stale_sources)} stale data sources", task_id="stale_sources_summary")
181
-
182
- delete_response = self.res._exec(query)
183
- delete_json_str = delete_response[0]["DELETE_DATA_STREAMS"].lower()
184
- delete_data = json.loads(delete_json_str)
185
- deleted_count = delete_data.get("deleted", 0)
186
- diff = len(stale_sources) - deleted_count
187
-
188
- # Complete subtasks
189
- if len(stale_sources) <= MAX_INDIVIDUAL_SUBTASKS:
190
- # Complete all individual subtasks
191
- for i in range(len(stale_sources)):
192
- if f"stale_source_{i}" in progress._tasks:
193
- progress.complete_sub_task(f"stale_source_{i}")
194
- else:
195
- # Complete summary subtask
196
- if "stale_sources_summary" in progress._tasks:
197
- if deleted_count > 0:
198
- is_many = deleted_count > 1
199
- s = "s" if is_many else ""
200
- progress.update_sub_task("stale_sources_summary", f"Removed {deleted_count} stale data source{s}")
201
- progress.complete_sub_task("stale_sources_summary")
202
-
203
- if diff > 0:
204
- errors = delete_data.get("errors", None)
205
- if errors:
206
- raise Exception(f"Error(s) deleting streams with modified sources: {errors}")
207
- except Exception as e:
208
- # Complete any remaining subtasks
209
- if len(stale_sources) <= MAX_INDIVIDUAL_SUBTASKS:
210
- for i in range(len(stale_sources)):
211
- if f"stale_source_{i}" in progress._tasks:
212
- progress.complete_sub_task(f"stale_source_{i}")
213
- else:
214
- if "stale_sources_summary" in progress._tasks:
215
- progress.update_sub_task("stale_sources_summary", f"❌ Failed to remove stale sources: {str(e)}")
216
- progress.complete_sub_task("stale_sources_summary")
217
287
 
218
- # The delete_data_streams procedure will raise an exception if the streams do not exist
219
- if "data streams do not exist" in str(e).lower():
220
- # Don't raise an error if streams don't exist - this is expected
221
- pass
222
- else:
223
- raise e from None
288
+ if not stale_sources:
289
+ return
290
+
291
+ with DebuggingSpan("validate_sources"):
292
+ try:
293
+ # Validate which sources truly need deletion by comparing column hashes
294
+ truly_stale = self._filter_truly_stale_sources(stale_sources)
295
+
296
+ if not truly_stale:
297
+ return
298
+
299
+ # Delete truly stale streams
300
+ from relationalai.clients.snowflake import PYREL_ROOT_DB
301
+ query = f"CALL {self.app_name}.api.delete_data_streams({truly_stale}, '{PYREL_ROOT_DB}');"
302
+
303
+ self._add_deletion_subtasks(progress, truly_stale)
304
+
305
+ delete_response = self.res._exec(query)
306
+ delete_json_str = delete_response[0]["DELETE_DATA_STREAMS"].lower()
307
+ delete_data = json.loads(delete_json_str)
308
+ deleted_count = delete_data.get("deleted", 0)
309
+
310
+ self._complete_deletion_subtasks(progress, truly_stale, deleted_count)
311
+
312
+ # Check for errors
313
+ diff = len(truly_stale) - deleted_count
314
+ if diff > 0:
315
+ errors = delete_data.get("errors", None)
316
+ if errors:
317
+ raise Exception(f"Error(s) deleting streams with modified sources: {errors}")
318
+
319
+ except Exception as e:
320
+ # Complete any remaining subtasks
321
+ self._complete_deletion_subtasks(progress, stale_sources, 0)
322
+ if "stale_sources_summary" in progress._tasks:
323
+ progress.update_sub_task(
324
+ "stale_sources_summary",
325
+ f"❌ Failed to remove stale sources: {str(e)}"
326
+ )
327
+
328
+ # Don't raise if streams don't exist - this is expected
329
+ if "data streams do not exist" not in str(e).lower():
330
+ raise e from None
224
331
 
225
332
  def _poll_loop(self, progress) -> None:
226
333
  source_references = self.res._get_source_references(self.source_info)
@@ -1,6 +1,6 @@
1
1
  import warnings
2
2
 
3
- from relationalai.semantics.std import range, hash, cast, dates, math, strings, decimals, integers, pragmas, \
3
+ from relationalai.semantics.std import range, hash, cast, datetime as dates, math, strings, decimals, integers, pragmas, \
4
4
  constraints, uuid_to_string
5
5
 
6
6
  __all__ = [
@@ -157,13 +157,13 @@ class CsvSourceModule:
157
157
  def _row_to_date_value_rule(column, row, value):
158
158
  parse_date = b.Relationship.builtins['parse_date']
159
159
  rez = b.Date.ref()
160
- where(parse_date(value, 'Y-m-d', rez)).define(column(row, rez))
160
+ where(parse_date(value, 'yyyy-mm-dd', rez)).define(column(row, rez))
161
161
 
162
162
  @staticmethod
163
163
  def _row_to_date_time_value_rule(column, row, value):
164
164
  parse_datetime = b.Relationship.builtins['parse_datetime']
165
165
  rez = b.DateTime.ref()
166
- where(parse_datetime(value, 'Y-m-d HH:MM:SS z', rez)).define(column(row, rez))
166
+ where(parse_datetime(value, 'yyy-mm-dd HH:MM:SS z', rez)).define(column(row, rez))
167
167
 
168
168
  @staticmethod
169
169
  def _row_to_decimal_value_rule(column, row, value):
@@ -120,13 +120,15 @@ class LQPExecutor(e.Executor):
120
120
  pyrel_errors[problem["props"]["pyrel_id"]].append(problem)
121
121
  elif abort_on_error:
122
122
  e = errors.RelQueryError(problem, source)
123
- supplementary_message = "Troubleshooting:\n" + \
124
- " 1. Please retry with a new name for your model. This can work around state-related issues.\n" + \
125
- " 2. If the error persists, please retry with the `use_lqp` flag set to `False`, for example:\n" + \
126
- " `model = Model(..., use_lqp=False)`\n" + \
127
- " This will switch the execution to the legacy backend, which may avoid the issue with some performance cost.\n"
128
123
 
129
- e.content = f"{e.content}{supplementary_message}"
124
+ if code == 'SYSTEM_INTERNAL':
125
+ supplementary_message = "Troubleshooting:\n" + \
126
+ " 1. Please retry with a new name for your model. This can work around state-related issues.\n" + \
127
+ " 2. If the error persists, please retry with the `use_lqp` flag set to `False`, for example:\n" + \
128
+ " `model = Model(..., use_lqp=False)`\n" + \
129
+ " This will switch the execution to the legacy backend, which may avoid the issue with some performance cost.\n"
130
+
131
+ e.content = f"{e.content}{supplementary_message}"
130
132
  all_errors.append(e)
131
133
  else:
132
134
  if code == "ARITY_MISMATCH":
@@ -13,7 +13,7 @@ from relationalai.semantics.lqp.utils import TranslationCtx, gen_unique_var
13
13
  from relationalai.semantics.lqp.validators import assert_valid_input
14
14
 
15
15
  from decimal import Decimal as PyDecimal
16
- from datetime import datetime, date
16
+ from datetime import datetime, date, timezone
17
17
  from typing import Tuple, cast, Union, Optional
18
18
  from warnings import warn
19
19
  import re
@@ -627,7 +627,8 @@ def to_lqp_value(value: ir.PyValue, value_type: ir.Type) -> lqp.Value:
627
627
  elif typ.type_name == lqp.TypeName.DATE and isinstance(value, date):
628
628
  val = lqp.DateValue(value=value, meta=None)
629
629
  elif typ.type_name == lqp.TypeName.DATETIME and isinstance(value, datetime):
630
- val = lqp.DateTimeValue(value=value, meta=None)
630
+ utc_value = value.astimezone(timezone.utc) if value.tzinfo is not None else value # Convert to UTC cf. Iceberg
631
+ val = lqp.DateTimeValue(value=utc_value, meta=None)
631
632
  elif typ.type_name == lqp.TypeName.BOOLEAN and isinstance(value, bool):
632
633
  val = lqp.BooleanValue(value=value, meta=None)
633
634
  else:
@@ -548,7 +548,7 @@ class PeriodMath(Pass):
548
548
  return node
549
549
 
550
550
  if node.relation.name not in {
551
- "year", "month", "week", "day", "hour", "minute", "second", "millisecond"
551
+ "year", "month", "week", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond"
552
552
  }:
553
553
  return node
554
554
 
@@ -22,12 +22,18 @@ rel_to_lqp = {
22
22
  "sinh": "rel_primitive_sinh",
23
23
  "asin": "rel_primitive_asin",
24
24
  "asinh": "rel_primitive_asinh",
25
+ "tan": "rel_primitive_tan",
26
+ "tanh": "rel_primitive_tanh",
27
+ "atan": "rel_primitive_atan",
28
+ "atanh": "rel_primitive_atanh",
29
+ "cot": "rel_primitive_cot",
30
+ "acot": "rel_primitive_acot",
25
31
  "construct_date": "rel_primitive_construct_date",
26
32
  "construct_date_from_datetime": "rel_primitive_datetime_date_convert",
27
- "construct_datetime": "rel_primitive_construct_datetime",
28
33
  "construct_datetime_ms_tz": "rel_primitive_construct_datetime",
29
34
  "hash": "rel_primitive_hash_tuple_uint128",
30
35
  "uuid_to_string": "rel_primitive_uuid_string",
36
+ "parse_uuid": "rel_primitive_parse_uuid",
31
37
  "parse_date": "rel_primitive_parse_date",
32
38
  "parse_datetime": "rel_primitive_parse_datetime",
33
39
  "parse_decimal": "rel_primitive_parse_decimal",
@@ -47,23 +53,41 @@ rel_to_lqp = {
47
53
  "replace": "rel_primitive_replace",
48
54
  "strip": "rel_primitive_trim",
49
55
  "date_year": "rel_primitive_date_year",
56
+ "date_quarter": "rel_primitive_date_quarterofyear",
50
57
  "date_month": "rel_primitive_date_month",
51
58
  "date_week": "rel_primitive_date_week",
52
59
  "date_day": "rel_primitive_date_day",
60
+ "date_dayofyear": "rel_primitive_date_dayofyear",
61
+ "date_weekday": "rel_primitive_date_dayofweek",
53
62
  "date_add": "rel_primitive_typed_add_date_period",
54
63
  "date_subtract": "rel_primitive_typed_subtract_date_period",
55
64
  "dates_period_days": "rel_primitive_date_days_between",
56
65
  "datetime_add": "rel_primitive_typed_add_datetime_period",
57
66
  "datetime_subtract": "rel_primitive_typed_subtract_datetime_period",
67
+ "datetime_year": "rel_primitive_datetime_year",
68
+ "datetime_quarter": "rel_primitive_datetime_quarterofyear",
69
+ "datetime_month": "rel_primitive_datetime_month",
58
70
  "datetime_week": "rel_primitive_datetime_week",
71
+ "datetime_day": "rel_primitive_datetime_day",
72
+ "datetime_dayofyear": "rel_primitive_datetime_dayofyear",
73
+ "datetime_hour": "rel_primitive_datetime_hour",
74
+ "datetime_minute": "rel_primitive_datetime_minute",
75
+ "datetime_second": "rel_primitive_datetime_second",
76
+ "datetime_weekday": "rel_primitive_datetime_dayofweek",
59
77
  "datetimes_period_milliseconds": "rel_primitive_datetime_milliseconds_between",
60
78
  "date_format": "rel_primitive_format_date",
61
79
  "datetime_format": "rel_primitive_format_datetime",
62
80
  "range": "rel_primitive_range",
63
81
  "natural_log": "rel_primitive_natural_log",
82
+ "log": "rel_primitive_log",
83
+ "log2": "rel_primitive_log2",
84
+ "log10": "rel_primitive_log10",
64
85
  "sqrt": "rel_primitive_sqrt",
65
86
  "isinf": "rel_primitive_isinf",
66
87
  "isnan": "rel_primitive_isnan",
88
+ "exp": "rel_primitive_natural_exp",
89
+ "erf": "rel_primitive_error_function",
90
+ "erfinv": "rel_primitive_error_function_inverse",
67
91
  # Division is monotype, but only on the input args. Until we distinguish between input
68
92
  # and output args, we can't use the same assertions for monotype-ness as the other ops.
69
93
  "/": "rel_primitive_divide_monotype",
@@ -101,18 +125,7 @@ rel_to_lqp_monotype = {
101
125
  # Insert extra terms where a raicode primitive expects more terms, and there are possible
102
126
  # defaults.
103
127
  def _extend_primitive_terms(name: str, terms: list[lqp.RelTerm], term_types: list[lqp.Type]) -> tuple[list[lqp.RelTerm], list[lqp.Type]]:
104
- if name == "rel_primitive_construct_datetime" and len(terms) == 7:
105
- # construct_datetime does not provide a timezone or milliseconds so we
106
- # default to 0 milliseconds and UTC timezone.
107
- terms = [*terms[:-1], mk_value(0), mk_value("UTC"), terms[-1]]
108
- term_types = [
109
- *term_types[:-1],
110
- mk_type(lqp.TypeName.INT),
111
- mk_type(lqp.TypeName.STRING),
112
- term_types[-1],
113
- ]
114
-
115
- elif name == "rel_primitive_parse_decimal" and len(terms) == 2:
128
+ if name == "rel_primitive_parse_decimal" and len(terms) == 2:
116
129
  assert term_types
117
130
  py_precision = term_types[1].parameters[0].value
118
131
  bit_value = mk_value(digits_to_bits(py_precision))