relationalai 0.12.9__tar.gz → 0.12.11__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 (458) hide show
  1. {relationalai-0.12.9 → relationalai-0.12.11}/PKG-INFO +2 -2
  2. {relationalai-0.12.9 → relationalai-0.12.11}/pyproject.toml +2 -2
  3. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/__init__.py +9 -0
  4. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/__init__.py +2 -2
  5. relationalai-0.12.11/src/relationalai/clients/local.py +571 -0
  6. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/debugging.py +5 -2
  7. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/__init__.py +2 -2
  8. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/internal/__init__.py +2 -2
  9. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/internal/internal.py +24 -7
  10. relationalai-0.12.11/src/relationalai/semantics/lqp/README.md +34 -0
  11. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/constructors.py +2 -1
  12. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/executor.py +13 -2
  13. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/ir.py +4 -0
  14. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/model2lqp.py +41 -2
  15. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/passes.py +6 -4
  16. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/rewrite/__init__.py +2 -0
  17. relationalai-0.12.11/src/relationalai/semantics/lqp/rewrite/annotate_constraints.py +55 -0
  18. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +22 -3
  19. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +42 -10
  20. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +14 -0
  21. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/validators.py +3 -0
  22. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/builtins.py +5 -0
  23. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/rewrite/flatten.py +10 -4
  24. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/typer/typer.py +13 -0
  25. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/types.py +2 -1
  26. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/graph/core.py +44 -53
  27. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/debugger.py +4 -2
  28. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/qb_debugger.py +5 -3
  29. {relationalai-0.12.9 → relationalai-0.12.11}/.gitignore +0 -0
  30. {relationalai-0.12.9 → relationalai-0.12.11}/LICENSE +0 -0
  31. {relationalai-0.12.9 → relationalai-0.12.11}/docs/pypi/README.md +0 -0
  32. {relationalai-0.12.9 → relationalai-0.12.11}/frontend/debugger/dist/.gitignore +0 -0
  33. {relationalai-0.12.9 → relationalai-0.12.11}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  34. {relationalai-0.12.9 → relationalai-0.12.11}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
  35. {relationalai-0.12.9 → relationalai-0.12.11}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
  36. {relationalai-0.12.9 → relationalai-0.12.11}/frontend/debugger/dist/index.html +0 -0
  37. {relationalai-0.12.9 → relationalai-0.12.11}/src/__init__.py +0 -0
  38. {relationalai-0.12.9 → relationalai-0.12.11}/src/raitoolkit/__init__.py +0 -0
  39. {relationalai-0.12.9 → relationalai-0.12.11}/src/raitoolkit/events/__init__.py +0 -0
  40. {relationalai-0.12.9 → relationalai-0.12.11}/src/raitoolkit/procedures/__init__.py +0 -0
  41. {relationalai-0.12.9 → relationalai-0.12.11}/src/raitoolkit/procedures/procedure.py +0 -0
  42. {relationalai-0.12.9 → relationalai-0.12.11}/src/raitoolkit/rel/__init__.py +0 -0
  43. {relationalai-0.12.9 → relationalai-0.12.11}/src/raitoolkit/tables/__init__.py +0 -0
  44. {relationalai-0.12.9 → relationalai-0.12.11}/src/raitoolkit/tasks/__init__.py +0 -0
  45. {relationalai-0.12.9 → relationalai-0.12.11}/src/raitoolkit/tasks/task.py +0 -0
  46. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/analysis/__init__.py +0 -0
  47. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/analysis/mechanistic.py +0 -0
  48. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/analysis/whynot.py +0 -0
  49. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/auth/__init__.py +0 -0
  50. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/auth/jwt_generator.py +0 -0
  51. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/auth/oauth_callback_server.py +0 -0
  52. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/auth/token_handler.py +0 -0
  53. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/auth/util.py +0 -0
  54. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/azure.py +0 -0
  55. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/cache_store.py +0 -0
  56. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/client.py +0 -0
  57. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/config.py +0 -0
  58. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/direct_access_client.py +0 -0
  59. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/export_procedure.py.jinja +0 -0
  60. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/hash_util.py +0 -0
  61. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/profile_polling.py +0 -0
  62. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/result_helpers.py +0 -0
  63. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/snowflake.py +0 -0
  64. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/types.py +0 -0
  65. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/use_index_poller.py +0 -0
  66. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/clients/util.py +0 -0
  67. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/compiler.py +0 -0
  68. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/dependencies.py +0 -0
  69. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/docutils.py +0 -0
  70. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/dsl.py +0 -0
  71. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/__init__.py +0 -0
  72. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/builder/__init__.py +0 -0
  73. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
  74. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  75. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/builder/std/__init__.py +0 -0
  76. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  77. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  78. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
  79. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  80. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/devtools/__init__.py +0 -0
  81. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  82. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  83. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/__init__.py +0 -0
  84. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  85. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  86. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  87. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  88. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  89. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  90. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  91. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  92. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  93. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  94. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
  95. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
  96. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  97. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  98. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  99. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  100. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
  101. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
  102. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  103. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
  104. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  105. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/constants.py +0 -0
  106. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
  107. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  108. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  109. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  110. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  111. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  112. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  113. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  114. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  115. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/context.py +0 -0
  116. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/cset.py +0 -0
  117. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  118. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  119. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  120. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/instances.py +0 -0
  121. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  122. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  123. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  124. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  125. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
  126. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/relations.py +0 -0
  127. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/rules.py +0 -0
  128. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/stack.py +0 -0
  129. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  130. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  131. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  132. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  133. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  134. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  135. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  136. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  137. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
  138. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  139. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
  140. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/core/utils.py +0 -0
  141. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
  142. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
  143. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
  144. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  145. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  146. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
  147. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
  148. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  149. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  150. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  151. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  152. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  153. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  154. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
  155. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
  156. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  157. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  158. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  159. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  160. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  161. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  162. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/models.py +0 -0
  163. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  164. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
  165. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  166. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  167. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
  168. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
  169. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/types.py +0 -0
  170. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
  171. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
  172. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  173. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  174. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/relations.py +0 -0
  175. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/rulesets.py +0 -0
  176. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  177. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
  178. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  179. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
  180. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  181. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  182. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  183. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/serialization.py +0 -0
  184. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  185. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  186. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  187. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
  188. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
  189. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/snow/api.py +0 -0
  190. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/snow/common.py +0 -0
  191. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  192. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  193. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  194. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
  195. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
  196. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/types/entities.py +0 -0
  197. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/types/values.py +0 -0
  198. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/dsl/utils.py +0 -0
  199. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/graphs/__init__.py +0 -0
  200. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/__init__.py +0 -0
  201. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  202. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  203. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
  204. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
  205. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
  206. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  207. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  208. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
  209. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
  210. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
  211. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/__init__.py +0 -0
  212. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  213. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  214. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  215. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  216. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  217. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  218. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  219. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  220. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  221. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
  222. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
  223. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  224. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/rel/__init__.py +0 -0
  225. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
  226. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  227. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  228. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/solvers/__init__.py +0 -0
  229. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/sql/__init__.py +0 -0
  230. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
  231. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  232. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/tests/__init__.py +0 -0
  233. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
  234. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  235. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
  236. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/__init__.py +0 -0
  237. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/base.py +0 -0
  238. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/ci.py +0 -0
  239. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/colab.py +0 -0
  240. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/generic.py +0 -0
  241. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/hex.py +0 -0
  242. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/ipython.py +0 -0
  243. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/jupyter.py +0 -0
  244. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/snowbook.py +0 -0
  245. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/environments/terminal.py +0 -0
  246. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/errors.py +0 -0
  247. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/SF.py +0 -0
  248. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/__init__.py +0 -0
  249. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/graphs.py +0 -0
  250. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/inspect.py +0 -0
  251. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
  252. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/api.py +0 -0
  253. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
  254. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
  255. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
  256. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
  257. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  258. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/filter.py +0 -0
  259. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
  260. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/options.py +0 -0
  261. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
  262. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
  263. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/transition.py +0 -0
  264. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/pathfinder/utils.py +0 -0
  265. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/README.md +0 -0
  266. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/__init__.py +0 -0
  267. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/api.py +0 -0
  268. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
  269. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
  270. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/code_organization.md +0 -0
  271. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
  272. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
  273. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
  274. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
  275. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
  276. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
  277. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
  278. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
  279. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
  280. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
  281. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
  282. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
  283. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
  284. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
  285. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
  286. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
  287. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/graph.py +0 -0
  288. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
  289. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
  290. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  291. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  292. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
  293. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  294. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  295. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
  296. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
  297. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
  298. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/product_graph.py +0 -0
  299. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
  300. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
  301. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
  302. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
  303. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
  304. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
  305. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
  306. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
  307. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
  308. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
  309. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
  310. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
  311. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  312. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  313. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  314. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  315. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
  316. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
  317. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
  318. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  319. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  320. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  321. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  322. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
  323. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
  324. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/tree_agg.py +0 -0
  325. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
  326. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
  327. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
  328. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
  329. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/experimental/solvers.py +0 -0
  330. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/loaders/__init__.py +0 -0
  331. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/loaders/csv.py +0 -0
  332. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/loaders/loader.py +0 -0
  333. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/loaders/types.py +0 -0
  334. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/metagen.py +0 -0
  335. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/metamodel.py +0 -0
  336. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/rel.py +0 -0
  337. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/rel_emitter.py +0 -0
  338. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/rel_utils.py +0 -0
  339. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
  340. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/devtools/__init__.py +0 -0
  341. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  342. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
  343. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
  344. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/internal/annotations.py +0 -0
  345. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/internal/snowflake.py +0 -0
  346. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/__init__.py +0 -0
  347. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/builtins.py +0 -0
  348. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/compiler.py +0 -0
  349. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
  350. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/pragmas.py +0 -0
  351. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/primitives.py +0 -0
  352. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
  353. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  354. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
  355. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
  356. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  357. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/types.py +0 -0
  358. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/lqp/utils.py +0 -0
  359. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  360. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/compiler.py +0 -0
  361. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
  362. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/dependency.py +0 -0
  363. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/executor.py +0 -0
  364. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/factory.py +0 -0
  365. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/helpers.py +0 -0
  366. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/ir.py +0 -0
  367. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  368. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  369. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  370. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  371. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
  372. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  373. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
  374. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/util.py +0 -0
  375. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/metamodel/visitor.py +0 -0
  376. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/__init__.py +0 -0
  377. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
  378. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
  379. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  380. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
  381. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
  382. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  383. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
  384. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  385. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
  386. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/rel/__init__.py +0 -0
  387. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/rel/builtins.py +0 -0
  388. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/rel/compiler.py +0 -0
  389. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/rel/executor.py +0 -0
  390. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/rel/rel.py +0 -0
  391. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/rel/rel_utils.py +0 -0
  392. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/snowflake/__init__.py +0 -0
  393. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/__init__.py +0 -0
  394. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/compiler.py +0 -0
  395. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
  396. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
  397. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  398. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
  399. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  400. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  401. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  402. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  403. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  404. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/sql/sql.py +0 -0
  405. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/__init__.py +0 -0
  406. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/constraints.py +0 -0
  407. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/datetime.py +0 -0
  408. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/decimals.py +0 -0
  409. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/floats.py +0 -0
  410. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/integers.py +0 -0
  411. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/math.py +0 -0
  412. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/pragmas.py +0 -0
  413. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/re.py +0 -0
  414. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/std.py +0 -0
  415. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/std/strings.py +0 -0
  416. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/tests/__init__.py +0 -0
  417. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/tests/logging.py +0 -0
  418. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  419. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  420. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/semantics/tests/utils.py +0 -0
  421. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/std/__init__.py +0 -0
  422. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/std/aggregates.py +0 -0
  423. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/std/dates.py +0 -0
  424. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/std/graphs.py +0 -0
  425. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/std/inspect.py +0 -0
  426. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/std/math.py +0 -0
  427. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/std/re.py +0 -0
  428. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/std/strings.py +0 -0
  429. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/__init__.py +0 -0
  430. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/cleanup_snapshots.py +0 -0
  431. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/cli.py +0 -0
  432. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/cli_controls.py +0 -0
  433. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/cli_helpers.py +0 -0
  434. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/constants.py +0 -0
  435. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/debugger_client.py +0 -0
  436. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/debugger_server.py +0 -0
  437. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/dev.py +0 -0
  438. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/notes +0 -0
  439. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/query_utils.py +0 -0
  440. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/tools/snapshot_viewer.py +0 -0
  441. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/__init__.py +0 -0
  442. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/clean_up_databases.py +0 -0
  443. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/constants.py +0 -0
  444. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/format.py +0 -0
  445. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/graph.py +0 -0
  446. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/list_databases.py +0 -0
  447. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/otel_configuration.py +0 -0
  448. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/otel_handler.py +0 -0
  449. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/snowflake_handler.py +0 -0
  450. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/span_format_test.py +0 -0
  451. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/span_tracker.py +0 -0
  452. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/spans_file_handler.py +0 -0
  453. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/timeout.py +0 -0
  454. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai/util/tracing_handler.py +0 -0
  455. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai_test_util/__init__.py +0 -0
  456. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai_test_util/fixtures.py +0 -0
  457. {relationalai-0.12.9 → relationalai-0.12.11}/src/relationalai_test_util/snapshot.py +0 -0
  458. {relationalai-0.12.9 → relationalai-0.12.11}/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.9
3
+ Version: 0.12.11
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
@@ -11,7 +11,7 @@ Requires-Dist: colorama
11
11
  Requires-Dist: cryptography
12
12
  Requires-Dist: gravis
13
13
  Requires-Dist: inquirerpy
14
- Requires-Dist: lqp==0.1.18
14
+ Requires-Dist: lqp==0.1.19
15
15
  Requires-Dist: nicegui==2.16.1
16
16
  Requires-Dist: numpy<2
17
17
  Requires-Dist: opentelemetry-api
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = 'relationalai'
3
- version = '0.12.9'
3
+ version = '0.12.11'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -8,7 +8,7 @@ authors = [
8
8
  ]
9
9
  requires-python = ">= 3.10"
10
10
  dependencies = [
11
- "lqp==0.1.18",
11
+ "lqp==0.1.19",
12
12
  "snowflake-connector-python[secure-local-storage]",
13
13
  "snowflake-snowpark-python>=1.38.0",
14
14
  "typing-extensions",
@@ -172,6 +172,9 @@ def Resources(
172
172
  return DirectAccessResources(config=config, connection=connection, reset_session=reset_session, generation=generation)
173
173
  else:
174
174
  return Resources(config=config, connection=connection, reset_session=reset_session, generation=generation)
175
+ elif platform == "local":
176
+ from relationalai.clients.local import LocalResources
177
+ return LocalResources(config=config, connection=connection, reset_session=reset_session, generation=generation)
175
178
  else:
176
179
  raise Exception(f"Unknown platform: {platform}")
177
180
 
@@ -196,6 +199,12 @@ def Provider(
196
199
  resources=resources,
197
200
  generation=generation
198
201
  )
202
+ elif platform == "local":
203
+ import relationalai.clients.local
204
+ resources = cast(relationalai.clients.local.LocalResources, resources)
205
+ return relationalai.clients.local.LocalProvider(
206
+ resources=resources
207
+ )
199
208
  else:
200
209
  raise Exception(f"Unknown platform: {platform}")
201
210
 
@@ -1,5 +1,5 @@
1
1
  # Azure import is dropped because we need to to do runtime import of azure module to support our package running on Snowflake Notebook
2
- from . import config, snowflake, client
2
+ from . import config, snowflake, client, local
3
3
 
4
4
  # note: user must do `import relationalai.clients.azure` to get `azure` submodule
5
- __all__ = ['snowflake', 'config', 'client']
5
+ __all__ = ['snowflake', 'config', 'client', 'local']
@@ -0,0 +1,571 @@
1
+ from __future__ import annotations
2
+
3
+ import base64
4
+ import json
5
+ from urllib.parse import quote, urlencode
6
+ import pyarrow as pa
7
+ import requests
8
+ from email import message_from_bytes, policy
9
+ from email.message import EmailMessage
10
+
11
+ from dataclasses import dataclass
12
+ from typing import Any, Dict, List, Iterable, Literal, Optional, Tuple, Union
13
+ from requests.adapters import HTTPAdapter
14
+ from urllib3.util.retry import Retry
15
+
16
+ from relationalai.clients.client import ResourcesBase, ProviderBase
17
+ from relationalai.clients.config import Config
18
+ from relationalai.clients.types import TransactionAsyncResponse
19
+ from relationalai.clients.util import get_pyrel_version
20
+ from ..errors import ResponseStatusException
21
+ from .. import debugging
22
+
23
+ @dataclass
24
+ class Endpoint:
25
+ method: str
26
+ endpoint: str
27
+
28
+ TXN_ABORT_REASON_TIMEOUT = "QUERY_TIMEOUT_EXCEEDED"
29
+
30
+ class LocalClient:
31
+
32
+ def __init__(self, host: str, port: int):
33
+ self.service_endpoint = f"http://{host}:{port}"
34
+ self.endpoints: Dict[str, Endpoint] = {
35
+ "create_txn": Endpoint(method="POST", endpoint="/transactions"), # API for creating a (query) transaction
36
+ "create_db": Endpoint(method="POST", endpoint="/v2/<local_org>/<local_account>/databases"), # API for creating a database
37
+ }
38
+ self.http_session = self._create_retry_session()
39
+
40
+ def _create_retry_session(self) -> requests.Session:
41
+ http_session = requests.Session()
42
+ retries = Retry(
43
+ total=3,
44
+ backoff_factor=0.3,
45
+ status_forcelist=[500, 502, 503, 504],
46
+ allowed_methods=frozenset({"GET", "POST", "PUT", "DELETE"}),
47
+ raise_on_status=False
48
+ )
49
+ adapter = HTTPAdapter(max_retries=retries)
50
+ http_session.mount("http://", adapter)
51
+ http_session.mount("https://", adapter)
52
+ http_session.headers.update({
53
+ "Connection": "keep-alive",
54
+ "Accept": "application/json",
55
+ "user-agent": get_pyrel_version(None)
56
+ })
57
+ return http_session
58
+
59
+ def request(
60
+ self,
61
+ endpoint: str,
62
+ payload: Dict[str, Any] | None = None,
63
+ headers: Dict[str, str] | None = None,
64
+ path_params: Dict[str, str] | None = None,
65
+ query_params: Dict[str, str] | None = None,
66
+ ) -> requests.Response:
67
+ with debugging.span("local_request"):
68
+ url, method = self._prepare_url(endpoint, path_params, query_params)
69
+ request_headers = self._prepare_headers(headers)
70
+ return self.http_session.request(method, url, json=payload, headers=request_headers)
71
+
72
+ def _prepare_url(self, endpoint: str, path_params: Dict[str, str] | None = None, query_params: Dict[str, str] | None = None) -> Tuple[str, str]:
73
+ try:
74
+ ep = self.endpoints[endpoint]
75
+ except KeyError:
76
+ raise ValueError(f"Invalid endpoint: {endpoint}. Available endpoints: {list(self.endpoints.keys())}")
77
+ url = f"{self.service_endpoint}{ep.endpoint}"
78
+ if path_params:
79
+ escaped_path_params = {k: quote(v, safe='') for k, v in path_params.items()}
80
+ url = url.format(**escaped_path_params)
81
+ if query_params:
82
+ url += '?' + urlencode(query_params)
83
+ return url, ep.method
84
+
85
+ def _prepare_headers(self, headers: Dict[str, str] | None) -> Dict[str, str]:
86
+ request_headers = {}
87
+ if headers:
88
+ request_headers.update(headers)
89
+ return request_headers
90
+
91
+ class LocalResources(ResourcesBase):
92
+
93
+ def __init__(
94
+ self,
95
+ profile: str | None = None,
96
+ config: Config | None = None,
97
+ connection: Any | None = None,
98
+ dry_run: bool = False,
99
+ reset_session: bool = False,
100
+ generation: Any | None = None,
101
+ language: str = "lqp",
102
+ ):
103
+ super().__init__(config=config)
104
+ self.language = language
105
+
106
+ host = self.config.get("host", None) or "localhost"
107
+ port = int(self.config.get("port", None) or 8010)
108
+ self.client = LocalClient(host, port)
109
+
110
+ # Keep track of whether we already created the local database to run on.
111
+ self._db_created = False
112
+
113
+ def reset(self):
114
+ raise NotImplementedError("reset not supported in local mode")
115
+
116
+ #--------------------------------------------------
117
+ # Check direct access is enabled (0 implemented)
118
+ #--------------------------------------------------
119
+
120
+ def is_direct_access_enabled(self) -> bool:
121
+ raise NotImplementedError("is_direct_access_enabled not supported in local mode")
122
+
123
+ #--------------------------------------------------
124
+ # Snowflake Account Flags (0 implemented)
125
+ #--------------------------------------------------
126
+
127
+ def is_account_flag_set(self, flag: str) -> bool:
128
+ raise NotImplementedError("is_account_flag_set not supported in local mode")
129
+
130
+ #--------------------------------------------------
131
+ # Databases (0 implemented)
132
+ #--------------------------------------------------
133
+
134
+ def get_database(self, database: str):
135
+ raise NotImplementedError("get_database not supported in local mode")
136
+
137
+ def get_installed_packages(self, database: str):
138
+ raise NotImplementedError("get_installed_packages not supported in local mode")
139
+
140
+ def _create_database(self, name:str):
141
+ with debugging.span("create_database"):
142
+ response = self.client.request(
143
+ endpoint="create_db",
144
+ payload = {
145
+ "language": "lqp",
146
+ "readonly": False,
147
+ "database_id": name,
148
+ "transaction_id": "mock_txn_id:create-db",
149
+ }
150
+ )
151
+ if response.status_code != 200:
152
+ raise ResponseStatusException("Failed to create database in local mode.", response)
153
+
154
+ parsed_response = self._parse_txn_response(response)
155
+
156
+ state = parsed_response["state"]
157
+ if state != "COMPLETED":
158
+ # NOTE for now we just ignore it when the database creation transaction
159
+ # aborts. In most cases where this happens, it is because the database
160
+ # already exists. If it doesn't, we'll fail later on anyways.
161
+ pass
162
+
163
+ return parsed_response
164
+
165
+ #--------------------------------------------------
166
+ # Engines (0 implemented)
167
+ #--------------------------------------------------
168
+
169
+ def get_version(self):
170
+ raise NotImplementedError("get_version not supported in local mode")
171
+
172
+ def get_engine_sizes(self, cloud_provider: str | None = None):
173
+ raise NotImplementedError("get_engine_sizes not supported in local mode")
174
+
175
+ def list_engines(self, state: str | None = None):
176
+ raise NotImplementedError("list_engines not supported in local mode")
177
+
178
+ def get_engine(self, name: str):
179
+ raise NotImplementedError("get_engine not supported in local mode")
180
+
181
+ def get_cloud_provider(self) -> str:
182
+ raise NotImplementedError("get_cloud_provider not supported in local mode")
183
+
184
+ def is_valid_engine_state(self, name: str) -> bool:
185
+ raise NotImplementedError("is_valid_engine_state not supported in local mode")
186
+
187
+ def create_engine(self, name: str, size:str|None=None, auto_suspend_mins:int|None=None):
188
+ raise NotImplementedError("create_engine not supported in local mode")
189
+
190
+ def delete_engine(self, name: str, force: bool = False):
191
+ raise NotImplementedError("delete_engine not supported in local mode")
192
+
193
+ def suspend_engine(self, name: str):
194
+ raise NotImplementedError("suspend_engine not supported in local mode")
195
+
196
+ def resume_engine(self, name: str, headers: Dict | None = None):
197
+ raise NotImplementedError("resume_engine not supported in local mode")
198
+
199
+ def resume_engine_async(self, name: str):
200
+ raise NotImplementedError("resume_engine_async not supported in local mode")
201
+
202
+ def alter_engine_pool(self, size: str | None = None, mins: int | None = None, maxs: int | None = None):
203
+ raise NotImplementedError("alter_engine_pool not supported in local mode")
204
+
205
+ def auto_create_engine_async(self, name: str | None = None):
206
+ raise NotImplementedError("auto_create_engine_async not supported in local mode")
207
+
208
+ #--------------------------------------------------
209
+ # Graphs (0 implemented)
210
+ #--------------------------------------------------
211
+
212
+ def list_graphs(self):
213
+ raise NotImplementedError("list_graphs not supported in local mode")
214
+
215
+ def get_graph(self, name: str):
216
+ raise NotImplementedError("get_graph not supported in local mode")
217
+
218
+ def create_graph(self, name: str):
219
+ raise NotImplementedError("create_graph not supported in local mode")
220
+
221
+ def delete_graph(self, name: str, force=False, language: str = "lqp"):
222
+ # NOTE There is no way to delete a local graph at the moment, which is documented in
223
+ # the README. This function will get called in regular usage, so for now we just
224
+ # silently do nothing.
225
+ return None
226
+
227
+ def clone_graph(self, target_name: str, source_name: str, nowait_durable: bool = True):
228
+ raise NotImplementedError("clone_graph not supported in local mode")
229
+
230
+ def maybe_poll_use_index(
231
+ self,
232
+ app_name: str,
233
+ sources: Iterable[str],
234
+ model: str,
235
+ engine_name: str,
236
+ engine_size: str | None = None,
237
+ program_span_id: str | None = None,
238
+ headers: Dict | None = None,
239
+ ):
240
+ # Snowflake sources are not supported in local mode.
241
+ if len(list(sources)) != 0:
242
+ raise NotImplementedError("Snowflake sources are not supported in local mode")
243
+
244
+ # Nothing to do for local mode if the database was already created.
245
+ if self._db_created:
246
+ return
247
+
248
+ self._create_database(model)
249
+ self._db_created = True
250
+
251
+ #--------------------------------------------------
252
+ # Models (0 implemented)
253
+ #--------------------------------------------------
254
+
255
+ def list_models(self, database: str, engine: str):
256
+ raise NotImplementedError("list_models not supported in local mode")
257
+
258
+ def create_models(self, database: str, engine: str, models):
259
+ raise NotImplementedError("create_models not supported in local mode")
260
+
261
+ def delete_model(self, database: str, engine: str, name: str):
262
+ raise NotImplementedError("delete_model not supported in local mode")
263
+
264
+ def create_models_code(self, models):
265
+ raise NotImplementedError("create_models_code not supported in local mode")
266
+
267
+ #--------------------------------------------------
268
+ # Exports (0 implemented)
269
+ #--------------------------------------------------
270
+
271
+ def list_exports(self, database: str, engine: str):
272
+ raise NotImplementedError("list_exports not supported in local mode")
273
+
274
+ def create_export(self, params):
275
+ raise NotImplementedError("create_export not supported in local mode")
276
+
277
+ def create_export_table(self, database: str, engine: str, table: str, relation: str, columns: Dict[str, str], code: str, refresh: str | None = None):
278
+ raise NotImplementedError("create_export_table not supported in local mode")
279
+
280
+ def delete_export(self, database: str, engine: str, name: str):
281
+ raise NotImplementedError("delete_export not supported in local mode")
282
+
283
+ #--------------------------------------------------
284
+ # Imports (0 implemented)
285
+ #--------------------------------------------------
286
+
287
+ def get_import_stream(self, name: str | None, model: str | None):
288
+ raise NotImplementedError("get_import_stream not supported in local mode")
289
+
290
+ def change_stream_status(self, stream_id: str, model: str, suspend: bool):
291
+ raise NotImplementedError("change_stream_status not supported in local mode")
292
+
293
+ def change_imports_status(self, suspend: bool):
294
+ raise NotImplementedError("change_imports_status not supported in local mode")
295
+
296
+ def get_imports_status(self):
297
+ raise NotImplementedError("get_imports_status not supported in local mode")
298
+
299
+ def set_imports_engine_size(self, size: str):
300
+ raise NotImplementedError("set_imports_engine_size not supported in local mode")
301
+
302
+ def list_imports(self, id: str | None = None, name: str | None = None, model: str | None = None, status: str | None = None, creator: str | None = None):
303
+ raise NotImplementedError("list_imports not supported in local mode")
304
+
305
+ def poll_imports(self, sources, model: str):
306
+ raise NotImplementedError("poll_imports not supported in local mode")
307
+
308
+ def create_import_stream(self, source, model: str, rate: int | None = None, options: dict | None = None):
309
+ raise NotImplementedError("create_import_stream not supported in local mode")
310
+
311
+ def create_import_snapshot(self, source, model: str, options: dict | None):
312
+ raise NotImplementedError("create_import_snapshot not supported in local mode")
313
+
314
+ def delete_import(self, import_name: str, model: str, force=False):
315
+ raise NotImplementedError("delete_import not supported in local mode")
316
+
317
+ #--------------------------------------------------
318
+ # Exec Async
319
+ #--------------------------------------------------
320
+
321
+ def _parse_multipart_response(self, response: requests.Response) -> Dict[str, Any]:
322
+ response_map = {}
323
+ response_map['results'] = {}
324
+
325
+ content_type = response.headers.get("Content-Type")
326
+ if not content_type:
327
+ raise ValueError("Missing Content-Type header")
328
+
329
+ # Parse using Python's email module
330
+ # Construct a proper MIME message with headers
331
+ mime_content = f"Content-Type: {content_type}\r\n\r\n".encode('utf-8') + response.content
332
+ msg: EmailMessage = message_from_bytes(mime_content, policy=policy.default) # type: ignore[assignment]
333
+
334
+ if not msg.is_multipart():
335
+ raise ValueError("Response is not multipart")
336
+
337
+ for part in msg.iter_parts():
338
+ part_content_type = part.get_content_type() or 'application/octet-stream'
339
+ part_content: bytes = part.get_payload(decode=True) # type: ignore[assignment]
340
+
341
+ # Extract disposition info
342
+ disposition = part.get('Content-Disposition', '')
343
+ part_name = None
344
+ part_filename = None
345
+ if disposition:
346
+ params = {}
347
+ for param_str in disposition.split(';')[1:]:
348
+ if '=' in param_str:
349
+ key, val = param_str.strip().split('=', 1)
350
+ params[key] = val.strip('"')
351
+ part_name = params.get('name')
352
+ part_filename = params.get('filename')
353
+
354
+ if 'json' in part_content_type.lower() and not part_filename:
355
+ # JSON part (no filename)
356
+ try:
357
+ response_map[part_name] = json.loads(part_content.decode('utf-8'))
358
+ except json.JSONDecodeError as e:
359
+ raise ValueError(f"Failed to decode JSON part: {e}")
360
+
361
+ elif part_filename:
362
+ # File/attachment part
363
+ response_map['results'][part_filename] = {
364
+ 'name': part_name,
365
+ 'filename': part_filename,
366
+ 'content': part_content,
367
+ 'content_type': part_content_type
368
+ }
369
+
370
+ return response_map
371
+
372
+ def _parse_txn_response(self, get_txn_response: requests.Response) -> Dict[str, Any]:
373
+ with debugging.span("parse_txn_response"):
374
+ response_content_type = get_txn_response.headers.get("Content-Type", "")
375
+ if "application/json" in response_content_type:
376
+ parsed_response = get_txn_response.json()
377
+ elif "multipart/form-data" in response_content_type:
378
+ parsed_response = self._parse_multipart_response(get_txn_response)
379
+ state = parsed_response.get('transaction', {}).get('state', None)
380
+ parsed_response['state'] = state
381
+ txn_id = parsed_response.get('transaction', {}).get('id', None)
382
+ parsed_response['id'] = txn_id
383
+ else:
384
+ raise Exception(f"Unsupported Response Content Type:, {response_content_type}")
385
+ return parsed_response
386
+
387
+ def _create_transaction(
388
+ self,
389
+ target_endpoint: str,
390
+ payload: Dict[str, Any] | None = None,
391
+ headers: Dict[str, str] | None = None,
392
+ path_params: Dict[str, str] | None = None,
393
+ query_params: Dict[str, str] | None = None
394
+ ) -> Dict[str, Any]:
395
+ with debugging.span("transaction"):
396
+ response = self.client.request(
397
+ target_endpoint,
398
+ path_params=path_params,
399
+ query_params=query_params,
400
+ payload=payload,
401
+ headers=headers,
402
+ )
403
+ assert response, "No results from create transaction request."
404
+ if response.status_code not in [200, 201]:
405
+ raise ResponseStatusException("Failed to create transaction.", response)
406
+
407
+ return self._parse_txn_response(response)
408
+
409
+ def _convert_txn_response(self, parsed_response: Dict[str, Any]) -> TransactionAsyncResponse:
410
+ results = []
411
+ for (file_name, file_info) in parsed_response.get("results", {}).items():
412
+ if not file_name.endswith(".arrow"):
413
+ continue
414
+ with pa.ipc.open_stream(file_info["content"]) as reader:
415
+ schema = reader.schema
416
+ batches = [batch for batch in reader]
417
+ table = pa.Table.from_batches(batches=batches, schema=schema)
418
+ results.append({"relationId": file_info["name"], "table": table})
419
+
420
+ rsp = TransactionAsyncResponse()
421
+ rsp.transaction = {
422
+ "id": parsed_response["id"],
423
+ "state": parsed_response["state"]
424
+ }
425
+ rsp.results = results
426
+ rsp.metadata = parsed_response.get("metadata", [])
427
+ rsp.problems = parsed_response.get("problems", [])
428
+
429
+ return rsp
430
+
431
+ def _exec_async_v2(
432
+ self,
433
+ database: str,
434
+ engine: Union[str, None],
435
+ raw_code: str,
436
+ inputs: Dict | None = None,
437
+ readonly=True,
438
+ nowait_durable=False,
439
+ headers: Dict[str, str] | None = None,
440
+ bypass_index=False,
441
+ language: str = "lqp",
442
+ query_timeout_mins: int | None = None,
443
+ ):
444
+ payload = {
445
+ "engine_name": engine,
446
+ "dbname": database,
447
+ "query": raw_code,
448
+ "language": "lqp",
449
+ "readonly": readonly,
450
+ }
451
+
452
+ parsed_response = self._create_transaction(
453
+ target_endpoint="create_txn",
454
+ payload=payload,
455
+ headers=headers
456
+ )
457
+
458
+ state = parsed_response["state"]
459
+ if state not in ["COMPLETED", "ABORTED"]:
460
+ # Local mode only supports synchronous transactions for now.
461
+ txn_id = parsed_response["id"]
462
+ raise Exception(f"Transaction {txn_id} did not complete or abort synchronously (state = {state}).")
463
+
464
+ return self._convert_txn_response(parsed_response)
465
+
466
+ #--------------------------------------------------
467
+ # Exec (1 implemented, others are stubs)
468
+ #--------------------------------------------------
469
+
470
+ def exec_lqp(
471
+ self,
472
+ database: str,
473
+ engine: str | None,
474
+ raw_code: bytes,
475
+ readonly=True,
476
+ *,
477
+ inputs: Dict | None = None,
478
+ nowait_durable=False,
479
+ headers: Dict | None = None,
480
+ bypass_index=False,
481
+ query_timeout_mins: int | None = None,
482
+ ):
483
+ raw_code_b64 = base64.b64encode(raw_code).decode("utf-8")
484
+ return self._exec_async_v2(
485
+ database, engine, raw_code_b64, inputs, readonly, nowait_durable,
486
+ headers=headers, bypass_index=bypass_index, language='lqp',
487
+ query_timeout_mins=query_timeout_mins,
488
+ )
489
+
490
+ def exec_raw(
491
+ self,
492
+ database: str,
493
+ engine: str | None,
494
+ raw_code: str,
495
+ readonly: bool = True,
496
+ *,
497
+ inputs: Dict | None = None,
498
+ nowait_durable: bool = False,
499
+ headers: Dict | None = None,
500
+ query_timeout_mins: Optional[int] = None,
501
+ ):
502
+ raise NotImplementedError("exec_raw not supported in local mode - use exec_lqp instead")
503
+
504
+ def exec_format(self, database: str, engine: str, raw_code: str, cols: List[str], format:str, inputs: Dict | None = None, readonly: bool = True, nowait_durable=False, skip_invalid_data=False, headers: Dict | None = None, query_timeout_mins: int | None = None) -> Any:
505
+ raise NotImplementedError("exec_format not supported in local mode")
506
+
507
+ def format_results(self, results, task=None):
508
+ raise NotImplementedError("format_results not supported in local mode")
509
+
510
+ def to_model_type(self, model, name: str, source: str):
511
+ raise NotImplementedError("to_model_type not supported in local mode")
512
+
513
+ def _exec(self, code: str, params=None, raw=False, help=True):
514
+ raise NotImplementedError("_exec not supported in local mode")
515
+
516
+ #--------------------------------------------------
517
+ # Transactions (0 implemented)
518
+ #--------------------------------------------------
519
+
520
+ def get_transaction(self, transaction_id: str):
521
+ raise NotImplementedError("get_transaction not supported in local mode")
522
+
523
+ def list_transactions(self, *, limit: int, only_active=False, **kwargs):
524
+ raise NotImplementedError("list_transactions not supported in local mode")
525
+
526
+ def cancel_transaction(self, transaction_id: str):
527
+ raise NotImplementedError("cancel_transaction not supported in local mode")
528
+
529
+ def cancel_pending_transactions(self):
530
+ raise NotImplementedError("cancel_pending_transactions not supported in local mode")
531
+
532
+ def get_transaction_events(self, transaction_id: str, continuation_token: str):
533
+ raise NotImplementedError("get_transaction_events not supported in local mode")
534
+
535
+ class LocalProvider(ProviderBase):
536
+
537
+ def __init__(
538
+ self,
539
+ host: str = "localhost",
540
+ port: int = 8010,
541
+ profile: str | None = None,
542
+ config: Config | None = None,
543
+ resources: LocalResources | None = None,
544
+ ):
545
+ if resources:
546
+ self.resources = resources
547
+ else:
548
+ self.resources = LocalResources(
549
+ profile=profile,
550
+ config=config,
551
+ connection=None,
552
+ dry_run=False,
553
+ reset_session=False,
554
+ generation=None,
555
+ language="lqp",
556
+ )
557
+ self.config = self.resources.config
558
+
559
+ # A mock sql function that simulates SQL execution for the LocalProvider. This is only
560
+ # here to make the test suite pass.
561
+ def sql(self, query: str, params: List[Any] = [], format: Literal["list", "pandas", "polars", "lazy"] = "list"):
562
+ if format == "list":
563
+ # Used by "test_snapshot_abstract.py"
564
+ import re
565
+ pattern = r"\s*SELECT EXISTS\(\s*SELECT 1\s*FROM (\w+)\.INFORMATION_SCHEMA\.TABLES\s*WHERE TABLE_SCHEMA = '(\w+)'\s*AND TABLE_NAME = '(\w+)'\s*\) AS TABLE_EXISTS;\s*"
566
+ query_cleaned = query.replace("\n", " ").replace(" ", " ")
567
+ match_obj = re.match(pattern, query_cleaned, re.DOTALL)
568
+ if match_obj:
569
+ return [{"TABLE_EXISTS": False}]
570
+ else:
571
+ raise NotImplementedError("Only specific SQL queries are defined in local mode.")
@@ -26,6 +26,9 @@ find_block_in = find_block_in # re-export
26
26
  DEBUG = True
27
27
  handled_error = None
28
28
 
29
+ # Configurable debug log file location
30
+ DEBUG_LOG_FILE = os.environ.get('RAI_DEBUG_LOG', 'debug.jsonl')
31
+
29
32
  #--------------------------------------------------
30
33
  # Log Formatters
31
34
  #--------------------------------------------------
@@ -70,7 +73,7 @@ class FlushingFileHandler(logging.FileHandler):
70
73
  def emit(self, record):
71
74
  if not self._initialized:
72
75
  self._initialized = True
73
- with open('debug.jsonl', 'w'):
76
+ with open(DEBUG_LOG_FILE, 'w'):
74
77
  pass
75
78
  super().emit(record)
76
79
  self.flush()
@@ -78,7 +81,7 @@ class FlushingFileHandler(logging.FileHandler):
78
81
  try:
79
82
  # keep the old file-based debugger around and working until it's fully replaced.
80
83
  if DEBUG:
81
- file_handler = FlushingFileHandler('debug.jsonl', mode='a')
84
+ file_handler = FlushingFileHandler(DEBUG_LOG_FILE, mode='a')
82
85
  file_handler.setFormatter(JsonFormatter())
83
86
  logger.addHandler(file_handler)
84
87
  except Exception:
@@ -8,7 +8,7 @@ __include_in_docs__ = True
8
8
 
9
9
  from .internal import (
10
10
  Model, Concept, Relationship, RelationshipReading, Expression, Fragment, Error, Field,
11
- String, Integer, Int64, Int128, Float, Decimal, Bool,
11
+ AnyEntity, String, Integer, Int64, Int128, Float, Decimal, Bool,
12
12
  Date, DateTime,
13
13
  RawSource, Hash,
14
14
  select, where, require, define, distinct, union, data,
@@ -19,7 +19,7 @@ from .internal import (
19
19
 
20
20
  __all__ = [
21
21
  "Model", "Concept", "Relationship", "RelationshipReading", "Expression", "Fragment", "Error", "Field",
22
- "String", "Integer", "Int64", "Int128", "Float", "Decimal", "Bool",
22
+ "AnyEntity", "String", "Integer", "Int64", "Int128", "Float", "Decimal", "Bool",
23
23
  "Date", "DateTime",
24
24
  "RawSource", "Hash",
25
25
  "select", "where", "require", "define", "distinct", "union", "data",