relationalai 0.12.13__py3-none-any.whl → 0.13.0.dev0__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 (825) hide show
  1. relationalai/__init__.py +1 -209
  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/semantics/__init__.py +146 -22
  16. relationalai/semantics/backends/lqp/annotations.py +11 -0
  17. relationalai/semantics/backends/sql/sql_compiler.py +327 -0
  18. relationalai/semantics/frontend/base.py +1707 -0
  19. relationalai/semantics/frontend/core.py +179 -0
  20. relationalai/semantics/frontend/front_compiler.py +1313 -0
  21. relationalai/semantics/frontend/pprint.py +408 -0
  22. relationalai/semantics/metamodel/__init__.py +6 -40
  23. relationalai/semantics/metamodel/builtins.py +205 -769
  24. relationalai/semantics/metamodel/metamodel.py +437 -0
  25. relationalai/semantics/metamodel/metamodel_analyzer.py +519 -0
  26. relationalai/semantics/metamodel/pprint.py +412 -0
  27. relationalai/semantics/metamodel/rewriter.py +266 -0
  28. relationalai/semantics/metamodel/typer.py +1378 -0
  29. relationalai/semantics/std/__init__.py +60 -40
  30. relationalai/semantics/std/aggregates.py +149 -0
  31. relationalai/semantics/std/common.py +44 -0
  32. relationalai/semantics/std/constraints.py +37 -43
  33. relationalai/semantics/std/datetime.py +246 -135
  34. relationalai/semantics/std/decimals.py +45 -52
  35. relationalai/semantics/std/floats.py +13 -5
  36. relationalai/semantics/std/integers.py +26 -11
  37. relationalai/semantics/std/math.py +183 -112
  38. relationalai/semantics/std/numbers.py +86 -0
  39. relationalai/semantics/std/re.py +80 -62
  40. relationalai/semantics/std/strings.py +117 -60
  41. relationalai/shims/executor.py +147 -0
  42. relationalai/shims/helpers.py +126 -0
  43. relationalai/shims/hoister.py +221 -0
  44. relationalai/shims/mm2v0.py +1290 -0
  45. relationalai/tools/cli/__init__.py +6 -0
  46. relationalai/tools/cli/cli.py +90 -0
  47. relationalai/tools/cli/components/__init__.py +5 -0
  48. relationalai/tools/cli/components/progress_reader.py +1524 -0
  49. relationalai/tools/cli/components/utils.py +58 -0
  50. relationalai/tools/cli/config_template.py +45 -0
  51. relationalai/tools/cli/dev.py +19 -0
  52. relationalai/tools/debugger.py +289 -183
  53. relationalai/tools/typer_debugger.py +93 -0
  54. relationalai/util/dataclasses.py +43 -0
  55. relationalai/util/docutils.py +40 -0
  56. relationalai/util/error.py +199 -0
  57. relationalai/util/format.py +48 -106
  58. relationalai/util/naming.py +145 -0
  59. relationalai/util/python.py +35 -0
  60. relationalai/util/runtime.py +156 -0
  61. relationalai/util/schema.py +197 -0
  62. relationalai/util/source.py +185 -0
  63. relationalai/util/structures.py +163 -0
  64. relationalai/util/tracing.py +261 -0
  65. relationalai-0.13.0.dev0.dist-info/METADATA +46 -0
  66. relationalai-0.13.0.dev0.dist-info/RECORD +488 -0
  67. relationalai-0.13.0.dev0.dist-info/WHEEL +5 -0
  68. relationalai-0.13.0.dev0.dist-info/entry_points.txt +3 -0
  69. relationalai-0.13.0.dev0.dist-info/top_level.txt +2 -0
  70. v0/relationalai/__init__.py +216 -0
  71. v0/relationalai/clients/azure.py +477 -0
  72. v0/relationalai/clients/client.py +912 -0
  73. v0/relationalai/clients/config.py +673 -0
  74. v0/relationalai/clients/direct_access_client.py +118 -0
  75. v0/relationalai/clients/hash_util.py +31 -0
  76. v0/relationalai/clients/local.py +571 -0
  77. v0/relationalai/clients/profile_polling.py +73 -0
  78. v0/relationalai/clients/result_helpers.py +420 -0
  79. v0/relationalai/clients/snowflake.py +3869 -0
  80. v0/relationalai/clients/types.py +113 -0
  81. v0/relationalai/clients/use_index_poller.py +980 -0
  82. v0/relationalai/clients/util.py +356 -0
  83. v0/relationalai/debugging.py +389 -0
  84. v0/relationalai/dsl.py +1749 -0
  85. v0/relationalai/early_access/builder/__init__.py +30 -0
  86. v0/relationalai/early_access/builder/builder/__init__.py +35 -0
  87. v0/relationalai/early_access/builder/snowflake/__init__.py +12 -0
  88. v0/relationalai/early_access/builder/std/__init__.py +25 -0
  89. v0/relationalai/early_access/builder/std/decimals/__init__.py +12 -0
  90. v0/relationalai/early_access/builder/std/integers/__init__.py +12 -0
  91. v0/relationalai/early_access/builder/std/math/__init__.py +12 -0
  92. v0/relationalai/early_access/builder/std/strings/__init__.py +14 -0
  93. v0/relationalai/early_access/devtools/__init__.py +12 -0
  94. v0/relationalai/early_access/devtools/benchmark_lqp/__init__.py +12 -0
  95. v0/relationalai/early_access/devtools/extract_lqp/__init__.py +12 -0
  96. v0/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +427 -0
  97. v0/relationalai/early_access/dsl/adapters/orm/parser.py +636 -0
  98. v0/relationalai/early_access/dsl/adapters/owl/adapter.py +176 -0
  99. v0/relationalai/early_access/dsl/adapters/owl/parser.py +160 -0
  100. v0/relationalai/early_access/dsl/bindings/common.py +402 -0
  101. v0/relationalai/early_access/dsl/bindings/csv.py +170 -0
  102. v0/relationalai/early_access/dsl/bindings/legacy/binding_models.py +143 -0
  103. v0/relationalai/early_access/dsl/bindings/snowflake.py +64 -0
  104. v0/relationalai/early_access/dsl/codegen/binder.py +411 -0
  105. v0/relationalai/early_access/dsl/codegen/common.py +79 -0
  106. v0/relationalai/early_access/dsl/codegen/helpers.py +23 -0
  107. v0/relationalai/early_access/dsl/codegen/relations.py +700 -0
  108. v0/relationalai/early_access/dsl/codegen/weaver.py +417 -0
  109. v0/relationalai/early_access/dsl/core/builders/__init__.py +47 -0
  110. v0/relationalai/early_access/dsl/core/builders/logic.py +19 -0
  111. v0/relationalai/early_access/dsl/core/builders/scalar_constraint.py +11 -0
  112. v0/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +455 -0
  113. v0/relationalai/early_access/dsl/core/constraints/predicate/universal.py +73 -0
  114. v0/relationalai/early_access/dsl/core/constraints/scalar.py +310 -0
  115. v0/relationalai/early_access/dsl/core/context.py +13 -0
  116. v0/relationalai/early_access/dsl/core/cset.py +132 -0
  117. v0/relationalai/early_access/dsl/core/exprs/__init__.py +116 -0
  118. v0/relationalai/early_access/dsl/core/exprs/relational.py +18 -0
  119. v0/relationalai/early_access/dsl/core/exprs/scalar.py +412 -0
  120. v0/relationalai/early_access/dsl/core/instances.py +44 -0
  121. v0/relationalai/early_access/dsl/core/logic/__init__.py +193 -0
  122. v0/relationalai/early_access/dsl/core/logic/aggregation.py +98 -0
  123. v0/relationalai/early_access/dsl/core/logic/exists.py +223 -0
  124. v0/relationalai/early_access/dsl/core/logic/helper.py +163 -0
  125. v0/relationalai/early_access/dsl/core/namespaces.py +32 -0
  126. v0/relationalai/early_access/dsl/core/relations.py +276 -0
  127. v0/relationalai/early_access/dsl/core/rules.py +112 -0
  128. v0/relationalai/early_access/dsl/core/std/__init__.py +45 -0
  129. v0/relationalai/early_access/dsl/core/temporal/recall.py +6 -0
  130. v0/relationalai/early_access/dsl/core/types/__init__.py +270 -0
  131. v0/relationalai/early_access/dsl/core/types/concepts.py +128 -0
  132. v0/relationalai/early_access/dsl/core/types/constrained/__init__.py +267 -0
  133. v0/relationalai/early_access/dsl/core/types/constrained/nominal.py +143 -0
  134. v0/relationalai/early_access/dsl/core/types/constrained/subtype.py +124 -0
  135. v0/relationalai/early_access/dsl/core/types/standard.py +92 -0
  136. v0/relationalai/early_access/dsl/core/types/unconstrained.py +50 -0
  137. v0/relationalai/early_access/dsl/core/types/variables.py +203 -0
  138. v0/relationalai/early_access/dsl/ir/compiler.py +318 -0
  139. v0/relationalai/early_access/dsl/ir/executor.py +260 -0
  140. v0/relationalai/early_access/dsl/ontologies/constraints.py +88 -0
  141. v0/relationalai/early_access/dsl/ontologies/export.py +30 -0
  142. v0/relationalai/early_access/dsl/ontologies/models.py +453 -0
  143. v0/relationalai/early_access/dsl/ontologies/python_printer.py +303 -0
  144. v0/relationalai/early_access/dsl/ontologies/readings.py +60 -0
  145. v0/relationalai/early_access/dsl/ontologies/relationships.py +322 -0
  146. v0/relationalai/early_access/dsl/ontologies/roles.py +87 -0
  147. v0/relationalai/early_access/dsl/ontologies/subtyping.py +55 -0
  148. v0/relationalai/early_access/dsl/orm/constraints.py +438 -0
  149. v0/relationalai/early_access/dsl/orm/measures/dimensions.py +200 -0
  150. v0/relationalai/early_access/dsl/orm/measures/initializer.py +16 -0
  151. v0/relationalai/early_access/dsl/orm/measures/measure_rules.py +275 -0
  152. v0/relationalai/early_access/dsl/orm/measures/measures.py +299 -0
  153. v0/relationalai/early_access/dsl/orm/measures/role_exprs.py +268 -0
  154. v0/relationalai/early_access/dsl/orm/models.py +256 -0
  155. v0/relationalai/early_access/dsl/orm/object_oriented_printer.py +344 -0
  156. v0/relationalai/early_access/dsl/orm/printer.py +469 -0
  157. v0/relationalai/early_access/dsl/orm/reasoners.py +480 -0
  158. v0/relationalai/early_access/dsl/orm/relations.py +19 -0
  159. v0/relationalai/early_access/dsl/orm/relationships.py +251 -0
  160. v0/relationalai/early_access/dsl/orm/types.py +42 -0
  161. v0/relationalai/early_access/dsl/orm/utils.py +79 -0
  162. v0/relationalai/early_access/dsl/orm/verb.py +204 -0
  163. v0/relationalai/early_access/dsl/physical_metadata/tables.py +133 -0
  164. v0/relationalai/early_access/dsl/relations.py +170 -0
  165. v0/relationalai/early_access/dsl/rulesets.py +69 -0
  166. v0/relationalai/early_access/dsl/schemas/__init__.py +450 -0
  167. v0/relationalai/early_access/dsl/schemas/builder.py +48 -0
  168. v0/relationalai/early_access/dsl/schemas/comp_names.py +51 -0
  169. v0/relationalai/early_access/dsl/schemas/components.py +203 -0
  170. v0/relationalai/early_access/dsl/schemas/contexts.py +156 -0
  171. v0/relationalai/early_access/dsl/schemas/exprs.py +89 -0
  172. v0/relationalai/early_access/dsl/schemas/fragments.py +464 -0
  173. v0/relationalai/early_access/dsl/serialization.py +79 -0
  174. v0/relationalai/early_access/dsl/serialize/exporter.py +163 -0
  175. v0/relationalai/early_access/dsl/snow/api.py +104 -0
  176. v0/relationalai/early_access/dsl/snow/common.py +76 -0
  177. v0/relationalai/early_access/dsl/state_mgmt/__init__.py +129 -0
  178. v0/relationalai/early_access/dsl/state_mgmt/state_charts.py +125 -0
  179. v0/relationalai/early_access/dsl/state_mgmt/transitions.py +130 -0
  180. v0/relationalai/early_access/dsl/types/__init__.py +40 -0
  181. v0/relationalai/early_access/dsl/types/concepts.py +12 -0
  182. v0/relationalai/early_access/dsl/types/entities.py +135 -0
  183. v0/relationalai/early_access/dsl/types/values.py +17 -0
  184. v0/relationalai/early_access/dsl/utils.py +102 -0
  185. v0/relationalai/early_access/graphs/__init__.py +13 -0
  186. v0/relationalai/early_access/lqp/__init__.py +12 -0
  187. v0/relationalai/early_access/lqp/compiler/__init__.py +12 -0
  188. v0/relationalai/early_access/lqp/constructors/__init__.py +18 -0
  189. v0/relationalai/early_access/lqp/executor/__init__.py +12 -0
  190. v0/relationalai/early_access/lqp/ir/__init__.py +12 -0
  191. v0/relationalai/early_access/lqp/passes/__init__.py +12 -0
  192. v0/relationalai/early_access/lqp/pragmas/__init__.py +12 -0
  193. v0/relationalai/early_access/lqp/primitives/__init__.py +12 -0
  194. v0/relationalai/early_access/lqp/types/__init__.py +12 -0
  195. v0/relationalai/early_access/lqp/utils/__init__.py +12 -0
  196. v0/relationalai/early_access/lqp/validators/__init__.py +12 -0
  197. v0/relationalai/early_access/metamodel/__init__.py +58 -0
  198. v0/relationalai/early_access/metamodel/builtins/__init__.py +12 -0
  199. v0/relationalai/early_access/metamodel/compiler/__init__.py +12 -0
  200. v0/relationalai/early_access/metamodel/dependency/__init__.py +12 -0
  201. v0/relationalai/early_access/metamodel/factory/__init__.py +17 -0
  202. v0/relationalai/early_access/metamodel/helpers/__init__.py +12 -0
  203. v0/relationalai/early_access/metamodel/ir/__init__.py +14 -0
  204. v0/relationalai/early_access/metamodel/rewrite/__init__.py +7 -0
  205. v0/relationalai/early_access/metamodel/typer/__init__.py +3 -0
  206. v0/relationalai/early_access/metamodel/typer/typer/__init__.py +12 -0
  207. v0/relationalai/early_access/metamodel/types/__init__.py +15 -0
  208. v0/relationalai/early_access/metamodel/util/__init__.py +15 -0
  209. v0/relationalai/early_access/metamodel/visitor/__init__.py +12 -0
  210. v0/relationalai/early_access/rel/__init__.py +12 -0
  211. v0/relationalai/early_access/rel/executor/__init__.py +12 -0
  212. v0/relationalai/early_access/rel/rel_utils/__init__.py +12 -0
  213. v0/relationalai/early_access/rel/rewrite/__init__.py +7 -0
  214. v0/relationalai/early_access/solvers/__init__.py +19 -0
  215. v0/relationalai/early_access/sql/__init__.py +11 -0
  216. v0/relationalai/early_access/sql/executor/__init__.py +3 -0
  217. v0/relationalai/early_access/sql/rewrite/__init__.py +3 -0
  218. v0/relationalai/early_access/tests/logging/__init__.py +12 -0
  219. v0/relationalai/early_access/tests/test_snapshot_base/__init__.py +12 -0
  220. v0/relationalai/early_access/tests/utils/__init__.py +12 -0
  221. v0/relationalai/environments/__init__.py +35 -0
  222. v0/relationalai/environments/base.py +381 -0
  223. v0/relationalai/environments/colab.py +14 -0
  224. v0/relationalai/environments/generic.py +71 -0
  225. v0/relationalai/environments/ipython.py +68 -0
  226. v0/relationalai/environments/jupyter.py +9 -0
  227. v0/relationalai/environments/snowbook.py +169 -0
  228. v0/relationalai/errors.py +2455 -0
  229. v0/relationalai/experimental/SF.py +38 -0
  230. v0/relationalai/experimental/inspect.py +47 -0
  231. v0/relationalai/experimental/pathfinder/__init__.py +158 -0
  232. v0/relationalai/experimental/pathfinder/api.py +160 -0
  233. v0/relationalai/experimental/pathfinder/automaton.py +584 -0
  234. v0/relationalai/experimental/pathfinder/bridge.py +226 -0
  235. v0/relationalai/experimental/pathfinder/compiler.py +416 -0
  236. v0/relationalai/experimental/pathfinder/datalog.py +214 -0
  237. v0/relationalai/experimental/pathfinder/diagnostics.py +56 -0
  238. v0/relationalai/experimental/pathfinder/filter.py +236 -0
  239. v0/relationalai/experimental/pathfinder/glushkov.py +439 -0
  240. v0/relationalai/experimental/pathfinder/options.py +265 -0
  241. v0/relationalai/experimental/pathfinder/rpq.py +344 -0
  242. v0/relationalai/experimental/pathfinder/transition.py +200 -0
  243. v0/relationalai/experimental/pathfinder/utils.py +26 -0
  244. v0/relationalai/experimental/paths/api.py +143 -0
  245. v0/relationalai/experimental/paths/benchmarks/grid_graph.py +37 -0
  246. v0/relationalai/experimental/paths/examples/basic_example.py +40 -0
  247. v0/relationalai/experimental/paths/examples/minimal_engine_warmup.py +3 -0
  248. v0/relationalai/experimental/paths/examples/movie_example.py +77 -0
  249. v0/relationalai/experimental/paths/examples/paths_benchmark.py +115 -0
  250. v0/relationalai/experimental/paths/examples/paths_example.py +116 -0
  251. v0/relationalai/experimental/paths/examples/pattern_to_automaton.py +28 -0
  252. v0/relationalai/experimental/paths/find_paths_via_automaton.py +85 -0
  253. v0/relationalai/experimental/paths/graph.py +185 -0
  254. v0/relationalai/experimental/paths/path_algorithms/find_paths.py +280 -0
  255. v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +26 -0
  256. v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +111 -0
  257. v0/relationalai/experimental/paths/path_algorithms/single.py +59 -0
  258. v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +39 -0
  259. v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +103 -0
  260. v0/relationalai/experimental/paths/path_algorithms/usp-old.py +130 -0
  261. v0/relationalai/experimental/paths/path_algorithms/usp-tuple.py +183 -0
  262. v0/relationalai/experimental/paths/path_algorithms/usp.py +150 -0
  263. v0/relationalai/experimental/paths/product_graph.py +93 -0
  264. v0/relationalai/experimental/paths/rpq/automaton.py +584 -0
  265. v0/relationalai/experimental/paths/rpq/diagnostics.py +56 -0
  266. v0/relationalai/experimental/paths/rpq/rpq.py +378 -0
  267. v0/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +90 -0
  268. v0/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +119 -0
  269. v0/relationalai/experimental/paths/tests/tests_limit_sp_single.py +104 -0
  270. v0/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +113 -0
  271. v0/relationalai/experimental/paths/tests/tests_limit_walks_single.py +149 -0
  272. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +70 -0
  273. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +64 -0
  274. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +115 -0
  275. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +75 -0
  276. v0/relationalai/experimental/paths/tests/tests_single_paths.py +152 -0
  277. v0/relationalai/experimental/paths/tests/tests_single_walks.py +208 -0
  278. v0/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +297 -0
  279. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +107 -0
  280. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +76 -0
  281. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +76 -0
  282. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +110 -0
  283. v0/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +229 -0
  284. v0/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +108 -0
  285. v0/relationalai/experimental/paths/tree_agg.py +168 -0
  286. v0/relationalai/experimental/paths/utilities/iterators.py +27 -0
  287. v0/relationalai/experimental/paths/utilities/prefix_sum.py +91 -0
  288. v0/relationalai/experimental/solvers.py +1087 -0
  289. v0/relationalai/loaders/__init__.py +0 -0
  290. v0/relationalai/loaders/csv.py +195 -0
  291. v0/relationalai/loaders/loader.py +177 -0
  292. v0/relationalai/loaders/types.py +23 -0
  293. v0/relationalai/rel_emitter.py +373 -0
  294. v0/relationalai/rel_utils.py +185 -0
  295. v0/relationalai/semantics/__init__.py +29 -0
  296. v0/relationalai/semantics/devtools/benchmark_lqp.py +536 -0
  297. v0/relationalai/semantics/devtools/compilation_manager.py +294 -0
  298. v0/relationalai/semantics/devtools/extract_lqp.py +110 -0
  299. v0/relationalai/semantics/internal/internal.py +3785 -0
  300. v0/relationalai/semantics/internal/snowflake.py +324 -0
  301. v0/relationalai/semantics/lqp/builtins.py +16 -0
  302. v0/relationalai/semantics/lqp/compiler.py +22 -0
  303. v0/relationalai/semantics/lqp/constructors.py +68 -0
  304. v0/relationalai/semantics/lqp/executor.py +469 -0
  305. v0/relationalai/semantics/lqp/intrinsics.py +24 -0
  306. v0/relationalai/semantics/lqp/model2lqp.py +839 -0
  307. v0/relationalai/semantics/lqp/passes.py +680 -0
  308. v0/relationalai/semantics/lqp/primitives.py +252 -0
  309. v0/relationalai/semantics/lqp/result_helpers.py +202 -0
  310. v0/relationalai/semantics/lqp/rewrite/annotate_constraints.py +57 -0
  311. v0/relationalai/semantics/lqp/rewrite/cdc.py +216 -0
  312. v0/relationalai/semantics/lqp/rewrite/extract_common.py +338 -0
  313. v0/relationalai/semantics/lqp/rewrite/extract_keys.py +449 -0
  314. v0/relationalai/semantics/lqp/rewrite/function_annotations.py +114 -0
  315. v0/relationalai/semantics/lqp/rewrite/functional_dependencies.py +314 -0
  316. v0/relationalai/semantics/lqp/rewrite/quantify_vars.py +296 -0
  317. v0/relationalai/semantics/lqp/rewrite/splinter.py +76 -0
  318. v0/relationalai/semantics/lqp/types.py +101 -0
  319. v0/relationalai/semantics/lqp/utils.py +160 -0
  320. v0/relationalai/semantics/lqp/validators.py +57 -0
  321. v0/relationalai/semantics/metamodel/__init__.py +40 -0
  322. v0/relationalai/semantics/metamodel/builtins.py +774 -0
  323. v0/relationalai/semantics/metamodel/compiler.py +133 -0
  324. v0/relationalai/semantics/metamodel/dependency.py +862 -0
  325. v0/relationalai/semantics/metamodel/executor.py +61 -0
  326. v0/relationalai/semantics/metamodel/factory.py +287 -0
  327. v0/relationalai/semantics/metamodel/helpers.py +361 -0
  328. v0/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +39 -0
  329. v0/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +210 -0
  330. v0/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +78 -0
  331. v0/relationalai/semantics/metamodel/rewrite/flatten.py +549 -0
  332. v0/relationalai/semantics/metamodel/rewrite/format_outputs.py +165 -0
  333. v0/relationalai/semantics/metamodel/typer/checker.py +353 -0
  334. v0/relationalai/semantics/metamodel/typer/typer.py +1395 -0
  335. v0/relationalai/semantics/reasoners/__init__.py +10 -0
  336. v0/relationalai/semantics/reasoners/graph/__init__.py +37 -0
  337. v0/relationalai/semantics/reasoners/graph/core.py +9020 -0
  338. v0/relationalai/semantics/reasoners/optimization/__init__.py +68 -0
  339. v0/relationalai/semantics/reasoners/optimization/common.py +88 -0
  340. v0/relationalai/semantics/reasoners/optimization/solvers_dev.py +568 -0
  341. v0/relationalai/semantics/reasoners/optimization/solvers_pb.py +1163 -0
  342. v0/relationalai/semantics/rel/builtins.py +40 -0
  343. v0/relationalai/semantics/rel/compiler.py +989 -0
  344. v0/relationalai/semantics/rel/executor.py +359 -0
  345. v0/relationalai/semantics/rel/rel.py +482 -0
  346. v0/relationalai/semantics/rel/rel_utils.py +276 -0
  347. v0/relationalai/semantics/snowflake/__init__.py +3 -0
  348. v0/relationalai/semantics/sql/compiler.py +2503 -0
  349. v0/relationalai/semantics/sql/executor/duck_db.py +52 -0
  350. v0/relationalai/semantics/sql/executor/result_helpers.py +64 -0
  351. v0/relationalai/semantics/sql/executor/snowflake.py +145 -0
  352. v0/relationalai/semantics/sql/rewrite/denormalize.py +222 -0
  353. v0/relationalai/semantics/sql/rewrite/double_negation.py +49 -0
  354. v0/relationalai/semantics/sql/rewrite/recursive_union.py +127 -0
  355. v0/relationalai/semantics/sql/rewrite/sort_output_query.py +246 -0
  356. v0/relationalai/semantics/sql/sql.py +504 -0
  357. v0/relationalai/semantics/std/__init__.py +54 -0
  358. v0/relationalai/semantics/std/constraints.py +43 -0
  359. v0/relationalai/semantics/std/datetime.py +363 -0
  360. v0/relationalai/semantics/std/decimals.py +62 -0
  361. v0/relationalai/semantics/std/floats.py +7 -0
  362. v0/relationalai/semantics/std/integers.py +22 -0
  363. v0/relationalai/semantics/std/math.py +141 -0
  364. v0/relationalai/semantics/std/pragmas.py +11 -0
  365. v0/relationalai/semantics/std/re.py +83 -0
  366. v0/relationalai/semantics/std/std.py +14 -0
  367. v0/relationalai/semantics/std/strings.py +63 -0
  368. v0/relationalai/semantics/tests/__init__.py +0 -0
  369. v0/relationalai/semantics/tests/test_snapshot_abstract.py +143 -0
  370. v0/relationalai/semantics/tests/test_snapshot_base.py +9 -0
  371. v0/relationalai/semantics/tests/utils.py +46 -0
  372. v0/relationalai/std/__init__.py +70 -0
  373. v0/relationalai/tools/__init__.py +0 -0
  374. v0/relationalai/tools/cli.py +1940 -0
  375. v0/relationalai/tools/cli_controls.py +1826 -0
  376. v0/relationalai/tools/cli_helpers.py +390 -0
  377. v0/relationalai/tools/debugger.py +183 -0
  378. v0/relationalai/tools/debugger_client.py +109 -0
  379. v0/relationalai/tools/debugger_server.py +302 -0
  380. v0/relationalai/tools/dev.py +685 -0
  381. v0/relationalai/tools/qb_debugger.py +425 -0
  382. v0/relationalai/util/clean_up_databases.py +95 -0
  383. v0/relationalai/util/format.py +123 -0
  384. v0/relationalai/util/list_databases.py +9 -0
  385. v0/relationalai/util/otel_configuration.py +25 -0
  386. v0/relationalai/util/otel_handler.py +484 -0
  387. v0/relationalai/util/snowflake_handler.py +88 -0
  388. v0/relationalai/util/span_format_test.py +43 -0
  389. v0/relationalai/util/span_tracker.py +207 -0
  390. v0/relationalai/util/spans_file_handler.py +72 -0
  391. v0/relationalai/util/tracing_handler.py +34 -0
  392. frontend/debugger/dist/.gitignore +0 -2
  393. frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  394. frontend/debugger/dist/assets/index-Cssla-O7.js +0 -208
  395. frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -9
  396. frontend/debugger/dist/index.html +0 -17
  397. relationalai/clients/azure.py +0 -477
  398. relationalai/clients/client.py +0 -912
  399. relationalai/clients/config.py +0 -673
  400. relationalai/clients/direct_access_client.py +0 -118
  401. relationalai/clients/export_procedure.py.jinja +0 -249
  402. relationalai/clients/hash_util.py +0 -31
  403. relationalai/clients/local.py +0 -571
  404. relationalai/clients/profile_polling.py +0 -73
  405. relationalai/clients/result_helpers.py +0 -420
  406. relationalai/clients/snowflake.py +0 -3869
  407. relationalai/clients/types.py +0 -113
  408. relationalai/clients/use_index_poller.py +0 -980
  409. relationalai/clients/util.py +0 -356
  410. relationalai/debugging.py +0 -389
  411. relationalai/dsl.py +0 -1749
  412. relationalai/early_access/builder/__init__.py +0 -30
  413. relationalai/early_access/builder/builder/__init__.py +0 -35
  414. relationalai/early_access/builder/snowflake/__init__.py +0 -12
  415. relationalai/early_access/builder/std/__init__.py +0 -25
  416. relationalai/early_access/builder/std/decimals/__init__.py +0 -12
  417. relationalai/early_access/builder/std/integers/__init__.py +0 -12
  418. relationalai/early_access/builder/std/math/__init__.py +0 -12
  419. relationalai/early_access/builder/std/strings/__init__.py +0 -14
  420. relationalai/early_access/devtools/__init__.py +0 -12
  421. relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -12
  422. relationalai/early_access/devtools/extract_lqp/__init__.py +0 -12
  423. relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -427
  424. relationalai/early_access/dsl/adapters/orm/parser.py +0 -636
  425. relationalai/early_access/dsl/adapters/owl/adapter.py +0 -176
  426. relationalai/early_access/dsl/adapters/owl/parser.py +0 -160
  427. relationalai/early_access/dsl/bindings/common.py +0 -402
  428. relationalai/early_access/dsl/bindings/csv.py +0 -170
  429. relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -143
  430. relationalai/early_access/dsl/bindings/snowflake.py +0 -64
  431. relationalai/early_access/dsl/codegen/binder.py +0 -411
  432. relationalai/early_access/dsl/codegen/common.py +0 -79
  433. relationalai/early_access/dsl/codegen/helpers.py +0 -23
  434. relationalai/early_access/dsl/codegen/relations.py +0 -700
  435. relationalai/early_access/dsl/codegen/weaver.py +0 -417
  436. relationalai/early_access/dsl/core/builders/__init__.py +0 -47
  437. relationalai/early_access/dsl/core/builders/logic.py +0 -19
  438. relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -11
  439. relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -455
  440. relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -73
  441. relationalai/early_access/dsl/core/constraints/scalar.py +0 -310
  442. relationalai/early_access/dsl/core/context.py +0 -13
  443. relationalai/early_access/dsl/core/cset.py +0 -132
  444. relationalai/early_access/dsl/core/exprs/__init__.py +0 -116
  445. relationalai/early_access/dsl/core/exprs/relational.py +0 -18
  446. relationalai/early_access/dsl/core/exprs/scalar.py +0 -412
  447. relationalai/early_access/dsl/core/instances.py +0 -44
  448. relationalai/early_access/dsl/core/logic/__init__.py +0 -193
  449. relationalai/early_access/dsl/core/logic/aggregation.py +0 -98
  450. relationalai/early_access/dsl/core/logic/exists.py +0 -223
  451. relationalai/early_access/dsl/core/logic/helper.py +0 -163
  452. relationalai/early_access/dsl/core/namespaces.py +0 -32
  453. relationalai/early_access/dsl/core/relations.py +0 -276
  454. relationalai/early_access/dsl/core/rules.py +0 -112
  455. relationalai/early_access/dsl/core/std/__init__.py +0 -45
  456. relationalai/early_access/dsl/core/temporal/recall.py +0 -6
  457. relationalai/early_access/dsl/core/types/__init__.py +0 -270
  458. relationalai/early_access/dsl/core/types/concepts.py +0 -128
  459. relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -267
  460. relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -143
  461. relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -124
  462. relationalai/early_access/dsl/core/types/standard.py +0 -92
  463. relationalai/early_access/dsl/core/types/unconstrained.py +0 -50
  464. relationalai/early_access/dsl/core/types/variables.py +0 -203
  465. relationalai/early_access/dsl/ir/compiler.py +0 -318
  466. relationalai/early_access/dsl/ir/executor.py +0 -260
  467. relationalai/early_access/dsl/ontologies/constraints.py +0 -88
  468. relationalai/early_access/dsl/ontologies/export.py +0 -30
  469. relationalai/early_access/dsl/ontologies/models.py +0 -453
  470. relationalai/early_access/dsl/ontologies/python_printer.py +0 -303
  471. relationalai/early_access/dsl/ontologies/readings.py +0 -60
  472. relationalai/early_access/dsl/ontologies/relationships.py +0 -322
  473. relationalai/early_access/dsl/ontologies/roles.py +0 -87
  474. relationalai/early_access/dsl/ontologies/subtyping.py +0 -55
  475. relationalai/early_access/dsl/orm/constraints.py +0 -438
  476. relationalai/early_access/dsl/orm/measures/dimensions.py +0 -200
  477. relationalai/early_access/dsl/orm/measures/initializer.py +0 -16
  478. relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -275
  479. relationalai/early_access/dsl/orm/measures/measures.py +0 -299
  480. relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -268
  481. relationalai/early_access/dsl/orm/models.py +0 -256
  482. relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -344
  483. relationalai/early_access/dsl/orm/printer.py +0 -469
  484. relationalai/early_access/dsl/orm/reasoners.py +0 -480
  485. relationalai/early_access/dsl/orm/relations.py +0 -19
  486. relationalai/early_access/dsl/orm/relationships.py +0 -251
  487. relationalai/early_access/dsl/orm/types.py +0 -42
  488. relationalai/early_access/dsl/orm/utils.py +0 -79
  489. relationalai/early_access/dsl/orm/verb.py +0 -204
  490. relationalai/early_access/dsl/physical_metadata/tables.py +0 -133
  491. relationalai/early_access/dsl/relations.py +0 -170
  492. relationalai/early_access/dsl/rulesets.py +0 -69
  493. relationalai/early_access/dsl/schemas/__init__.py +0 -450
  494. relationalai/early_access/dsl/schemas/builder.py +0 -48
  495. relationalai/early_access/dsl/schemas/comp_names.py +0 -51
  496. relationalai/early_access/dsl/schemas/components.py +0 -203
  497. relationalai/early_access/dsl/schemas/contexts.py +0 -156
  498. relationalai/early_access/dsl/schemas/exprs.py +0 -89
  499. relationalai/early_access/dsl/schemas/fragments.py +0 -464
  500. relationalai/early_access/dsl/serialization.py +0 -79
  501. relationalai/early_access/dsl/serialize/exporter.py +0 -163
  502. relationalai/early_access/dsl/snow/api.py +0 -104
  503. relationalai/early_access/dsl/snow/common.py +0 -76
  504. relationalai/early_access/dsl/state_mgmt/__init__.py +0 -129
  505. relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -125
  506. relationalai/early_access/dsl/state_mgmt/transitions.py +0 -130
  507. relationalai/early_access/dsl/types/__init__.py +0 -40
  508. relationalai/early_access/dsl/types/concepts.py +0 -12
  509. relationalai/early_access/dsl/types/entities.py +0 -135
  510. relationalai/early_access/dsl/types/values.py +0 -17
  511. relationalai/early_access/dsl/utils.py +0 -102
  512. relationalai/early_access/graphs/__init__.py +0 -13
  513. relationalai/early_access/lqp/__init__.py +0 -12
  514. relationalai/early_access/lqp/compiler/__init__.py +0 -12
  515. relationalai/early_access/lqp/constructors/__init__.py +0 -18
  516. relationalai/early_access/lqp/executor/__init__.py +0 -12
  517. relationalai/early_access/lqp/ir/__init__.py +0 -12
  518. relationalai/early_access/lqp/passes/__init__.py +0 -12
  519. relationalai/early_access/lqp/pragmas/__init__.py +0 -12
  520. relationalai/early_access/lqp/primitives/__init__.py +0 -12
  521. relationalai/early_access/lqp/types/__init__.py +0 -12
  522. relationalai/early_access/lqp/utils/__init__.py +0 -12
  523. relationalai/early_access/lqp/validators/__init__.py +0 -12
  524. relationalai/early_access/metamodel/__init__.py +0 -58
  525. relationalai/early_access/metamodel/builtins/__init__.py +0 -12
  526. relationalai/early_access/metamodel/compiler/__init__.py +0 -12
  527. relationalai/early_access/metamodel/dependency/__init__.py +0 -12
  528. relationalai/early_access/metamodel/factory/__init__.py +0 -17
  529. relationalai/early_access/metamodel/helpers/__init__.py +0 -12
  530. relationalai/early_access/metamodel/ir/__init__.py +0 -14
  531. relationalai/early_access/metamodel/rewrite/__init__.py +0 -7
  532. relationalai/early_access/metamodel/typer/__init__.py +0 -3
  533. relationalai/early_access/metamodel/typer/typer/__init__.py +0 -12
  534. relationalai/early_access/metamodel/types/__init__.py +0 -15
  535. relationalai/early_access/metamodel/util/__init__.py +0 -15
  536. relationalai/early_access/metamodel/visitor/__init__.py +0 -12
  537. relationalai/early_access/rel/__init__.py +0 -12
  538. relationalai/early_access/rel/executor/__init__.py +0 -12
  539. relationalai/early_access/rel/rel_utils/__init__.py +0 -12
  540. relationalai/early_access/rel/rewrite/__init__.py +0 -7
  541. relationalai/early_access/solvers/__init__.py +0 -19
  542. relationalai/early_access/sql/__init__.py +0 -11
  543. relationalai/early_access/sql/executor/__init__.py +0 -3
  544. relationalai/early_access/sql/rewrite/__init__.py +0 -3
  545. relationalai/early_access/tests/logging/__init__.py +0 -12
  546. relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -12
  547. relationalai/early_access/tests/utils/__init__.py +0 -12
  548. relationalai/environments/__init__.py +0 -35
  549. relationalai/environments/base.py +0 -381
  550. relationalai/environments/colab.py +0 -14
  551. relationalai/environments/generic.py +0 -71
  552. relationalai/environments/ipython.py +0 -68
  553. relationalai/environments/jupyter.py +0 -9
  554. relationalai/environments/snowbook.py +0 -169
  555. relationalai/errors.py +0 -2455
  556. relationalai/experimental/SF.py +0 -38
  557. relationalai/experimental/inspect.py +0 -47
  558. relationalai/experimental/pathfinder/__init__.py +0 -158
  559. relationalai/experimental/pathfinder/api.py +0 -160
  560. relationalai/experimental/pathfinder/automaton.py +0 -584
  561. relationalai/experimental/pathfinder/bridge.py +0 -226
  562. relationalai/experimental/pathfinder/compiler.py +0 -416
  563. relationalai/experimental/pathfinder/datalog.py +0 -214
  564. relationalai/experimental/pathfinder/diagnostics.py +0 -56
  565. relationalai/experimental/pathfinder/filter.py +0 -236
  566. relationalai/experimental/pathfinder/glushkov.py +0 -439
  567. relationalai/experimental/pathfinder/options.py +0 -265
  568. relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -1951
  569. relationalai/experimental/pathfinder/rpq.py +0 -344
  570. relationalai/experimental/pathfinder/transition.py +0 -200
  571. relationalai/experimental/pathfinder/utils.py +0 -26
  572. relationalai/experimental/paths/README.md +0 -107
  573. relationalai/experimental/paths/api.py +0 -143
  574. relationalai/experimental/paths/benchmarks/grid_graph.py +0 -37
  575. relationalai/experimental/paths/code_organization.md +0 -2
  576. relationalai/experimental/paths/examples/Movies.ipynb +0 -16328
  577. relationalai/experimental/paths/examples/basic_example.py +0 -40
  578. relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -3
  579. relationalai/experimental/paths/examples/movie_example.py +0 -77
  580. relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -193
  581. relationalai/experimental/paths/examples/movies_data/directed.csv +0 -45
  582. relationalai/experimental/paths/examples/movies_data/follows.csv +0 -7
  583. relationalai/experimental/paths/examples/movies_data/movies.csv +0 -39
  584. relationalai/experimental/paths/examples/movies_data/person.csv +0 -134
  585. relationalai/experimental/paths/examples/movies_data/produced.csv +0 -16
  586. relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -10
  587. relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -11
  588. relationalai/experimental/paths/examples/paths_benchmark.py +0 -115
  589. relationalai/experimental/paths/examples/paths_example.py +0 -116
  590. relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -28
  591. relationalai/experimental/paths/find_paths_via_automaton.py +0 -85
  592. relationalai/experimental/paths/graph.py +0 -185
  593. relationalai/experimental/paths/path_algorithms/find_paths.py +0 -280
  594. relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -26
  595. relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -111
  596. relationalai/experimental/paths/path_algorithms/single.py +0 -59
  597. relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -39
  598. relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -103
  599. relationalai/experimental/paths/path_algorithms/usp-old.py +0 -130
  600. relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -183
  601. relationalai/experimental/paths/path_algorithms/usp.py +0 -150
  602. relationalai/experimental/paths/product_graph.py +0 -93
  603. relationalai/experimental/paths/rpq/automaton.py +0 -584
  604. relationalai/experimental/paths/rpq/diagnostics.py +0 -56
  605. relationalai/experimental/paths/rpq/rpq.py +0 -378
  606. relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -90
  607. relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -119
  608. relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -104
  609. relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -113
  610. relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -149
  611. relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -70
  612. relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -64
  613. relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -115
  614. relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -75
  615. relationalai/experimental/paths/tests/tests_single_paths.py +0 -152
  616. relationalai/experimental/paths/tests/tests_single_walks.py +0 -208
  617. relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -297
  618. relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -107
  619. relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -76
  620. relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -76
  621. relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -110
  622. relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -229
  623. relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -108
  624. relationalai/experimental/paths/tree_agg.py +0 -168
  625. relationalai/experimental/paths/utilities/iterators.py +0 -27
  626. relationalai/experimental/paths/utilities/prefix_sum.py +0 -91
  627. relationalai/experimental/solvers.py +0 -1087
  628. relationalai/loaders/csv.py +0 -195
  629. relationalai/loaders/loader.py +0 -177
  630. relationalai/loaders/types.py +0 -23
  631. relationalai/rel_emitter.py +0 -373
  632. relationalai/rel_utils.py +0 -185
  633. relationalai/semantics/designs/query_builder/identify_by.md +0 -106
  634. relationalai/semantics/devtools/benchmark_lqp.py +0 -536
  635. relationalai/semantics/devtools/compilation_manager.py +0 -294
  636. relationalai/semantics/devtools/extract_lqp.py +0 -110
  637. relationalai/semantics/internal/internal.py +0 -3785
  638. relationalai/semantics/internal/snowflake.py +0 -324
  639. relationalai/semantics/lqp/README.md +0 -34
  640. relationalai/semantics/lqp/builtins.py +0 -16
  641. relationalai/semantics/lqp/compiler.py +0 -22
  642. relationalai/semantics/lqp/constructors.py +0 -68
  643. relationalai/semantics/lqp/executor.py +0 -469
  644. relationalai/semantics/lqp/intrinsics.py +0 -24
  645. relationalai/semantics/lqp/model2lqp.py +0 -839
  646. relationalai/semantics/lqp/passes.py +0 -680
  647. relationalai/semantics/lqp/primitives.py +0 -252
  648. relationalai/semantics/lqp/result_helpers.py +0 -202
  649. relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -57
  650. relationalai/semantics/lqp/rewrite/cdc.py +0 -216
  651. relationalai/semantics/lqp/rewrite/extract_common.py +0 -338
  652. relationalai/semantics/lqp/rewrite/extract_keys.py +0 -449
  653. relationalai/semantics/lqp/rewrite/function_annotations.py +0 -114
  654. relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -314
  655. relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -296
  656. relationalai/semantics/lqp/rewrite/splinter.py +0 -76
  657. relationalai/semantics/lqp/types.py +0 -101
  658. relationalai/semantics/lqp/utils.py +0 -160
  659. relationalai/semantics/lqp/validators.py +0 -57
  660. relationalai/semantics/metamodel/compiler.py +0 -133
  661. relationalai/semantics/metamodel/dependency.py +0 -862
  662. relationalai/semantics/metamodel/executor.py +0 -61
  663. relationalai/semantics/metamodel/factory.py +0 -287
  664. relationalai/semantics/metamodel/helpers.py +0 -361
  665. relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -39
  666. relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -210
  667. relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -78
  668. relationalai/semantics/metamodel/rewrite/flatten.py +0 -549
  669. relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -165
  670. relationalai/semantics/metamodel/typer/checker.py +0 -353
  671. relationalai/semantics/metamodel/typer/typer.py +0 -1395
  672. relationalai/semantics/reasoners/__init__.py +0 -10
  673. relationalai/semantics/reasoners/graph/README.md +0 -620
  674. relationalai/semantics/reasoners/graph/__init__.py +0 -37
  675. relationalai/semantics/reasoners/graph/core.py +0 -9020
  676. relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -797
  677. relationalai/semantics/reasoners/graph/tests/README.md +0 -21
  678. relationalai/semantics/reasoners/optimization/__init__.py +0 -68
  679. relationalai/semantics/reasoners/optimization/common.py +0 -88
  680. relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -568
  681. relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -1163
  682. relationalai/semantics/rel/builtins.py +0 -40
  683. relationalai/semantics/rel/compiler.py +0 -989
  684. relationalai/semantics/rel/executor.py +0 -359
  685. relationalai/semantics/rel/rel.py +0 -482
  686. relationalai/semantics/rel/rel_utils.py +0 -276
  687. relationalai/semantics/snowflake/__init__.py +0 -3
  688. relationalai/semantics/sql/compiler.py +0 -2503
  689. relationalai/semantics/sql/executor/duck_db.py +0 -52
  690. relationalai/semantics/sql/executor/result_helpers.py +0 -64
  691. relationalai/semantics/sql/executor/snowflake.py +0 -145
  692. relationalai/semantics/sql/rewrite/denormalize.py +0 -222
  693. relationalai/semantics/sql/rewrite/double_negation.py +0 -49
  694. relationalai/semantics/sql/rewrite/recursive_union.py +0 -127
  695. relationalai/semantics/sql/rewrite/sort_output_query.py +0 -246
  696. relationalai/semantics/sql/sql.py +0 -504
  697. relationalai/semantics/std/pragmas.py +0 -11
  698. relationalai/semantics/std/std.py +0 -14
  699. relationalai/semantics/tests/test_snapshot_abstract.py +0 -143
  700. relationalai/semantics/tests/test_snapshot_base.py +0 -9
  701. relationalai/semantics/tests/utils.py +0 -46
  702. relationalai/std/__init__.py +0 -70
  703. relationalai/tools/cli.py +0 -1940
  704. relationalai/tools/cli_controls.py +0 -1826
  705. relationalai/tools/cli_helpers.py +0 -390
  706. relationalai/tools/debugger_client.py +0 -109
  707. relationalai/tools/debugger_server.py +0 -302
  708. relationalai/tools/dev.py +0 -685
  709. relationalai/tools/notes +0 -7
  710. relationalai/tools/qb_debugger.py +0 -425
  711. relationalai/util/clean_up_databases.py +0 -95
  712. relationalai/util/list_databases.py +0 -9
  713. relationalai/util/otel_configuration.py +0 -25
  714. relationalai/util/otel_handler.py +0 -484
  715. relationalai/util/snowflake_handler.py +0 -88
  716. relationalai/util/span_format_test.py +0 -43
  717. relationalai/util/span_tracker.py +0 -207
  718. relationalai/util/spans_file_handler.py +0 -72
  719. relationalai/util/tracing_handler.py +0 -34
  720. relationalai-0.12.13.dist-info/METADATA +0 -74
  721. relationalai-0.12.13.dist-info/RECORD +0 -449
  722. relationalai-0.12.13.dist-info/WHEEL +0 -4
  723. relationalai-0.12.13.dist-info/entry_points.txt +0 -3
  724. relationalai-0.12.13.dist-info/licenses/LICENSE +0 -202
  725. relationalai_test_util/__init__.py +0 -4
  726. relationalai_test_util/fixtures.py +0 -228
  727. relationalai_test_util/snapshot.py +0 -252
  728. relationalai_test_util/traceback.py +0 -118
  729. /relationalai/{analysis → semantics/frontend}/__init__.py +0 -0
  730. /relationalai/{auth/__init__.py → semantics/metamodel/metamodel_compiler.py} +0 -0
  731. /relationalai/{early_access → shims}/__init__.py +0 -0
  732. {relationalai/early_access/dsl/adapters → v0/relationalai/analysis}/__init__.py +0 -0
  733. {relationalai → v0/relationalai}/analysis/mechanistic.py +0 -0
  734. {relationalai → v0/relationalai}/analysis/whynot.py +0 -0
  735. {relationalai/early_access/dsl/adapters/orm → v0/relationalai/auth}/__init__.py +0 -0
  736. {relationalai → v0/relationalai}/auth/jwt_generator.py +0 -0
  737. {relationalai → v0/relationalai}/auth/oauth_callback_server.py +0 -0
  738. {relationalai → v0/relationalai}/auth/token_handler.py +0 -0
  739. {relationalai → v0/relationalai}/auth/util.py +0 -0
  740. {relationalai → v0/relationalai}/clients/__init__.py +0 -0
  741. {relationalai → v0/relationalai}/clients/cache_store.py +0 -0
  742. {relationalai → v0/relationalai}/compiler.py +0 -0
  743. {relationalai → v0/relationalai}/dependencies.py +0 -0
  744. {relationalai → v0/relationalai}/docutils.py +0 -0
  745. {relationalai/early_access/dsl/adapters/owl → v0/relationalai/early_access}/__init__.py +0 -0
  746. {relationalai → v0/relationalai}/early_access/dsl/__init__.py +0 -0
  747. {relationalai/early_access/dsl/bindings → v0/relationalai/early_access/dsl/adapters}/__init__.py +0 -0
  748. {relationalai/early_access/dsl/bindings/legacy → v0/relationalai/early_access/dsl/adapters/orm}/__init__.py +0 -0
  749. {relationalai → v0/relationalai}/early_access/dsl/adapters/orm/model.py +0 -0
  750. {relationalai/early_access/dsl/codegen → v0/relationalai/early_access/dsl/adapters/owl}/__init__.py +0 -0
  751. {relationalai → v0/relationalai}/early_access/dsl/adapters/owl/model.py +0 -0
  752. {relationalai/early_access/dsl/core/temporal → v0/relationalai/early_access/dsl/bindings}/__init__.py +0 -0
  753. {relationalai/early_access/dsl/ir → v0/relationalai/early_access/dsl/bindings/legacy}/__init__.py +0 -0
  754. {relationalai/early_access/dsl/ontologies → v0/relationalai/early_access/dsl/codegen}/__init__.py +0 -0
  755. {relationalai → v0/relationalai}/early_access/dsl/constants.py +0 -0
  756. {relationalai → v0/relationalai}/early_access/dsl/core/__init__.py +0 -0
  757. {relationalai → v0/relationalai}/early_access/dsl/core/constraints/__init__.py +0 -0
  758. {relationalai → v0/relationalai}/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  759. {relationalai → v0/relationalai}/early_access/dsl/core/stack.py +0 -0
  760. {relationalai/early_access/dsl/orm → v0/relationalai/early_access/dsl/core/temporal}/__init__.py +0 -0
  761. {relationalai → v0/relationalai}/early_access/dsl/core/utils.py +0 -0
  762. {relationalai/early_access/dsl/orm/measures → v0/relationalai/early_access/dsl/ir}/__init__.py +0 -0
  763. {relationalai/early_access/dsl/physical_metadata → v0/relationalai/early_access/dsl/ontologies}/__init__.py +0 -0
  764. {relationalai → v0/relationalai}/early_access/dsl/ontologies/raw_source.py +0 -0
  765. {relationalai/early_access/dsl/serialize → v0/relationalai/early_access/dsl/orm}/__init__.py +0 -0
  766. {relationalai/early_access/dsl/snow → v0/relationalai/early_access/dsl/orm/measures}/__init__.py +0 -0
  767. {relationalai → v0/relationalai}/early_access/dsl/orm/reasoner_errors.py +0 -0
  768. {relationalai/loaders → v0/relationalai/early_access/dsl/physical_metadata}/__init__.py +0 -0
  769. {relationalai/semantics/tests → v0/relationalai/early_access/dsl/serialize}/__init__.py +0 -0
  770. {relationalai → v0/relationalai}/early_access/dsl/serialize/binding_model.py +0 -0
  771. {relationalai → v0/relationalai}/early_access/dsl/serialize/model.py +0 -0
  772. {relationalai/tools → v0/relationalai/early_access/dsl/snow}/__init__.py +0 -0
  773. {relationalai → v0/relationalai}/early_access/tests/__init__.py +0 -0
  774. {relationalai → v0/relationalai}/environments/ci.py +0 -0
  775. {relationalai → v0/relationalai}/environments/hex.py +0 -0
  776. {relationalai → v0/relationalai}/environments/terminal.py +0 -0
  777. {relationalai → v0/relationalai}/experimental/__init__.py +0 -0
  778. {relationalai → v0/relationalai}/experimental/graphs.py +0 -0
  779. {relationalai → v0/relationalai}/experimental/paths/__init__.py +0 -0
  780. {relationalai → v0/relationalai}/experimental/paths/benchmarks/__init__.py +0 -0
  781. {relationalai → v0/relationalai}/experimental/paths/path_algorithms/__init__.py +0 -0
  782. {relationalai → v0/relationalai}/experimental/paths/rpq/__init__.py +0 -0
  783. {relationalai → v0/relationalai}/experimental/paths/rpq/filter.py +0 -0
  784. {relationalai → v0/relationalai}/experimental/paths/rpq/glushkov.py +0 -0
  785. {relationalai → v0/relationalai}/experimental/paths/rpq/transition.py +0 -0
  786. {relationalai → v0/relationalai}/experimental/paths/utilities/__init__.py +0 -0
  787. {relationalai → v0/relationalai}/experimental/paths/utilities/utilities.py +0 -0
  788. {relationalai → v0/relationalai}/metagen.py +0 -0
  789. {relationalai → v0/relationalai}/metamodel.py +0 -0
  790. {relationalai → v0/relationalai}/rel.py +0 -0
  791. {relationalai → v0/relationalai}/semantics/devtools/__init__.py +0 -0
  792. {relationalai → v0/relationalai}/semantics/internal/__init__.py +0 -0
  793. {relationalai → v0/relationalai}/semantics/internal/annotations.py +0 -0
  794. {relationalai → v0/relationalai}/semantics/lqp/__init__.py +0 -0
  795. {relationalai → v0/relationalai}/semantics/lqp/ir.py +0 -0
  796. {relationalai → v0/relationalai}/semantics/lqp/pragmas.py +0 -0
  797. {relationalai → v0/relationalai}/semantics/lqp/rewrite/__init__.py +0 -0
  798. {relationalai → v0/relationalai}/semantics/metamodel/dataflow.py +0 -0
  799. {relationalai → v0/relationalai}/semantics/metamodel/ir.py +0 -0
  800. {relationalai → v0/relationalai}/semantics/metamodel/rewrite/__init__.py +0 -0
  801. {relationalai → v0/relationalai}/semantics/metamodel/typer/__init__.py +0 -0
  802. {relationalai → v0/relationalai}/semantics/metamodel/types.py +0 -0
  803. {relationalai → v0/relationalai}/semantics/metamodel/util.py +0 -0
  804. {relationalai → v0/relationalai}/semantics/metamodel/visitor.py +0 -0
  805. {relationalai → v0/relationalai}/semantics/reasoners/experimental/__init__.py +0 -0
  806. {relationalai → v0/relationalai}/semantics/rel/__init__.py +0 -0
  807. {relationalai → v0/relationalai}/semantics/sql/__init__.py +0 -0
  808. {relationalai → v0/relationalai}/semantics/sql/executor/__init__.py +0 -0
  809. {relationalai → v0/relationalai}/semantics/sql/rewrite/__init__.py +0 -0
  810. {relationalai → v0/relationalai}/semantics/tests/logging.py +0 -0
  811. {relationalai → v0/relationalai}/std/aggregates.py +0 -0
  812. {relationalai → v0/relationalai}/std/dates.py +0 -0
  813. {relationalai → v0/relationalai}/std/graphs.py +0 -0
  814. {relationalai → v0/relationalai}/std/inspect.py +0 -0
  815. {relationalai → v0/relationalai}/std/math.py +0 -0
  816. {relationalai → v0/relationalai}/std/re.py +0 -0
  817. {relationalai → v0/relationalai}/std/strings.py +0 -0
  818. {relationalai → v0/relationalai}/tools/cleanup_snapshots.py +0 -0
  819. {relationalai → v0/relationalai}/tools/constants.py +0 -0
  820. {relationalai → v0/relationalai}/tools/query_utils.py +0 -0
  821. {relationalai → v0/relationalai}/tools/snapshot_viewer.py +0 -0
  822. {relationalai → v0/relationalai}/util/__init__.py +0 -0
  823. {relationalai → v0/relationalai}/util/constants.py +0 -0
  824. {relationalai → v0/relationalai}/util/graph.py +0 -0
  825. {relationalai → v0/relationalai}/util/timeout.py +0 -0
@@ -0,0 +1,92 @@
1
+ from v0.relationalai.early_access.dsl.core.types.constrained.subtype import ValueSubtype
2
+ from v0.relationalai.early_access.dsl.core.types.unconstrained import UnconstrainedValueType, UnconstrainedNumericType
3
+
4
+ standard_value_types = {}
5
+
6
+ # Hash types
7
+ Hash = UnconstrainedValueType('Hash')
8
+ standard_value_types[Hash.display()] = Hash
9
+
10
+ # Boolean types
11
+ Boolean = UnconstrainedNumericType('Boolean')
12
+ standard_value_types[Boolean.display()] = Boolean
13
+
14
+ # Decimal types
15
+ #
16
+ Decimal = UnconstrainedNumericType('Decimal')
17
+ standard_value_types[Decimal.display()] = Decimal
18
+
19
+ UnsignedDecimal = ValueSubtype('UnsignedDecimal')
20
+ standard_value_types[UnsignedDecimal.display()] = UnsignedDecimal
21
+ with UnsignedDecimal:
22
+ x = Decimal()
23
+ x >= 0
24
+
25
+ PositiveDecimal = ValueSubtype('PositiveDecimal')
26
+ standard_value_types[PositiveDecimal.display()] = PositiveDecimal
27
+ with PositiveDecimal:
28
+ x = UnsignedDecimal()
29
+ x != 0
30
+
31
+ # Floating-point types
32
+ #
33
+ Float = UnconstrainedNumericType('Float')
34
+ standard_value_types[Float.display()] = Float
35
+ Double = UnconstrainedNumericType('Double') # A float64 in Rel
36
+ standard_value_types[Double.display()] = Double
37
+
38
+ # Integer types
39
+ #
40
+ BigInteger = UnconstrainedNumericType('BigInteger') # 128-bit integer
41
+ standard_value_types[BigInteger.display()] = BigInteger
42
+
43
+ BigUnsignedInteger = ValueSubtype('BigUnsignedInteger')
44
+ standard_value_types[BigUnsignedInteger.display()] = BigUnsignedInteger
45
+ with BigUnsignedInteger:
46
+ x = BigInteger()
47
+ x >= 0
48
+
49
+ BigPositiveInteger = ValueSubtype('BigPositiveInteger')
50
+ standard_value_types[BigPositiveInteger.display()] = BigPositiveInteger
51
+ with BigPositiveInteger:
52
+ x = BigUnsignedInteger()
53
+ x != 0
54
+
55
+ Integer = UnconstrainedNumericType('Integer')
56
+ standard_value_types[Integer.display()] = Integer
57
+
58
+ UnsignedInteger = ValueSubtype('UnsignedInteger')
59
+ standard_value_types[UnsignedInteger.display()] = UnsignedInteger
60
+ with UnsignedInteger:
61
+ x = Integer()
62
+ x >= 0
63
+
64
+ PositiveInteger = ValueSubtype('PositiveInteger')
65
+ standard_value_types[PositiveInteger.display()] = PositiveInteger
66
+ with PositiveInteger:
67
+ x = UnsignedInteger()
68
+ x != 0
69
+
70
+ # Date types
71
+ #
72
+ Date = UnconstrainedValueType('Date')
73
+ standard_value_types[Date.display()] = Date
74
+
75
+ # DateTime types
76
+ #
77
+ DateTime = UnconstrainedValueType('DateTime')
78
+ standard_value_types[DateTime.display()] = DateTime
79
+
80
+ RowId = UnconstrainedNumericType('RowId')
81
+ standard_value_types[RowId.display()] = RowId
82
+
83
+ # String types
84
+ #
85
+ String = UnconstrainedValueType('String')
86
+ standard_value_types[String.display()] = String
87
+
88
+ Any = UnconstrainedValueType('Any')
89
+ standard_value_types[Any.display()] = Any
90
+
91
+ Symbol = UnconstrainedValueType('Symbol')
92
+ standard_value_types[Symbol.display()] = Symbol
@@ -0,0 +1,50 @@
1
+ from v0.relationalai.early_access.dsl.core.types import AbstractValueType
2
+ from v0.relationalai.early_access.dsl.core.types.variables import BasicTypeVariable
3
+ import numbers
4
+
5
+ class UnconstrainedValueType(AbstractValueType):
6
+
7
+ def __init__(self, nm):
8
+ AbstractValueType.__init__(self, nm)
9
+
10
+ # Returns True if the Python constant `val` is an instance of this ValueType
11
+ def contains(self, val) -> bool:
12
+ if isinstance(val, numbers.Number):
13
+ return self.basic_numeric()
14
+ elif isinstance(val, str):
15
+ return not self.basic_numeric()
16
+ else:
17
+ return False
18
+
19
+ def pprint(self): return self.display()
20
+
21
+ def ranges_over(self): return BasicTypeVariable(self)
22
+
23
+ def relational(self): return False
24
+
25
+ def root_unconstrained_type(self): return self
26
+
27
+ def unconstrained(self): return True
28
+
29
+ class UnconstrainedNumericType(UnconstrainedValueType):
30
+
31
+ def __init__(self, nm):
32
+ UnconstrainedValueType.__init__(self, nm)
33
+
34
+ def boolean(self): return self.display() == 'Boolean'
35
+
36
+ # For verification purposes, we treat floats ad decimals. While not generally
37
+ # safe, this is likely fine for constraints we will see in enterprise contexts.
38
+ #
39
+ def decimal(self): return self.display() == 'Decimal' or self.display() == 'Float'
40
+
41
+ def integer(self): return self.display() == 'Integer' or self.display() == 'BigInteger'
42
+
43
+ def basic_numeric(self) -> bool: return True
44
+
45
+ class UnsupportedUnconstrainedValueType(UnconstrainedValueType):
46
+ def __init__(self, nm):
47
+ UnconstrainedValueType.__init__(self, nm)
48
+
49
+ def root_unconstrained_type(self):
50
+ raise Exception(f"Unsupported basic type {self.display()} cannot be the base type of any value type")
@@ -0,0 +1,203 @@
1
+ from abc import abstractmethod
2
+ from typing import Any
3
+
4
+ from v0.relationalai.early_access.dsl.core.cset import UnstableConstraintSet
5
+ from v0.relationalai.early_access.dsl.core.exprs.relational import RelationVariable
6
+ from v0.relationalai.early_access.dsl.core.exprs.scalar import ScalarVariable
7
+
8
+ # We use TypeVariables to formalize the meaning of a ConstrainedValueType.
9
+ # Each represents what would be a variable in a ValueType or ValueSubtype
10
+ # declaration.
11
+ #
12
+ class TypeVariable:
13
+
14
+ # Each TypeVariable declares some AbstractValueType (vt) which might
15
+ # be a ValueSubtype. In addition, each TypeVariable has a Position
16
+ # that is used to form the name of the variable when needed.
17
+ #
18
+ def __init__(self, vt, vmap={}):
19
+ self.pos = None
20
+ self._cset = UnstableConstraintSet()
21
+ self.decl = vt
22
+ self._vmap = vmap
23
+
24
+ # Returns the set of ScalarConstraints that this TypeVariable denotes
25
+ #
26
+ def denotes(self, C={}):
27
+ for sc in self._cset._sconstraints.values():
28
+ C[sc.entityid()] = sc
29
+
30
+ for ac in self._cset._atoms.values():
31
+ # [REKS] Check the following logic carefully to make sure we don't accidentally
32
+ # capture any variable names duirng interpretation of type atoms
33
+ #
34
+ scs = self.decl.interpret_type_atom(ac)
35
+ for s in scs:
36
+ if s not in C:
37
+ C[s] = scs[s]
38
+ return C
39
+
40
+ @abstractmethod
41
+ def dupe(self, vmap) -> tuple['TypeVariable', Any]: pass
42
+
43
+ def setpos(self, pos): pass
44
+
45
+ @abstractmethod
46
+ def varname(self) -> str: pass
47
+
48
+ class BasicTypeVariable(ScalarVariable, TypeVariable):
49
+
50
+ # An UnconstrainedTypeVarible ranges over some UnconstrainedValueType,
51
+ # which will be the root unconstrained type of vt.
52
+ #
53
+ def __init__(self, vt, vmap={}):
54
+ if vt.nominal():
55
+ raise Exception(f"Cannot create BasicTypeVariable of nominal type {vt._name}")
56
+ super().__init__(vt, vmap)
57
+
58
+ def display(self):
59
+ return self.varname()
60
+
61
+ def dupe(self, vmap={}):
62
+ d = BasicTypeVariable(self.decl, vmap)
63
+ vmap[id(self)] = d
64
+ cs = self._cset._sconstraints
65
+ for c in cs.values():
66
+ newc = c.revar(vmap)
67
+ d._cset._sconstraints[id(newc)] = newc
68
+ return (d, vmap)
69
+
70
+ def entityid(self):
71
+ return hash(self.varname())
72
+
73
+ def grounded(self):
74
+ return False
75
+
76
+ def grounded_using(self, groundings):
77
+ return False
78
+
79
+ def physical_typeof(self):
80
+ return self.decl.root_unconstrained_type()
81
+
82
+ def rename(self, renaming):
83
+ nm = self.varname()
84
+ if nm in renaming:
85
+ return renaming[nm]
86
+ else:
87
+ return self
88
+
89
+ def revar(self, vmap):
90
+ nm = id(self)
91
+ if nm in vmap:
92
+ return vmap[nm]
93
+ else:
94
+ return self
95
+
96
+ def setpos(self, pos):
97
+ self.pos = pos
98
+ self._cset = self._cset.stabilize()
99
+ return pos+1
100
+
101
+ def typeof(self):
102
+ return self.decl
103
+
104
+ def typevar_tuple(self):
105
+ return self
106
+
107
+ def varname(self):
108
+ return f"x{str(self.pos)}"
109
+
110
+ class NominalTypeVariable(RelationVariable, TypeVariable):
111
+
112
+ # If vt is nominal, then the TypeVariable itself is nominal
113
+ # and ranges over some root nominal ValueType.
114
+ #
115
+ def __init__(self, vt, vmap={}):
116
+ super().__init__(vt, vmap)
117
+ self._parts = []
118
+
119
+ def all_constraint_display(self):
120
+ parts = [self.constraint_display()]
121
+ for p in self._parts:
122
+ if isinstance(p, NominalTypeVariable):
123
+ parts.append(p.all_constraint_display())
124
+ return "\n".join(parts)
125
+
126
+ def constraint_display(self):
127
+ parts = [ p.varname() for p in self._parts ]
128
+ args = ", ".join(parts)
129
+ return f" {self.varname()}({args})"
130
+
131
+ def denotes(self, C={}):
132
+ C = super().denotes(C)
133
+ for p in self._parts:
134
+ C = p.denotes(C)
135
+ return C
136
+
137
+ def display(self):
138
+ return self.varname()
139
+
140
+ def dupe(self, vmap={}):
141
+ d = NominalTypeVariable(self.decl, vmap)
142
+ vmap[id(self)] = d
143
+
144
+ for p in self._parts:
145
+ (pprime, vmap) = p.dupe(vmap)
146
+ d._parts.append(pprime)
147
+
148
+ vmap = d._vmap
149
+
150
+ cs = self._cset._sconstraints
151
+ for c in cs.values():
152
+ newc = c.revar(vmap)
153
+ d._cset._sconstraints[id(newc)] = newc
154
+ acs = self._cset._atoms
155
+ for ac in acs.values():
156
+ newac = ac.revar(vmap)
157
+ d._cset._atoms[id(newac)] = newac
158
+ return (d, vmap)
159
+
160
+ def entityid(self):
161
+ return hash(self.varname())
162
+
163
+ def rename(self, renaming):
164
+ nm = self.varname()
165
+ if nm in renaming:
166
+ return renaming[nm]
167
+ else:
168
+ return self
169
+
170
+ def revar(self, vmap):
171
+ nm = id(self)
172
+ if nm in vmap:
173
+ return vmap[nm]
174
+ else:
175
+ return self
176
+
177
+ def setpos(self, pos):
178
+ self.pos = pos
179
+ pos = pos + 1
180
+ for p in self._parts:
181
+ pos = p.setpos(pos)
182
+ self._cset = self._cset.stabilize()
183
+ return pos
184
+
185
+ def typeof(self):
186
+ return self.decl
187
+
188
+ def typevar_tuple(self):
189
+ tvars = []
190
+
191
+ for tvar in self._parts:
192
+ if isinstance(tvar, NominalTypeVariable):
193
+ tvars.append(tvar.typevar_tuple())
194
+ else:
195
+ tvars.append(tvar)
196
+ if len(tvars) == 1:
197
+ result = tvars[0]
198
+ else:
199
+ result = tuple(tvars)
200
+ return result
201
+
202
+ def varname(self):
203
+ return f"y{str(self.pos)}"
@@ -0,0 +1,318 @@
1
+ # type: ignore
2
+ import re
3
+ from typing import Union, Callable, Tuple, List, Optional, Sequence as PySequence
4
+
5
+ from v0.relationalai.early_access.dsl import Relation, AssertedRelation
6
+ from v0.relationalai.early_access.dsl.core.relations import ExportRelation
7
+ from v0.relationalai.early_access.dsl.ontologies.export import Export
8
+ from v0.relationalai.early_access.dsl.ontologies.raw_source import RawSource
9
+ from v0.relationalai.semantics.metamodel import ir, builtins, types, factory as f
10
+ from v0.relationalai.semantics.metamodel.types import Any, Symbol
11
+ from v0.relationalai.semantics.metamodel.util import OrderedSet, ordered_set
12
+
13
+ from v0.relationalai.early_access.dsl.core.constraints.predicate.atomic import Atom
14
+ from v0.relationalai.early_access.dsl.core.constraints.scalar import ScalarConstraint
15
+ from v0.relationalai.early_access.dsl.core.exprs import Wildcard
16
+ from v0.relationalai.early_access.dsl.core.exprs.scalar import Literal, BinaryScalarExpr
17
+ from v0.relationalai.early_access.dsl.core.logic import RelVariable
18
+ from v0.relationalai.early_access.dsl.core.logic.aggregation import Aggregation
19
+ from v0.relationalai.early_access.dsl.core.logic.exists import ExistentialConstraint
20
+ from v0.relationalai.early_access.dsl.core.rules import Rule, Annotation
21
+ from v0.relationalai.early_access.dsl.core.types import Type
22
+ from v0.relationalai.early_access.dsl.core.types.standard import Boolean, Hash, Integer, Decimal, Float, Double, \
23
+ BigInteger, String, Date, DateTime, RowId
24
+ from v0.relationalai.early_access.dsl.ontologies.models import Model
25
+
26
+ class CompilerContext:
27
+ def __init__(self):
28
+ self.var_map:dict[int, ir.Var] = {}
29
+ self.items:OrderedSet[ir.Task] = OrderedSet()
30
+ self.project_away_vars_count:int = -1
31
+ self.project_away_vars:OrderedSet[ir.Var] = OrderedSet()
32
+
33
+ def to_var(self, item:Union[RelVariable, Literal], t:Optional[ir.Type] = None) -> ir.Var:
34
+ entity_id = item.entityid()
35
+ if entity_id not in self.var_map:
36
+ if isinstance(item, RelVariable):
37
+ self.var_map[entity_id] = f.var(item.display(), t)
38
+ else:
39
+ self.var_map[entity_id] = f.lit(item.val)
40
+ return self.var_map[entity_id]
41
+
42
+ def project_away_var_name(self) -> str:
43
+ self.project_away_vars_count += 1
44
+ return f"_pa_{self.project_away_vars_count}"
45
+
46
+ def to_project_away_var(self, t: ir.Type) -> ir.Var:
47
+ var = f.var(self.project_away_var_name(), t)
48
+ self.project_away_vars.add(var)
49
+ return var
50
+
51
+ def add(self, item:ir.Task):
52
+ self.items.add(item)
53
+
54
+ def clone(self):
55
+ c = CompilerContext()
56
+ c.var_map = self.var_map.copy()
57
+ return c
58
+
59
+ class Compiler:
60
+ def __init__(self):
61
+ self.types: dict[Type, ir.Type] = {
62
+ Hash: f.scalar_type("UInt128"),
63
+ Boolean: types.Bool,
64
+ Integer: types.Int128,
65
+ Decimal: types.Decimal,
66
+ Float: types.Number,
67
+ Double: types.Number,
68
+ String: types.String,
69
+ BigInteger: f.scalar_type("Int128"),
70
+ Date: f.scalar_type("Date"),
71
+ DateTime: f.scalar_type("DateTime"),
72
+ Symbol: types.Symbol,
73
+ RowId: types.Sha1,
74
+ Any: types.Any
75
+ }
76
+ self.relations: dict[int, ir.Relation] = {}
77
+
78
+ def to_type(self, t: Type) -> ir.Type:
79
+ if t not in self.types:
80
+ if t._name in types.builtin_scalar_types_by_name:
81
+ self.types[t] = types.builtin_scalar_types_by_name[t._name]
82
+ else:
83
+ self.types[t] = f.scalar_type(t._name)
84
+ return self.types[t]
85
+
86
+ @staticmethod
87
+ def _parse_relation_name(name: str, producer: Callable[[str, Any], Union[ir.Field, ir.Var]]) \
88
+ -> Tuple[str, List[Union[ir.Field, ir.Var]]]:
89
+ parts = re.split(r'(?<!:):(?!:)', name)
90
+ if len(parts) > 1:
91
+ var_list = [producer(f":{part}", types.Symbol) for part in parts[1:]]
92
+ return parts[0], var_list
93
+ return name, []
94
+
95
+ def to_relation(self, ctx: CompilerContext, item:Atom, name:str) -> ir.Relation:
96
+ # We use `item.relcomp.entityid()` instead of `item.entityid()`
97
+ # to ensure that there is only one instance of a relation instead of multiple instances.
98
+ #
99
+ # Example:
100
+ # - `test(x in Int, y in DateTime)`
101
+ # - `test(y in Int, x in DateTime)`
102
+ #
103
+ # These will be considered the same relation.
104
+ entity_id = item.relcomp.entityid()
105
+ if entity_id not in self.relations:
106
+ if name in builtins.builtin_relations_by_name:
107
+ self.relations[entity_id] = builtins.builtin_relations_by_name[name]
108
+ else:
109
+ name, fields = self._parse_relation_name(name, f.field)
110
+ fields.extend(
111
+ f.field(
112
+ arg.display() if not isinstance(arg, Wildcard) else ctx.project_away_var_name(),
113
+ self.to_type(role.root_unconstrained_type())
114
+ )
115
+ for arg, role in zip(item.args, item.relcomp._signature._types)
116
+ )
117
+ annotations = [builtins.external_annotation] if isinstance(item.relcomp, AssertedRelation) else []
118
+ self.relations[entity_id] = f.relation(name, fields, annos=annotations)
119
+ return self.relations[entity_id]
120
+
121
+ def to_args(self, ctx: CompilerContext, item: Atom) -> tuple[list[ir.Value], list[ir.Value]]:
122
+ args_list = []
123
+ project_away_vars = []
124
+
125
+ for arg, role in zip(item.args, item.relcomp._signature._types):
126
+ if isinstance(arg, Wildcard):
127
+ project_away_var = ctx.to_project_away_var(self.to_type(role.root_unconstrained_type()))
128
+ project_away_vars.append(project_away_var)
129
+ args_list.append(project_away_var)
130
+ else:
131
+ args_list.append(self.to_var(ctx, arg))
132
+
133
+ return args_list, project_away_vars
134
+
135
+ def to_vars(self, ctx:CompilerContext, item:ExistentialConstraint) -> set[ir.Var]:
136
+ return {self.to_var(ctx, cur) for cur in item._scalars.values()}
137
+
138
+ def to_var(self, ctx:CompilerContext, item:Union[RelVariable, Literal]) -> ir.Var:
139
+ return ctx.to_var(item, self.to_type(item._type.root_unconstrained_type())) \
140
+ if isinstance(item, RelVariable) else ctx.to_var(item)
141
+
142
+ def compile_head(self, ctx:CompilerContext, head:Atom, original_name:str,
143
+ annotations: Optional[PySequence[ir.Annotation]]=None) -> ir.Task:
144
+ name, sig_vars = self._parse_relation_name(original_name, f.var)
145
+ sig_vars.extend(self.to_var(ctx, cur) for cur in head.args)
146
+ return self._compile_output(head, sig_vars) if name == 'output' \
147
+ else f.derive(self.to_relation(ctx, head, original_name), sig_vars, annotations)
148
+
149
+ @staticmethod
150
+ def _compile_output(item:Atom, sig_vars: List[Union[ir.Field, ir.Var]]):
151
+ annotations = [builtins.export_annotation, builtins.external_annotation] \
152
+ if isinstance(item.relcomp, ExportRelation) else []
153
+ return f.output([(var.name, var) for var in sig_vars], annos=annotations)
154
+
155
+ @staticmethod
156
+ def _compile_annotations(annotations:PySequence[Annotation]) -> Optional[PySequence[ir.Annotation]]:
157
+ return [f.annotation(f.relation(str(a), []), []) for a in annotations]
158
+
159
+ def compile_atom(self, ctx:CompilerContext, atom:Atom) -> Union[ir.Construct, ir.Lookup, ir.Not]:
160
+ original_name = atom.relcomp.qualified_name()
161
+ name, args = self._parse_relation_name(original_name, f.var)
162
+ if name.startswith('^'):
163
+ vs = tuple(self.to_var(ctx, arg) for arg in atom.args[:-1])
164
+ return ir.Construct(None, (name[1:], *vs), self.to_var(ctx, atom.args[-1]))
165
+ else:
166
+ atom_args, project_away_vars = self.to_args(ctx, atom)
167
+ args.extend(atom_args)
168
+ task = f.lookup(self.to_relation(ctx, atom, original_name), args)
169
+ if len(project_away_vars) > 0:
170
+ task = f.exists(list(project_away_vars), f.logical([task]))
171
+ return f.not_(task) if atom.negated else task
172
+
173
+ def _compile_scalar_expressions(self, ctx, scalar_constraint):
174
+ left = scalar_constraint.left
175
+ right = scalar_constraint.right
176
+
177
+ expr = right if isinstance(right, (BinaryScalarExpr, Aggregation)) else left
178
+ other = left if expr is right else right
179
+
180
+ return (
181
+ self._compile_binary_scalar_expressions(ctx, expr, other)
182
+ if isinstance(expr, BinaryScalarExpr)
183
+ else self._compile_aggregation(ctx, expr, other)
184
+ )
185
+
186
+ # Example of a binary scalar expression: ( c = a / b ) or ( a / b = c )
187
+ def _compile_binary_scalar_expressions(self, ctx, left:BinaryScalarExpr, right:RelVariable):
188
+ args = [self.to_var(ctx, left._left), self.to_var(ctx, left._right), self.to_var(ctx, right)]
189
+ return f.lookup(builtins.builtin_relations_by_name[left.op()], args)
190
+
191
+ # Example of an aggregation:
192
+ # - ( d = sum[(e): l1(c, e) and l2(a, e) ] ) or
193
+ # - ( sum[(e): l1(c, e) and l2(a, e) ] = d )
194
+ # Expected IR:
195
+ # Logical
196
+ # Lookup l1(c, e)
197
+ # Lookup l2(a, e)
198
+ # Aggregate sum( [], [a, c], [e, d] )
199
+ # Hoist d a c
200
+ #
201
+ # We need to handle `count` aggregation differently.
202
+ # - ( d = count[(e): l1(e) ] )
203
+ # Expected IR:
204
+ # Logical
205
+ # Lookup l1(e)
206
+ # Aggregate count( [e], [], [d] )
207
+ # Hoist d
208
+ def _compile_aggregation(self, ctx, left:Aggregation, right:RelVariable) -> ir.Aggregate:
209
+ method = left._method
210
+ result_var = self.to_var(ctx, right)
211
+ vargs = [self.to_var(ctx, var) for var in left._scalars.values()]
212
+ items, lookup_args = self._compile_atoms_and_scalar_constraints(ctx, left._atoms.values(), left._sconstraints.values())
213
+ group_vars = lookup_args - vargs
214
+ agg_relation = builtins.builtin_relations_by_name[method]
215
+ projection = vargs if self._is_count_aggregation(method) else vargs[:-1]
216
+ args = [result_var] if self._is_count_aggregation(method) else [vargs[-1], result_var]
217
+ items.add(f.aggregate(agg_relation, projection, group_vars.list, args))
218
+ return f.logical(list(items), [result_var, *group_vars.list])
219
+
220
+ def compile_scalar_constraint(self, ctx:CompilerContext, scalar_constraint:ScalarConstraint) -> ir.Task:
221
+ if all(isinstance(side, BinaryScalarExpr) for side in (scalar_constraint.left, scalar_constraint.right)):
222
+ raise Exception("It's not allowed for left and right operands to be BinaryScalarExpr.")
223
+ if any(isinstance(side, (BinaryScalarExpr, Aggregation)) for side in (scalar_constraint.right, scalar_constraint.left)):
224
+ return self._compile_scalar_expressions(ctx, scalar_constraint)
225
+ else:
226
+ args = [self.to_var(ctx, scalar_constraint.left), self.to_var(ctx, scalar_constraint.right)]
227
+ return f.lookup(builtins.builtin_relations_by_name[scalar_constraint.op], args)
228
+
229
+ # TODO: Replace to this one when we implement this in the to Rel Emitter
230
+ # def compile_existential(self, ctx:CompilerContext, existential:ExistentialConstraint) -> ir.Task:
231
+ # items, vargs = (self._compile_atoms_and_scalar_constraints(ctx, existential._atoms.values(), existential._sconstraints.values()))
232
+ # return f.logical(list(items), (vargs - self.to_vars(ctx, existential)).list)
233
+
234
+ def compile_existential(self, ctx:CompilerContext, existential:ExistentialConstraint) -> ir.Task:
235
+ items = ordered_set()
236
+ for atom in existential._atoms.values():
237
+ items.add(self.compile_atom(ctx, atom))
238
+ for scalar_constraint in existential._sconstraints.values():
239
+ items.add(self.compile_scalar_constraint(ctx, scalar_constraint))
240
+ return f.exists(list(self.to_vars(ctx, existential)), f.logical(list(items)))
241
+
242
+ def _compile_atoms_and_scalar_constraints(self, ctx: CompilerContext, atoms: [Atom], scalar_constraints: [ScalarConstraint]) \
243
+ -> Tuple[OrderedSet[ir.Task], OrderedSet[ir.Var]]:
244
+ items = ordered_set()
245
+ vargs = ordered_set()
246
+ for atom in atoms:
247
+ comp_atom = self.compile_atom(ctx, atom)
248
+ if not isinstance(comp_atom, ir.Construct):
249
+ vargs.update(arg for arg in comp_atom.args if self._arg_filter(arg))
250
+ items.add(comp_atom)
251
+ for scalar_constraint in scalar_constraints:
252
+ comp_scalar = self.compile_scalar_constraint(ctx, scalar_constraint)
253
+ if isinstance(comp_scalar, ir.Lookup):
254
+ vargs.update(arg for arg in comp_scalar.args if self._arg_filter(arg))
255
+ elif isinstance(comp_scalar, ir.Logical):
256
+ vargs.update(comp_scalar.hoisted)
257
+ items.add(comp_scalar)
258
+ return items, vargs
259
+
260
+ @staticmethod
261
+ def _arg_filter(arg):
262
+ return not isinstance(arg, ir.Literal) and not arg.name.startswith(":")
263
+
264
+ @staticmethod
265
+ def _is_count_aggregation(method: str) -> bool:
266
+ return method == "count"
267
+
268
+ def compile_rule(self, rule:Rule, name:str) -> ir.Task:
269
+ ctx = CompilerContext()
270
+ for existential in rule._existentials.values():
271
+ if len(existential._scalars) != 0:
272
+ ctx.add(self.compile_existential(ctx, existential))
273
+ else:
274
+ for atom in existential._atoms.values():
275
+ ctx.add(self.compile_atom(ctx, atom))
276
+ for scalar_constraint in existential._sconstraints.values():
277
+ ctx.add(self.compile_scalar_constraint(ctx, scalar_constraint))
278
+ for atom in rule._atoms.values():
279
+ ctx.add(self.compile_atom(ctx, atom))
280
+ for scalar_constraint in rule._sconstraints.values():
281
+ ctx.add(self.compile_scalar_constraint(ctx, scalar_constraint))
282
+ ctx.add(self.compile_head(ctx, rule.head, name, self._compile_annotations(rule._annotations)))
283
+ return f.logical(list(ctx.items))
284
+
285
+ def compile_raw_sources(self, raw_sources: OrderedSet[RawSource]) -> ir.Model:
286
+ return f.compute_model(
287
+ f.logical([
288
+ f.logical([f.derive(builtins.raw_source, [rs.language, rs.raw_source])])
289
+ for rs in raw_sources
290
+ ])
291
+ )
292
+
293
+ def compile_model(self, model: Model) -> ir.Model:
294
+ return f.compute_model(
295
+ f.logical(
296
+ [self.compile_rule(rule, relation.qualified_name())
297
+ for relation in model._relations.values()
298
+ for rule in relation._rules]
299
+ )
300
+ )
301
+
302
+ def compile_queries(self, queries: OrderedSet[Relation]) -> ir.Model:
303
+ return f.compute_model(
304
+ f.logical([
305
+ self.compile_rule(rule, query.qualified_name())
306
+ for query in queries
307
+ for rule in query._rules
308
+ ])
309
+ )
310
+
311
+ def compile_export(self, export: Export) -> ir.Model:
312
+ return f.compute_model(
313
+ f.logical([
314
+ self.compile_rule(rule, column.qualified_name())
315
+ for column in export.columns
316
+ for rule in column._rules
317
+ ])
318
+ )