relationalai 0.12.11__tar.gz → 0.12.13__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 (459) hide show
  1. {relationalai-0.12.11 → relationalai-0.12.13}/PKG-INFO +1 -1
  2. {relationalai-0.12.11 → relationalai-0.12.13}/pyproject.toml +1 -1
  3. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/snowflake.py +105 -64
  4. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/passes.py +1 -1
  5. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/rewrite/annotate_constraints.py +3 -1
  6. relationalai-0.12.13/src/relationalai/semantics/lqp/rewrite/extract_common.py +338 -0
  7. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +2 -2
  8. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/rewrite/flatten.py +11 -0
  9. relationalai-0.12.11/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -384
  10. {relationalai-0.12.11 → relationalai-0.12.13}/.gitignore +0 -0
  11. {relationalai-0.12.11 → relationalai-0.12.13}/LICENSE +0 -0
  12. {relationalai-0.12.11 → relationalai-0.12.13}/docs/pypi/README.md +0 -0
  13. {relationalai-0.12.11 → relationalai-0.12.13}/frontend/debugger/dist/.gitignore +0 -0
  14. {relationalai-0.12.11 → relationalai-0.12.13}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  15. {relationalai-0.12.11 → relationalai-0.12.13}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  16. {relationalai-0.12.11 → relationalai-0.12.13}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  17. {relationalai-0.12.11 → relationalai-0.12.13}/frontend/debugger/dist/index.html +0 -0
  18. {relationalai-0.12.11 → relationalai-0.12.13}/src/__init__.py +0 -0
  19. {relationalai-0.12.11 → relationalai-0.12.13}/src/raitoolkit/__init__.py +0 -0
  20. {relationalai-0.12.11 → relationalai-0.12.13}/src/raitoolkit/events/__init__.py +0 -0
  21. {relationalai-0.12.11 → relationalai-0.12.13}/src/raitoolkit/procedures/__init__.py +0 -0
  22. {relationalai-0.12.11 → relationalai-0.12.13}/src/raitoolkit/procedures/procedure.py +0 -0
  23. {relationalai-0.12.11 → relationalai-0.12.13}/src/raitoolkit/rel/__init__.py +0 -0
  24. {relationalai-0.12.11 → relationalai-0.12.13}/src/raitoolkit/tables/__init__.py +0 -0
  25. {relationalai-0.12.11 → relationalai-0.12.13}/src/raitoolkit/tasks/__init__.py +0 -0
  26. {relationalai-0.12.11 → relationalai-0.12.13}/src/raitoolkit/tasks/task.py +0 -0
  27. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/__init__.py +0 -0
  28. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/analysis/__init__.py +0 -0
  29. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/analysis/mechanistic.py +0 -0
  30. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/analysis/whynot.py +0 -0
  31. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/auth/__init__.py +0 -0
  32. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/auth/jwt_generator.py +0 -0
  33. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/auth/oauth_callback_server.py +0 -0
  34. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/auth/token_handler.py +0 -0
  35. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/auth/util.py +0 -0
  36. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/__init__.py +0 -0
  37. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/azure.py +0 -0
  38. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/cache_store.py +0 -0
  39. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/client.py +0 -0
  40. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/config.py +0 -0
  41. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/direct_access_client.py +0 -0
  42. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  43. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/hash_util.py +0 -0
  44. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/local.py +0 -0
  45. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/profile_polling.py +0 -0
  46. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/result_helpers.py +0 -0
  47. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/types.py +0 -0
  48. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/use_index_poller.py +0 -0
  49. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/clients/util.py +0 -0
  50. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/compiler.py +0 -0
  51. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/debugging.py +0 -0
  52. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/dependencies.py +0 -0
  53. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/docutils.py +0 -0
  54. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/dsl.py +0 -0
  55. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/__init__.py +0 -0
  56. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/builder/__init__.py +0 -0
  57. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  58. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  59. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  60. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  61. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  62. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  63. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  64. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/devtools/__init__.py +0 -0
  65. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  66. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  67. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/__init__.py +0 -0
  68. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  69. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  70. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  71. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  72. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  73. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  74. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  75. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  76. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  77. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  78. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  79. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  80. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  81. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  82. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  83. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  84. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  85. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  86. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  87. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  88. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  89. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/constants.py +0 -0
  90. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  91. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  92. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  93. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  94. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  95. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  96. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  97. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  98. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  99. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/context.py +0 -0
  100. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  101. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  102. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  103. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  104. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  105. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  106. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  107. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  108. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  109. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  110. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  111. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  112. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  113. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  114. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  115. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  116. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  117. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  118. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  119. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  120. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  121. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  122. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  123. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  124. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  125. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  126. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  127. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  128. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  129. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  130. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  131. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  132. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  133. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  134. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  135. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  136. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  137. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  138. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  139. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  140. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  141. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  142. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  143. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  144. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  145. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  146. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  147. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  148. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  149. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  150. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  151. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  152. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  153. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  154. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  155. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  156. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  157. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  158. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/relations.py +0 -0
  159. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  160. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  161. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  162. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  163. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  164. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  165. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  166. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  167. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/serialization.py +0 -0
  168. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  169. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  170. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  171. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  172. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  173. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  174. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  175. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  176. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  177. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  178. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  179. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  180. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  181. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/types/values.py +0 -0
  182. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/dsl/utils.py +0 -0
  183. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/graphs/__init__.py +0 -0
  184. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/__init__.py +0 -0
  185. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  186. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  187. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  188. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  189. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  190. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  191. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  192. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  193. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  194. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  195. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  196. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  197. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  198. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  199. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  200. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  201. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  202. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  203. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  204. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  205. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  206. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  207. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  208. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/rel/__init__.py +0 -0
  209. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  210. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  211. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  212. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/solvers/__init__.py +0 -0
  213. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/sql/__init__.py +0 -0
  214. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  215. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  216. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/tests/__init__.py +0 -0
  217. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  218. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  219. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  220. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/__init__.py +0 -0
  221. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/base.py +0 -0
  222. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/ci.py +0 -0
  223. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/colab.py +0 -0
  224. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/generic.py +0 -0
  225. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/hex.py +0 -0
  226. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/ipython.py +0 -0
  227. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/jupyter.py +0 -0
  228. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/snowbook.py +0 -0
  229. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/environments/terminal.py +0 -0
  230. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/errors.py +0 -0
  231. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/SF.py +0 -0
  232. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/__init__.py +0 -0
  233. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/graphs.py +0 -0
  234. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/inspect.py +0 -0
  235. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  236. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/api.py +0 -0
  237. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  238. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  239. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  240. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  241. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  242. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  243. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  244. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/options.py +0 -0
  245. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  246. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  247. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  248. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  249. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/README.md +0 -0
  250. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/__init__.py +0 -0
  251. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/api.py +0 -0
  252. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
  253. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
  254. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/code_organization.md +0 -0
  255. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
  256. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
  257. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
  258. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
  259. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
  260. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
  261. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
  262. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
  263. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
  264. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
  265. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
  266. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
  267. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
  268. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
  269. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
  270. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
  271. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/graph.py +0 -0
  272. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
  273. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
  274. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  275. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  276. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
  277. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  278. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  279. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
  280. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
  281. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
  282. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/product_graph.py +0 -0
  283. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
  284. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
  285. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
  286. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
  287. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
  288. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
  289. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
  290. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
  291. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
  292. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
  293. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
  294. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
  295. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  296. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  297. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  298. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  299. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
  300. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
  301. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
  302. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  303. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  304. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  305. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  306. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
  307. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
  308. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  309. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
  310. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
  311. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
  312. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
  313. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/experimental/solvers.py +0 -0
  314. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/loaders/__init__.py +0 -0
  315. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/loaders/csv.py +0 -0
  316. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/loaders/loader.py +0 -0
  317. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/loaders/types.py +0 -0
  318. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/metagen.py +0 -0
  319. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/metamodel.py +0 -0
  320. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/rel.py +0 -0
  321. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/rel_emitter.py +0 -0
  322. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/rel_utils.py +0 -0
  323. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/__init__.py +0 -0
  324. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  325. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/devtools/__init__.py +0 -0
  326. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  327. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  328. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  329. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/internal/__init__.py +0 -0
  330. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/internal/annotations.py +0 -0
  331. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/internal/internal.py +0 -0
  332. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/internal/snowflake.py +0 -0
  333. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/README.md +0 -0
  334. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/__init__.py +0 -0
  335. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/builtins.py +0 -0
  336. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/compiler.py +0 -0
  337. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/constructors.py +0 -0
  338. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/executor.py +0 -0
  339. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  340. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/ir.py +0 -0
  341. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/model2lqp.py +0 -0
  342. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  343. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/primitives.py +0 -0
  344. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  345. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
  346. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  347. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
  348. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
  349. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -0
  350. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  351. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  352. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/types.py +0 -0
  353. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/utils.py +0 -0
  354. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/lqp/validators.py +0 -0
  355. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  356. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/builtins.py +0 -0
  357. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  358. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  359. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  360. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/executor.py +0 -0
  361. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/factory.py +0 -0
  362. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  363. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/ir.py +0 -0
  364. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  365. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  366. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  367. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
  368. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  369. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  370. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
  371. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/types.py +0 -0
  372. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/util.py +0 -0
  373. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  374. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  375. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
  376. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  377. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  378. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
  379. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  380. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  381. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  382. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  383. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  384. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  385. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/rel/__init__.py +0 -0
  386. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/rel/builtins.py +0 -0
  387. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/rel/compiler.py +1 -1
  388. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/rel/executor.py +0 -0
  389. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/rel/rel.py +0 -0
  390. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  391. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  392. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/__init__.py +0 -0
  393. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/compiler.py +0 -0
  394. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  395. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  396. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  397. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
  398. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  399. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  400. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  401. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  402. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  403. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/sql/sql.py +0 -0
  404. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/__init__.py +0 -0
  405. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/constraints.py +0 -0
  406. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/datetime.py +0 -0
  407. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/decimals.py +0 -0
  408. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/floats.py +0 -0
  409. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/integers.py +0 -0
  410. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/math.py +0 -0
  411. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/pragmas.py +0 -0
  412. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/re.py +0 -0
  413. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/std.py +0 -0
  414. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/std/strings.py +0 -0
  415. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/tests/__init__.py +0 -0
  416. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/tests/logging.py +0 -0
  417. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  418. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  419. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/semantics/tests/utils.py +0 -0
  420. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/std/__init__.py +0 -0
  421. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/std/aggregates.py +0 -0
  422. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/std/dates.py +0 -0
  423. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/std/graphs.py +0 -0
  424. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/std/inspect.py +0 -0
  425. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/std/math.py +0 -0
  426. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/std/re.py +0 -0
  427. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/std/strings.py +0 -0
  428. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/__init__.py +0 -0
  429. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  430. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/cli.py +0 -0
  431. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/cli_controls.py +0 -0
  432. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/cli_helpers.py +0 -0
  433. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/constants.py +0 -0
  434. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/debugger.py +0 -0
  435. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/debugger_client.py +0 -0
  436. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/debugger_server.py +0 -0
  437. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/dev.py +0 -0
  438. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/notes +0 -0
  439. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/qb_debugger.py +0 -0
  440. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/query_utils.py +0 -0
  441. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/tools/snapshot_viewer.py +0 -0
  442. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/__init__.py +0 -0
  443. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/clean_up_databases.py +0 -0
  444. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/constants.py +0 -0
  445. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/format.py +0 -0
  446. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/graph.py +0 -0
  447. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/list_databases.py +0 -0
  448. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/otel_configuration.py +0 -0
  449. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/otel_handler.py +0 -0
  450. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/snowflake_handler.py +0 -0
  451. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/span_format_test.py +0 -0
  452. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/span_tracker.py +0 -0
  453. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/spans_file_handler.py +0 -0
  454. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/timeout.py +0 -0
  455. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai/util/tracing_handler.py +0 -0
  456. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai_test_util/__init__.py +0 -0
  457. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai_test_util/fixtures.py +0 -0
  458. {relationalai-0.12.11 → relationalai-0.12.13}/src/relationalai_test_util/snapshot.py +0 -0
  459. {relationalai-0.12.11 → relationalai-0.12.13}/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.11
3
+ Version: 0.12.13
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.11'
3
+ version = '0.12.13'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -441,7 +441,8 @@ class Resources(ResourcesBase):
441
441
  code: str,
442
442
  params: List[Any] | Any | None = None,
443
443
  raw: bool = False,
444
- help: bool = True
444
+ help: bool = True,
445
+ skip_engine_db_error_retry: bool = False
445
446
  ) -> Any:
446
447
  # print(f"\n--- sql---\n{code}\n--- end sql---\n")
447
448
  if not self._session:
@@ -467,7 +468,8 @@ class Resources(ResourcesBase):
467
468
  if re.search(f"database '{rai_app}' does not exist or not authorized.".lower(), orig_message):
468
469
  exception = SnowflakeAppMissingException(rai_app, current_role)
469
470
  raise exception from None
470
- if _is_engine_issue(orig_message) or _is_database_issue(orig_message):
471
+ # skip initializing the index if the query is a user transaction. exec_raw/exec_lqp will handle that case with the correct request headers.
472
+ if (_is_engine_issue(orig_message) or _is_database_issue(orig_message)) and not skip_engine_db_error_retry:
471
473
  try:
472
474
  self._poll_use_index(
473
475
  app_name=self.get_app_name(),
@@ -1609,9 +1611,11 @@ Otherwise, remove it from your '{profile}' configuration profile.
1609
1611
  sql_string = f"CALL {APP_NAME}.api.exec_async_v2('{database}','{engine}', ?, {inputs}, {readonly}, {nowait_durable}, '{language}', {query_timeout_mins}, {request_headers});"
1610
1612
  else:
1611
1613
  sql_string = f"CALL {APP_NAME}.api.exec_async_v2('{database}','{engine}', ?, {inputs}, {readonly}, {nowait_durable}, '{language}', {request_headers});"
1614
+ # Don't let exec setup GI on failure, exec_raw and exec_lqp will do that and add the correct headers.
1612
1615
  response = self._exec(
1613
1616
  sql_string,
1614
1617
  raw_code,
1618
+ skip_engine_db_error_retry=True,
1615
1619
  )
1616
1620
  if not response:
1617
1621
  raise Exception("Failed to create transaction")
@@ -1629,6 +1633,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
1629
1633
  bypass_index=False,
1630
1634
  language: str = "rel",
1631
1635
  query_timeout_mins: int | None = None,
1636
+ gi_setup_skipped: bool = False,
1632
1637
  ):
1633
1638
  if inputs is None:
1634
1639
  inputs = {}
@@ -1638,6 +1643,8 @@ Otherwise, remove it from your '{profile}' configuration profile.
1638
1643
  with debugging.span("transaction", **query_attrs_dict) as txn_span:
1639
1644
  with debugging.span("create_v2", **query_attrs_dict) as create_span:
1640
1645
  request_headers['user-agent'] = get_pyrel_version(self.generation)
1646
+ request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
1647
+ request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
1641
1648
  response = self._exec_rai_app(
1642
1649
  database=database,
1643
1650
  engine=engine,
@@ -1897,26 +1904,29 @@ Otherwise, remove it from your '{profile}' configuration profile.
1897
1904
  # Exec
1898
1905
  #--------------------------------------------------
1899
1906
 
1900
- def exec_lqp(
1907
+ def _exec_with_gi_retry(
1901
1908
  self,
1902
1909
  database: str,
1903
1910
  engine: str | None,
1904
- raw_code: bytes,
1905
- readonly=True,
1906
- *,
1907
- inputs: Dict | None = None,
1908
- nowait_durable=False,
1909
- headers: Dict | None = None,
1910
- bypass_index=False,
1911
- query_timeout_mins: int | None = None,
1911
+ raw_code: str,
1912
+ inputs: Dict | None,
1913
+ readonly: bool,
1914
+ nowait_durable: bool,
1915
+ headers: Dict | None,
1916
+ bypass_index: bool,
1917
+ language: str,
1918
+ query_timeout_mins: int | None,
1912
1919
  ):
1913
- raw_code_b64 = base64.b64encode(raw_code).decode("utf-8")
1920
+ """Execute with graph index retry logic.
1914
1921
 
1922
+ Attempts execution with gi_setup_skipped=True first. If an engine or database
1923
+ issue occurs, polls use_index and retries with gi_setup_skipped=False.
1924
+ """
1915
1925
  try:
1916
1926
  return self._exec_async_v2(
1917
- database, engine, raw_code_b64, inputs, readonly, nowait_durable,
1918
- headers=headers, bypass_index=bypass_index, language='lqp',
1919
- query_timeout_mins=query_timeout_mins,
1927
+ database, engine, raw_code, inputs, readonly, nowait_durable,
1928
+ headers=headers, bypass_index=bypass_index, language=language,
1929
+ query_timeout_mins=query_timeout_mins, gi_setup_skipped=True,
1920
1930
  )
1921
1931
  except Exception as e:
1922
1932
  err_message = str(e).lower()
@@ -1933,13 +1943,32 @@ Otherwise, remove it from your '{profile}' configuration profile.
1933
1943
  )
1934
1944
 
1935
1945
  return self._exec_async_v2(
1936
- database, engine, raw_code_b64, inputs, readonly, nowait_durable,
1937
- headers=headers, bypass_index=bypass_index, language='lqp',
1938
- query_timeout_mins=query_timeout_mins,
1946
+ database, engine, raw_code, inputs, readonly, nowait_durable,
1947
+ headers=headers, bypass_index=bypass_index, language=language,
1948
+ query_timeout_mins=query_timeout_mins, gi_setup_skipped=False,
1939
1949
  )
1940
1950
  else:
1941
1951
  raise e
1942
1952
 
1953
+ def exec_lqp(
1954
+ self,
1955
+ database: str,
1956
+ engine: str | None,
1957
+ raw_code: bytes,
1958
+ readonly=True,
1959
+ *,
1960
+ inputs: Dict | None = None,
1961
+ nowait_durable=False,
1962
+ headers: Dict | None = None,
1963
+ bypass_index=False,
1964
+ query_timeout_mins: int | None = None,
1965
+ ):
1966
+ raw_code_b64 = base64.b64encode(raw_code).decode("utf-8")
1967
+ return self._exec_with_gi_retry(
1968
+ database, engine, raw_code_b64, inputs, readonly, nowait_durable,
1969
+ headers, bypass_index, 'lqp', query_timeout_mins
1970
+ )
1971
+
1943
1972
 
1944
1973
  def exec_raw(
1945
1974
  self,
@@ -1955,45 +1984,10 @@ Otherwise, remove it from your '{profile}' configuration profile.
1955
1984
  query_timeout_mins: int | None = None,
1956
1985
  ):
1957
1986
  raw_code = raw_code.replace("'", "\\'")
1958
-
1959
- try:
1960
- return self._exec_async_v2(
1961
- database,
1962
- engine,
1963
- raw_code,
1964
- inputs,
1965
- readonly,
1966
- nowait_durable,
1967
- headers=headers,
1968
- bypass_index=bypass_index,
1969
- query_timeout_mins=query_timeout_mins,
1970
- )
1971
- except Exception as e:
1972
- err_message = str(e).lower()
1973
- if _is_engine_issue(err_message) or _is_database_issue(err_message):
1974
- engine_name = engine or self.get_default_engine_name()
1975
- engine_size = self.config.get_default_engine_size()
1976
- self._poll_use_index(
1977
- app_name=self.get_app_name(),
1978
- sources=self.sources,
1979
- model=database,
1980
- engine_name=engine_name,
1981
- engine_size=engine_size,
1982
- headers=headers,
1983
- )
1984
- return self._exec_async_v2(
1985
- database,
1986
- engine,
1987
- raw_code,
1988
- inputs,
1989
- readonly,
1990
- nowait_durable,
1991
- headers=headers,
1992
- bypass_index=bypass_index,
1993
- query_timeout_mins=query_timeout_mins,
1994
- )
1995
- else:
1996
- raise e
1987
+ return self._exec_with_gi_retry(
1988
+ database, engine, raw_code, inputs, readonly, nowait_durable,
1989
+ headers, bypass_index, 'rel', query_timeout_mins
1990
+ )
1997
1991
 
1998
1992
 
1999
1993
  def format_results(self, results, task:m.Task|None=None) -> Tuple[DataFrame, List[Any]]:
@@ -3281,6 +3275,7 @@ class DirectAccessResources(Resources):
3281
3275
  path_params: Dict[str, str] | None = None,
3282
3276
  query_params: Dict[str, str] | None = None,
3283
3277
  skip_auto_create: bool = False,
3278
+ skip_engine_db_error_retry: bool = False,
3284
3279
  ) -> requests.Response:
3285
3280
  with debugging.span("direct_access_request"):
3286
3281
  def _send_request():
@@ -3314,8 +3309,8 @@ class DirectAccessResources(Resources):
3314
3309
  message = "" # Not used when we check status_code directly
3315
3310
 
3316
3311
  # fix engine on engine error and retry
3317
- # Skip auto-retry if skip_auto_create is True to avoid recursion
3318
- if (_is_engine_issue(message) and not skip_auto_create) or _is_database_issue(message):
3312
+ # Skip setting up GI if skip_auto_create is True to avoid recursion or skip_engine_db_error_retry is true to let _exec_async_v2 perform the retry with the correct headers.
3313
+ if ((_is_engine_issue(message) and not skip_auto_create) or _is_database_issue(message)) and not skip_engine_db_error_retry:
3319
3314
  engine_name = payload.get("caller_engine_name", "") if payload else ""
3320
3315
  engine_name = engine_name or self.get_default_engine_name()
3321
3316
  engine_size = self.config.get_default_engine_size()
@@ -3340,6 +3335,48 @@ class DirectAccessResources(Resources):
3340
3335
  raise e
3341
3336
  return response
3342
3337
 
3338
+ def _txn_request_with_gi_retry(
3339
+ self,
3340
+ payload: Dict,
3341
+ headers: Dict[str, str],
3342
+ query_params: Dict,
3343
+ engine: Union[str, None],
3344
+ ):
3345
+ """Make request with graph index retry logic.
3346
+
3347
+ Attempts request with gi_setup_skipped=True first. If an engine or database
3348
+ issue occurs, polls use_index and retries with gi_setup_skipped=False.
3349
+ """
3350
+ response = self.request(
3351
+ "create_txn", payload=payload, headers=headers, query_params=query_params, skip_auto_create=True, skip_engine_db_error_retry=True
3352
+ )
3353
+
3354
+ if response.status_code != 200:
3355
+ try:
3356
+ message = response.json().get("message", "")
3357
+ except requests.exceptions.JSONDecodeError:
3358
+ message = ""
3359
+
3360
+ if _is_engine_issue(message) or _is_database_issue(message):
3361
+ engine_name = engine or self.get_default_engine_name()
3362
+ engine_size = self.config.get_default_engine_size()
3363
+ self._poll_use_index(
3364
+ app_name=self.get_app_name(),
3365
+ sources=self.sources,
3366
+ model=self.database,
3367
+ engine_name=engine_name,
3368
+ engine_size=engine_size,
3369
+ headers=headers,
3370
+ )
3371
+ headers['gi_setup_skipped'] = 'False'
3372
+ response = self.request(
3373
+ "create_txn", payload=payload, headers=headers, query_params=query_params, skip_auto_create=True, skip_engine_db_error_retry=True
3374
+ )
3375
+ else:
3376
+ raise ResponseStatusException("Failed to create transaction.", response)
3377
+
3378
+ return response
3379
+
3343
3380
  def _exec_async_v2(
3344
3381
  self,
3345
3382
  database: str,
@@ -3352,6 +3389,7 @@ class DirectAccessResources(Resources):
3352
3389
  bypass_index=False,
3353
3390
  language: str = "rel",
3354
3391
  query_timeout_mins: int | None = None,
3392
+ gi_setup_skipped: bool = False,
3355
3393
  ):
3356
3394
 
3357
3395
  with debugging.span("transaction") as txn_span:
@@ -3374,12 +3412,15 @@ class DirectAccessResources(Resources):
3374
3412
  payload["timeout_mins"] = query_timeout_mins
3375
3413
  query_params={"use_graph_index": str(use_graph_index and not bypass_index)}
3376
3414
 
3377
- response = self.request(
3378
- "create_txn", payload=payload, headers=headers, query_params=query_params,
3379
- )
3415
+ # Add gi_setup_skipped to headers
3416
+ if headers is None:
3417
+ headers = {}
3418
+ headers["gi_setup_skipped"] = str(gi_setup_skipped)
3419
+ headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
3380
3420
 
3381
- if response.status_code != 200:
3382
- raise ResponseStatusException("Failed to create transaction.", response)
3421
+ response = self._txn_request_with_gi_retry(
3422
+ payload, headers, query_params, engine
3423
+ )
3383
3424
 
3384
3425
  artifact_info = {}
3385
3426
  response_content = response.json()
@@ -29,8 +29,8 @@ def lqp_passes() -> list[Pass]:
29
29
  InferTypes(),
30
30
  DNFUnionSplitter(),
31
31
  ExtractKeys(),
32
- ExtractCommon(),
33
32
  FormatOutputs(),
33
+ ExtractCommon(), # Extracts tasks that will become common after Flatten into their own definition
34
34
  Flatten(),
35
35
  Splinter(), # Splits multi-headed rules into multiple rules
36
36
  QuantifyVars(), # Adds missing existentials
@@ -10,7 +10,7 @@ from relationalai.semantics.lqp.rewrite.functional_dependencies import (
10
10
  is_valid_unique_constraint, normalized_fd
11
11
  )
12
12
 
13
-
13
+ _DISABLE_CONSTRAINT_DECLARATIONS = True
14
14
 
15
15
  class AnnotateConstraints(Pass):
16
16
  """
@@ -36,6 +36,8 @@ class AnnotateConstraintsRewriter(DischargeConstraintsVisitor):
36
36
  """
37
37
 
38
38
  def _should_be_declarable_constraint(self, node: Require) -> bool:
39
+ if _DISABLE_CONSTRAINT_DECLARATIONS:
40
+ return False
39
41
  if not is_valid_unique_constraint(node):
40
42
  return False
41
43
  # Currently, we only declare non-structural functional dependencies.
@@ -0,0 +1,338 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Optional
5
+ from relationalai.semantics.metamodel import ir, factory as f, helpers, visitor
6
+ from relationalai.semantics.metamodel.compiler import Pass
7
+ from relationalai.semantics.metamodel.util import OrderedSet, ordered_set
8
+ from relationalai.semantics.metamodel import dependency
9
+ from relationalai.semantics.metamodel import builtins
10
+
11
+ from functools import reduce
12
+
13
+ class ExtractCommon(Pass):
14
+ """
15
+ Pass to analyze Logical bodies and extract lookups in their own Logical if it makes
16
+ sense. The heuristic is that, if there are multiple lookups, and there are also multiple
17
+ sibling nested logicals that will eventually be extracted by Flatten, then it makes
18
+ sense to extract these logicals into their own "rule", and then make the original body
19
+ just lookup this common rule.
20
+
21
+ From:
22
+ Logical
23
+ Logical
24
+ lookup1
25
+ lookup2
26
+ Logical1 ...
27
+ Logical2 ...
28
+ To:
29
+ Logical
30
+ Logical
31
+ lookup1
32
+ lookup2
33
+ derive common
34
+ Logical
35
+ lookup common
36
+ Logical1 ...
37
+ Logical2 ...
38
+ """
39
+
40
+ # The extraction plan heuristic is as follows:
41
+ #
42
+ # Given a set of binder tasks B and a set of extractable tasks E, we find:
43
+ # - A subset of common tasks C in B, and
44
+ # - A subset of exposed variables V output from tasks in C
45
+ # where:
46
+ # - The intersection of common dependencies of all tasks in E are contained in C
47
+ # (including transitive dependencies)
48
+ # - The union of input variables for all tasks in E intersected with the output
49
+ # variables of tasks in C are contained in V
50
+
51
+ #--------------------------------------------------
52
+ # Public API
53
+ #--------------------------------------------------
54
+ def rewrite(self, model: ir.Model, options:dict={}) -> ir.Model:
55
+ # create the context
56
+ ctx = ExtractCommon.Context(model, options)
57
+
58
+ # rewrite the root
59
+ replacement = self.handle(model.root, ctx)
60
+
61
+ # the new root contains the extracted top level logicals and the rewritten root
62
+ if ctx.rewrite_ctx.top_level:
63
+ new_root = ir.Logical(model.root.engine, tuple(), tuple(ctx.rewrite_ctx.top_level + [replacement]))
64
+ else:
65
+ new_root = replacement
66
+
67
+ # create the new model, updating relations and root
68
+ return ir.Model(
69
+ model.engines,
70
+ OrderedSet.from_iterable(model.relations).update(ctx.rewrite_ctx.relations).frozen(),
71
+ model.types,
72
+ new_root
73
+ )
74
+
75
+ #--------------------------------------------------
76
+ # Extra classes
77
+ #--------------------------------------------------
78
+
79
+ class Context():
80
+ def __init__(self, model: ir.Model, options: dict):
81
+ self.rewrite_ctx = helpers.RewriteContext()
82
+ self.info = dependency.analyze(model.root)
83
+ self.options = options
84
+
85
+ @dataclass
86
+ class ExtractionPlan():
87
+ # tasks to extract to the body of the common logical
88
+ common_body: OrderedSet[ir.Task]
89
+ # tasks to remain in the original body
90
+ remaining_body: OrderedSet[ir.Task]
91
+ # variables to be exposed by the common logical
92
+ exposed_vars: OrderedSet[ir.Var]
93
+ # map from nested composite to the tasks in the common body that still need to be
94
+ # included in its body, because it contains variables not exposed by the common logical
95
+ local_dependencies: dict[ir.Task, OrderedSet[ir.Task]]
96
+ # a reference to the common connection created for this plan, if any
97
+ common_reference: Optional[ir.Lookup] = None
98
+
99
+ #--------------------------------------------------
100
+ # IR handlers
101
+ #--------------------------------------------------
102
+
103
+ def handle(self, task: ir.Task, ctx: Context):
104
+ # Currently we only extract if it's a sequence of Logicals, but we could in the
105
+ # future support other intermediate nodes
106
+ if isinstance(task, ir.Logical):
107
+ return self.handle_logical(task, ctx)
108
+ else:
109
+ return task
110
+
111
+ def handle_logical(self, task: ir.Logical, ctx: Context):
112
+ # Process the original body to find candidates for extraction. Each task is in one
113
+ # of three categories:
114
+ # - Binders: tasks that bind variables. These are candidates for extracting into
115
+ # the common body.
116
+ # - Flattenables: tasks that will later be extracted by the Flatten pass
117
+ # - Other: tasks that are neither binders nor flattenables; these will remain
118
+ # in the body as-is.
119
+
120
+ binders = ordered_set()
121
+ flattenables = ordered_set()
122
+ other = ordered_set()
123
+
124
+ for child in task.body:
125
+ if _is_binder(child):
126
+ binders.add(child)
127
+ elif _is_flattenable(ctx, child):
128
+ flattenables.add(child)
129
+ else:
130
+ other.add(child)
131
+
132
+ # The new body of the rewritten task
133
+ body:OrderedSet[ir.Task] = ordered_set()
134
+
135
+ # Quick check to see if it's worth doing more analysis; we only want to extract
136
+ # common binders if there are multiple, and there are also multiple flattenables
137
+ # that will be extracted by the flatten pass later (so that they can share the
138
+ # extracted logic).
139
+ plan: Optional[ExtractCommon.ExtractionPlan] = None
140
+ if len(binders) > 1 and len(flattenables) > 1:
141
+ plan = _create_extraction_plan(ctx, binders, flattenables, other)
142
+ if plan:
143
+ # plan is worthwhile, extract the common body and add the connection to the body
144
+ exposed_vars = plan.exposed_vars.get_list()
145
+ plan.common_reference = f.lookup(helpers.extract(task, plan.common_body, exposed_vars, ctx.rewrite_ctx, "common"), exposed_vars)
146
+
147
+ # Add plan common reference to the body.
148
+ body.add(plan.common_reference)
149
+
150
+ # recursively handle children
151
+ for child in task.body:
152
+ # skip children that were extracted
153
+ if plan and child not in other and child not in plan.remaining_body and child not in flattenables:
154
+ continue
155
+
156
+ # no plan or child is not a composite, so just add the handled to the body
157
+ if not plan or child not in flattenables:
158
+ body.add(self.handle(child, ctx))
159
+ continue
160
+
161
+ # there is a plan and the child is in composites, so...
162
+ replacement = self.handle(child, ctx)
163
+
164
+ # this child needs either extra local dependencies or the common reference
165
+ if child in plan.local_dependencies:
166
+ # the new body will have maybe the common reference and the local deps
167
+ replacement_body = ordered_set()
168
+
169
+ hoisted = OrderedSet()
170
+ if isinstance(replacement, ir.Logical):
171
+ # if replacement is a logical, just keep the same hoisted vars
172
+ hoisted.update(replacement.hoisted)
173
+ else:
174
+ # otherwise, we need to hoist the vars that are output from local deps
175
+ # and input to the replacement task
176
+ dep_outputs = OrderedSet()
177
+ for d in plan.local_dependencies.get(child, ordered_set()):
178
+ dep_outputs.update(ctx.info.task_outputs(d))
179
+ hoisted.update(dep_outputs & ctx.info.task_inputs(replacement))
180
+
181
+ if child in plan.local_dependencies:
182
+ for local_dep in plan.local_dependencies[child]:
183
+ replacement_body.add(local_dep.clone())
184
+
185
+ if isinstance(replacement, ir.Logical):
186
+ # if the replacements is a logical, we can just add to the body
187
+ body.add(replacement.reconstruct(
188
+ replacement.engine,
189
+ tuple(hoisted.get_list()),
190
+ tuple(replacement_body.update(replacement.body).get_list()),
191
+ replacement.annotations
192
+ ))
193
+ else:
194
+ # Otherwise, wrap the local dependencies in a Lookup where the output
195
+ # variables are hoisted, and keep the computed replacement.
196
+ body.add(f.logical(replacement_body.get_list(), hoisted.get_list(), replacement.engine))
197
+ body.add(replacement)
198
+ else:
199
+ # child does not need extras in the body, just add it to the main body
200
+ body.add(replacement)
201
+
202
+ return ir.Logical(task.engine, task.hoisted, tuple(body))
203
+
204
+
205
+ #--------------------------------------------------
206
+ # Utilities
207
+ #--------------------------------------------------
208
+
209
+ def _create_extraction_plan(ctx: ExtractCommon.Context, binders: OrderedSet[ir.Task], flattenables: OrderedSet[ir.Task], others: OrderedSet[ir.Task]) -> Optional[ExtractCommon.ExtractionPlan]:
210
+ """
211
+ Compute a plan to extract tasks in this frame that are common dependencies
212
+ across these composite tasks.
213
+ """
214
+ # If there are any pragma lookups, then don't extract anything. Pragma lookups are
215
+ # designed to control execution order, and extracting them may affect their
216
+ # semantics.
217
+ for b in binders:
218
+ if isinstance(b, ir.Lookup) and builtins.is_pragma(b.relation):
219
+ return None
220
+
221
+ # Compute intersection of task dependencies
222
+ all_deps = [ctx.info.task_dependencies(f) for f in flattenables]
223
+ deps = reduce(lambda a, b: a & b, all_deps)
224
+ common_body = binders & deps
225
+
226
+ # We don't need to extract anything if there's only zero or one common tasks
227
+ if len(common_body) < 2:
228
+ return None
229
+
230
+ # Keep track of remaining tasks that are not extracted in the common body
231
+ remaining = ordered_set()
232
+
233
+ # Compute the vars that should be output from the common body. These are the union of
234
+ # all input vars across all non-extracted tasks, intersected with output vars of
235
+ # the common body.
236
+
237
+ # First, compute the output vars of the common body
238
+ common_body_output_vars = OrderedSet()
239
+ for child in common_body:
240
+ common_body_output_vars.update(ctx.info.task_outputs(child))
241
+
242
+ # Next, compute the union of the input vars of all non-extracted tasks
243
+ non_extracted_tasks = (binders - common_body) | flattenables | others
244
+ all_exposed_vars: list[OrderedSet[ir.Var]] = []
245
+ for t in non_extracted_tasks:
246
+ input_vars = ctx.info.task_inputs(t)
247
+ all_exposed_vars.append(input_vars if input_vars else OrderedSet())
248
+
249
+ exposed_vars = reduce(lambda a, b: a | b, all_exposed_vars) & common_body_output_vars
250
+
251
+ # If there are no vars in common, then it's not worth extracting
252
+ if not exposed_vars:
253
+ return None
254
+
255
+ # Make sure that all local dependencies of the common body are included in the common
256
+ # body. This is important for the safety of this rewrite.
257
+ for task in common_body:
258
+ local_deps = ctx.info.local_dependencies(task)
259
+ if local_deps:
260
+ common_body.update(local_deps & binders)
261
+
262
+ # check which of the original binders remain, and make sure their dependencies also stay
263
+ for binder in binders:
264
+ if binder not in common_body:
265
+ remaining.add(binder)
266
+ deps = _compute_local_dependencies(ctx, binders, binder, exposed_vars)
267
+ if deps:
268
+ remaining.update(deps)
269
+
270
+ # for each composite, check if there are additional tasks needed, because the task
271
+ # depends on it but it is not exposed by the vars
272
+ local_dependencies: dict[ir.Task, OrderedSet[ir.Task]] = dict()
273
+ for flattenable in flattenables:
274
+ local = _compute_local_dependencies(ctx, binders, flattenable, exposed_vars)
275
+ if local:
276
+ local_dependencies[flattenable] = local
277
+
278
+ return ExtractCommon.ExtractionPlan(common_body, remaining, exposed_vars, local_dependencies)
279
+
280
+ def _compute_local_dependencies(ctx: ExtractCommon.Context, binders: OrderedSet[ir.Task], composite: ir.Task, exposed_vars: OrderedSet[ir.Var]):
281
+ """
282
+ The tasks in common_body will be extracted into a logical that will expose the exposed_vars.
283
+ Compute which additional dependencies are needed specifically for this composite, because
284
+ it depends on some tasks that are extracted to common_body but not exposed by exposed_vars.
285
+ """
286
+
287
+ # working list of vars we still need to fulfill
288
+ inputs = ctx.info.task_inputs(composite)
289
+ if not inputs:
290
+ return None
291
+
292
+ # vars exposed by exposed vars + tasks added to the local body
293
+ vars_exposed = OrderedSet.from_iterable(exposed_vars)
294
+ vars_needed = (inputs - vars_exposed)
295
+ if not vars_needed:
296
+ return None
297
+
298
+ # this is a greedy algorithm that uses the first task in the common body that provides
299
+ # a variable needed; it may result in sub-optimal extraction, but should be correct
300
+ local_body = ordered_set()
301
+ while(vars_needed):
302
+ v = vars_needed.pop()
303
+ for x in binders:
304
+ if x not in local_body:
305
+ # an x that is not yet in local_body can fulfill v
306
+ x_outputs = ctx.info.task_outputs(x)
307
+ if x_outputs and v in x_outputs:
308
+ # add it to local_body and add its outputs to vars exposed
309
+ local_body.add(x)
310
+ vars_exposed.add(x_outputs)
311
+ # but add its inputs the vars now needed
312
+ inputs = ctx.info.task_inputs(x)
313
+ if inputs:
314
+ vars_needed.update(inputs - vars_exposed)
315
+ return local_body
316
+
317
+ def _is_binder(task: ir.Task):
318
+ # If the task itself is a binder
319
+ if any(isinstance(task, binder) for binder in (ir.Lookup, ir.Construct, ir.Exists, ir.Data, ir.Not)):
320
+ return True
321
+
322
+ # If the task is a Logical containing only binders
323
+ if isinstance(task, ir.Logical) and all(_is_binder(c) for c in task.body):
324
+ return True
325
+
326
+ # If the task is a Union containing only binders
327
+ if isinstance(task, ir.Union) and all(_is_binder(c) for c in task.tasks):
328
+ return True
329
+
330
+ return False
331
+
332
+ def _is_flattenable(ctx: ExtractCommon.Context, task: ir.Task):
333
+ # Each output will be flattened into its own top-level def
334
+ if isinstance(task, ir.Output):
335
+ return True
336
+
337
+ extractable_types = (ir.Update, ir.Aggregate, ir.Match, ir.Rank)
338
+ return isinstance(task, ir.Logical) and len(visitor.collect_by_type(extractable_types, task)) > 0
@@ -140,13 +140,13 @@ class DNFExtractor(Visitor):
140
140
  for new_task in replacement_tasks:
141
141
  # copy to mutate
142
142
  new_body = list(body)
143
- new_body.append(new_task)
143
+ new_body.append(new_task.clone())
144
144
  new_replacement_bodies.append(new_body)
145
145
  replacement_bodies = new_replacement_bodies
146
146
 
147
147
  else:
148
148
  for new_body in replacement_bodies:
149
- new_body.append(task)
149
+ new_body.append(task.clone())
150
150
 
151
151
  replacement_tasks: list[ir.Task] = []
152
152
  for body in replacement_bodies: