relationalai 0.13.4__py3-none-any.whl → 1.0.0a1__py3-none-any.whl

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 (852) hide show
  1. relationalai/__init__.py +1 -256
  2. relationalai/config/__init__.py +56 -0
  3. relationalai/config/config.py +289 -0
  4. relationalai/config/config_fields.py +86 -0
  5. relationalai/config/connections/__init__.py +46 -0
  6. relationalai/config/connections/base.py +23 -0
  7. relationalai/config/connections/duckdb.py +29 -0
  8. relationalai/config/connections/snowflake.py +243 -0
  9. relationalai/config/external/__init__.py +17 -0
  10. relationalai/config/external/dbt_converter.py +101 -0
  11. relationalai/config/external/dbt_models.py +93 -0
  12. relationalai/config/external/snowflake_converter.py +41 -0
  13. relationalai/config/external/snowflake_models.py +85 -0
  14. relationalai/config/external/utils.py +19 -0
  15. relationalai/config/shims.py +1 -0
  16. relationalai/semantics/__init__.py +146 -22
  17. relationalai/semantics/backends/lqp/annotations.py +11 -0
  18. relationalai/semantics/backends/sql/sql_compiler.py +327 -0
  19. relationalai/semantics/frontend/base.py +1716 -0
  20. relationalai/semantics/frontend/core.py +179 -0
  21. relationalai/semantics/frontend/front_compiler.py +1313 -0
  22. relationalai/semantics/frontend/pprint.py +408 -0
  23. relationalai/semantics/metamodel/__init__.py +6 -40
  24. relationalai/semantics/metamodel/builtins.py +205 -772
  25. relationalai/semantics/metamodel/metamodel.py +437 -0
  26. relationalai/semantics/metamodel/metamodel_analyzer.py +519 -0
  27. relationalai/semantics/metamodel/pprint.py +412 -0
  28. relationalai/semantics/metamodel/rewriter.py +266 -0
  29. relationalai/semantics/metamodel/typer.py +1186 -0
  30. relationalai/semantics/std/__init__.py +60 -40
  31. relationalai/semantics/std/aggregates.py +149 -0
  32. relationalai/semantics/std/common.py +44 -0
  33. relationalai/semantics/std/constraints.py +37 -43
  34. relationalai/semantics/std/datetime.py +246 -135
  35. relationalai/semantics/std/decimals.py +45 -52
  36. relationalai/semantics/std/floats.py +13 -5
  37. relationalai/semantics/std/integers.py +26 -11
  38. relationalai/semantics/std/math.py +183 -112
  39. relationalai/semantics/std/numbers.py +86 -0
  40. relationalai/semantics/std/re.py +80 -62
  41. relationalai/semantics/std/strings.py +101 -46
  42. relationalai/shims/executor.py +161 -0
  43. relationalai/shims/helpers.py +126 -0
  44. relationalai/shims/hoister.py +221 -0
  45. relationalai/shims/mm2v0.py +1324 -0
  46. relationalai/tools/cli/__init__.py +6 -0
  47. relationalai/tools/cli/cli.py +90 -0
  48. relationalai/tools/cli/components/__init__.py +5 -0
  49. relationalai/tools/cli/components/progress_reader.py +1524 -0
  50. relationalai/tools/cli/components/utils.py +58 -0
  51. relationalai/tools/cli/config_template.py +45 -0
  52. relationalai/tools/cli/dev.py +19 -0
  53. relationalai/tools/debugger.py +289 -183
  54. relationalai/tools/typer_debugger.py +93 -0
  55. relationalai/util/dataclasses.py +43 -0
  56. relationalai/util/docutils.py +40 -0
  57. relationalai/util/error.py +199 -0
  58. relationalai/util/format.py +48 -109
  59. relationalai/util/naming.py +145 -0
  60. relationalai/util/python.py +35 -0
  61. relationalai/util/runtime.py +156 -0
  62. relationalai/util/schema.py +197 -0
  63. relationalai/util/source.py +185 -0
  64. relationalai/util/structures.py +163 -0
  65. relationalai/util/tracing.py +261 -0
  66. relationalai-1.0.0a1.dist-info/METADATA +44 -0
  67. relationalai-1.0.0a1.dist-info/RECORD +489 -0
  68. relationalai-1.0.0a1.dist-info/WHEEL +5 -0
  69. relationalai-1.0.0a1.dist-info/entry_points.txt +3 -0
  70. relationalai-1.0.0a1.dist-info/top_level.txt +2 -0
  71. v0/relationalai/__init__.py +216 -0
  72. v0/relationalai/clients/__init__.py +5 -0
  73. v0/relationalai/clients/azure.py +477 -0
  74. v0/relationalai/clients/client.py +912 -0
  75. v0/relationalai/clients/config.py +673 -0
  76. v0/relationalai/clients/direct_access_client.py +118 -0
  77. v0/relationalai/clients/hash_util.py +31 -0
  78. v0/relationalai/clients/local.py +571 -0
  79. v0/relationalai/clients/profile_polling.py +73 -0
  80. v0/relationalai/clients/result_helpers.py +420 -0
  81. v0/relationalai/clients/snowflake.py +3869 -0
  82. v0/relationalai/clients/types.py +113 -0
  83. v0/relationalai/clients/use_index_poller.py +980 -0
  84. v0/relationalai/clients/util.py +356 -0
  85. v0/relationalai/debugging.py +389 -0
  86. v0/relationalai/dsl.py +1749 -0
  87. v0/relationalai/early_access/builder/__init__.py +30 -0
  88. v0/relationalai/early_access/builder/builder/__init__.py +35 -0
  89. v0/relationalai/early_access/builder/snowflake/__init__.py +12 -0
  90. v0/relationalai/early_access/builder/std/__init__.py +25 -0
  91. v0/relationalai/early_access/builder/std/decimals/__init__.py +12 -0
  92. v0/relationalai/early_access/builder/std/integers/__init__.py +12 -0
  93. v0/relationalai/early_access/builder/std/math/__init__.py +12 -0
  94. v0/relationalai/early_access/builder/std/strings/__init__.py +14 -0
  95. v0/relationalai/early_access/devtools/__init__.py +12 -0
  96. v0/relationalai/early_access/devtools/benchmark_lqp/__init__.py +12 -0
  97. v0/relationalai/early_access/devtools/extract_lqp/__init__.py +12 -0
  98. v0/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +427 -0
  99. v0/relationalai/early_access/dsl/adapters/orm/parser.py +636 -0
  100. v0/relationalai/early_access/dsl/adapters/owl/adapter.py +176 -0
  101. v0/relationalai/early_access/dsl/adapters/owl/parser.py +160 -0
  102. v0/relationalai/early_access/dsl/bindings/common.py +402 -0
  103. v0/relationalai/early_access/dsl/bindings/csv.py +170 -0
  104. v0/relationalai/early_access/dsl/bindings/legacy/binding_models.py +143 -0
  105. v0/relationalai/early_access/dsl/bindings/snowflake.py +64 -0
  106. v0/relationalai/early_access/dsl/codegen/binder.py +411 -0
  107. v0/relationalai/early_access/dsl/codegen/common.py +79 -0
  108. v0/relationalai/early_access/dsl/codegen/helpers.py +23 -0
  109. v0/relationalai/early_access/dsl/codegen/relations.py +700 -0
  110. v0/relationalai/early_access/dsl/codegen/weaver.py +417 -0
  111. v0/relationalai/early_access/dsl/core/builders/__init__.py +47 -0
  112. v0/relationalai/early_access/dsl/core/builders/logic.py +19 -0
  113. v0/relationalai/early_access/dsl/core/builders/scalar_constraint.py +11 -0
  114. v0/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +455 -0
  115. v0/relationalai/early_access/dsl/core/constraints/predicate/universal.py +73 -0
  116. v0/relationalai/early_access/dsl/core/constraints/scalar.py +310 -0
  117. v0/relationalai/early_access/dsl/core/context.py +13 -0
  118. v0/relationalai/early_access/dsl/core/cset.py +132 -0
  119. v0/relationalai/early_access/dsl/core/exprs/__init__.py +116 -0
  120. v0/relationalai/early_access/dsl/core/exprs/relational.py +18 -0
  121. v0/relationalai/early_access/dsl/core/exprs/scalar.py +412 -0
  122. v0/relationalai/early_access/dsl/core/instances.py +44 -0
  123. v0/relationalai/early_access/dsl/core/logic/__init__.py +193 -0
  124. v0/relationalai/early_access/dsl/core/logic/aggregation.py +98 -0
  125. v0/relationalai/early_access/dsl/core/logic/exists.py +223 -0
  126. v0/relationalai/early_access/dsl/core/logic/helper.py +163 -0
  127. v0/relationalai/early_access/dsl/core/namespaces.py +32 -0
  128. v0/relationalai/early_access/dsl/core/relations.py +276 -0
  129. v0/relationalai/early_access/dsl/core/rules.py +112 -0
  130. v0/relationalai/early_access/dsl/core/std/__init__.py +45 -0
  131. v0/relationalai/early_access/dsl/core/temporal/recall.py +6 -0
  132. v0/relationalai/early_access/dsl/core/types/__init__.py +270 -0
  133. v0/relationalai/early_access/dsl/core/types/concepts.py +128 -0
  134. v0/relationalai/early_access/dsl/core/types/constrained/__init__.py +267 -0
  135. v0/relationalai/early_access/dsl/core/types/constrained/nominal.py +143 -0
  136. v0/relationalai/early_access/dsl/core/types/constrained/subtype.py +124 -0
  137. v0/relationalai/early_access/dsl/core/types/standard.py +92 -0
  138. v0/relationalai/early_access/dsl/core/types/unconstrained.py +50 -0
  139. v0/relationalai/early_access/dsl/core/types/variables.py +203 -0
  140. v0/relationalai/early_access/dsl/ir/compiler.py +318 -0
  141. v0/relationalai/early_access/dsl/ir/executor.py +260 -0
  142. v0/relationalai/early_access/dsl/ontologies/constraints.py +88 -0
  143. v0/relationalai/early_access/dsl/ontologies/export.py +30 -0
  144. v0/relationalai/early_access/dsl/ontologies/models.py +453 -0
  145. v0/relationalai/early_access/dsl/ontologies/python_printer.py +303 -0
  146. v0/relationalai/early_access/dsl/ontologies/readings.py +60 -0
  147. v0/relationalai/early_access/dsl/ontologies/relationships.py +322 -0
  148. v0/relationalai/early_access/dsl/ontologies/roles.py +87 -0
  149. v0/relationalai/early_access/dsl/ontologies/subtyping.py +55 -0
  150. v0/relationalai/early_access/dsl/orm/constraints.py +438 -0
  151. v0/relationalai/early_access/dsl/orm/measures/dimensions.py +200 -0
  152. v0/relationalai/early_access/dsl/orm/measures/initializer.py +16 -0
  153. v0/relationalai/early_access/dsl/orm/measures/measure_rules.py +275 -0
  154. v0/relationalai/early_access/dsl/orm/measures/measures.py +299 -0
  155. v0/relationalai/early_access/dsl/orm/measures/role_exprs.py +268 -0
  156. v0/relationalai/early_access/dsl/orm/models.py +256 -0
  157. v0/relationalai/early_access/dsl/orm/object_oriented_printer.py +344 -0
  158. v0/relationalai/early_access/dsl/orm/printer.py +469 -0
  159. v0/relationalai/early_access/dsl/orm/reasoners.py +480 -0
  160. v0/relationalai/early_access/dsl/orm/relations.py +19 -0
  161. v0/relationalai/early_access/dsl/orm/relationships.py +251 -0
  162. v0/relationalai/early_access/dsl/orm/types.py +42 -0
  163. v0/relationalai/early_access/dsl/orm/utils.py +79 -0
  164. v0/relationalai/early_access/dsl/orm/verb.py +204 -0
  165. v0/relationalai/early_access/dsl/physical_metadata/tables.py +133 -0
  166. v0/relationalai/early_access/dsl/relations.py +170 -0
  167. v0/relationalai/early_access/dsl/rulesets.py +69 -0
  168. v0/relationalai/early_access/dsl/schemas/__init__.py +450 -0
  169. v0/relationalai/early_access/dsl/schemas/builder.py +48 -0
  170. v0/relationalai/early_access/dsl/schemas/comp_names.py +51 -0
  171. v0/relationalai/early_access/dsl/schemas/components.py +203 -0
  172. v0/relationalai/early_access/dsl/schemas/contexts.py +156 -0
  173. v0/relationalai/early_access/dsl/schemas/exprs.py +89 -0
  174. v0/relationalai/early_access/dsl/schemas/fragments.py +464 -0
  175. v0/relationalai/early_access/dsl/serialization.py +79 -0
  176. v0/relationalai/early_access/dsl/serialize/exporter.py +163 -0
  177. v0/relationalai/early_access/dsl/snow/api.py +104 -0
  178. v0/relationalai/early_access/dsl/snow/common.py +76 -0
  179. v0/relationalai/early_access/dsl/state_mgmt/__init__.py +129 -0
  180. v0/relationalai/early_access/dsl/state_mgmt/state_charts.py +125 -0
  181. v0/relationalai/early_access/dsl/state_mgmt/transitions.py +130 -0
  182. v0/relationalai/early_access/dsl/types/__init__.py +40 -0
  183. v0/relationalai/early_access/dsl/types/concepts.py +12 -0
  184. v0/relationalai/early_access/dsl/types/entities.py +135 -0
  185. v0/relationalai/early_access/dsl/types/values.py +17 -0
  186. v0/relationalai/early_access/dsl/utils.py +102 -0
  187. v0/relationalai/early_access/graphs/__init__.py +13 -0
  188. v0/relationalai/early_access/lqp/__init__.py +12 -0
  189. v0/relationalai/early_access/lqp/compiler/__init__.py +12 -0
  190. v0/relationalai/early_access/lqp/constructors/__init__.py +18 -0
  191. v0/relationalai/early_access/lqp/executor/__init__.py +12 -0
  192. v0/relationalai/early_access/lqp/ir/__init__.py +12 -0
  193. v0/relationalai/early_access/lqp/passes/__init__.py +12 -0
  194. v0/relationalai/early_access/lqp/pragmas/__init__.py +12 -0
  195. v0/relationalai/early_access/lqp/primitives/__init__.py +12 -0
  196. v0/relationalai/early_access/lqp/types/__init__.py +12 -0
  197. v0/relationalai/early_access/lqp/utils/__init__.py +12 -0
  198. v0/relationalai/early_access/lqp/validators/__init__.py +12 -0
  199. v0/relationalai/early_access/metamodel/__init__.py +58 -0
  200. v0/relationalai/early_access/metamodel/builtins/__init__.py +12 -0
  201. v0/relationalai/early_access/metamodel/compiler/__init__.py +12 -0
  202. v0/relationalai/early_access/metamodel/dependency/__init__.py +12 -0
  203. v0/relationalai/early_access/metamodel/factory/__init__.py +17 -0
  204. v0/relationalai/early_access/metamodel/helpers/__init__.py +12 -0
  205. v0/relationalai/early_access/metamodel/ir/__init__.py +14 -0
  206. v0/relationalai/early_access/metamodel/rewrite/__init__.py +7 -0
  207. v0/relationalai/early_access/metamodel/typer/__init__.py +3 -0
  208. v0/relationalai/early_access/metamodel/typer/typer/__init__.py +12 -0
  209. v0/relationalai/early_access/metamodel/types/__init__.py +15 -0
  210. v0/relationalai/early_access/metamodel/util/__init__.py +15 -0
  211. v0/relationalai/early_access/metamodel/visitor/__init__.py +12 -0
  212. v0/relationalai/early_access/rel/__init__.py +12 -0
  213. v0/relationalai/early_access/rel/executor/__init__.py +12 -0
  214. v0/relationalai/early_access/rel/rel_utils/__init__.py +12 -0
  215. v0/relationalai/early_access/rel/rewrite/__init__.py +7 -0
  216. v0/relationalai/early_access/solvers/__init__.py +19 -0
  217. v0/relationalai/early_access/sql/__init__.py +11 -0
  218. v0/relationalai/early_access/sql/executor/__init__.py +3 -0
  219. v0/relationalai/early_access/sql/rewrite/__init__.py +3 -0
  220. v0/relationalai/early_access/tests/logging/__init__.py +12 -0
  221. v0/relationalai/early_access/tests/test_snapshot_base/__init__.py +12 -0
  222. v0/relationalai/early_access/tests/utils/__init__.py +12 -0
  223. v0/relationalai/environments/__init__.py +35 -0
  224. v0/relationalai/environments/base.py +381 -0
  225. v0/relationalai/environments/colab.py +14 -0
  226. v0/relationalai/environments/generic.py +71 -0
  227. v0/relationalai/environments/ipython.py +68 -0
  228. v0/relationalai/environments/jupyter.py +9 -0
  229. v0/relationalai/environments/snowbook.py +169 -0
  230. v0/relationalai/errors.py +2455 -0
  231. v0/relationalai/experimental/SF.py +38 -0
  232. v0/relationalai/experimental/inspect.py +47 -0
  233. v0/relationalai/experimental/pathfinder/__init__.py +158 -0
  234. v0/relationalai/experimental/pathfinder/api.py +160 -0
  235. v0/relationalai/experimental/pathfinder/automaton.py +584 -0
  236. v0/relationalai/experimental/pathfinder/bridge.py +226 -0
  237. v0/relationalai/experimental/pathfinder/compiler.py +416 -0
  238. v0/relationalai/experimental/pathfinder/datalog.py +214 -0
  239. v0/relationalai/experimental/pathfinder/diagnostics.py +56 -0
  240. v0/relationalai/experimental/pathfinder/filter.py +236 -0
  241. v0/relationalai/experimental/pathfinder/glushkov.py +439 -0
  242. v0/relationalai/experimental/pathfinder/options.py +265 -0
  243. v0/relationalai/experimental/pathfinder/rpq.py +344 -0
  244. v0/relationalai/experimental/pathfinder/transition.py +200 -0
  245. v0/relationalai/experimental/pathfinder/utils.py +26 -0
  246. v0/relationalai/experimental/paths/api.py +143 -0
  247. v0/relationalai/experimental/paths/benchmarks/grid_graph.py +37 -0
  248. v0/relationalai/experimental/paths/examples/basic_example.py +40 -0
  249. v0/relationalai/experimental/paths/examples/minimal_engine_warmup.py +3 -0
  250. v0/relationalai/experimental/paths/examples/movie_example.py +77 -0
  251. v0/relationalai/experimental/paths/examples/paths_benchmark.py +115 -0
  252. v0/relationalai/experimental/paths/examples/paths_example.py +116 -0
  253. v0/relationalai/experimental/paths/examples/pattern_to_automaton.py +28 -0
  254. v0/relationalai/experimental/paths/find_paths_via_automaton.py +85 -0
  255. v0/relationalai/experimental/paths/graph.py +185 -0
  256. v0/relationalai/experimental/paths/path_algorithms/find_paths.py +280 -0
  257. v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +26 -0
  258. v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +111 -0
  259. v0/relationalai/experimental/paths/path_algorithms/single.py +59 -0
  260. v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +39 -0
  261. v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +103 -0
  262. v0/relationalai/experimental/paths/path_algorithms/usp-old.py +130 -0
  263. v0/relationalai/experimental/paths/path_algorithms/usp-tuple.py +183 -0
  264. v0/relationalai/experimental/paths/path_algorithms/usp.py +150 -0
  265. v0/relationalai/experimental/paths/product_graph.py +93 -0
  266. v0/relationalai/experimental/paths/rpq/automaton.py +584 -0
  267. v0/relationalai/experimental/paths/rpq/diagnostics.py +56 -0
  268. v0/relationalai/experimental/paths/rpq/rpq.py +378 -0
  269. v0/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +90 -0
  270. v0/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +119 -0
  271. v0/relationalai/experimental/paths/tests/tests_limit_sp_single.py +104 -0
  272. v0/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +113 -0
  273. v0/relationalai/experimental/paths/tests/tests_limit_walks_single.py +149 -0
  274. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +70 -0
  275. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +64 -0
  276. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +115 -0
  277. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +75 -0
  278. v0/relationalai/experimental/paths/tests/tests_single_paths.py +152 -0
  279. v0/relationalai/experimental/paths/tests/tests_single_walks.py +208 -0
  280. v0/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +297 -0
  281. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +107 -0
  282. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +76 -0
  283. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +76 -0
  284. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +110 -0
  285. v0/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +229 -0
  286. v0/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +108 -0
  287. v0/relationalai/experimental/paths/tree_agg.py +168 -0
  288. v0/relationalai/experimental/paths/utilities/iterators.py +27 -0
  289. v0/relationalai/experimental/paths/utilities/prefix_sum.py +91 -0
  290. v0/relationalai/experimental/solvers.py +1087 -0
  291. v0/relationalai/loaders/csv.py +195 -0
  292. v0/relationalai/loaders/loader.py +177 -0
  293. v0/relationalai/loaders/types.py +23 -0
  294. v0/relationalai/rel_emitter.py +373 -0
  295. v0/relationalai/rel_utils.py +185 -0
  296. v0/relationalai/semantics/__init__.py +29 -0
  297. v0/relationalai/semantics/devtools/benchmark_lqp.py +536 -0
  298. v0/relationalai/semantics/devtools/compilation_manager.py +294 -0
  299. v0/relationalai/semantics/devtools/extract_lqp.py +110 -0
  300. v0/relationalai/semantics/internal/internal.py +3785 -0
  301. v0/relationalai/semantics/internal/snowflake.py +324 -0
  302. v0/relationalai/semantics/lqp/builtins.py +16 -0
  303. v0/relationalai/semantics/lqp/compiler.py +22 -0
  304. v0/relationalai/semantics/lqp/constructors.py +68 -0
  305. v0/relationalai/semantics/lqp/executor.py +469 -0
  306. v0/relationalai/semantics/lqp/intrinsics.py +24 -0
  307. v0/relationalai/semantics/lqp/ir.py +124 -0
  308. v0/relationalai/semantics/lqp/model2lqp.py +839 -0
  309. v0/relationalai/semantics/lqp/passes.py +680 -0
  310. v0/relationalai/semantics/lqp/primitives.py +252 -0
  311. v0/relationalai/semantics/lqp/result_helpers.py +202 -0
  312. v0/relationalai/semantics/lqp/rewrite/__init__.py +18 -0
  313. v0/relationalai/semantics/lqp/rewrite/annotate_constraints.py +57 -0
  314. v0/relationalai/semantics/lqp/rewrite/cdc.py +216 -0
  315. v0/relationalai/semantics/lqp/rewrite/extract_common.py +338 -0
  316. v0/relationalai/semantics/lqp/rewrite/extract_keys.py +449 -0
  317. v0/relationalai/semantics/lqp/rewrite/function_annotations.py +114 -0
  318. v0/relationalai/semantics/lqp/rewrite/functional_dependencies.py +314 -0
  319. v0/relationalai/semantics/lqp/rewrite/quantify_vars.py +296 -0
  320. v0/relationalai/semantics/lqp/rewrite/splinter.py +76 -0
  321. v0/relationalai/semantics/lqp/types.py +101 -0
  322. v0/relationalai/semantics/lqp/utils.py +160 -0
  323. v0/relationalai/semantics/lqp/validators.py +57 -0
  324. v0/relationalai/semantics/metamodel/__init__.py +40 -0
  325. v0/relationalai/semantics/metamodel/builtins.py +774 -0
  326. v0/relationalai/semantics/metamodel/compiler.py +133 -0
  327. v0/relationalai/semantics/metamodel/dependency.py +862 -0
  328. v0/relationalai/semantics/metamodel/executor.py +61 -0
  329. v0/relationalai/semantics/metamodel/factory.py +287 -0
  330. v0/relationalai/semantics/metamodel/helpers.py +361 -0
  331. v0/relationalai/semantics/metamodel/ir.py +923 -0
  332. v0/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +39 -0
  333. v0/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +210 -0
  334. v0/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +78 -0
  335. v0/relationalai/semantics/metamodel/rewrite/flatten.py +549 -0
  336. v0/relationalai/semantics/metamodel/rewrite/format_outputs.py +165 -0
  337. v0/relationalai/semantics/metamodel/typer/checker.py +353 -0
  338. v0/relationalai/semantics/metamodel/typer/typer.py +1395 -0
  339. v0/relationalai/semantics/metamodel/util.py +505 -0
  340. v0/relationalai/semantics/metamodel/visitor.py +944 -0
  341. v0/relationalai/semantics/reasoners/__init__.py +10 -0
  342. v0/relationalai/semantics/reasoners/graph/__init__.py +37 -0
  343. v0/relationalai/semantics/reasoners/graph/core.py +9020 -0
  344. v0/relationalai/semantics/reasoners/optimization/__init__.py +68 -0
  345. v0/relationalai/semantics/reasoners/optimization/common.py +88 -0
  346. v0/relationalai/semantics/reasoners/optimization/solvers_dev.py +568 -0
  347. v0/relationalai/semantics/reasoners/optimization/solvers_pb.py +1163 -0
  348. v0/relationalai/semantics/rel/builtins.py +40 -0
  349. v0/relationalai/semantics/rel/compiler.py +989 -0
  350. v0/relationalai/semantics/rel/executor.py +359 -0
  351. v0/relationalai/semantics/rel/rel.py +482 -0
  352. v0/relationalai/semantics/rel/rel_utils.py +276 -0
  353. v0/relationalai/semantics/snowflake/__init__.py +3 -0
  354. v0/relationalai/semantics/sql/compiler.py +2503 -0
  355. v0/relationalai/semantics/sql/executor/duck_db.py +52 -0
  356. v0/relationalai/semantics/sql/executor/result_helpers.py +64 -0
  357. v0/relationalai/semantics/sql/executor/snowflake.py +145 -0
  358. v0/relationalai/semantics/sql/rewrite/denormalize.py +222 -0
  359. v0/relationalai/semantics/sql/rewrite/double_negation.py +49 -0
  360. v0/relationalai/semantics/sql/rewrite/recursive_union.py +127 -0
  361. v0/relationalai/semantics/sql/rewrite/sort_output_query.py +246 -0
  362. v0/relationalai/semantics/sql/sql.py +504 -0
  363. v0/relationalai/semantics/std/__init__.py +54 -0
  364. v0/relationalai/semantics/std/constraints.py +43 -0
  365. v0/relationalai/semantics/std/datetime.py +363 -0
  366. v0/relationalai/semantics/std/decimals.py +62 -0
  367. v0/relationalai/semantics/std/floats.py +7 -0
  368. v0/relationalai/semantics/std/integers.py +22 -0
  369. v0/relationalai/semantics/std/math.py +141 -0
  370. v0/relationalai/semantics/std/pragmas.py +11 -0
  371. v0/relationalai/semantics/std/re.py +83 -0
  372. v0/relationalai/semantics/std/std.py +14 -0
  373. v0/relationalai/semantics/std/strings.py +63 -0
  374. v0/relationalai/semantics/tests/__init__.py +0 -0
  375. v0/relationalai/semantics/tests/test_snapshot_abstract.py +143 -0
  376. v0/relationalai/semantics/tests/test_snapshot_base.py +9 -0
  377. v0/relationalai/semantics/tests/utils.py +46 -0
  378. v0/relationalai/std/__init__.py +70 -0
  379. v0/relationalai/tools/__init__.py +0 -0
  380. v0/relationalai/tools/cli.py +1940 -0
  381. v0/relationalai/tools/cli_controls.py +1826 -0
  382. v0/relationalai/tools/cli_helpers.py +390 -0
  383. v0/relationalai/tools/debugger.py +183 -0
  384. v0/relationalai/tools/debugger_client.py +109 -0
  385. v0/relationalai/tools/debugger_server.py +302 -0
  386. v0/relationalai/tools/dev.py +685 -0
  387. v0/relationalai/tools/qb_debugger.py +425 -0
  388. v0/relationalai/util/clean_up_databases.py +95 -0
  389. v0/relationalai/util/format.py +123 -0
  390. v0/relationalai/util/list_databases.py +9 -0
  391. v0/relationalai/util/otel_configuration.py +25 -0
  392. v0/relationalai/util/otel_handler.py +484 -0
  393. v0/relationalai/util/snowflake_handler.py +88 -0
  394. v0/relationalai/util/span_format_test.py +43 -0
  395. v0/relationalai/util/span_tracker.py +207 -0
  396. v0/relationalai/util/spans_file_handler.py +72 -0
  397. v0/relationalai/util/tracing_handler.py +34 -0
  398. frontend/debugger/dist/.gitignore +0 -2
  399. frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  400. frontend/debugger/dist/assets/index-Cssla-O7.js +0 -208
  401. frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -9
  402. frontend/debugger/dist/index.html +0 -17
  403. relationalai/clients/__init__.py +0 -18
  404. relationalai/clients/client.py +0 -946
  405. relationalai/clients/config.py +0 -673
  406. relationalai/clients/direct_access_client.py +0 -118
  407. relationalai/clients/exec_txn_poller.py +0 -122
  408. relationalai/clients/hash_util.py +0 -31
  409. relationalai/clients/local.py +0 -586
  410. relationalai/clients/profile_polling.py +0 -73
  411. relationalai/clients/resources/__init__.py +0 -8
  412. relationalai/clients/resources/azure/azure.py +0 -502
  413. relationalai/clients/resources/snowflake/__init__.py +0 -20
  414. relationalai/clients/resources/snowflake/cli_resources.py +0 -98
  415. relationalai/clients/resources/snowflake/direct_access_resources.py +0 -735
  416. relationalai/clients/resources/snowflake/engine_service.py +0 -381
  417. relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -315
  418. relationalai/clients/resources/snowflake/error_handlers.py +0 -240
  419. relationalai/clients/resources/snowflake/export_procedure.py.jinja +0 -249
  420. relationalai/clients/resources/snowflake/resources_factory.py +0 -99
  421. relationalai/clients/resources/snowflake/snowflake.py +0 -3188
  422. relationalai/clients/resources/snowflake/use_index_poller.py +0 -1019
  423. relationalai/clients/resources/snowflake/use_index_resources.py +0 -188
  424. relationalai/clients/resources/snowflake/util.py +0 -387
  425. relationalai/clients/result_helpers.py +0 -420
  426. relationalai/clients/types.py +0 -118
  427. relationalai/clients/util.py +0 -356
  428. relationalai/debugging.py +0 -389
  429. relationalai/dsl.py +0 -1749
  430. relationalai/early_access/builder/__init__.py +0 -30
  431. relationalai/early_access/builder/builder/__init__.py +0 -35
  432. relationalai/early_access/builder/snowflake/__init__.py +0 -12
  433. relationalai/early_access/builder/std/__init__.py +0 -25
  434. relationalai/early_access/builder/std/decimals/__init__.py +0 -12
  435. relationalai/early_access/builder/std/integers/__init__.py +0 -12
  436. relationalai/early_access/builder/std/math/__init__.py +0 -12
  437. relationalai/early_access/builder/std/strings/__init__.py +0 -14
  438. relationalai/early_access/devtools/__init__.py +0 -12
  439. relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -12
  440. relationalai/early_access/devtools/extract_lqp/__init__.py +0 -12
  441. relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -427
  442. relationalai/early_access/dsl/adapters/orm/parser.py +0 -636
  443. relationalai/early_access/dsl/adapters/owl/adapter.py +0 -176
  444. relationalai/early_access/dsl/adapters/owl/parser.py +0 -160
  445. relationalai/early_access/dsl/bindings/common.py +0 -402
  446. relationalai/early_access/dsl/bindings/csv.py +0 -170
  447. relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -143
  448. relationalai/early_access/dsl/bindings/snowflake.py +0 -64
  449. relationalai/early_access/dsl/codegen/binder.py +0 -411
  450. relationalai/early_access/dsl/codegen/common.py +0 -79
  451. relationalai/early_access/dsl/codegen/helpers.py +0 -23
  452. relationalai/early_access/dsl/codegen/relations.py +0 -700
  453. relationalai/early_access/dsl/codegen/weaver.py +0 -417
  454. relationalai/early_access/dsl/core/builders/__init__.py +0 -47
  455. relationalai/early_access/dsl/core/builders/logic.py +0 -19
  456. relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -11
  457. relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -455
  458. relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -73
  459. relationalai/early_access/dsl/core/constraints/scalar.py +0 -310
  460. relationalai/early_access/dsl/core/context.py +0 -13
  461. relationalai/early_access/dsl/core/cset.py +0 -132
  462. relationalai/early_access/dsl/core/exprs/__init__.py +0 -116
  463. relationalai/early_access/dsl/core/exprs/relational.py +0 -18
  464. relationalai/early_access/dsl/core/exprs/scalar.py +0 -412
  465. relationalai/early_access/dsl/core/instances.py +0 -44
  466. relationalai/early_access/dsl/core/logic/__init__.py +0 -193
  467. relationalai/early_access/dsl/core/logic/aggregation.py +0 -98
  468. relationalai/early_access/dsl/core/logic/exists.py +0 -223
  469. relationalai/early_access/dsl/core/logic/helper.py +0 -163
  470. relationalai/early_access/dsl/core/namespaces.py +0 -32
  471. relationalai/early_access/dsl/core/relations.py +0 -276
  472. relationalai/early_access/dsl/core/rules.py +0 -112
  473. relationalai/early_access/dsl/core/std/__init__.py +0 -45
  474. relationalai/early_access/dsl/core/temporal/recall.py +0 -6
  475. relationalai/early_access/dsl/core/types/__init__.py +0 -270
  476. relationalai/early_access/dsl/core/types/concepts.py +0 -128
  477. relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -267
  478. relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -143
  479. relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -124
  480. relationalai/early_access/dsl/core/types/standard.py +0 -92
  481. relationalai/early_access/dsl/core/types/unconstrained.py +0 -50
  482. relationalai/early_access/dsl/core/types/variables.py +0 -203
  483. relationalai/early_access/dsl/ir/compiler.py +0 -318
  484. relationalai/early_access/dsl/ir/executor.py +0 -260
  485. relationalai/early_access/dsl/ontologies/constraints.py +0 -88
  486. relationalai/early_access/dsl/ontologies/export.py +0 -30
  487. relationalai/early_access/dsl/ontologies/models.py +0 -453
  488. relationalai/early_access/dsl/ontologies/python_printer.py +0 -303
  489. relationalai/early_access/dsl/ontologies/readings.py +0 -60
  490. relationalai/early_access/dsl/ontologies/relationships.py +0 -322
  491. relationalai/early_access/dsl/ontologies/roles.py +0 -87
  492. relationalai/early_access/dsl/ontologies/subtyping.py +0 -55
  493. relationalai/early_access/dsl/orm/constraints.py +0 -438
  494. relationalai/early_access/dsl/orm/measures/dimensions.py +0 -200
  495. relationalai/early_access/dsl/orm/measures/initializer.py +0 -16
  496. relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -275
  497. relationalai/early_access/dsl/orm/measures/measures.py +0 -299
  498. relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -268
  499. relationalai/early_access/dsl/orm/models.py +0 -256
  500. relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -344
  501. relationalai/early_access/dsl/orm/printer.py +0 -469
  502. relationalai/early_access/dsl/orm/reasoners.py +0 -480
  503. relationalai/early_access/dsl/orm/relations.py +0 -19
  504. relationalai/early_access/dsl/orm/relationships.py +0 -251
  505. relationalai/early_access/dsl/orm/types.py +0 -42
  506. relationalai/early_access/dsl/orm/utils.py +0 -79
  507. relationalai/early_access/dsl/orm/verb.py +0 -204
  508. relationalai/early_access/dsl/physical_metadata/tables.py +0 -133
  509. relationalai/early_access/dsl/relations.py +0 -170
  510. relationalai/early_access/dsl/rulesets.py +0 -69
  511. relationalai/early_access/dsl/schemas/__init__.py +0 -450
  512. relationalai/early_access/dsl/schemas/builder.py +0 -48
  513. relationalai/early_access/dsl/schemas/comp_names.py +0 -51
  514. relationalai/early_access/dsl/schemas/components.py +0 -203
  515. relationalai/early_access/dsl/schemas/contexts.py +0 -156
  516. relationalai/early_access/dsl/schemas/exprs.py +0 -89
  517. relationalai/early_access/dsl/schemas/fragments.py +0 -464
  518. relationalai/early_access/dsl/serialization.py +0 -79
  519. relationalai/early_access/dsl/serialize/exporter.py +0 -163
  520. relationalai/early_access/dsl/snow/api.py +0 -105
  521. relationalai/early_access/dsl/snow/common.py +0 -76
  522. relationalai/early_access/dsl/state_mgmt/__init__.py +0 -129
  523. relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -125
  524. relationalai/early_access/dsl/state_mgmt/transitions.py +0 -130
  525. relationalai/early_access/dsl/types/__init__.py +0 -40
  526. relationalai/early_access/dsl/types/concepts.py +0 -12
  527. relationalai/early_access/dsl/types/entities.py +0 -135
  528. relationalai/early_access/dsl/types/values.py +0 -17
  529. relationalai/early_access/dsl/utils.py +0 -102
  530. relationalai/early_access/graphs/__init__.py +0 -13
  531. relationalai/early_access/lqp/__init__.py +0 -12
  532. relationalai/early_access/lqp/compiler/__init__.py +0 -12
  533. relationalai/early_access/lqp/constructors/__init__.py +0 -18
  534. relationalai/early_access/lqp/executor/__init__.py +0 -12
  535. relationalai/early_access/lqp/ir/__init__.py +0 -12
  536. relationalai/early_access/lqp/passes/__init__.py +0 -12
  537. relationalai/early_access/lqp/pragmas/__init__.py +0 -12
  538. relationalai/early_access/lqp/primitives/__init__.py +0 -12
  539. relationalai/early_access/lqp/types/__init__.py +0 -12
  540. relationalai/early_access/lqp/utils/__init__.py +0 -12
  541. relationalai/early_access/lqp/validators/__init__.py +0 -12
  542. relationalai/early_access/metamodel/__init__.py +0 -58
  543. relationalai/early_access/metamodel/builtins/__init__.py +0 -12
  544. relationalai/early_access/metamodel/compiler/__init__.py +0 -12
  545. relationalai/early_access/metamodel/dependency/__init__.py +0 -12
  546. relationalai/early_access/metamodel/factory/__init__.py +0 -17
  547. relationalai/early_access/metamodel/helpers/__init__.py +0 -12
  548. relationalai/early_access/metamodel/ir/__init__.py +0 -14
  549. relationalai/early_access/metamodel/rewrite/__init__.py +0 -7
  550. relationalai/early_access/metamodel/typer/__init__.py +0 -3
  551. relationalai/early_access/metamodel/typer/typer/__init__.py +0 -12
  552. relationalai/early_access/metamodel/types/__init__.py +0 -15
  553. relationalai/early_access/metamodel/util/__init__.py +0 -15
  554. relationalai/early_access/metamodel/visitor/__init__.py +0 -12
  555. relationalai/early_access/rel/__init__.py +0 -12
  556. relationalai/early_access/rel/executor/__init__.py +0 -12
  557. relationalai/early_access/rel/rel_utils/__init__.py +0 -12
  558. relationalai/early_access/rel/rewrite/__init__.py +0 -7
  559. relationalai/early_access/solvers/__init__.py +0 -19
  560. relationalai/early_access/sql/__init__.py +0 -11
  561. relationalai/early_access/sql/executor/__init__.py +0 -3
  562. relationalai/early_access/sql/rewrite/__init__.py +0 -3
  563. relationalai/early_access/tests/logging/__init__.py +0 -12
  564. relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -12
  565. relationalai/early_access/tests/utils/__init__.py +0 -12
  566. relationalai/environments/__init__.py +0 -35
  567. relationalai/environments/base.py +0 -381
  568. relationalai/environments/colab.py +0 -14
  569. relationalai/environments/generic.py +0 -71
  570. relationalai/environments/ipython.py +0 -68
  571. relationalai/environments/jupyter.py +0 -9
  572. relationalai/environments/snowbook.py +0 -169
  573. relationalai/errors.py +0 -2496
  574. relationalai/experimental/SF.py +0 -38
  575. relationalai/experimental/inspect.py +0 -47
  576. relationalai/experimental/pathfinder/__init__.py +0 -158
  577. relationalai/experimental/pathfinder/api.py +0 -160
  578. relationalai/experimental/pathfinder/automaton.py +0 -584
  579. relationalai/experimental/pathfinder/bridge.py +0 -226
  580. relationalai/experimental/pathfinder/compiler.py +0 -416
  581. relationalai/experimental/pathfinder/datalog.py +0 -214
  582. relationalai/experimental/pathfinder/diagnostics.py +0 -56
  583. relationalai/experimental/pathfinder/filter.py +0 -236
  584. relationalai/experimental/pathfinder/glushkov.py +0 -439
  585. relationalai/experimental/pathfinder/options.py +0 -265
  586. relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -1951
  587. relationalai/experimental/pathfinder/rpq.py +0 -344
  588. relationalai/experimental/pathfinder/transition.py +0 -200
  589. relationalai/experimental/pathfinder/utils.py +0 -26
  590. relationalai/experimental/paths/README.md +0 -107
  591. relationalai/experimental/paths/api.py +0 -143
  592. relationalai/experimental/paths/benchmarks/grid_graph.py +0 -37
  593. relationalai/experimental/paths/code_organization.md +0 -2
  594. relationalai/experimental/paths/examples/Movies.ipynb +0 -16328
  595. relationalai/experimental/paths/examples/basic_example.py +0 -40
  596. relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -3
  597. relationalai/experimental/paths/examples/movie_example.py +0 -77
  598. relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -193
  599. relationalai/experimental/paths/examples/movies_data/directed.csv +0 -45
  600. relationalai/experimental/paths/examples/movies_data/follows.csv +0 -7
  601. relationalai/experimental/paths/examples/movies_data/movies.csv +0 -39
  602. relationalai/experimental/paths/examples/movies_data/person.csv +0 -134
  603. relationalai/experimental/paths/examples/movies_data/produced.csv +0 -16
  604. relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -10
  605. relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -11
  606. relationalai/experimental/paths/examples/paths_benchmark.py +0 -115
  607. relationalai/experimental/paths/examples/paths_example.py +0 -116
  608. relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -28
  609. relationalai/experimental/paths/find_paths_via_automaton.py +0 -85
  610. relationalai/experimental/paths/graph.py +0 -185
  611. relationalai/experimental/paths/path_algorithms/find_paths.py +0 -280
  612. relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -26
  613. relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -111
  614. relationalai/experimental/paths/path_algorithms/single.py +0 -59
  615. relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -39
  616. relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -103
  617. relationalai/experimental/paths/path_algorithms/usp-old.py +0 -130
  618. relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -183
  619. relationalai/experimental/paths/path_algorithms/usp.py +0 -150
  620. relationalai/experimental/paths/product_graph.py +0 -93
  621. relationalai/experimental/paths/rpq/automaton.py +0 -584
  622. relationalai/experimental/paths/rpq/diagnostics.py +0 -56
  623. relationalai/experimental/paths/rpq/rpq.py +0 -378
  624. relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -90
  625. relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -119
  626. relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -104
  627. relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -113
  628. relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -149
  629. relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -70
  630. relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -64
  631. relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -115
  632. relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -75
  633. relationalai/experimental/paths/tests/tests_single_paths.py +0 -152
  634. relationalai/experimental/paths/tests/tests_single_walks.py +0 -208
  635. relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -297
  636. relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -107
  637. relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -76
  638. relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -76
  639. relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -110
  640. relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -229
  641. relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -108
  642. relationalai/experimental/paths/tree_agg.py +0 -168
  643. relationalai/experimental/paths/utilities/iterators.py +0 -27
  644. relationalai/experimental/paths/utilities/prefix_sum.py +0 -91
  645. relationalai/experimental/solvers.py +0 -1087
  646. relationalai/loaders/csv.py +0 -195
  647. relationalai/loaders/loader.py +0 -177
  648. relationalai/loaders/types.py +0 -23
  649. relationalai/rel_emitter.py +0 -373
  650. relationalai/rel_utils.py +0 -185
  651. relationalai/semantics/designs/query_builder/identify_by.md +0 -106
  652. relationalai/semantics/devtools/benchmark_lqp.py +0 -535
  653. relationalai/semantics/devtools/compilation_manager.py +0 -294
  654. relationalai/semantics/devtools/extract_lqp.py +0 -110
  655. relationalai/semantics/internal/internal.py +0 -3785
  656. relationalai/semantics/internal/snowflake.py +0 -329
  657. relationalai/semantics/lqp/README.md +0 -34
  658. relationalai/semantics/lqp/algorithms.py +0 -173
  659. relationalai/semantics/lqp/builtins.py +0 -213
  660. relationalai/semantics/lqp/compiler.py +0 -22
  661. relationalai/semantics/lqp/constructors.py +0 -68
  662. relationalai/semantics/lqp/executor.py +0 -518
  663. relationalai/semantics/lqp/export_rewriter.py +0 -40
  664. relationalai/semantics/lqp/intrinsics.py +0 -24
  665. relationalai/semantics/lqp/ir.py +0 -150
  666. relationalai/semantics/lqp/model2lqp.py +0 -1050
  667. relationalai/semantics/lqp/passes.py +0 -35
  668. relationalai/semantics/lqp/primitives.py +0 -252
  669. relationalai/semantics/lqp/result_helpers.py +0 -202
  670. relationalai/semantics/lqp/rewrite/__init__.py +0 -30
  671. relationalai/semantics/lqp/rewrite/algorithm.py +0 -385
  672. relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -69
  673. relationalai/semantics/lqp/rewrite/cdc.py +0 -216
  674. relationalai/semantics/lqp/rewrite/constants_to_vars.py +0 -70
  675. relationalai/semantics/lqp/rewrite/deduplicate_vars.py +0 -104
  676. relationalai/semantics/lqp/rewrite/eliminate_data.py +0 -108
  677. relationalai/semantics/lqp/rewrite/extract_common.py +0 -338
  678. relationalai/semantics/lqp/rewrite/extract_keys.py +0 -512
  679. relationalai/semantics/lqp/rewrite/function_annotations.py +0 -114
  680. relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -343
  681. relationalai/semantics/lqp/rewrite/period_math.py +0 -77
  682. relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -330
  683. relationalai/semantics/lqp/rewrite/splinter.py +0 -76
  684. relationalai/semantics/lqp/rewrite/unify_definitions.py +0 -317
  685. relationalai/semantics/lqp/types.py +0 -101
  686. relationalai/semantics/lqp/utils.py +0 -170
  687. relationalai/semantics/lqp/validators.py +0 -70
  688. relationalai/semantics/metamodel/compiler.py +0 -134
  689. relationalai/semantics/metamodel/dependency.py +0 -871
  690. relationalai/semantics/metamodel/executor.py +0 -71
  691. relationalai/semantics/metamodel/factory.py +0 -287
  692. relationalai/semantics/metamodel/helpers.py +0 -368
  693. relationalai/semantics/metamodel/ir.py +0 -924
  694. relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -39
  695. relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -220
  696. relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -78
  697. relationalai/semantics/metamodel/rewrite/flatten.py +0 -591
  698. relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -171
  699. relationalai/semantics/metamodel/typer/checker.py +0 -355
  700. relationalai/semantics/metamodel/typer/typer.py +0 -1396
  701. relationalai/semantics/metamodel/util.py +0 -506
  702. relationalai/semantics/metamodel/visitor.py +0 -945
  703. relationalai/semantics/reasoners/__init__.py +0 -10
  704. relationalai/semantics/reasoners/graph/README.md +0 -620
  705. relationalai/semantics/reasoners/graph/__init__.py +0 -37
  706. relationalai/semantics/reasoners/graph/core.py +0 -9019
  707. relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -797
  708. relationalai/semantics/reasoners/graph/tests/README.md +0 -21
  709. relationalai/semantics/reasoners/optimization/__init__.py +0 -68
  710. relationalai/semantics/reasoners/optimization/common.py +0 -88
  711. relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -568
  712. relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -1413
  713. relationalai/semantics/rel/builtins.py +0 -40
  714. relationalai/semantics/rel/compiler.py +0 -990
  715. relationalai/semantics/rel/executor.py +0 -363
  716. relationalai/semantics/rel/rel.py +0 -482
  717. relationalai/semantics/rel/rel_utils.py +0 -276
  718. relationalai/semantics/snowflake/__init__.py +0 -3
  719. relationalai/semantics/sql/compiler.py +0 -2503
  720. relationalai/semantics/sql/executor/duck_db.py +0 -52
  721. relationalai/semantics/sql/executor/result_helpers.py +0 -64
  722. relationalai/semantics/sql/executor/snowflake.py +0 -149
  723. relationalai/semantics/sql/rewrite/denormalize.py +0 -222
  724. relationalai/semantics/sql/rewrite/double_negation.py +0 -49
  725. relationalai/semantics/sql/rewrite/recursive_union.py +0 -127
  726. relationalai/semantics/sql/rewrite/sort_output_query.py +0 -246
  727. relationalai/semantics/sql/sql.py +0 -504
  728. relationalai/semantics/std/pragmas.py +0 -11
  729. relationalai/semantics/std/std.py +0 -14
  730. relationalai/semantics/tests/lqp/algorithms.py +0 -345
  731. relationalai/semantics/tests/test_snapshot_abstract.py +0 -144
  732. relationalai/semantics/tests/test_snapshot_base.py +0 -9
  733. relationalai/semantics/tests/utils.py +0 -46
  734. relationalai/std/__init__.py +0 -70
  735. relationalai/tools/cli.py +0 -2089
  736. relationalai/tools/cli_controls.py +0 -1975
  737. relationalai/tools/cli_helpers.py +0 -802
  738. relationalai/tools/debugger_client.py +0 -109
  739. relationalai/tools/debugger_server.py +0 -302
  740. relationalai/tools/dev.py +0 -685
  741. relationalai/tools/notes +0 -7
  742. relationalai/tools/qb_debugger.py +0 -425
  743. relationalai/util/clean_up_databases.py +0 -95
  744. relationalai/util/list_databases.py +0 -9
  745. relationalai/util/otel_configuration.py +0 -26
  746. relationalai/util/otel_handler.py +0 -484
  747. relationalai/util/snowflake_handler.py +0 -88
  748. relationalai/util/span_format_test.py +0 -43
  749. relationalai/util/span_tracker.py +0 -207
  750. relationalai/util/spans_file_handler.py +0 -72
  751. relationalai/util/tracing_handler.py +0 -34
  752. relationalai-0.13.4.dist-info/METADATA +0 -74
  753. relationalai-0.13.4.dist-info/RECORD +0 -470
  754. relationalai-0.13.4.dist-info/WHEEL +0 -4
  755. relationalai-0.13.4.dist-info/entry_points.txt +0 -3
  756. relationalai-0.13.4.dist-info/licenses/LICENSE +0 -202
  757. relationalai_test_util/__init__.py +0 -4
  758. relationalai_test_util/fixtures.py +0 -233
  759. relationalai_test_util/snapshot.py +0 -252
  760. relationalai_test_util/traceback.py +0 -118
  761. /relationalai/{analysis → semantics/frontend}/__init__.py +0 -0
  762. /relationalai/{auth/__init__.py → semantics/metamodel/metamodel_compiler.py} +0 -0
  763. /relationalai/{early_access → shims}/__init__.py +0 -0
  764. {relationalai/early_access/dsl/adapters → v0/relationalai/analysis}/__init__.py +0 -0
  765. {relationalai → v0/relationalai}/analysis/mechanistic.py +0 -0
  766. {relationalai → v0/relationalai}/analysis/whynot.py +0 -0
  767. {relationalai/early_access/dsl/adapters/orm → v0/relationalai/auth}/__init__.py +0 -0
  768. {relationalai → v0/relationalai}/auth/jwt_generator.py +0 -0
  769. {relationalai → v0/relationalai}/auth/oauth_callback_server.py +0 -0
  770. {relationalai → v0/relationalai}/auth/token_handler.py +0 -0
  771. {relationalai → v0/relationalai}/auth/util.py +0 -0
  772. {relationalai/clients/resources/snowflake → v0/relationalai/clients}/cache_store.py +0 -0
  773. {relationalai → v0/relationalai}/compiler.py +0 -0
  774. {relationalai → v0/relationalai}/dependencies.py +0 -0
  775. {relationalai → v0/relationalai}/docutils.py +0 -0
  776. {relationalai/early_access/dsl/adapters/owl → v0/relationalai/early_access}/__init__.py +0 -0
  777. {relationalai → v0/relationalai}/early_access/dsl/__init__.py +0 -0
  778. {relationalai/early_access/dsl/bindings → v0/relationalai/early_access/dsl/adapters}/__init__.py +0 -0
  779. {relationalai/early_access/dsl/bindings/legacy → v0/relationalai/early_access/dsl/adapters/orm}/__init__.py +0 -0
  780. {relationalai → v0/relationalai}/early_access/dsl/adapters/orm/model.py +0 -0
  781. {relationalai/early_access/dsl/codegen → v0/relationalai/early_access/dsl/adapters/owl}/__init__.py +0 -0
  782. {relationalai → v0/relationalai}/early_access/dsl/adapters/owl/model.py +0 -0
  783. {relationalai/early_access/dsl/core/temporal → v0/relationalai/early_access/dsl/bindings}/__init__.py +0 -0
  784. {relationalai/early_access/dsl/ir → v0/relationalai/early_access/dsl/bindings/legacy}/__init__.py +0 -0
  785. {relationalai/early_access/dsl/ontologies → v0/relationalai/early_access/dsl/codegen}/__init__.py +0 -0
  786. {relationalai → v0/relationalai}/early_access/dsl/constants.py +0 -0
  787. {relationalai → v0/relationalai}/early_access/dsl/core/__init__.py +0 -0
  788. {relationalai → v0/relationalai}/early_access/dsl/core/constraints/__init__.py +0 -0
  789. {relationalai → v0/relationalai}/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  790. {relationalai → v0/relationalai}/early_access/dsl/core/stack.py +0 -0
  791. {relationalai/early_access/dsl/orm → v0/relationalai/early_access/dsl/core/temporal}/__init__.py +0 -0
  792. {relationalai → v0/relationalai}/early_access/dsl/core/utils.py +0 -0
  793. {relationalai/early_access/dsl/orm/measures → v0/relationalai/early_access/dsl/ir}/__init__.py +0 -0
  794. {relationalai/early_access/dsl/physical_metadata → v0/relationalai/early_access/dsl/ontologies}/__init__.py +0 -0
  795. {relationalai → v0/relationalai}/early_access/dsl/ontologies/raw_source.py +0 -0
  796. {relationalai/early_access/dsl/serialize → v0/relationalai/early_access/dsl/orm}/__init__.py +0 -0
  797. {relationalai/early_access/dsl/snow → v0/relationalai/early_access/dsl/orm/measures}/__init__.py +0 -0
  798. {relationalai → v0/relationalai}/early_access/dsl/orm/reasoner_errors.py +0 -0
  799. {relationalai/loaders → v0/relationalai/early_access/dsl/physical_metadata}/__init__.py +0 -0
  800. {relationalai/semantics/tests → v0/relationalai/early_access/dsl/serialize}/__init__.py +0 -0
  801. {relationalai → v0/relationalai}/early_access/dsl/serialize/binding_model.py +0 -0
  802. {relationalai → v0/relationalai}/early_access/dsl/serialize/model.py +0 -0
  803. {relationalai/semantics/tests/lqp → v0/relationalai/early_access/dsl/snow}/__init__.py +0 -0
  804. {relationalai → v0/relationalai}/early_access/tests/__init__.py +0 -0
  805. {relationalai → v0/relationalai}/environments/ci.py +0 -0
  806. {relationalai → v0/relationalai}/environments/hex.py +0 -0
  807. {relationalai → v0/relationalai}/environments/terminal.py +0 -0
  808. {relationalai → v0/relationalai}/experimental/__init__.py +0 -0
  809. {relationalai → v0/relationalai}/experimental/graphs.py +0 -0
  810. {relationalai → v0/relationalai}/experimental/paths/__init__.py +0 -0
  811. {relationalai → v0/relationalai}/experimental/paths/benchmarks/__init__.py +0 -0
  812. {relationalai → v0/relationalai}/experimental/paths/path_algorithms/__init__.py +0 -0
  813. {relationalai → v0/relationalai}/experimental/paths/rpq/__init__.py +0 -0
  814. {relationalai → v0/relationalai}/experimental/paths/rpq/filter.py +0 -0
  815. {relationalai → v0/relationalai}/experimental/paths/rpq/glushkov.py +0 -0
  816. {relationalai → v0/relationalai}/experimental/paths/rpq/transition.py +0 -0
  817. {relationalai → v0/relationalai}/experimental/paths/utilities/__init__.py +0 -0
  818. {relationalai → v0/relationalai}/experimental/paths/utilities/utilities.py +0 -0
  819. {relationalai/tools → v0/relationalai/loaders}/__init__.py +0 -0
  820. {relationalai → v0/relationalai}/metagen.py +0 -0
  821. {relationalai → v0/relationalai}/metamodel.py +0 -0
  822. {relationalai → v0/relationalai}/rel.py +0 -0
  823. {relationalai → v0/relationalai}/semantics/devtools/__init__.py +0 -0
  824. {relationalai → v0/relationalai}/semantics/internal/__init__.py +0 -0
  825. {relationalai → v0/relationalai}/semantics/internal/annotations.py +0 -0
  826. {relationalai → v0/relationalai}/semantics/lqp/__init__.py +0 -0
  827. {relationalai → v0/relationalai}/semantics/lqp/pragmas.py +0 -0
  828. {relationalai → v0/relationalai}/semantics/metamodel/dataflow.py +0 -0
  829. {relationalai → v0/relationalai}/semantics/metamodel/rewrite/__init__.py +0 -0
  830. {relationalai → v0/relationalai}/semantics/metamodel/typer/__init__.py +0 -0
  831. {relationalai → v0/relationalai}/semantics/metamodel/types.py +0 -0
  832. {relationalai → v0/relationalai}/semantics/reasoners/experimental/__init__.py +0 -0
  833. {relationalai → v0/relationalai}/semantics/rel/__init__.py +0 -0
  834. {relationalai → v0/relationalai}/semantics/sql/__init__.py +0 -0
  835. {relationalai → v0/relationalai}/semantics/sql/executor/__init__.py +0 -0
  836. {relationalai → v0/relationalai}/semantics/sql/rewrite/__init__.py +0 -0
  837. {relationalai → v0/relationalai}/semantics/tests/logging.py +0 -0
  838. {relationalai → v0/relationalai}/std/aggregates.py +0 -0
  839. {relationalai → v0/relationalai}/std/dates.py +0 -0
  840. {relationalai → v0/relationalai}/std/graphs.py +0 -0
  841. {relationalai → v0/relationalai}/std/inspect.py +0 -0
  842. {relationalai → v0/relationalai}/std/math.py +0 -0
  843. {relationalai → v0/relationalai}/std/re.py +0 -0
  844. {relationalai → v0/relationalai}/std/strings.py +0 -0
  845. {relationalai → v0/relationalai}/tools/cleanup_snapshots.py +0 -0
  846. {relationalai → v0/relationalai}/tools/constants.py +0 -0
  847. {relationalai → v0/relationalai}/tools/query_utils.py +0 -0
  848. {relationalai → v0/relationalai}/tools/snapshot_viewer.py +0 -0
  849. {relationalai → v0/relationalai}/util/__init__.py +0 -0
  850. {relationalai → v0/relationalai}/util/constants.py +0 -0
  851. {relationalai → v0/relationalai}/util/graph.py +0 -0
  852. {relationalai → v0/relationalai}/util/timeout.py +0 -0
relationalai/__init__.py CHANGED
@@ -1,262 +1,7 @@
1
1
  """
2
- The RelationalAI Python SDK.
2
+ The RelationalAI Python SDK, also known as PyRel.
3
3
  """
4
4
 
5
- from __future__ import annotations
6
5
  import importlib.metadata
7
6
 
8
- from typing import cast
9
-
10
- from .clients.config import Config, save_config
11
- from . import clients
12
- from . import dsl
13
- from . import debugging
14
- from . import metamodel
15
- from . import rel
16
- from .loaders import csv
17
- from . import analysis
18
- from . import tools
19
- from .util.otel_configuration import configure_otel
20
- from snowflake.snowpark import Session
21
- from .errors import RAIException, handle_missing_integration
22
- from .environments import runtime_env, SessionEnvironment, SnowbookEnvironment
23
- from relationalai.tools.constants import Generation
24
-
25
- import __main__
26
-
27
- # Define cfg after all imports since it depends on clients being imported
28
- cfg = clients.config
29
-
30
7
  __version__ = importlib.metadata.version(__package__ or __name__)
31
-
32
- def Model(
33
- name: str,
34
- *,
35
- profile: str | None = None,
36
- config: Config | None = None,
37
- dry_run: bool | None = False,
38
- debug: bool | None = None,
39
- debug_host: str | None = None,
40
- debug_port: int | None = None,
41
- connection: Session | None = None,
42
- keep_model: bool | None = None,
43
- isolated: bool | None = None,
44
- nowait_durable: bool | None = None,
45
- use_package_manager: bool | None = None,
46
- ensure_change_tracking: bool | None = None,
47
- enable_otel_handler: bool | None = None,
48
- format: str = "default",
49
- ):
50
- config = config or Config(profile=profile)
51
- if use_package_manager is not None:
52
- config.set("use_package_manager", use_package_manager)
53
- if ensure_change_tracking is not None:
54
- config.set("ensure_change_tracking", ensure_change_tracking)
55
-
56
- if isinstance(runtime_env, SessionEnvironment):
57
- connection = runtime_env.configure_session(config, connection)
58
-
59
- if debug is None:
60
- config_debug = config.get("debug", True)
61
- if isinstance(config_debug, dict):
62
- debug = True
63
- elif isinstance(config_debug, bool):
64
- debug = config_debug
65
- else:
66
- raise Exception("Invalid value specified for `debug`, expected `true` or `false`.")
67
-
68
- if debug_host is None:
69
- # Our get function isn't robust to allowing `debug = true/false` or `[debug]\n port=...`
70
- # Went with the lowest impact solve for now which is handling it locally.
71
- try:
72
- debug_host = config.get("debug.host", None)
73
- except AttributeError:
74
- pass
75
-
76
- if debug_port is None:
77
- try:
78
- config_debug_port = config.get("debug.port", 8080)
79
- if not isinstance(config_debug_port, int):
80
- raise Exception("Invalid value specified for `debug.port`, expected `int`.")
81
- debug_port = config_debug_port
82
- except AttributeError:
83
- pass
84
-
85
- if debug and not runtime_env.remote:
86
- from relationalai.tools.debugger_client import start_debugger_session
87
- start_debugger_session(config, host=debug_host, port=debug_port)
88
-
89
- main_path = getattr(__main__, "__file__", None)
90
- debugging.create_program_span_if_not_exists(main_path, config)
91
-
92
- if not config.file_path:
93
- if cfg.legacy_config_exists():
94
- message = (
95
- "Use `rai init` to migrate your configuration file "
96
- "to the new format (raiconfig.toml)"
97
- )
98
- else:
99
- message = "No configuration file found. Please run `rai init` to create one."
100
- raise Exception(message)
101
- if config.get("platform", None) is None:
102
- config.set("platform", "snowflake")
103
- platform = config.get("platform")
104
- if platform != "snowflake" and connection is not None:
105
- raise ValueError("The `connection` parameter is only supported with the Snowflake platform")
106
- if dry_run is None:
107
- dry_run = config.get_bool("compiler.dry_run", False)
108
- if keep_model is None:
109
- keep_model = config.get_bool("model.keep", False)
110
- if isolated is None:
111
- isolated = config.get_bool("model.isolated", True)
112
- if nowait_durable is None:
113
- nowait_durable = config.get_bool("model.nowait_durable", True)
114
- if enable_otel_handler is None:
115
- enable_otel_handler = config.get_bool("enable_otel_handler", False)
116
-
117
- try:
118
- if platform == "azure":
119
- from relationalai.clients.resources.azure.azure import Graph
120
- from .util.otel_handler import disable_otel_handling, is_otel_initialized
121
- model = Graph(
122
- name,
123
- profile=profile,
124
- config=config,
125
- dry_run=dry_run,
126
- isolated=isolated,
127
- keep_model=keep_model,
128
- format=format,
129
- )
130
- if is_otel_initialized:
131
- disable_otel_handling()
132
- elif platform == "snowflake":
133
- try:
134
- from relationalai.clients.resources.snowflake import Graph
135
- except ImportError as e:
136
- # Provide a helpful error message for Snowflake notebook environments
137
- if isinstance(runtime_env, SnowbookEnvironment):
138
- raise ImportError(
139
- "Failed to import relationalai.clients.resources.snowflake. "
140
- "This may indicate that the relationalai.zip package structure is incomplete. "
141
- "Please ensure the zip file includes the full clients/resources/snowflake directory structure."
142
- ) from e
143
- raise
144
- model = Graph(
145
- name,
146
- profile=profile,
147
- config=config,
148
- dry_run=dry_run,
149
- isolated=isolated,
150
- connection=connection,
151
- keep_model=keep_model,
152
- nowait_durable=nowait_durable,
153
- format=format,
154
- )
155
-
156
- configure_otel(enable_otel_handler, config, model._client.resources)
157
-
158
- else:
159
- raise Exception(f"Unknown platform: {platform}")
160
- except RAIException as e:
161
- raise e.clone(config) from None
162
- except Exception as e:
163
- handle_missing_integration(e)
164
- raise e
165
- return model
166
-
167
-
168
- def Resources(
169
- profile: str | None = None,
170
- config: Config | None = None,
171
- connection: Session | None = None,
172
- # TODO: This is required because creating a unified Snowflake session is not possible. Ticket here: https://app.snowflake.com/support/case/01038599
173
- reset_session: bool = False,
174
- generation: Generation | None = Generation.V0,
175
- ):
176
- config = config or Config(profile)
177
- platform = config.get("platform", "snowflake")
178
- if platform == "azure":
179
- from relationalai.clients.resources.azure.azure import Resources
180
- return Resources(config=config)
181
- elif platform == "snowflake":
182
- try:
183
- from relationalai.clients.resources.snowflake.resources_factory import create_resources_instance
184
- except ImportError as e:
185
- # Provide a helpful error message for Snowflake notebook environments
186
- from relationalai.environments import runtime_env, SnowbookEnvironment
187
- if isinstance(runtime_env, SnowbookEnvironment):
188
- raise ImportError(
189
- "Failed to import relationalai.clients.resources.snowflake. "
190
- "This may indicate that the relationalai.zip package structure is incomplete. "
191
- "Please ensure the zip file includes the full clients/resources/snowflake directory structure."
192
- ) from e
193
- raise
194
- return create_resources_instance(
195
- config=config,
196
- profile=profile,
197
- connection=connection,
198
- reset_session=reset_session,
199
- generation=generation or Generation.V0,
200
- dry_run=False,
201
- language="rel",
202
- )
203
- elif platform == "local":
204
- from relationalai.clients.resources.snowflake.resources_factory import create_resources_instance
205
- return create_resources_instance(
206
- config=config,
207
- profile=profile,
208
- connection=connection,
209
- reset_session=reset_session,
210
- generation=generation or Generation.V0,
211
- dry_run=False,
212
- language="rel",
213
- )
214
- else:
215
- raise Exception(f"Unknown platform: {platform}")
216
-
217
- def Provider(
218
- profile: str | None = None,
219
- config: Config | None = None,
220
- connection: Session | None = None,
221
- generation: Generation | None = Generation.V0,
222
- ):
223
- resources = Resources(profile, config, connection, generation=generation)
224
- platform = resources.config.get("platform", "snowflake")
225
- if platform == "azure":
226
- from relationalai.clients.resources.azure.azure import Resources as AzureResources, Provider as AzureProvider
227
- resources = cast(AzureResources, resources)
228
- return AzureProvider(
229
- resources=resources
230
- )
231
- elif platform == "snowflake":
232
- try:
233
- from relationalai.clients.resources.snowflake import Resources as SnowflakeResources, Provider as SnowflakeProvider
234
- except ImportError as e:
235
- # Provide a helpful error message for Snowflake notebook environments
236
- from relationalai.environments import runtime_env, SnowbookEnvironment
237
- if isinstance(runtime_env, SnowbookEnvironment):
238
- raise ImportError(
239
- "Failed to import relationalai.clients.resources.snowflake. "
240
- "This may indicate that the relationalai.zip package structure is incomplete. "
241
- "Please ensure the zip file includes the full clients/resources/snowflake directory structure."
242
- ) from e
243
- raise
244
- resources = cast(SnowflakeResources, resources)
245
- return SnowflakeProvider(
246
- resources=resources,
247
- generation=generation
248
- )
249
- elif platform == "local":
250
- import relationalai.clients.local
251
- resources = cast(relationalai.clients.local.LocalResources, resources)
252
- return relationalai.clients.local.LocalProvider(
253
- resources=resources
254
- )
255
- else:
256
- raise Exception(f"Unknown platform: {platform}")
257
-
258
-
259
- def Graph(name:str, dry_run:bool=False):
260
- return Model(name, profile=None, dry_run=dry_run)
261
-
262
- __all__ = ['Model', 'Config', 'Resources', 'Provider', 'dsl', 'rel', 'debugging', 'metamodel', 'csv', 'analysis', 'tools', 'save_config']
@@ -0,0 +1,56 @@
1
+ """
2
+ RelationalAI Multi-Connection Configuration System
3
+
4
+ This package contains the new Pydantic-based configuration system with:
5
+ - Multi-connection support (Snowflake, DuckDB)
6
+ - Multi-profile support (dev, prod, staging, etc.)
7
+ - Discriminated unions for type-safe connection handling
8
+ - Auto-loading from multiple sources (raiconfig.yaml, Snowflake connections, DBT profiles)
9
+ - Environment variable templating support (YAML)
10
+ - Profile override system (profile values override config defaults)
11
+ - Type-safe validation via Pydantic
12
+ """
13
+
14
+ from .config import Config, _Config, RAIConfig, ConfigFromDBT, ConfigFromSnowflake
15
+ from .config_fields import EngineConfig, DataConfig, CompilerConfig, ModelConfig, ReasonerConfig, DebugConfig
16
+ from .connections import (
17
+ ConnectionConfig,
18
+ SnowflakeConnection,
19
+ DuckDBConnection,
20
+ UsernamePasswordAuth,
21
+ UsernamePasswordMFAAuth,
22
+ ExternalBrowserAuth,
23
+ JWTAuth,
24
+ OAuthAuth,
25
+ ProgrammaticAccessTokenAuth,
26
+ )
27
+
28
+ __all__ = [
29
+ # Main classes
30
+ "Config",
31
+ "_Config",
32
+ "RAIConfig",
33
+ "ConfigFromDBT",
34
+ "ConfigFromSnowflake",
35
+
36
+ # Nested config models
37
+ "EngineConfig",
38
+ "DataConfig",
39
+ "CompilerConfig",
40
+ "ModelConfig",
41
+ "ReasonerConfig",
42
+ "DebugConfig",
43
+
44
+ # Connection types
45
+ "ConnectionConfig",
46
+ "SnowflakeConnection",
47
+ "DuckDBConnection",
48
+
49
+ # Snowflake authenticators
50
+ "UsernamePasswordAuth",
51
+ "UsernamePasswordMFAAuth",
52
+ "ExternalBrowserAuth",
53
+ "JWTAuth",
54
+ "OAuthAuth",
55
+ "ProgrammaticAccessTokenAuth",
56
+ ]
@@ -0,0 +1,289 @@
1
+ """
2
+ Main configuration class for PyRel (YAML-based).
3
+
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from abc import ABC
9
+ from typing import Any, TypeVar, overload, Literal, TYPE_CHECKING
10
+ from pydantic import Field, model_validator
11
+ from pydantic_settings import SettingsConfigDict
12
+
13
+ try:
14
+ from confocal import BaseConfig
15
+ except ImportError:
16
+ # Confocal not yet published to PyPI - use pydantic_settings as fallback
17
+ # Config system not actively used yet, this is just to prevent import errors
18
+ from pydantic_settings import BaseSettings as BaseConfig # type: ignore[misc, assignment]
19
+
20
+ if TYPE_CHECKING:
21
+ import snowflake.snowpark
22
+ import duckdb
23
+
24
+ from .connections import ConnectionConfig, BaseConnection, SnowflakeConnection, DuckDBConnection
25
+ from .config_fields import EngineConfig, DataConfig, CompilerConfig, ModelConfig, ReasonerConfig, DebugConfig
26
+ from .external.dbt_converter import convert_dbt_to_rai
27
+ from .external.snowflake_converter import convert_snowflake_to_rai
28
+ from .external.utils import find_dbt_profiles_file, find_snowflake_config_file
29
+
30
+ # TypeVar for generic connection retrieval
31
+ T = TypeVar('T', bound=BaseConnection)
32
+
33
+
34
+ class _Config(BaseConfig, ABC): # type: ignore for now until we publish confocal
35
+ """Base configuration class with common fields and methods."""
36
+
37
+ active_profile: str | None = Field(
38
+ default=None,
39
+ description="Currently active profile name (auto-defaults if only one profile)"
40
+ )
41
+
42
+ profiles: dict[str, dict[str, Any]] = Field(
43
+ default_factory=dict,
44
+ alias="profile",
45
+ description="Profiles available (dev, prod, staging, etc.) - profiles overlay config fields"
46
+ )
47
+
48
+ connections: dict[str, ConnectionConfig] = Field(
49
+ default_factory=dict,
50
+ description="Connections available (snowflake, duckdb, etc.)"
51
+ )
52
+
53
+ default_connection: str | None = Field(
54
+ default=None,
55
+ description="Default connection name (auto-defaults if only one connection)"
56
+ )
57
+
58
+ use_graph_index: bool = Field(
59
+ default=True,
60
+ description="Enabling graph index"
61
+ )
62
+ use_direct_access: bool = Field(
63
+ default=False,
64
+ description="Use direct access mode"
65
+ )
66
+ describe_optimization: str | None = Field(default=None, description="Describe optimization")
67
+ enable_otel_handler: bool = Field(
68
+ default=False,
69
+ description="Enable OpenTelemetry handler"
70
+ )
71
+
72
+ # Nested config objects
73
+ engine: EngineConfig = Field(
74
+ default_factory=EngineConfig,
75
+ description="Engine configuration"
76
+ )
77
+ data: DataConfig = Field(
78
+ default_factory=DataConfig,
79
+ description="Data loading and streaming configuration"
80
+ )
81
+ compiler: CompilerConfig = Field(
82
+ default_factory=CompilerConfig,
83
+ description="Compiler configuration"
84
+ )
85
+ model: ModelConfig = Field(
86
+ default_factory=ModelConfig,
87
+ description="Model configuration"
88
+ )
89
+ reasoner: ReasonerConfig = Field(
90
+ default_factory=ReasonerConfig,
91
+ description="Reasoner configuration"
92
+ )
93
+ debug: DebugConfig = Field(
94
+ default_factory=DebugConfig,
95
+ description="Debug configuration"
96
+ )
97
+
98
+ @model_validator(mode='before')
99
+ @classmethod
100
+ def set_default_snowflake_authenticator(cls, data: Any):
101
+ """Set default authenticator for Snowflake connections in raw data."""
102
+ if not isinstance(data, dict):
103
+ return data
104
+
105
+ def process_connections(connections):
106
+ if not isinstance(connections, dict):
107
+ return
108
+ for conn_data in connections.values():
109
+ if isinstance(conn_data, dict) and conn_data.get('type') == 'snowflake':
110
+ conn_data.setdefault('authenticator', 'username_password')
111
+
112
+ # Process top-level connections
113
+ if 'connections' in data:
114
+ process_connections(data['connections'])
115
+
116
+ # Process connections in profiles (before overlay)
117
+ if 'profiles' in data and isinstance(data['profiles'], dict):
118
+ for profile_data in data['profiles'].values():
119
+ if isinstance(profile_data, dict) and 'connections' in profile_data:
120
+ process_connections(profile_data['connections'])
121
+
122
+ return data
123
+
124
+ @model_validator(mode='after')
125
+ def validate_connections(self):
126
+ if not self.connections:
127
+ raise ValueError("Config must have at least one connection")
128
+
129
+ # Auto-set default_connection if only one connection exists and not already set
130
+ if len(self.connections) == 1 and self.default_connection is None:
131
+ self.default_connection = next(iter(self.connections.keys()))
132
+
133
+ return self
134
+
135
+ def get_default_connection(self) -> ConnectionConfig:
136
+ default_conn_name = self.default_connection
137
+
138
+ if default_conn_name is None:
139
+ if len(self.connections) == 1:
140
+ default_conn_name = list(self.connections.keys())[0]
141
+ else:
142
+ raise ValueError(
143
+ f"Multiple connections available but no default_connection specified. "
144
+ f"Available: {list(self.connections.keys())}"
145
+ )
146
+
147
+ if default_conn_name not in self.connections:
148
+ raise ValueError(
149
+ f"default_connection '{default_conn_name}' not found. "
150
+ f"Available: {list(self.connections.keys())}"
151
+ )
152
+
153
+ return self.connections[default_conn_name]
154
+
155
+ def get_connection(self, connection_type: type[T], name: str | None = None) -> T:
156
+ if name is None:
157
+ connection = self.get_default_connection()
158
+ else:
159
+ if name not in self.connections:
160
+ raise ValueError(
161
+ f"Connection '{name}' not found. "
162
+ f"Available: {list(self.connections.keys())}"
163
+ )
164
+ connection = self.connections[name]
165
+
166
+ if not isinstance(connection, connection_type):
167
+ # Provide helpful error message with the actual connection class hierarchy
168
+ actual_type = type(connection).__name__
169
+ # Check if it's a Snowflake connection
170
+ if isinstance(connection, SnowflakeConnection):
171
+ connection_class = "SnowflakeConnection"
172
+ elif isinstance(connection, DuckDBConnection):
173
+ connection_class = "DuckDBConnection"
174
+ else:
175
+ connection_class = actual_type
176
+
177
+ raise ValueError(
178
+ f"Connection '{name or self.default_connection}' is not of type {connection_type.__name__}. "
179
+ f"Got: {connection_class} (actual: {actual_type})"
180
+ )
181
+
182
+ return connection
183
+
184
+ @overload
185
+ def get_session(self, connection_type: type[SnowflakeConnection]) -> snowflake.snowpark.Session: ...
186
+
187
+ @overload
188
+ def get_session(self, connection_type: type[DuckDBConnection]) -> duckdb.DuckDBPyConnection: ...
189
+
190
+ @overload
191
+ def get_session(self, connection_type: None = None) -> snowflake.snowpark.Session | duckdb.DuckDBPyConnection: ...
192
+
193
+ def get_session(self, connection_type: type[SnowflakeConnection] | type[DuckDBConnection] | None = None) -> snowflake.snowpark.Session | duckdb.DuckDBPyConnection:
194
+ if connection_type is None:
195
+ connection = self.get_default_connection()
196
+ return connection.get_session()
197
+ else:
198
+ connection = self.get_connection(connection_type)
199
+ return connection.get_session()
200
+
201
+
202
+ # =============================================================================
203
+ # Config Source Classes
204
+ # =============================================================================
205
+
206
+ class RAIConfig(_Config):
207
+ """Config loaded from raiconfig.yaml."""
208
+
209
+ source: Literal["rai"] = Field(default="rai", exclude=True)
210
+
211
+ model_config = SettingsConfigDict(
212
+ yaml_file="raiconfig.yaml",
213
+ extra="ignore",
214
+ nested_model_default_partial_update=True,
215
+ )
216
+
217
+
218
+ class ConfigFromSnowflake(_Config):
219
+ source: Literal["snowflake"] = Field(default="snowflake", exclude=True)
220
+
221
+ model_config = SettingsConfigDict(
222
+ toml_file=find_snowflake_config_file(),
223
+ extra="ignore",
224
+ nested_model_default_partial_update=True,
225
+ )
226
+
227
+ @model_validator(mode='before')
228
+ @classmethod
229
+ def convert_snowflake_structure(cls, data: Any):
230
+ if not isinstance(data, dict):
231
+ return data
232
+ return convert_snowflake_to_rai(data)
233
+
234
+ class ConfigFromDBT(_Config):
235
+ source: Literal["dbt"] = Field(default="dbt", exclude=True)
236
+
237
+ model_config = SettingsConfigDict(
238
+ yaml_file=find_dbt_profiles_file(),
239
+ extra="ignore",
240
+ nested_model_default_partial_update=True,
241
+ )
242
+
243
+ @model_validator(mode='before')
244
+ @classmethod
245
+ def convert_dbt_structure(cls, data: Any):
246
+ """Convert DBT profiles.yml format to RAI Config format."""
247
+ if not isinstance(data, dict):
248
+ return data
249
+
250
+ return convert_dbt_to_rai(data)
251
+
252
+
253
+ # =============================================================================
254
+ # Config Factory - Tries each source in order
255
+ # =============================================================================
256
+
257
+ def Config(**data) -> _Config:
258
+ """
259
+ Create Config by trying multiple sources in priority order:
260
+ 1. RAIConfig (raiconfig.yaml) - or direct data if provided
261
+ 2. ConfigFromSnowflake (config.toml) - only if no data provided
262
+ 3. ConfigFromDBT (profiles.yml) - only if no data provided
263
+ """
264
+ sources = [
265
+ ("RAIConfig (raiconfig.yaml)", RAIConfig, True), # passes **data
266
+ ("ConfigFromSnowflake (config.toml)", ConfigFromSnowflake, False),
267
+ ("ConfigFromDBT (profiles.yml)", ConfigFromDBT, False),
268
+ ]
269
+
270
+ errors = []
271
+
272
+ for name, source_cls, accepts_data in sources:
273
+ try:
274
+ if accepts_data:
275
+ return source_cls(**data)
276
+ else:
277
+ return source_cls()
278
+ except Exception as e:
279
+ errors.append((name, str(e)))
280
+
281
+ # All failed, create helpful error message
282
+ error_lines = [f" ❌ {name}: {error}" for name, error in errors]
283
+ error_summary = "\n".join(error_lines)
284
+
285
+ raise FileNotFoundError(
286
+ f"Could not load config from any source:\n\n{error_summary}\n\n"
287
+ f"To fix: Correct one of the config files above, or pass config programmatically:\n"
288
+ f" Config(connections={{...}})"
289
+ )
@@ -0,0 +1,86 @@
1
+ """
2
+ Nested configuration field models for the multi-connection config system.
3
+
4
+ This module defines nested config models:
5
+ - EngineConfig: Engine execution settings
6
+ - DataConfig: Data loading and streaming settings
7
+ - CompilerConfig: Compiler-specific settings
8
+ - ModelConfig: Model execution settings
9
+ - ReasonerConfig: Reasoner execution settings (including nested ReasonerRuleConfig)
10
+ - DebugConfig: Debug server settings
11
+
12
+ These models are used in Config (with default instances) and Profile (as optional overrides).
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from typing import Literal
18
+
19
+ from pydantic import BaseModel, Field
20
+
21
+
22
+ class EngineConfig(BaseModel):
23
+ name: str | None = Field(default=None, description="Engine name for execution")
24
+ size: str | None = Field(default=None, description="Size of the engine")
25
+ auto_suspend_mins: int | None = Field(default=None, description="Auto-suspend engine after N minutes")
26
+ show_all_sizes: bool = Field(
27
+ default=False,
28
+ description="Show all available engine sizes"
29
+ )
30
+
31
+
32
+ class DataConfig(BaseModel):
33
+ wait_for_stream_sync: bool = Field(default=True, description="Wait for stream synchronization before processing")
34
+ ensure_change_tracking: bool = Field(default=False, description="Enable change tracking for data modifications")
35
+ data_freshness_mins: int | None = Field(default=None, description="Data freshness timeout in minutes")
36
+ query_timeout_mins: int | None = Field(
37
+ default=None,
38
+ description="Query timeout in minutes - aborts queries that exceed this duration"
39
+ )
40
+ download_url_type: Literal["internal", "external"] | None = Field(
41
+ default=None,
42
+ description="Type of download URL for data exports (internal or external)"
43
+ )
44
+ check_column_types: bool = Field(
45
+ default=True,
46
+ description="Check column types during data loading"
47
+ )
48
+
49
+
50
+ class CompilerConfig(BaseModel):
51
+ use_monotype_operators: bool = Field(default=False, description="Use monotype operators in compilation")
52
+ show_corerel_errors: bool = Field(default=True, description="Show CoreRel error messages")
53
+ dry_run: bool = Field(default=False, description="Run compilation in dry-run mode")
54
+ inspect_df: bool = Field(default=False, description="Inspect DataFrame during compilation")
55
+ use_value_types: bool = Field(default=False, description="Use value types in compilation")
56
+ debug_hidden_keys: bool = Field(default=False, description="Debug hidden keys in compilation")
57
+ wide_outputs: bool = Field(default=False, description="Use wide output format for query results")
58
+ strict: bool = Field(default=False, description="Enable strict validation mode")
59
+
60
+ # Experimental compiler optimizations
61
+ use_inlined_intermediates: bool = Field(default=False, description="Use inlined intermediate results")
62
+ inline_value_maps: bool = Field(default=False, description="Inline value maps in weaver")
63
+ inline_entity_maps: bool = Field(default=False, description="Inline entity maps in weaver")
64
+
65
+
66
+ class ModelConfig(BaseModel):
67
+ keep: bool = Field(default=False, description="Keep model after execution")
68
+ isolated: bool = Field(default=True, description="Run model in isolated mode")
69
+ nowait_durable: bool = Field(default=True, description="Don't wait for durable operations")
70
+
71
+
72
+ class ReasonerRuleConfig(BaseModel):
73
+ use_lqp: bool = Field(default=True, description="Use LQP for reasoner rule execution")
74
+
75
+
76
+ class ReasonerConfig(BaseModel):
77
+ rule: ReasonerRuleConfig = Field(default_factory=ReasonerRuleConfig)
78
+ use_sql: bool = Field(default=False, description="Use SQL execution instead of LQP")
79
+
80
+
81
+ class DebugConfig(BaseModel):
82
+ enabled: bool = Field(default=True, description="Enable debug mode")
83
+ host: str | None = Field(default=None, description="Debug server host")
84
+ port: int = Field(default=8080, description="Debug server port")
85
+ show_debug_logs: bool = Field(default=False, description="Show debug log messages")
86
+ show_full_traces: bool = Field(default=False, description="Show full stack traces in errors")