relationalai 0.13.0.dev0__py3-none-any.whl → 0.13.1__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 (837) hide show
  1. frontend/debugger/dist/.gitignore +2 -0
  2. frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
  3. frontend/debugger/dist/assets/index-Cssla-O7.js +208 -0
  4. frontend/debugger/dist/assets/index-DlHsYx1V.css +9 -0
  5. frontend/debugger/dist/index.html +17 -0
  6. relationalai/__init__.py +256 -1
  7. relationalai/clients/__init__.py +18 -0
  8. relationalai/clients/client.py +912 -0
  9. relationalai/clients/config.py +673 -0
  10. relationalai/clients/direct_access_client.py +118 -0
  11. relationalai/clients/exec_txn_poller.py +91 -0
  12. relationalai/clients/hash_util.py +31 -0
  13. relationalai/clients/local.py +571 -0
  14. relationalai/clients/profile_polling.py +73 -0
  15. relationalai/clients/resources/__init__.py +8 -0
  16. relationalai/clients/resources/azure/azure.py +477 -0
  17. relationalai/clients/resources/snowflake/__init__.py +20 -0
  18. relationalai/clients/resources/snowflake/cli_resources.py +87 -0
  19. relationalai/clients/resources/snowflake/direct_access_resources.py +694 -0
  20. relationalai/clients/resources/snowflake/engine_state_handlers.py +309 -0
  21. relationalai/clients/resources/snowflake/error_handlers.py +199 -0
  22. relationalai/clients/resources/snowflake/export_procedure.py.jinja +249 -0
  23. relationalai/clients/resources/snowflake/resources_factory.py +99 -0
  24. relationalai/clients/resources/snowflake/snowflake.py +3190 -0
  25. relationalai/clients/resources/snowflake/use_index_poller.py +1019 -0
  26. relationalai/clients/resources/snowflake/use_index_resources.py +188 -0
  27. relationalai/clients/resources/snowflake/util.py +387 -0
  28. relationalai/clients/result_helpers.py +420 -0
  29. relationalai/clients/types.py +113 -0
  30. relationalai/clients/util.py +356 -0
  31. relationalai/debugging.py +389 -0
  32. relationalai/dsl.py +1749 -0
  33. relationalai/early_access/builder/__init__.py +30 -0
  34. relationalai/early_access/builder/builder/__init__.py +35 -0
  35. relationalai/early_access/builder/snowflake/__init__.py +12 -0
  36. relationalai/early_access/builder/std/__init__.py +25 -0
  37. relationalai/early_access/builder/std/decimals/__init__.py +12 -0
  38. relationalai/early_access/builder/std/integers/__init__.py +12 -0
  39. relationalai/early_access/builder/std/math/__init__.py +12 -0
  40. relationalai/early_access/builder/std/strings/__init__.py +14 -0
  41. relationalai/early_access/devtools/__init__.py +12 -0
  42. relationalai/early_access/devtools/benchmark_lqp/__init__.py +12 -0
  43. relationalai/early_access/devtools/extract_lqp/__init__.py +12 -0
  44. relationalai/early_access/dsl/adapters/orm/adapter_qb.py +427 -0
  45. relationalai/early_access/dsl/adapters/orm/parser.py +636 -0
  46. relationalai/early_access/dsl/adapters/owl/adapter.py +176 -0
  47. relationalai/early_access/dsl/adapters/owl/parser.py +160 -0
  48. relationalai/early_access/dsl/bindings/common.py +402 -0
  49. relationalai/early_access/dsl/bindings/csv.py +170 -0
  50. relationalai/early_access/dsl/bindings/legacy/binding_models.py +143 -0
  51. relationalai/early_access/dsl/bindings/snowflake.py +64 -0
  52. relationalai/early_access/dsl/codegen/binder.py +411 -0
  53. relationalai/early_access/dsl/codegen/common.py +79 -0
  54. relationalai/early_access/dsl/codegen/helpers.py +23 -0
  55. relationalai/early_access/dsl/codegen/relations.py +700 -0
  56. relationalai/early_access/dsl/codegen/weaver.py +417 -0
  57. relationalai/early_access/dsl/core/builders/__init__.py +47 -0
  58. relationalai/early_access/dsl/core/builders/logic.py +19 -0
  59. relationalai/early_access/dsl/core/builders/scalar_constraint.py +11 -0
  60. relationalai/early_access/dsl/core/constraints/predicate/atomic.py +455 -0
  61. relationalai/early_access/dsl/core/constraints/predicate/universal.py +73 -0
  62. relationalai/early_access/dsl/core/constraints/scalar.py +310 -0
  63. relationalai/early_access/dsl/core/context.py +13 -0
  64. relationalai/early_access/dsl/core/cset.py +132 -0
  65. relationalai/early_access/dsl/core/exprs/__init__.py +116 -0
  66. relationalai/early_access/dsl/core/exprs/relational.py +18 -0
  67. relationalai/early_access/dsl/core/exprs/scalar.py +412 -0
  68. relationalai/early_access/dsl/core/instances.py +44 -0
  69. relationalai/early_access/dsl/core/logic/__init__.py +193 -0
  70. relationalai/early_access/dsl/core/logic/aggregation.py +98 -0
  71. relationalai/early_access/dsl/core/logic/exists.py +223 -0
  72. relationalai/early_access/dsl/core/logic/helper.py +163 -0
  73. relationalai/early_access/dsl/core/namespaces.py +32 -0
  74. relationalai/early_access/dsl/core/relations.py +276 -0
  75. relationalai/early_access/dsl/core/rules.py +112 -0
  76. relationalai/early_access/dsl/core/std/__init__.py +45 -0
  77. relationalai/early_access/dsl/core/temporal/recall.py +6 -0
  78. relationalai/early_access/dsl/core/types/__init__.py +270 -0
  79. relationalai/early_access/dsl/core/types/concepts.py +128 -0
  80. relationalai/early_access/dsl/core/types/constrained/__init__.py +267 -0
  81. relationalai/early_access/dsl/core/types/constrained/nominal.py +143 -0
  82. relationalai/early_access/dsl/core/types/constrained/subtype.py +124 -0
  83. relationalai/early_access/dsl/core/types/standard.py +92 -0
  84. relationalai/early_access/dsl/core/types/unconstrained.py +50 -0
  85. relationalai/early_access/dsl/core/types/variables.py +203 -0
  86. relationalai/early_access/dsl/ir/compiler.py +318 -0
  87. relationalai/early_access/dsl/ir/executor.py +260 -0
  88. relationalai/early_access/dsl/ontologies/constraints.py +88 -0
  89. relationalai/early_access/dsl/ontologies/export.py +30 -0
  90. relationalai/early_access/dsl/ontologies/models.py +453 -0
  91. relationalai/early_access/dsl/ontologies/python_printer.py +303 -0
  92. relationalai/early_access/dsl/ontologies/readings.py +60 -0
  93. relationalai/early_access/dsl/ontologies/relationships.py +322 -0
  94. relationalai/early_access/dsl/ontologies/roles.py +87 -0
  95. relationalai/early_access/dsl/ontologies/subtyping.py +55 -0
  96. relationalai/early_access/dsl/orm/constraints.py +438 -0
  97. relationalai/early_access/dsl/orm/measures/dimensions.py +200 -0
  98. relationalai/early_access/dsl/orm/measures/initializer.py +16 -0
  99. relationalai/early_access/dsl/orm/measures/measure_rules.py +275 -0
  100. relationalai/early_access/dsl/orm/measures/measures.py +299 -0
  101. relationalai/early_access/dsl/orm/measures/role_exprs.py +268 -0
  102. relationalai/early_access/dsl/orm/models.py +256 -0
  103. relationalai/early_access/dsl/orm/object_oriented_printer.py +344 -0
  104. relationalai/early_access/dsl/orm/printer.py +469 -0
  105. relationalai/early_access/dsl/orm/reasoners.py +480 -0
  106. relationalai/early_access/dsl/orm/relations.py +19 -0
  107. relationalai/early_access/dsl/orm/relationships.py +251 -0
  108. relationalai/early_access/dsl/orm/types.py +42 -0
  109. relationalai/early_access/dsl/orm/utils.py +79 -0
  110. relationalai/early_access/dsl/orm/verb.py +204 -0
  111. relationalai/early_access/dsl/physical_metadata/tables.py +133 -0
  112. relationalai/early_access/dsl/relations.py +170 -0
  113. relationalai/early_access/dsl/rulesets.py +69 -0
  114. relationalai/early_access/dsl/schemas/__init__.py +450 -0
  115. relationalai/early_access/dsl/schemas/builder.py +48 -0
  116. relationalai/early_access/dsl/schemas/comp_names.py +51 -0
  117. relationalai/early_access/dsl/schemas/components.py +203 -0
  118. relationalai/early_access/dsl/schemas/contexts.py +156 -0
  119. relationalai/early_access/dsl/schemas/exprs.py +89 -0
  120. relationalai/early_access/dsl/schemas/fragments.py +464 -0
  121. relationalai/early_access/dsl/serialization.py +79 -0
  122. relationalai/early_access/dsl/serialize/exporter.py +163 -0
  123. relationalai/early_access/dsl/snow/api.py +105 -0
  124. relationalai/early_access/dsl/snow/common.py +76 -0
  125. relationalai/early_access/dsl/state_mgmt/__init__.py +129 -0
  126. relationalai/early_access/dsl/state_mgmt/state_charts.py +125 -0
  127. relationalai/early_access/dsl/state_mgmt/transitions.py +130 -0
  128. relationalai/early_access/dsl/types/__init__.py +40 -0
  129. relationalai/early_access/dsl/types/concepts.py +12 -0
  130. relationalai/early_access/dsl/types/entities.py +135 -0
  131. relationalai/early_access/dsl/types/values.py +17 -0
  132. relationalai/early_access/dsl/utils.py +102 -0
  133. relationalai/early_access/graphs/__init__.py +13 -0
  134. relationalai/early_access/lqp/__init__.py +12 -0
  135. relationalai/early_access/lqp/compiler/__init__.py +12 -0
  136. relationalai/early_access/lqp/constructors/__init__.py +18 -0
  137. relationalai/early_access/lqp/executor/__init__.py +12 -0
  138. relationalai/early_access/lqp/ir/__init__.py +12 -0
  139. relationalai/early_access/lqp/passes/__init__.py +12 -0
  140. relationalai/early_access/lqp/pragmas/__init__.py +12 -0
  141. relationalai/early_access/lqp/primitives/__init__.py +12 -0
  142. relationalai/early_access/lqp/types/__init__.py +12 -0
  143. relationalai/early_access/lqp/utils/__init__.py +12 -0
  144. relationalai/early_access/lqp/validators/__init__.py +12 -0
  145. relationalai/early_access/metamodel/__init__.py +58 -0
  146. relationalai/early_access/metamodel/builtins/__init__.py +12 -0
  147. relationalai/early_access/metamodel/compiler/__init__.py +12 -0
  148. relationalai/early_access/metamodel/dependency/__init__.py +12 -0
  149. relationalai/early_access/metamodel/factory/__init__.py +17 -0
  150. relationalai/early_access/metamodel/helpers/__init__.py +12 -0
  151. relationalai/early_access/metamodel/ir/__init__.py +14 -0
  152. relationalai/early_access/metamodel/rewrite/__init__.py +7 -0
  153. relationalai/early_access/metamodel/typer/__init__.py +3 -0
  154. relationalai/early_access/metamodel/typer/typer/__init__.py +12 -0
  155. relationalai/early_access/metamodel/types/__init__.py +15 -0
  156. relationalai/early_access/metamodel/util/__init__.py +15 -0
  157. relationalai/early_access/metamodel/visitor/__init__.py +12 -0
  158. relationalai/early_access/rel/__init__.py +12 -0
  159. relationalai/early_access/rel/executor/__init__.py +12 -0
  160. relationalai/early_access/rel/rel_utils/__init__.py +12 -0
  161. relationalai/early_access/rel/rewrite/__init__.py +7 -0
  162. relationalai/early_access/solvers/__init__.py +19 -0
  163. relationalai/early_access/sql/__init__.py +11 -0
  164. relationalai/early_access/sql/executor/__init__.py +3 -0
  165. relationalai/early_access/sql/rewrite/__init__.py +3 -0
  166. relationalai/early_access/tests/logging/__init__.py +12 -0
  167. relationalai/early_access/tests/test_snapshot_base/__init__.py +12 -0
  168. relationalai/early_access/tests/utils/__init__.py +12 -0
  169. relationalai/environments/__init__.py +35 -0
  170. relationalai/environments/base.py +381 -0
  171. relationalai/environments/colab.py +14 -0
  172. relationalai/environments/generic.py +71 -0
  173. relationalai/environments/ipython.py +68 -0
  174. relationalai/environments/jupyter.py +9 -0
  175. relationalai/environments/snowbook.py +169 -0
  176. relationalai/errors.py +2496 -0
  177. relationalai/experimental/SF.py +38 -0
  178. relationalai/experimental/inspect.py +47 -0
  179. relationalai/experimental/pathfinder/__init__.py +158 -0
  180. relationalai/experimental/pathfinder/api.py +160 -0
  181. relationalai/experimental/pathfinder/automaton.py +584 -0
  182. relationalai/experimental/pathfinder/bridge.py +226 -0
  183. relationalai/experimental/pathfinder/compiler.py +416 -0
  184. relationalai/experimental/pathfinder/datalog.py +214 -0
  185. relationalai/experimental/pathfinder/diagnostics.py +56 -0
  186. relationalai/experimental/pathfinder/filter.py +236 -0
  187. relationalai/experimental/pathfinder/glushkov.py +439 -0
  188. relationalai/experimental/pathfinder/options.py +265 -0
  189. relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +1951 -0
  190. relationalai/experimental/pathfinder/rpq.py +344 -0
  191. relationalai/experimental/pathfinder/transition.py +200 -0
  192. relationalai/experimental/pathfinder/utils.py +26 -0
  193. relationalai/experimental/paths/README.md +107 -0
  194. relationalai/experimental/paths/api.py +143 -0
  195. relationalai/experimental/paths/benchmarks/grid_graph.py +37 -0
  196. relationalai/experimental/paths/code_organization.md +2 -0
  197. relationalai/experimental/paths/examples/Movies.ipynb +16328 -0
  198. relationalai/experimental/paths/examples/basic_example.py +40 -0
  199. relationalai/experimental/paths/examples/minimal_engine_warmup.py +3 -0
  200. relationalai/experimental/paths/examples/movie_example.py +77 -0
  201. relationalai/experimental/paths/examples/movies_data/actedin.csv +193 -0
  202. relationalai/experimental/paths/examples/movies_data/directed.csv +45 -0
  203. relationalai/experimental/paths/examples/movies_data/follows.csv +7 -0
  204. relationalai/experimental/paths/examples/movies_data/movies.csv +39 -0
  205. relationalai/experimental/paths/examples/movies_data/person.csv +134 -0
  206. relationalai/experimental/paths/examples/movies_data/produced.csv +16 -0
  207. relationalai/experimental/paths/examples/movies_data/ratings.csv +10 -0
  208. relationalai/experimental/paths/examples/movies_data/wrote.csv +11 -0
  209. relationalai/experimental/paths/examples/paths_benchmark.py +115 -0
  210. relationalai/experimental/paths/examples/paths_example.py +116 -0
  211. relationalai/experimental/paths/examples/pattern_to_automaton.py +28 -0
  212. relationalai/experimental/paths/find_paths_via_automaton.py +85 -0
  213. relationalai/experimental/paths/graph.py +185 -0
  214. relationalai/experimental/paths/path_algorithms/find_paths.py +280 -0
  215. relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +26 -0
  216. relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +111 -0
  217. relationalai/experimental/paths/path_algorithms/single.py +59 -0
  218. relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +39 -0
  219. relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +103 -0
  220. relationalai/experimental/paths/path_algorithms/usp-old.py +130 -0
  221. relationalai/experimental/paths/path_algorithms/usp-tuple.py +183 -0
  222. relationalai/experimental/paths/path_algorithms/usp.py +150 -0
  223. relationalai/experimental/paths/product_graph.py +93 -0
  224. relationalai/experimental/paths/rpq/automaton.py +584 -0
  225. relationalai/experimental/paths/rpq/diagnostics.py +56 -0
  226. relationalai/experimental/paths/rpq/rpq.py +378 -0
  227. relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +90 -0
  228. relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +119 -0
  229. relationalai/experimental/paths/tests/tests_limit_sp_single.py +104 -0
  230. relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +113 -0
  231. relationalai/experimental/paths/tests/tests_limit_walks_single.py +149 -0
  232. relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +70 -0
  233. relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +64 -0
  234. relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +115 -0
  235. relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +75 -0
  236. relationalai/experimental/paths/tests/tests_single_paths.py +152 -0
  237. relationalai/experimental/paths/tests/tests_single_walks.py +208 -0
  238. relationalai/experimental/paths/tests/tests_single_walks_undirected.py +297 -0
  239. relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +107 -0
  240. relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +76 -0
  241. relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +76 -0
  242. relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +110 -0
  243. relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +229 -0
  244. relationalai/experimental/paths/tests/tests_usp_nsp_single.py +108 -0
  245. relationalai/experimental/paths/tree_agg.py +168 -0
  246. relationalai/experimental/paths/utilities/iterators.py +27 -0
  247. relationalai/experimental/paths/utilities/prefix_sum.py +91 -0
  248. relationalai/experimental/solvers.py +1087 -0
  249. relationalai/loaders/csv.py +195 -0
  250. relationalai/loaders/loader.py +177 -0
  251. relationalai/loaders/types.py +23 -0
  252. relationalai/rel_emitter.py +373 -0
  253. relationalai/rel_utils.py +185 -0
  254. relationalai/semantics/__init__.py +22 -146
  255. relationalai/semantics/designs/query_builder/identify_by.md +106 -0
  256. relationalai/semantics/devtools/benchmark_lqp.py +535 -0
  257. relationalai/semantics/devtools/compilation_manager.py +294 -0
  258. relationalai/semantics/devtools/extract_lqp.py +110 -0
  259. relationalai/semantics/internal/internal.py +3785 -0
  260. relationalai/semantics/internal/snowflake.py +325 -0
  261. relationalai/semantics/lqp/README.md +34 -0
  262. relationalai/semantics/lqp/builtins.py +16 -0
  263. relationalai/semantics/lqp/compiler.py +22 -0
  264. relationalai/semantics/lqp/constructors.py +68 -0
  265. relationalai/semantics/lqp/executor.py +469 -0
  266. relationalai/semantics/lqp/intrinsics.py +24 -0
  267. relationalai/semantics/lqp/model2lqp.py +877 -0
  268. relationalai/semantics/lqp/passes.py +680 -0
  269. relationalai/semantics/lqp/primitives.py +252 -0
  270. relationalai/semantics/lqp/result_helpers.py +202 -0
  271. relationalai/semantics/lqp/rewrite/annotate_constraints.py +57 -0
  272. relationalai/semantics/lqp/rewrite/cdc.py +216 -0
  273. relationalai/semantics/lqp/rewrite/extract_common.py +338 -0
  274. relationalai/semantics/lqp/rewrite/extract_keys.py +512 -0
  275. relationalai/semantics/lqp/rewrite/function_annotations.py +114 -0
  276. relationalai/semantics/lqp/rewrite/functional_dependencies.py +314 -0
  277. relationalai/semantics/lqp/rewrite/quantify_vars.py +296 -0
  278. relationalai/semantics/lqp/rewrite/splinter.py +76 -0
  279. relationalai/semantics/lqp/types.py +101 -0
  280. relationalai/semantics/lqp/utils.py +160 -0
  281. relationalai/semantics/lqp/validators.py +57 -0
  282. relationalai/semantics/metamodel/__init__.py +40 -6
  283. relationalai/semantics/metamodel/builtins.py +771 -205
  284. relationalai/semantics/metamodel/compiler.py +133 -0
  285. relationalai/semantics/metamodel/dependency.py +862 -0
  286. relationalai/semantics/metamodel/executor.py +61 -0
  287. relationalai/semantics/metamodel/factory.py +287 -0
  288. relationalai/semantics/metamodel/helpers.py +361 -0
  289. relationalai/semantics/metamodel/rewrite/discharge_constraints.py +39 -0
  290. relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +210 -0
  291. relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +78 -0
  292. relationalai/semantics/metamodel/rewrite/flatten.py +554 -0
  293. relationalai/semantics/metamodel/rewrite/format_outputs.py +165 -0
  294. relationalai/semantics/metamodel/typer/checker.py +353 -0
  295. relationalai/semantics/metamodel/typer/typer.py +1395 -0
  296. relationalai/semantics/metamodel/util.py +506 -0
  297. relationalai/semantics/reasoners/__init__.py +10 -0
  298. relationalai/semantics/reasoners/graph/README.md +620 -0
  299. relationalai/semantics/reasoners/graph/__init__.py +37 -0
  300. relationalai/semantics/reasoners/graph/core.py +9019 -0
  301. relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +797 -0
  302. relationalai/semantics/reasoners/graph/tests/README.md +21 -0
  303. relationalai/semantics/reasoners/optimization/__init__.py +68 -0
  304. relationalai/semantics/reasoners/optimization/common.py +88 -0
  305. relationalai/semantics/reasoners/optimization/solvers_dev.py +568 -0
  306. relationalai/semantics/reasoners/optimization/solvers_pb.py +1414 -0
  307. relationalai/semantics/rel/builtins.py +40 -0
  308. relationalai/semantics/rel/compiler.py +989 -0
  309. relationalai/semantics/rel/executor.py +362 -0
  310. relationalai/semantics/rel/rel.py +482 -0
  311. relationalai/semantics/rel/rel_utils.py +276 -0
  312. relationalai/semantics/snowflake/__init__.py +3 -0
  313. relationalai/semantics/sql/compiler.py +2503 -0
  314. relationalai/semantics/sql/executor/duck_db.py +52 -0
  315. relationalai/semantics/sql/executor/result_helpers.py +64 -0
  316. relationalai/semantics/sql/executor/snowflake.py +149 -0
  317. relationalai/semantics/sql/rewrite/denormalize.py +222 -0
  318. relationalai/semantics/sql/rewrite/double_negation.py +49 -0
  319. relationalai/semantics/sql/rewrite/recursive_union.py +127 -0
  320. relationalai/semantics/sql/rewrite/sort_output_query.py +246 -0
  321. relationalai/semantics/sql/sql.py +504 -0
  322. relationalai/semantics/std/__init__.py +40 -60
  323. relationalai/semantics/std/constraints.py +43 -37
  324. relationalai/semantics/std/datetime.py +135 -246
  325. relationalai/semantics/std/decimals.py +52 -45
  326. relationalai/semantics/std/floats.py +5 -13
  327. relationalai/semantics/std/integers.py +11 -26
  328. relationalai/semantics/std/math.py +112 -183
  329. relationalai/semantics/std/pragmas.py +11 -0
  330. relationalai/semantics/std/re.py +62 -80
  331. relationalai/semantics/std/std.py +14 -0
  332. relationalai/semantics/std/strings.py +60 -117
  333. relationalai/semantics/tests/test_snapshot_abstract.py +143 -0
  334. relationalai/semantics/tests/test_snapshot_base.py +9 -0
  335. relationalai/semantics/tests/utils.py +46 -0
  336. relationalai/std/__init__.py +70 -0
  337. relationalai/tools/cli.py +1936 -0
  338. relationalai/tools/cli_controls.py +1826 -0
  339. relationalai/tools/cli_helpers.py +398 -0
  340. relationalai/tools/debugger.py +183 -289
  341. relationalai/tools/debugger_client.py +109 -0
  342. relationalai/tools/debugger_server.py +302 -0
  343. relationalai/tools/dev.py +685 -0
  344. relationalai/tools/notes +7 -0
  345. relationalai/tools/qb_debugger.py +425 -0
  346. relationalai/util/clean_up_databases.py +95 -0
  347. relationalai/util/format.py +106 -48
  348. relationalai/util/list_databases.py +9 -0
  349. relationalai/util/otel_configuration.py +26 -0
  350. relationalai/util/otel_handler.py +484 -0
  351. relationalai/util/snowflake_handler.py +88 -0
  352. relationalai/util/span_format_test.py +43 -0
  353. relationalai/util/span_tracker.py +207 -0
  354. relationalai/util/spans_file_handler.py +72 -0
  355. relationalai/util/tracing_handler.py +34 -0
  356. relationalai-0.13.1.dist-info/METADATA +74 -0
  357. relationalai-0.13.1.dist-info/RECORD +459 -0
  358. relationalai-0.13.1.dist-info/WHEEL +4 -0
  359. relationalai-0.13.1.dist-info/entry_points.txt +3 -0
  360. relationalai-0.13.1.dist-info/licenses/LICENSE +202 -0
  361. relationalai_test_util/__init__.py +4 -0
  362. relationalai_test_util/fixtures.py +233 -0
  363. relationalai_test_util/snapshot.py +252 -0
  364. relationalai_test_util/traceback.py +118 -0
  365. relationalai/config/__init__.py +0 -56
  366. relationalai/config/config.py +0 -289
  367. relationalai/config/config_fields.py +0 -86
  368. relationalai/config/connections/__init__.py +0 -46
  369. relationalai/config/connections/base.py +0 -23
  370. relationalai/config/connections/duckdb.py +0 -29
  371. relationalai/config/connections/snowflake.py +0 -243
  372. relationalai/config/external/__init__.py +0 -17
  373. relationalai/config/external/dbt_converter.py +0 -101
  374. relationalai/config/external/dbt_models.py +0 -93
  375. relationalai/config/external/snowflake_converter.py +0 -41
  376. relationalai/config/external/snowflake_models.py +0 -85
  377. relationalai/config/external/utils.py +0 -19
  378. relationalai/semantics/backends/lqp/annotations.py +0 -11
  379. relationalai/semantics/backends/sql/sql_compiler.py +0 -327
  380. relationalai/semantics/frontend/base.py +0 -1707
  381. relationalai/semantics/frontend/core.py +0 -179
  382. relationalai/semantics/frontend/front_compiler.py +0 -1313
  383. relationalai/semantics/frontend/pprint.py +0 -408
  384. relationalai/semantics/metamodel/metamodel.py +0 -437
  385. relationalai/semantics/metamodel/metamodel_analyzer.py +0 -519
  386. relationalai/semantics/metamodel/metamodel_compiler.py +0 -0
  387. relationalai/semantics/metamodel/pprint.py +0 -412
  388. relationalai/semantics/metamodel/rewriter.py +0 -266
  389. relationalai/semantics/metamodel/typer.py +0 -1378
  390. relationalai/semantics/std/aggregates.py +0 -149
  391. relationalai/semantics/std/common.py +0 -44
  392. relationalai/semantics/std/numbers.py +0 -86
  393. relationalai/shims/executor.py +0 -147
  394. relationalai/shims/helpers.py +0 -126
  395. relationalai/shims/hoister.py +0 -221
  396. relationalai/shims/mm2v0.py +0 -1290
  397. relationalai/tools/cli/__init__.py +0 -6
  398. relationalai/tools/cli/cli.py +0 -90
  399. relationalai/tools/cli/components/__init__.py +0 -5
  400. relationalai/tools/cli/components/progress_reader.py +0 -1524
  401. relationalai/tools/cli/components/utils.py +0 -58
  402. relationalai/tools/cli/config_template.py +0 -45
  403. relationalai/tools/cli/dev.py +0 -19
  404. relationalai/tools/typer_debugger.py +0 -93
  405. relationalai/util/dataclasses.py +0 -43
  406. relationalai/util/docutils.py +0 -40
  407. relationalai/util/error.py +0 -199
  408. relationalai/util/naming.py +0 -145
  409. relationalai/util/python.py +0 -35
  410. relationalai/util/runtime.py +0 -156
  411. relationalai/util/schema.py +0 -197
  412. relationalai/util/source.py +0 -185
  413. relationalai/util/structures.py +0 -163
  414. relationalai/util/tracing.py +0 -261
  415. relationalai-0.13.0.dev0.dist-info/METADATA +0 -46
  416. relationalai-0.13.0.dev0.dist-info/RECORD +0 -488
  417. relationalai-0.13.0.dev0.dist-info/WHEEL +0 -5
  418. relationalai-0.13.0.dev0.dist-info/entry_points.txt +0 -3
  419. relationalai-0.13.0.dev0.dist-info/top_level.txt +0 -2
  420. v0/relationalai/__init__.py +0 -216
  421. v0/relationalai/clients/__init__.py +0 -5
  422. v0/relationalai/clients/azure.py +0 -477
  423. v0/relationalai/clients/client.py +0 -912
  424. v0/relationalai/clients/config.py +0 -673
  425. v0/relationalai/clients/direct_access_client.py +0 -118
  426. v0/relationalai/clients/hash_util.py +0 -31
  427. v0/relationalai/clients/local.py +0 -571
  428. v0/relationalai/clients/profile_polling.py +0 -73
  429. v0/relationalai/clients/result_helpers.py +0 -420
  430. v0/relationalai/clients/snowflake.py +0 -3869
  431. v0/relationalai/clients/types.py +0 -113
  432. v0/relationalai/clients/use_index_poller.py +0 -980
  433. v0/relationalai/clients/util.py +0 -356
  434. v0/relationalai/debugging.py +0 -389
  435. v0/relationalai/dsl.py +0 -1749
  436. v0/relationalai/early_access/builder/__init__.py +0 -30
  437. v0/relationalai/early_access/builder/builder/__init__.py +0 -35
  438. v0/relationalai/early_access/builder/snowflake/__init__.py +0 -12
  439. v0/relationalai/early_access/builder/std/__init__.py +0 -25
  440. v0/relationalai/early_access/builder/std/decimals/__init__.py +0 -12
  441. v0/relationalai/early_access/builder/std/integers/__init__.py +0 -12
  442. v0/relationalai/early_access/builder/std/math/__init__.py +0 -12
  443. v0/relationalai/early_access/builder/std/strings/__init__.py +0 -14
  444. v0/relationalai/early_access/devtools/__init__.py +0 -12
  445. v0/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -12
  446. v0/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -12
  447. v0/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -427
  448. v0/relationalai/early_access/dsl/adapters/orm/parser.py +0 -636
  449. v0/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -176
  450. v0/relationalai/early_access/dsl/adapters/owl/parser.py +0 -160
  451. v0/relationalai/early_access/dsl/bindings/common.py +0 -402
  452. v0/relationalai/early_access/dsl/bindings/csv.py +0 -170
  453. v0/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -143
  454. v0/relationalai/early_access/dsl/bindings/snowflake.py +0 -64
  455. v0/relationalai/early_access/dsl/codegen/binder.py +0 -411
  456. v0/relationalai/early_access/dsl/codegen/common.py +0 -79
  457. v0/relationalai/early_access/dsl/codegen/helpers.py +0 -23
  458. v0/relationalai/early_access/dsl/codegen/relations.py +0 -700
  459. v0/relationalai/early_access/dsl/codegen/weaver.py +0 -417
  460. v0/relationalai/early_access/dsl/core/builders/__init__.py +0 -47
  461. v0/relationalai/early_access/dsl/core/builders/logic.py +0 -19
  462. v0/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -11
  463. v0/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -455
  464. v0/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -73
  465. v0/relationalai/early_access/dsl/core/constraints/scalar.py +0 -310
  466. v0/relationalai/early_access/dsl/core/context.py +0 -13
  467. v0/relationalai/early_access/dsl/core/cset.py +0 -132
  468. v0/relationalai/early_access/dsl/core/exprs/__init__.py +0 -116
  469. v0/relationalai/early_access/dsl/core/exprs/relational.py +0 -18
  470. v0/relationalai/early_access/dsl/core/exprs/scalar.py +0 -412
  471. v0/relationalai/early_access/dsl/core/instances.py +0 -44
  472. v0/relationalai/early_access/dsl/core/logic/__init__.py +0 -193
  473. v0/relationalai/early_access/dsl/core/logic/aggregation.py +0 -98
  474. v0/relationalai/early_access/dsl/core/logic/exists.py +0 -223
  475. v0/relationalai/early_access/dsl/core/logic/helper.py +0 -163
  476. v0/relationalai/early_access/dsl/core/namespaces.py +0 -32
  477. v0/relationalai/early_access/dsl/core/relations.py +0 -276
  478. v0/relationalai/early_access/dsl/core/rules.py +0 -112
  479. v0/relationalai/early_access/dsl/core/std/__init__.py +0 -45
  480. v0/relationalai/early_access/dsl/core/temporal/recall.py +0 -6
  481. v0/relationalai/early_access/dsl/core/types/__init__.py +0 -270
  482. v0/relationalai/early_access/dsl/core/types/concepts.py +0 -128
  483. v0/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -267
  484. v0/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -143
  485. v0/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -124
  486. v0/relationalai/early_access/dsl/core/types/standard.py +0 -92
  487. v0/relationalai/early_access/dsl/core/types/unconstrained.py +0 -50
  488. v0/relationalai/early_access/dsl/core/types/variables.py +0 -203
  489. v0/relationalai/early_access/dsl/ir/compiler.py +0 -318
  490. v0/relationalai/early_access/dsl/ir/executor.py +0 -260
  491. v0/relationalai/early_access/dsl/ontologies/constraints.py +0 -88
  492. v0/relationalai/early_access/dsl/ontologies/export.py +0 -30
  493. v0/relationalai/early_access/dsl/ontologies/models.py +0 -453
  494. v0/relationalai/early_access/dsl/ontologies/python_printer.py +0 -303
  495. v0/relationalai/early_access/dsl/ontologies/readings.py +0 -60
  496. v0/relationalai/early_access/dsl/ontologies/relationships.py +0 -322
  497. v0/relationalai/early_access/dsl/ontologies/roles.py +0 -87
  498. v0/relationalai/early_access/dsl/ontologies/subtyping.py +0 -55
  499. v0/relationalai/early_access/dsl/orm/constraints.py +0 -438
  500. v0/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -200
  501. v0/relationalai/early_access/dsl/orm/measures/initializer.py +0 -16
  502. v0/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -275
  503. v0/relationalai/early_access/dsl/orm/measures/measures.py +0 -299
  504. v0/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -268
  505. v0/relationalai/early_access/dsl/orm/models.py +0 -256
  506. v0/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -344
  507. v0/relationalai/early_access/dsl/orm/printer.py +0 -469
  508. v0/relationalai/early_access/dsl/orm/reasoners.py +0 -480
  509. v0/relationalai/early_access/dsl/orm/relations.py +0 -19
  510. v0/relationalai/early_access/dsl/orm/relationships.py +0 -251
  511. v0/relationalai/early_access/dsl/orm/types.py +0 -42
  512. v0/relationalai/early_access/dsl/orm/utils.py +0 -79
  513. v0/relationalai/early_access/dsl/orm/verb.py +0 -204
  514. v0/relationalai/early_access/dsl/physical_metadata/tables.py +0 -133
  515. v0/relationalai/early_access/dsl/relations.py +0 -170
  516. v0/relationalai/early_access/dsl/rulesets.py +0 -69
  517. v0/relationalai/early_access/dsl/schemas/__init__.py +0 -450
  518. v0/relationalai/early_access/dsl/schemas/builder.py +0 -48
  519. v0/relationalai/early_access/dsl/schemas/comp_names.py +0 -51
  520. v0/relationalai/early_access/dsl/schemas/components.py +0 -203
  521. v0/relationalai/early_access/dsl/schemas/contexts.py +0 -156
  522. v0/relationalai/early_access/dsl/schemas/exprs.py +0 -89
  523. v0/relationalai/early_access/dsl/schemas/fragments.py +0 -464
  524. v0/relationalai/early_access/dsl/serialization.py +0 -79
  525. v0/relationalai/early_access/dsl/serialize/exporter.py +0 -163
  526. v0/relationalai/early_access/dsl/snow/api.py +0 -104
  527. v0/relationalai/early_access/dsl/snow/common.py +0 -76
  528. v0/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -129
  529. v0/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -125
  530. v0/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -130
  531. v0/relationalai/early_access/dsl/types/__init__.py +0 -40
  532. v0/relationalai/early_access/dsl/types/concepts.py +0 -12
  533. v0/relationalai/early_access/dsl/types/entities.py +0 -135
  534. v0/relationalai/early_access/dsl/types/values.py +0 -17
  535. v0/relationalai/early_access/dsl/utils.py +0 -102
  536. v0/relationalai/early_access/graphs/__init__.py +0 -13
  537. v0/relationalai/early_access/lqp/__init__.py +0 -12
  538. v0/relationalai/early_access/lqp/compiler/__init__.py +0 -12
  539. v0/relationalai/early_access/lqp/constructors/__init__.py +0 -18
  540. v0/relationalai/early_access/lqp/executor/__init__.py +0 -12
  541. v0/relationalai/early_access/lqp/ir/__init__.py +0 -12
  542. v0/relationalai/early_access/lqp/passes/__init__.py +0 -12
  543. v0/relationalai/early_access/lqp/pragmas/__init__.py +0 -12
  544. v0/relationalai/early_access/lqp/primitives/__init__.py +0 -12
  545. v0/relationalai/early_access/lqp/types/__init__.py +0 -12
  546. v0/relationalai/early_access/lqp/utils/__init__.py +0 -12
  547. v0/relationalai/early_access/lqp/validators/__init__.py +0 -12
  548. v0/relationalai/early_access/metamodel/__init__.py +0 -58
  549. v0/relationalai/early_access/metamodel/builtins/__init__.py +0 -12
  550. v0/relationalai/early_access/metamodel/compiler/__init__.py +0 -12
  551. v0/relationalai/early_access/metamodel/dependency/__init__.py +0 -12
  552. v0/relationalai/early_access/metamodel/factory/__init__.py +0 -17
  553. v0/relationalai/early_access/metamodel/helpers/__init__.py +0 -12
  554. v0/relationalai/early_access/metamodel/ir/__init__.py +0 -14
  555. v0/relationalai/early_access/metamodel/rewrite/__init__.py +0 -7
  556. v0/relationalai/early_access/metamodel/typer/__init__.py +0 -3
  557. v0/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -12
  558. v0/relationalai/early_access/metamodel/types/__init__.py +0 -15
  559. v0/relationalai/early_access/metamodel/util/__init__.py +0 -15
  560. v0/relationalai/early_access/metamodel/visitor/__init__.py +0 -12
  561. v0/relationalai/early_access/rel/__init__.py +0 -12
  562. v0/relationalai/early_access/rel/executor/__init__.py +0 -12
  563. v0/relationalai/early_access/rel/rel_utils/__init__.py +0 -12
  564. v0/relationalai/early_access/rel/rewrite/__init__.py +0 -7
  565. v0/relationalai/early_access/solvers/__init__.py +0 -19
  566. v0/relationalai/early_access/sql/__init__.py +0 -11
  567. v0/relationalai/early_access/sql/executor/__init__.py +0 -3
  568. v0/relationalai/early_access/sql/rewrite/__init__.py +0 -3
  569. v0/relationalai/early_access/tests/logging/__init__.py +0 -12
  570. v0/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -12
  571. v0/relationalai/early_access/tests/utils/__init__.py +0 -12
  572. v0/relationalai/environments/__init__.py +0 -35
  573. v0/relationalai/environments/base.py +0 -381
  574. v0/relationalai/environments/colab.py +0 -14
  575. v0/relationalai/environments/generic.py +0 -71
  576. v0/relationalai/environments/ipython.py +0 -68
  577. v0/relationalai/environments/jupyter.py +0 -9
  578. v0/relationalai/environments/snowbook.py +0 -169
  579. v0/relationalai/errors.py +0 -2455
  580. v0/relationalai/experimental/SF.py +0 -38
  581. v0/relationalai/experimental/inspect.py +0 -47
  582. v0/relationalai/experimental/pathfinder/__init__.py +0 -158
  583. v0/relationalai/experimental/pathfinder/api.py +0 -160
  584. v0/relationalai/experimental/pathfinder/automaton.py +0 -584
  585. v0/relationalai/experimental/pathfinder/bridge.py +0 -226
  586. v0/relationalai/experimental/pathfinder/compiler.py +0 -416
  587. v0/relationalai/experimental/pathfinder/datalog.py +0 -214
  588. v0/relationalai/experimental/pathfinder/diagnostics.py +0 -56
  589. v0/relationalai/experimental/pathfinder/filter.py +0 -236
  590. v0/relationalai/experimental/pathfinder/glushkov.py +0 -439
  591. v0/relationalai/experimental/pathfinder/options.py +0 -265
  592. v0/relationalai/experimental/pathfinder/rpq.py +0 -344
  593. v0/relationalai/experimental/pathfinder/transition.py +0 -200
  594. v0/relationalai/experimental/pathfinder/utils.py +0 -26
  595. v0/relationalai/experimental/paths/api.py +0 -143
  596. v0/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -37
  597. v0/relationalai/experimental/paths/examples/basic_example.py +0 -40
  598. v0/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -3
  599. v0/relationalai/experimental/paths/examples/movie_example.py +0 -77
  600. v0/relationalai/experimental/paths/examples/paths_benchmark.py +0 -115
  601. v0/relationalai/experimental/paths/examples/paths_example.py +0 -116
  602. v0/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -28
  603. v0/relationalai/experimental/paths/find_paths_via_automaton.py +0 -85
  604. v0/relationalai/experimental/paths/graph.py +0 -185
  605. v0/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -280
  606. v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -26
  607. v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -111
  608. v0/relationalai/experimental/paths/path_algorithms/single.py +0 -59
  609. v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -39
  610. v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -103
  611. v0/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -130
  612. v0/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -183
  613. v0/relationalai/experimental/paths/path_algorithms/usp.py +0 -150
  614. v0/relationalai/experimental/paths/product_graph.py +0 -93
  615. v0/relationalai/experimental/paths/rpq/automaton.py +0 -584
  616. v0/relationalai/experimental/paths/rpq/diagnostics.py +0 -56
  617. v0/relationalai/experimental/paths/rpq/rpq.py +0 -378
  618. v0/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -90
  619. v0/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -119
  620. v0/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -104
  621. v0/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -113
  622. v0/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -149
  623. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -70
  624. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -64
  625. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -115
  626. v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -75
  627. v0/relationalai/experimental/paths/tests/tests_single_paths.py +0 -152
  628. v0/relationalai/experimental/paths/tests/tests_single_walks.py +0 -208
  629. v0/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -297
  630. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -107
  631. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -76
  632. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -76
  633. v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -110
  634. v0/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -229
  635. v0/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -108
  636. v0/relationalai/experimental/paths/tree_agg.py +0 -168
  637. v0/relationalai/experimental/paths/utilities/iterators.py +0 -27
  638. v0/relationalai/experimental/paths/utilities/prefix_sum.py +0 -91
  639. v0/relationalai/experimental/solvers.py +0 -1087
  640. v0/relationalai/loaders/csv.py +0 -195
  641. v0/relationalai/loaders/loader.py +0 -177
  642. v0/relationalai/loaders/types.py +0 -23
  643. v0/relationalai/rel_emitter.py +0 -373
  644. v0/relationalai/rel_utils.py +0 -185
  645. v0/relationalai/semantics/__init__.py +0 -29
  646. v0/relationalai/semantics/devtools/benchmark_lqp.py +0 -536
  647. v0/relationalai/semantics/devtools/compilation_manager.py +0 -294
  648. v0/relationalai/semantics/devtools/extract_lqp.py +0 -110
  649. v0/relationalai/semantics/internal/internal.py +0 -3785
  650. v0/relationalai/semantics/internal/snowflake.py +0 -324
  651. v0/relationalai/semantics/lqp/builtins.py +0 -16
  652. v0/relationalai/semantics/lqp/compiler.py +0 -22
  653. v0/relationalai/semantics/lqp/constructors.py +0 -68
  654. v0/relationalai/semantics/lqp/executor.py +0 -469
  655. v0/relationalai/semantics/lqp/intrinsics.py +0 -24
  656. v0/relationalai/semantics/lqp/model2lqp.py +0 -839
  657. v0/relationalai/semantics/lqp/passes.py +0 -680
  658. v0/relationalai/semantics/lqp/primitives.py +0 -252
  659. v0/relationalai/semantics/lqp/result_helpers.py +0 -202
  660. v0/relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -57
  661. v0/relationalai/semantics/lqp/rewrite/cdc.py +0 -216
  662. v0/relationalai/semantics/lqp/rewrite/extract_common.py +0 -338
  663. v0/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -449
  664. v0/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -114
  665. v0/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -314
  666. v0/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -296
  667. v0/relationalai/semantics/lqp/rewrite/splinter.py +0 -76
  668. v0/relationalai/semantics/lqp/types.py +0 -101
  669. v0/relationalai/semantics/lqp/utils.py +0 -160
  670. v0/relationalai/semantics/lqp/validators.py +0 -57
  671. v0/relationalai/semantics/metamodel/__init__.py +0 -40
  672. v0/relationalai/semantics/metamodel/builtins.py +0 -774
  673. v0/relationalai/semantics/metamodel/compiler.py +0 -133
  674. v0/relationalai/semantics/metamodel/dependency.py +0 -862
  675. v0/relationalai/semantics/metamodel/executor.py +0 -61
  676. v0/relationalai/semantics/metamodel/factory.py +0 -287
  677. v0/relationalai/semantics/metamodel/helpers.py +0 -361
  678. v0/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -39
  679. v0/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -210
  680. v0/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -78
  681. v0/relationalai/semantics/metamodel/rewrite/flatten.py +0 -549
  682. v0/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -165
  683. v0/relationalai/semantics/metamodel/typer/checker.py +0 -353
  684. v0/relationalai/semantics/metamodel/typer/typer.py +0 -1395
  685. v0/relationalai/semantics/metamodel/util.py +0 -505
  686. v0/relationalai/semantics/reasoners/__init__.py +0 -10
  687. v0/relationalai/semantics/reasoners/graph/__init__.py +0 -37
  688. v0/relationalai/semantics/reasoners/graph/core.py +0 -9020
  689. v0/relationalai/semantics/reasoners/optimization/__init__.py +0 -68
  690. v0/relationalai/semantics/reasoners/optimization/common.py +0 -88
  691. v0/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -568
  692. v0/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -1163
  693. v0/relationalai/semantics/rel/builtins.py +0 -40
  694. v0/relationalai/semantics/rel/compiler.py +0 -989
  695. v0/relationalai/semantics/rel/executor.py +0 -359
  696. v0/relationalai/semantics/rel/rel.py +0 -482
  697. v0/relationalai/semantics/rel/rel_utils.py +0 -276
  698. v0/relationalai/semantics/snowflake/__init__.py +0 -3
  699. v0/relationalai/semantics/sql/compiler.py +0 -2503
  700. v0/relationalai/semantics/sql/executor/duck_db.py +0 -52
  701. v0/relationalai/semantics/sql/executor/result_helpers.py +0 -64
  702. v0/relationalai/semantics/sql/executor/snowflake.py +0 -145
  703. v0/relationalai/semantics/sql/rewrite/denormalize.py +0 -222
  704. v0/relationalai/semantics/sql/rewrite/double_negation.py +0 -49
  705. v0/relationalai/semantics/sql/rewrite/recursive_union.py +0 -127
  706. v0/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -246
  707. v0/relationalai/semantics/sql/sql.py +0 -504
  708. v0/relationalai/semantics/std/__init__.py +0 -54
  709. v0/relationalai/semantics/std/constraints.py +0 -43
  710. v0/relationalai/semantics/std/datetime.py +0 -363
  711. v0/relationalai/semantics/std/decimals.py +0 -62
  712. v0/relationalai/semantics/std/floats.py +0 -7
  713. v0/relationalai/semantics/std/integers.py +0 -22
  714. v0/relationalai/semantics/std/math.py +0 -141
  715. v0/relationalai/semantics/std/pragmas.py +0 -11
  716. v0/relationalai/semantics/std/re.py +0 -83
  717. v0/relationalai/semantics/std/std.py +0 -14
  718. v0/relationalai/semantics/std/strings.py +0 -63
  719. v0/relationalai/semantics/tests/__init__.py +0 -0
  720. v0/relationalai/semantics/tests/test_snapshot_abstract.py +0 -143
  721. v0/relationalai/semantics/tests/test_snapshot_base.py +0 -9
  722. v0/relationalai/semantics/tests/utils.py +0 -46
  723. v0/relationalai/std/__init__.py +0 -70
  724. v0/relationalai/tools/__init__.py +0 -0
  725. v0/relationalai/tools/cli.py +0 -1940
  726. v0/relationalai/tools/cli_controls.py +0 -1826
  727. v0/relationalai/tools/cli_helpers.py +0 -390
  728. v0/relationalai/tools/debugger.py +0 -183
  729. v0/relationalai/tools/debugger_client.py +0 -109
  730. v0/relationalai/tools/debugger_server.py +0 -302
  731. v0/relationalai/tools/dev.py +0 -685
  732. v0/relationalai/tools/qb_debugger.py +0 -425
  733. v0/relationalai/util/clean_up_databases.py +0 -95
  734. v0/relationalai/util/format.py +0 -123
  735. v0/relationalai/util/list_databases.py +0 -9
  736. v0/relationalai/util/otel_configuration.py +0 -25
  737. v0/relationalai/util/otel_handler.py +0 -484
  738. v0/relationalai/util/snowflake_handler.py +0 -88
  739. v0/relationalai/util/span_format_test.py +0 -43
  740. v0/relationalai/util/span_tracker.py +0 -207
  741. v0/relationalai/util/spans_file_handler.py +0 -72
  742. v0/relationalai/util/tracing_handler.py +0 -34
  743. /relationalai/{semantics/frontend → analysis}/__init__.py +0 -0
  744. {v0/relationalai → relationalai}/analysis/mechanistic.py +0 -0
  745. {v0/relationalai → relationalai}/analysis/whynot.py +0 -0
  746. /relationalai/{shims → auth}/__init__.py +0 -0
  747. {v0/relationalai → relationalai}/auth/jwt_generator.py +0 -0
  748. {v0/relationalai → relationalai}/auth/oauth_callback_server.py +0 -0
  749. {v0/relationalai → relationalai}/auth/token_handler.py +0 -0
  750. {v0/relationalai → relationalai}/auth/util.py +0 -0
  751. {v0/relationalai/clients → relationalai/clients/resources/snowflake}/cache_store.py +0 -0
  752. {v0/relationalai → relationalai}/compiler.py +0 -0
  753. {v0/relationalai → relationalai}/dependencies.py +0 -0
  754. {v0/relationalai → relationalai}/docutils.py +0 -0
  755. {v0/relationalai/analysis → relationalai/early_access}/__init__.py +0 -0
  756. {v0/relationalai → relationalai}/early_access/dsl/__init__.py +0 -0
  757. {v0/relationalai/auth → relationalai/early_access/dsl/adapters}/__init__.py +0 -0
  758. {v0/relationalai/early_access → relationalai/early_access/dsl/adapters/orm}/__init__.py +0 -0
  759. {v0/relationalai → relationalai}/early_access/dsl/adapters/orm/model.py +0 -0
  760. {v0/relationalai/early_access/dsl/adapters → relationalai/early_access/dsl/adapters/owl}/__init__.py +0 -0
  761. {v0/relationalai → relationalai}/early_access/dsl/adapters/owl/model.py +0 -0
  762. {v0/relationalai/early_access/dsl/adapters/orm → relationalai/early_access/dsl/bindings}/__init__.py +0 -0
  763. {v0/relationalai/early_access/dsl/adapters/owl → relationalai/early_access/dsl/bindings/legacy}/__init__.py +0 -0
  764. {v0/relationalai/early_access/dsl/bindings → relationalai/early_access/dsl/codegen}/__init__.py +0 -0
  765. {v0/relationalai → relationalai}/early_access/dsl/constants.py +0 -0
  766. {v0/relationalai → relationalai}/early_access/dsl/core/__init__.py +0 -0
  767. {v0/relationalai → relationalai}/early_access/dsl/core/constraints/__init__.py +0 -0
  768. {v0/relationalai → relationalai}/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  769. {v0/relationalai → relationalai}/early_access/dsl/core/stack.py +0 -0
  770. {v0/relationalai/early_access/dsl/bindings/legacy → relationalai/early_access/dsl/core/temporal}/__init__.py +0 -0
  771. {v0/relationalai → relationalai}/early_access/dsl/core/utils.py +0 -0
  772. {v0/relationalai/early_access/dsl/codegen → relationalai/early_access/dsl/ir}/__init__.py +0 -0
  773. {v0/relationalai/early_access/dsl/core/temporal → relationalai/early_access/dsl/ontologies}/__init__.py +0 -0
  774. {v0/relationalai → relationalai}/early_access/dsl/ontologies/raw_source.py +0 -0
  775. {v0/relationalai/early_access/dsl/ir → relationalai/early_access/dsl/orm}/__init__.py +0 -0
  776. {v0/relationalai/early_access/dsl/ontologies → relationalai/early_access/dsl/orm/measures}/__init__.py +0 -0
  777. {v0/relationalai → relationalai}/early_access/dsl/orm/reasoner_errors.py +0 -0
  778. {v0/relationalai/early_access/dsl/orm → relationalai/early_access/dsl/physical_metadata}/__init__.py +0 -0
  779. {v0/relationalai/early_access/dsl/orm/measures → relationalai/early_access/dsl/serialize}/__init__.py +0 -0
  780. {v0/relationalai → relationalai}/early_access/dsl/serialize/binding_model.py +0 -0
  781. {v0/relationalai → relationalai}/early_access/dsl/serialize/model.py +0 -0
  782. {v0/relationalai/early_access/dsl/physical_metadata → relationalai/early_access/dsl/snow}/__init__.py +0 -0
  783. {v0/relationalai → relationalai}/early_access/tests/__init__.py +0 -0
  784. {v0/relationalai → relationalai}/environments/ci.py +0 -0
  785. {v0/relationalai → relationalai}/environments/hex.py +0 -0
  786. {v0/relationalai → relationalai}/environments/terminal.py +0 -0
  787. {v0/relationalai → relationalai}/experimental/__init__.py +0 -0
  788. {v0/relationalai → relationalai}/experimental/graphs.py +0 -0
  789. {v0/relationalai → relationalai}/experimental/paths/__init__.py +0 -0
  790. {v0/relationalai → relationalai}/experimental/paths/benchmarks/__init__.py +0 -0
  791. {v0/relationalai → relationalai}/experimental/paths/path_algorithms/__init__.py +0 -0
  792. {v0/relationalai → relationalai}/experimental/paths/rpq/__init__.py +0 -0
  793. {v0/relationalai → relationalai}/experimental/paths/rpq/filter.py +0 -0
  794. {v0/relationalai → relationalai}/experimental/paths/rpq/glushkov.py +0 -0
  795. {v0/relationalai → relationalai}/experimental/paths/rpq/transition.py +0 -0
  796. {v0/relationalai → relationalai}/experimental/paths/utilities/__init__.py +0 -0
  797. {v0/relationalai → relationalai}/experimental/paths/utilities/utilities.py +0 -0
  798. {v0/relationalai/early_access/dsl/serialize → relationalai/loaders}/__init__.py +0 -0
  799. {v0/relationalai → relationalai}/metagen.py +0 -0
  800. {v0/relationalai → relationalai}/metamodel.py +0 -0
  801. {v0/relationalai → relationalai}/rel.py +0 -0
  802. {v0/relationalai → relationalai}/semantics/devtools/__init__.py +0 -0
  803. {v0/relationalai → relationalai}/semantics/internal/__init__.py +0 -0
  804. {v0/relationalai → relationalai}/semantics/internal/annotations.py +0 -0
  805. {v0/relationalai → relationalai}/semantics/lqp/__init__.py +0 -0
  806. {v0/relationalai → relationalai}/semantics/lqp/ir.py +0 -0
  807. {v0/relationalai → relationalai}/semantics/lqp/pragmas.py +0 -0
  808. {v0/relationalai → relationalai}/semantics/lqp/rewrite/__init__.py +0 -0
  809. {v0/relationalai → relationalai}/semantics/metamodel/dataflow.py +0 -0
  810. {v0/relationalai → relationalai}/semantics/metamodel/ir.py +0 -0
  811. {v0/relationalai → relationalai}/semantics/metamodel/rewrite/__init__.py +0 -0
  812. {v0/relationalai → relationalai}/semantics/metamodel/typer/__init__.py +0 -0
  813. {v0/relationalai → relationalai}/semantics/metamodel/types.py +0 -0
  814. {v0/relationalai → relationalai}/semantics/metamodel/visitor.py +0 -0
  815. {v0/relationalai → relationalai}/semantics/reasoners/experimental/__init__.py +0 -0
  816. {v0/relationalai → relationalai}/semantics/rel/__init__.py +0 -0
  817. {v0/relationalai → relationalai}/semantics/sql/__init__.py +0 -0
  818. {v0/relationalai → relationalai}/semantics/sql/executor/__init__.py +0 -0
  819. {v0/relationalai → relationalai}/semantics/sql/rewrite/__init__.py +0 -0
  820. {v0/relationalai/early_access/dsl/snow → relationalai/semantics/tests}/__init__.py +0 -0
  821. {v0/relationalai → relationalai}/semantics/tests/logging.py +0 -0
  822. {v0/relationalai → relationalai}/std/aggregates.py +0 -0
  823. {v0/relationalai → relationalai}/std/dates.py +0 -0
  824. {v0/relationalai → relationalai}/std/graphs.py +0 -0
  825. {v0/relationalai → relationalai}/std/inspect.py +0 -0
  826. {v0/relationalai → relationalai}/std/math.py +0 -0
  827. {v0/relationalai → relationalai}/std/re.py +0 -0
  828. {v0/relationalai → relationalai}/std/strings.py +0 -0
  829. {v0/relationalai/loaders → relationalai/tools}/__init__.py +0 -0
  830. {v0/relationalai → relationalai}/tools/cleanup_snapshots.py +0 -0
  831. {v0/relationalai → relationalai}/tools/constants.py +0 -0
  832. {v0/relationalai → relationalai}/tools/query_utils.py +0 -0
  833. {v0/relationalai → relationalai}/tools/snapshot_viewer.py +0 -0
  834. {v0/relationalai → relationalai}/util/__init__.py +0 -0
  835. {v0/relationalai → relationalai}/util/constants.py +0 -0
  836. {v0/relationalai → relationalai}/util/graph.py +0 -0
  837. {v0/relationalai → relationalai}/util/timeout.py +0 -0
@@ -0,0 +1,256 @@
1
+ from __future__ import annotations
2
+
3
+ from collections import OrderedDict
4
+ from typing import Optional, Any, Sequence, Union, TypeVar
5
+
6
+ import relationalai.semantics as qb
7
+ from relationalai.semantics.std import constraints as c
8
+ from relationalai import Config
9
+ from relationalai.early_access.dsl.bindings.common import Binding
10
+ from relationalai.early_access.dsl.bindings.csv import CsvTable
11
+ from relationalai.early_access.dsl.bindings.snowflake import SnowflakeTable
12
+ from relationalai.early_access.dsl.codegen.weaver import Weaver
13
+ from relationalai.early_access.dsl.core.utils import generate_stable_uuid, to_pascal_case
14
+ from relationalai.early_access.dsl.orm.constraints import Unique, Mandatory, RoleValueConstraint, Range, \
15
+ ExclusiveSubtypeConstraint, InclusiveSubtypeConstraint, InclusiveRoleConstraint, ExclusiveRoleConstraint, \
16
+ RingConstraint, ValueComparisonConstraint, RoleSubsetConstraint, EqualityConstraint, FrequencyConstraint, \
17
+ CardinalityConstraint, RoleCardinalityConstraint, ValueConstraint
18
+ from relationalai.early_access.dsl.orm.reasoners import OntologyReasoner
19
+ from relationalai.early_access.dsl.orm.relationships import Relationship, Role, RelationshipReading
20
+ from relationalai.early_access.dsl.orm.types import Concept
21
+ from relationalai.early_access.dsl.snow.api import Executor
22
+ from relationalai.semantics.metamodel.util import OrderedSet
23
+
24
+ T = TypeVar('T', int, float, str)
25
+
26
+ class Model:
27
+ def __init__(
28
+ self,
29
+ name: str,
30
+ is_primary: bool = True,
31
+ dry_run: bool = False,
32
+ use_lqp: bool | None = None,
33
+ use_sql: bool = False,
34
+ wide_outputs: bool = False,
35
+ config: Optional[Config] = None
36
+ ):
37
+ self.name = name
38
+ self._qb_model = qb.Model(name, dry_run=dry_run, strict=True, config=config, use_lqp=use_lqp, use_sql=use_sql, wide_outputs=wide_outputs)
39
+ self.is_primary = is_primary
40
+ self._constraints = OrderedSet()
41
+ self._entity_to_id_relationship = OrderedDict()
42
+ self._bindable_tables = OrderedDict()
43
+ self._relationship_iuc: dict[qb.Relationship, list[Unique]] = {}
44
+ self._bindings = []
45
+ self._executor = None
46
+ self._reasoner = OntologyReasoner()
47
+ self._weaver = None
48
+ self._queries = OrderedSet()
49
+ self.Enum = self._qb_model.Enum
50
+
51
+ def guid(self):
52
+ return generate_stable_uuid(self.name)
53
+
54
+ def Concept(self, name: str, extends: list[Any] = [], identify_by:dict[str, Any]={}) -> Concept:
55
+ name = to_pascal_case(name)
56
+ return Concept(self, name, extends, identify_by)
57
+
58
+ def qb_model(self):
59
+ return self._qb_model
60
+
61
+ def reasoner(self):
62
+ return self._reasoner
63
+
64
+ def Relationship(self, reading: Any, short_name:str="") -> qb.Relationship:
65
+ """
66
+ Create a new relationship with the given reading.
67
+ """
68
+ return Relationship(self, reading, short_name=short_name)
69
+
70
+ def constraint(self, constraint):
71
+ # Generic constraint addition with validation
72
+ self._constraints.add(constraint)
73
+ self._reasoner.new_constraint(constraint)
74
+ constraint._desugar()
75
+
76
+ def unique(self, *roles):
77
+ uc = Unique(*roles)
78
+ self.constraint(uc)
79
+ c.unique(*roles)
80
+ first_part_of = roles[0]._part_of()
81
+ if isinstance(first_part_of, RelationshipReading):
82
+ relationship = first_part_of._alt_of
83
+ else:
84
+ relationship = first_part_of
85
+ # check if UC is internal
86
+ if all(role._part_of()._id == first_part_of._id for role in roles):
87
+ internal_ucs = self._relationship_iuc.get(relationship, [])
88
+ internal_ucs.append(uc)
89
+ self._relationship_iuc[relationship] = internal_ucs # todo: this logic should be part of reactive reasoner
90
+
91
+ def mandatory(self, role):
92
+ self.constraint(Mandatory(role))
93
+
94
+ def inclusive_roles(self, *roles):
95
+ self.constraint(InclusiveRoleConstraint(*roles))
96
+
97
+ def exclusive_roles(self, *role_sequences):
98
+ self.constraint(ExclusiveRoleConstraint(*role_sequences))
99
+
100
+ def ring(self, constraint_types, *roles):
101
+ self.constraint(RingConstraint(constraint_types, *roles))
102
+
103
+ def value_comparison(self, constraint_type, *roles):
104
+ self.constraint(ValueComparisonConstraint(constraint_type, *roles))
105
+
106
+ def role_subset(self, *role_sequences):
107
+ self.constraint(RoleSubsetConstraint(*role_sequences))
108
+
109
+ def equality(self, *role_sequences):
110
+ self.constraint(EqualityConstraint(*role_sequences))
111
+
112
+ def frequency(self, frequency, *role_sequences):
113
+ self.constraint(FrequencyConstraint(frequency, *role_sequences))
114
+
115
+ def cardinality(self, concept: Concept, values: Sequence[Union[int, Range[int]]]):
116
+ self.constraint(CardinalityConstraint(concept, values))
117
+
118
+ def role_cardinality(self, role: Role, values: Sequence[Union[int, Range[int]]]):
119
+ self.constraint(RoleCardinalityConstraint(role, values))
120
+
121
+ def value_constraint(self, concept: Concept, values: Sequence[Union[T, Range[T]]]):
122
+ self.constraint(ValueConstraint(concept, values))
123
+
124
+ def role_value_constraint(self, role: Role, values: Sequence[Union[T, Range[T]]]):
125
+ # TODO: check if a role value constraint is incompatible with an existing value constraint
126
+ first_type = values[0]._type() if isinstance(values[0], Range) else type(values[0])
127
+ for v in values[1:]:
128
+ t = v._type() if isinstance(v, Range) else type(v)
129
+ if t != first_type:
130
+ raise Exception("Values for role value constraint must have the same type.")
131
+ if role.player()._is_primitive() or role.player()._is_value_type():
132
+ self.constraint(RoleValueConstraint(role, values))
133
+ else:
134
+ raise Exception("A role value constraint can only be applied to roles played by value types")
135
+
136
+ def exclusive_subtype_constraint(self, *concepts:Concept):
137
+ self.constraint(ExclusiveSubtypeConstraint(*concepts))
138
+
139
+ def inclusive_subtype_constraint(self, *concepts:Concept):
140
+ self.constraint(InclusiveSubtypeConstraint(*concepts))
141
+
142
+ def _add_concept(self, concept: Concept) -> Concept:
143
+ self._validate_type_name(concept._name)
144
+ if concept._name not in self.qb_model().concepts:
145
+ self.qb_model().concepts[concept._name] = [concept]
146
+ return concept
147
+
148
+ def _ref_scheme_constraints(self, *relations:Relationship):
149
+ if len(relations) == 1:
150
+ # binary case, internal UC
151
+ role = relations[0][1]
152
+ self._internal_preferred_uc(role)
153
+ else:
154
+ roles = [rel[1] for rel in relations]
155
+ self._composite_preferred_uc(*roles)
156
+
157
+ def _internal_preferred_uc(self, role):
158
+ rel = role._part_of()
159
+ if rel._arity() != 2:
160
+ raise Exception("The relationship should be binary to apply preferred identifier constraint")
161
+ # mark the role as preferred identifier
162
+ self.constraint(Unique(role, is_preferred_identifier=True))
163
+ # mark the sibling role as mandatory and unique
164
+ sibling = role.sibling()
165
+ self.mandatory(sibling)
166
+ self.unique(sibling)
167
+
168
+ def _composite_preferred_uc(self, *roles):
169
+ for role in roles:
170
+ sibling = role.sibling()
171
+ if not sibling:
172
+ raise Exception("Composite preferred identifier constraint should be applied on binary relationships")
173
+ self.mandatory(sibling)
174
+ self.unique(sibling)
175
+ self.constraint(Unique(*roles, is_preferred_identifier=True))
176
+
177
+ def lookup_concept(self, name) -> Optional[qb.Concept]:
178
+ name = to_pascal_case(name)
179
+ if name in self._qb_model.concepts:
180
+ return self._qb_model.concepts[name][0]
181
+ return None
182
+
183
+ def constraints(self):
184
+ """Getter for the _constraints property"""
185
+ return self._constraints
186
+
187
+ def queries(self):
188
+ return self._queries
189
+
190
+ def concepts(self):
191
+ c = list()
192
+ for concepts in self._qb_model.concepts.values():
193
+ c.append(concepts[0])
194
+ return c
195
+
196
+ def concepts_map(self):
197
+ d = dict()
198
+ for k, v in self._qb_model.concepts.items():
199
+ d[k] = v[0]
200
+ return d
201
+
202
+ def enums(self):
203
+ return list(self._qb_model.enums.values())
204
+
205
+ def enums_map(self):
206
+ return self._qb_model.enums
207
+
208
+ def value_types(self):
209
+ return list(filter(lambda c: c._is_primitive(), self.concepts()))
210
+
211
+ def value_types_map(self):
212
+ return dict(filter(lambda item: item[1]._is_primitive(), self.concepts_map().items()))
213
+
214
+ def entity_types(self):
215
+ return list(filter(lambda c: not c._is_primitive(), self.concepts()))
216
+
217
+ def entity_types_map(self):
218
+ return dict(filter(lambda item: not item[1]._is_primitive(), self.concepts_map().items()))
219
+
220
+ def relationships(self):
221
+ return self._qb_model.relationships
222
+
223
+ def bindable_tables(self):
224
+ return self._bindable_tables
225
+
226
+ def api(self):
227
+ self._executor = self._executor or Executor(self._qb_model._config)
228
+ return self._executor
229
+
230
+ def table(self, name: str, schema:dict[str, str|qb.Concept]|None=None) -> SnowflakeTable:
231
+ table = SnowflakeTable(name, self, schema=schema)
232
+ self._bindable_tables[name] = table
233
+ return table
234
+
235
+ def csv_table(self, name: str, schema: dict[str, qb.Concept]) -> CsvTable:
236
+ table = CsvTable(name, schema, self)
237
+ self._bindable_tables[name] = table
238
+ return table
239
+
240
+ def binding(self, binding: Binding):
241
+ self._bindings.append(binding)
242
+
243
+ def generate_model_rules(self, config: Optional[dict]=None):
244
+ if self._weaver is None:
245
+ self._weaver = Weaver(self, config)
246
+ else:
247
+ raise Exception("Model rules have already been generated.")
248
+ self._weaver.generate()
249
+
250
+ def delete(self):
251
+ self.api().provider().delete_model(self.name)
252
+
253
+ def _validate_type_name(self, name):
254
+ if name in self._qb_model.concepts:
255
+ raise Exception(
256
+ f"The name '{name}' is used to declare a Concept.")
@@ -0,0 +1,344 @@
1
+ import typing
2
+
3
+ from relationalai.early_access.dsl.orm.printer import Printer, _sort_dependency_graph, InterfacePrinter
4
+ from relationalai.early_access.dsl.orm.models import Model
5
+ from relationalai.early_access.dsl.orm.types import Concept
6
+
7
+ SPACE_INDENT = " "
8
+ TAB_INDENT = "\t"
9
+
10
+ class ObjectOrientedPrinter(Printer):
11
+ _indent: str
12
+
13
+ def __init__(self, io: typing.Optional[typing.IO[str]] = None, space_indent: bool= False):
14
+ super().__init__(io)
15
+ object.__setattr__(self, '_indent', SPACE_INDENT if space_indent else TAB_INDENT)
16
+
17
+ def to_string(self, model: Model, enums_enabled: bool = False, pyi_enabled: bool = False) -> None:
18
+ self._process_constraints(model)
19
+
20
+ self._print_nl("from typing import Any, Sequence, Union, TypeVar")
21
+ self._print_nl("import relationalai.semantics.internal as qb")
22
+ self._print_nl("import relationalai.semantics.internal.internal as builder")
23
+ self._print_nl("from relationalai.early_access.dsl.orm.models import Model")
24
+ if pyi_enabled:
25
+ self._print_nl("from relationalai.early_access.dsl.orm.models import Concept")
26
+ self._print_nl("from relationalai.early_access.dsl.orm.relationships import Role")
27
+ self._print_nl("from relationalai.early_access.dsl.orm.constraints import Range")
28
+ self._print_nl("from relationalai.early_access.dsl.orm.constraints import RingType")
29
+ self._print_nl("from relationalai.early_access.dsl.orm.constraints import ValueComparisonType")
30
+ self._nl()
31
+
32
+ self._handle_concepts_declaration(model, enums_enabled, pyi_enabled)
33
+ self._nl()
34
+ self._print_nl("class OntologyBase:\n"
35
+ f'{self._indent}"""Represents an Ontology."""')
36
+ self._nl()
37
+ self._print_nl(f"{self._indent}def __init__(self, model: Model):\n"
38
+ f"{self._indent}{self._indent}self.model = model")
39
+ self._nl()
40
+ self._print_nl(f"{self._indent}def generate_model_rules(self):\n"
41
+ f"{self._indent}{self._indent}self.model.generate_model_rules()")
42
+ self._nl()
43
+ if not pyi_enabled:
44
+ self._print_nl(f"{self._indent}def Concept(self, name: str, extends: list[Any] = [], identify_by:dict[str, Any]={{}}):\n"
45
+ f"{self._indent}{self._indent}return self.model.Concept(name, extends, identify_by)")
46
+ if enums_enabled:
47
+ self._print_nl(f"{self._indent}def Enum(self):\n"
48
+ f"{self._indent}{self._indent}return self.model.Enum()")
49
+ self._print_nl(f"{self._indent}def Relationship(self, reading: Any, short_name:str=\"\") -> qb.Relationship:\n"
50
+ f"{self._indent}{self._indent}return self.model.Relationship(reading, short_name)")
51
+ self._print_nl(f"{self._indent}def Unique(self, *roles):\n"
52
+ f"{self._indent}{self._indent}self.model.unique(*roles)")
53
+ self._print_nl(f"{self._indent}def Mandatory(self, role):\n"
54
+ f"{self._indent}{self._indent}self.model.mandatory(role)")
55
+ self._print_nl(f"{self._indent}T = TypeVar('T', int, float, str)")
56
+ self._print_nl(f"{self._indent}def RoleValueConstraint(self, role: Role, values: Sequence[Union[T, Range[T]]]):\n"
57
+ f"{self._indent}{self._indent}self.model.role_value_constraint(role, values)")
58
+ self._print_nl(f"{self._indent}def InclusiveSubtypeConstraint(self, *concepts: Concept):\n"
59
+ f"{self._indent}{self._indent}self.model.inclusive_subtype_constraint(*concepts)")
60
+ self._print_nl(f"{self._indent}def ExclusiveSubtypeConstraint(self, *concepts: Concept):\n"
61
+ f"{self._indent}{self._indent}self.model.exclusive_subtype_constraint(*concepts)")
62
+ self._print_nl(f"{self._indent}def InclusiveRoleConstraint(self, *roles):\n"
63
+ f"{self._indent}{self._indent}self.model.inclusive_roles(*roles)")
64
+ self._print_nl(f"{self._indent}def ExclusiveRoleConstraint(self, *role_sequences):\n"
65
+ f"{self._indent}{self._indent}self.model.exclusive_roles(*role_sequences)")
66
+ self._print_nl(f"{self._indent}def RingConstraint(self, *roles):\n"
67
+ f"{self._indent}{self._indent}self.model.ring(*roles)")
68
+ self._print_nl(f"{self._indent}def ValueComparisonConstraint(self, constraint_type, *roles):\n"
69
+ f"{self._indent}{self._indent}self.model.value_comparison(constraint_type, *roles)")
70
+ self._print_nl(f"{self._indent}def RoleSubsetConstraint(self, *role_sequences):\n"
71
+ f"{self._indent}{self._indent}self.model.role_subset(*role_sequences)")
72
+ self._print_nl(f"{self._indent}def EqualityConstraint(self, *role_sequences):\n"
73
+ f"{self._indent}{self._indent}self.model.equality(*role_sequences)")
74
+ self._print_nl(f"{self._indent}def FrequencyConstraint(self, frequency, *role_sequences):\n"
75
+ f"{self._indent}{self._indent}self.model.frequency(frequency, *role_sequences)")
76
+ self._print_nl(
77
+ f"{self._indent}def CardinalityConstraint(self, concept: Concept, values: Sequence[Union[int, Range[int]]]):\n"
78
+ f"{self._indent}{self._indent}self.model.cardinality(concept, values)")
79
+ self._print_nl(f"{self._indent}def RoleCardinalityConstraint(self, role: Role, values: Sequence[Union[int, Range[int]]]):\n"
80
+ f"{self._indent}{self._indent}self.model.role_cardinality(role, values)")
81
+ self._print_nl(f"{self._indent}def ValueConstraint(self, concept: Concept, values: Sequence[Union[T, Range[T]]]):\n"
82
+ f"{self._indent}{self._indent}self.model.value_constraint(concept, values)")
83
+
84
+ self._nl()
85
+ self._print_nl("class ORMOntology(OntologyBase):")
86
+ self._print_nl(f'{self._indent}"""Represents an Ontology generated from an ORM file."""')
87
+ self._nl()
88
+ self._print_nl(f"{self._indent}def __init__(self, model: Model):")
89
+ self._print_nl(f"{self._indent}{self._indent}super().__init__(model)")
90
+ self._nl()
91
+ self._handle_concepts(model, enums_enabled, pyi_enabled)
92
+ self._nl()
93
+ self._handle_relationships(model)
94
+
95
+ self._nl()
96
+ self._handle_ref_schemes(model)
97
+
98
+ if self._unique_constraints:
99
+ self._nl()
100
+ self._handle_uniqueness_constraints()
101
+
102
+ if self._mandatory_constraints:
103
+ self._nl()
104
+ self._handle_mandatory_constraints()
105
+
106
+ if self._role_value_constraints:
107
+ self._nl()
108
+ self._handle_role_value_constraints()
109
+
110
+ if self._inclusive_subtype_constraints or self._exclusive_subtype_constraints:
111
+ self._nl()
112
+ self._handle_subtype_constraints()
113
+
114
+ if self._inclusive_role_constraints:
115
+ self._nl()
116
+ self._handle_inclusive_role_constraints()
117
+
118
+ if self._exclusive_role_constraints:
119
+ self._nl()
120
+ self._handle_exclusive_role_constraints()
121
+
122
+ if self._ring_constraints:
123
+ self._nl()
124
+ self._handle_ring_constraints()
125
+
126
+ if self._value_comparison_constraints:
127
+ self._nl()
128
+ self._handle_value_comparison_constraints()
129
+
130
+ if self._role_subset_constraints:
131
+ self._nl()
132
+ self._handle_role_subset_constraints()
133
+
134
+ if self._equality_constraints:
135
+ self._nl()
136
+ self._handle_equality_constraints()
137
+
138
+ if self._frequency_constraints:
139
+ self._nl()
140
+ self._handle_frequency_constraints()
141
+
142
+ if self._cardinality_constraints:
143
+ self._nl()
144
+ self._handle_cardinality_constraints()
145
+
146
+ if self._role_cardinality_constraints:
147
+ self._nl()
148
+ self._handle_role_cardinality_constraints()
149
+
150
+ if self._value_constraints:
151
+ self._nl()
152
+ self._handle_value_constraints()
153
+
154
+ def _handle_concepts_declaration(self, model: Model, enums_enabled: bool, pyi_enabled: bool) -> None:
155
+ concepts_map = model.concepts_map()
156
+ sorted_concepts = _sort_dependency_graph(model.concepts())
157
+ # print Concept classes
158
+ if pyi_enabled:
159
+ for name in sorted_concepts:
160
+ c = concepts_map.get(name)
161
+ if c is None:
162
+ raise ValueError(f"The concept '{name}' was not declared but used as concept domain.")
163
+ # skip enums when they are enabled for printer
164
+ if c._is_enum() and enums_enabled:
165
+ continue
166
+ extends = [f"{e._name}Concept" for e in c._extends if not e._is_primitive()]
167
+ self._print_nl(f"class {name}Concept({', '.join(extends) if extends else 'Concept'}):")
168
+ self._print_nl(f'{self._indent}"""Represents {name} concept."""')
169
+ self._nl()
170
+
171
+ def _handle_concepts(self, model: Model, enums_enabled: bool, pyi_enabled: bool) -> None:
172
+ concepts_map = model.concepts_map()
173
+ enums_map = model.enums_map()
174
+ sorted_concepts = _sort_dependency_graph(model.concepts())
175
+ for name in sorted_concepts:
176
+ c = concepts_map.get(name)
177
+ if c is None:
178
+ raise ValueError(f"The concept '{name}' was not declared but used as concept domain.")
179
+ if enums_enabled and c._is_enum():
180
+ self._print_nl(f"{self._indent}{self._indent}self.{name} = model.Enum('{name}', {[e.name for e in enums_map[name]]})")
181
+ else:
182
+ extends = c._extends
183
+ if not enums_enabled and c._is_enum():
184
+ # todo: derive enum type
185
+ # ORM adapter produces only string enums
186
+ extends_elements = ["qb.String"]
187
+ else:
188
+ extends_elements = [f"self.{self._get_type(ext)}" if not self._get_type(ext).startswith(
189
+ "qb.") and not self._get_type(ext).startswith("builder.") else self._get_type(ext) for ext in
190
+ extends]
191
+ extends_str = f", extends=[{', '.join(extends_elements)}]" if extends else ""
192
+ concept_class = name + 'Concept' if pyi_enabled else 'model.Concept'
193
+ params = f"({'model, ' if pyi_enabled else ''}'{name}'{extends_str})"
194
+ self._print_nl(f"{self._indent}{self._indent}self.{name} = {concept_class}{params}")
195
+
196
+ def _handle_relationships(self, model: Model) -> None:
197
+ for rel in model.relationships():
198
+ # skip autogenerated 'name' Relationship for Enums
199
+ if rel._name == 'name' and rel._parent is not None and rel._parent._is_enum():
200
+ continue
201
+ # print a root Relationship
202
+ self._print_nl(f"{self._indent}{self._indent}self.{self._get_relationship_name(rel)} = "
203
+ f"model.Relationship('{rel._madlib}'{self._print_if_not_empty_and_not_equal('short_name', rel._passed_short_name, rel._name)})")
204
+
205
+ # print remaining RelationshipReadings if any
206
+ for r in rel._readings[1:]:
207
+ self._print_nl(f"{self._indent}{self._indent}self.{self._get_relationship_name(r)} = "
208
+ f"self.{self._get_relationship_name(rel)}.alt('{r._madlib}'{self._print_if_not_empty_and_not_equal('short_name', r._passed_short_name, r._name)})")
209
+
210
+ def _handle_ref_schemes(self, model: Model) -> None:
211
+ for concept_name, concept in model.entity_types_map().items():
212
+ if not isinstance(concept, Concept) or not concept._reference_schemes:
213
+ continue
214
+
215
+ for ref_scheme in concept._reference_schemes:
216
+ rel_names = [f"self.{self._get_relationship_name(rel)}" for rel in ref_scheme]
217
+ self._print_nl(f"{self._indent}{self._indent}self.{concept_name}.identify_by({', '.join(rel_names)})")
218
+
219
+ def _handle_uniqueness_constraints(self) -> None:
220
+ for constraint in self._unique_constraints:
221
+ if not constraint.is_preferred_identifier:
222
+ elements = [f"self.{self._get_role_name(role)}" for role in constraint.roles()]
223
+ self._print_nl(f"{self._indent}{self._indent}self.Unique({', '.join(elements)})")
224
+
225
+ def _handle_mandatory_constraints(self):
226
+ for constraint in self._mandatory_constraints:
227
+ role = constraint.roles()[0]
228
+ role_name = self._get_role_name(role)
229
+ self._print_nl(f"{self._indent}{self._indent}self.Mandatory(self.{role_name})")
230
+
231
+ def _handle_role_value_constraints(self) -> None:
232
+ for constraint in self._role_value_constraints:
233
+ role = constraint.roles()[0]
234
+ elements = self._get_constraint_values(constraint)
235
+ role_name = f"self.{self._get_role_name(role)}"
236
+ self._print_nl(f"{self._indent}{self._indent}self.RoleValueConstraint({role_name}, [{', '.join(elements)}])")
237
+
238
+ def _handle_inclusive_role_constraints(self):
239
+ for constraint in self._inclusive_role_constraints:
240
+ roles = [f"self.{self._get_role_name(r)}" for r in constraint.roles()]
241
+ self._print_nl(f"{self._indent}{self._indent}self.InclusiveRoleConstraint({', '.join(roles)})")
242
+
243
+ def _handle_exclusive_role_constraints(self):
244
+ self._emit_role_sequence_constraints(self._exclusive_role_constraints, "ExclusiveRoleConstraint")
245
+
246
+ def _handle_ring_constraints(self):
247
+ for constraint in self._ring_constraints:
248
+ elements = [f"self.{self._get_role_name(role)}" for role in constraint.roles()]
249
+ cst_types = [f"{tp}" for tp in constraint.types]
250
+ self._print_nl(f"{self._indent}{self._indent}self.RingConstraint([{', '.join(cst_types)}], {', '.join(elements)})")
251
+
252
+ def _handle_value_comparison_constraints(self):
253
+ for constraint in self._value_comparison_constraints:
254
+ elements = [f"self.{self._get_role_name(role)}" for role in constraint.roles()]
255
+ self._print_nl(f"{self._indent}{self._indent}self.ValueComparisonConstraint({constraint.type}, {', '.join(elements)})")
256
+
257
+ def _handle_frequency_constraints(self):
258
+ for constraint in self._frequency_constraints:
259
+ elements = [f"self.{self._get_role_name(role)}" for role in constraint.roles()]
260
+ self._print_nl(f"{self._indent}{self._indent}self.FrequencyConstraint(({', '.join(constraint.frequency)}), {', '.join(elements)})")
261
+
262
+ def _handle_cardinality_constraints(self):
263
+ for constraint in self._cardinality_constraints:
264
+ elements = self._get_constraint_values(constraint)
265
+ self._print_nl(
266
+ f"{self._indent}{self._indent}self.CardinalityConstraint(self.{constraint.concept()._name}, [{', '.join(elements)}])")
267
+
268
+ def _handle_role_cardinality_constraints(self):
269
+ for constraint in self._role_cardinality_constraints:
270
+ elements = self._get_constraint_values(constraint)
271
+ self._print_nl(
272
+ f"{self._indent}{self._indent}self.RoleCardinalityConstraint(self.{self._get_role_name(constraint.roles()[0])}, [{', '.join(elements)}])")
273
+
274
+ def _handle_value_constraints(self):
275
+ for constraint in self._value_constraints:
276
+ elements = self._get_constraint_values(constraint)
277
+ self._print_nl(f"{self._indent}{self._indent}self.ValueConstraint(self.{constraint.concept()._name}, [{', '.join(elements)}])")
278
+
279
+ def _emit_role_sequence_constraints(self, constraints, constraint_type: str):
280
+ for constraint in constraints:
281
+ role_sequences = [[f"self.{self._get_role_name(r)}" for r in ro_list] for ro_list in
282
+ constraint.role_sequences()]
283
+ if self._is_complex_role_sequence(role_sequences):
284
+ self._print_nl(
285
+ f"{self._indent}{self._indent}self.{constraint_type}([{'], ['.join(', '.join(ro_list) for ro_list in role_sequences)}])")
286
+ else:
287
+ self._print_nl(
288
+ f"{self._indent}{self._indent}self.{constraint_type}({', '.join(', '.join(ro_list) for ro_list in role_sequences)})")
289
+
290
+ def _emit_subtype_constraints(self, constraints, constraint_type: str):
291
+ for constraint in constraints:
292
+ concepts = [f"self.{self._get_type(c)}" for c in constraint.concepts().values()]
293
+ self._print_nl(f"{self._indent}{self._indent}self.{constraint_type}({', '.join(concepts)})")
294
+
295
+
296
+ EXCLUDED_RELATIONSHIPS = ["shape"]
297
+
298
+
299
+ class ObjectOrientedInterfacePrinter(InterfacePrinter):
300
+ _indent: str
301
+
302
+ def __init__(self, io: typing.Optional[typing.IO[str]] = None, space_indent: bool=False):
303
+ # Set the base class field (frozen)
304
+ super().__init__(io)
305
+ object.__setattr__(self, '_indent', SPACE_INDENT if space_indent else TAB_INDENT)
306
+
307
+ def to_string(self, model: Model, enums_enabled: bool = False) -> None:
308
+ if enums_enabled:
309
+ self._print_nl("from enum import Enum")
310
+ self._print_nl("from typing import Union")
311
+ self._print_nl("import relationalai.semantics.internal as qb")
312
+ self._print_nl("import relationalai.semantics.internal.internal as builder")
313
+ self._print_nl("from relationalai.early_access.dsl.orm.models import Concept")
314
+ self._nl()
315
+ if enums_enabled:
316
+ self._handle_enums(model)
317
+ self._handle_concepts(model, enums_enabled)
318
+
319
+ def _handle_concepts(self, model: Model, enums_enabled) -> None:
320
+ concepts_map = model.concepts_map()
321
+ sorted_concepts = _sort_dependency_graph(model.concepts())
322
+ for name in sorted_concepts:
323
+ c = concepts_map.get(name)
324
+ if c is None:
325
+ raise ValueError(f"The concept '{name}' was not declared but used as concept domain.")
326
+ if enums_enabled and c._is_enum():
327
+ continue
328
+ exclude_list = list(EXCLUDED_RELATIONSHIPS)
329
+ # when enum is declared but enums are disabled print it as a Concept without "name" Relationship
330
+ if c._is_enum():
331
+ exclude_list.append("name")
332
+ extends = [f"{e._name}Concept" for e in c._extends if not e._is_primitive()]
333
+ self._print_nl(f"class {name}Concept({', '.join(extends) if extends else 'Concept'}):")
334
+ rel_strs = self._get_declared_relationships(c, exclude_list)
335
+ self._print_nl(f"{self._indent}pass" if len(rel_strs) == 0 else "\n".join(rel_strs))
336
+ self._nl()
337
+ self._print_nl("class ORMOntology:")
338
+ for name in sorted_concepts:
339
+ c = concepts_map.get(name)
340
+ if c:
341
+ if c._is_enum() and enums_enabled:
342
+ self._print_nl(f"{self._indent}{c._name}: {c._name}")
343
+ else:
344
+ self._print_nl(f"{self._indent}{c._name}: {c._name}Concept")