relationalai 0.13.0.dev0__py3-none-any.whl → 0.13.2__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.
- frontend/debugger/dist/.gitignore +2 -0
- frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- frontend/debugger/dist/assets/index-Cssla-O7.js +208 -0
- frontend/debugger/dist/assets/index-DlHsYx1V.css +9 -0
- frontend/debugger/dist/index.html +17 -0
- relationalai/__init__.py +256 -1
- relationalai/clients/__init__.py +18 -0
- relationalai/clients/client.py +947 -0
- relationalai/clients/config.py +673 -0
- relationalai/clients/direct_access_client.py +118 -0
- relationalai/clients/exec_txn_poller.py +91 -0
- relationalai/clients/hash_util.py +31 -0
- relationalai/clients/local.py +586 -0
- relationalai/clients/profile_polling.py +73 -0
- relationalai/clients/resources/__init__.py +8 -0
- relationalai/clients/resources/azure/azure.py +502 -0
- relationalai/clients/resources/snowflake/__init__.py +20 -0
- relationalai/clients/resources/snowflake/cli_resources.py +98 -0
- relationalai/clients/resources/snowflake/direct_access_resources.py +734 -0
- relationalai/clients/resources/snowflake/engine_service.py +381 -0
- relationalai/clients/resources/snowflake/engine_state_handlers.py +315 -0
- relationalai/clients/resources/snowflake/error_handlers.py +240 -0
- relationalai/clients/resources/snowflake/export_procedure.py.jinja +249 -0
- relationalai/clients/resources/snowflake/resources_factory.py +99 -0
- relationalai/clients/resources/snowflake/snowflake.py +3185 -0
- relationalai/clients/resources/snowflake/use_index_poller.py +1019 -0
- relationalai/clients/resources/snowflake/use_index_resources.py +188 -0
- relationalai/clients/resources/snowflake/util.py +387 -0
- relationalai/clients/result_helpers.py +420 -0
- relationalai/clients/types.py +118 -0
- relationalai/clients/util.py +356 -0
- relationalai/debugging.py +389 -0
- relationalai/dsl.py +1749 -0
- relationalai/early_access/builder/__init__.py +30 -0
- relationalai/early_access/builder/builder/__init__.py +35 -0
- relationalai/early_access/builder/snowflake/__init__.py +12 -0
- relationalai/early_access/builder/std/__init__.py +25 -0
- relationalai/early_access/builder/std/decimals/__init__.py +12 -0
- relationalai/early_access/builder/std/integers/__init__.py +12 -0
- relationalai/early_access/builder/std/math/__init__.py +12 -0
- relationalai/early_access/builder/std/strings/__init__.py +14 -0
- relationalai/early_access/devtools/__init__.py +12 -0
- relationalai/early_access/devtools/benchmark_lqp/__init__.py +12 -0
- relationalai/early_access/devtools/extract_lqp/__init__.py +12 -0
- relationalai/early_access/dsl/adapters/orm/adapter_qb.py +427 -0
- relationalai/early_access/dsl/adapters/orm/parser.py +636 -0
- relationalai/early_access/dsl/adapters/owl/adapter.py +176 -0
- relationalai/early_access/dsl/adapters/owl/parser.py +160 -0
- relationalai/early_access/dsl/bindings/common.py +402 -0
- relationalai/early_access/dsl/bindings/csv.py +170 -0
- relationalai/early_access/dsl/bindings/legacy/binding_models.py +143 -0
- relationalai/early_access/dsl/bindings/snowflake.py +64 -0
- relationalai/early_access/dsl/codegen/binder.py +411 -0
- relationalai/early_access/dsl/codegen/common.py +79 -0
- relationalai/early_access/dsl/codegen/helpers.py +23 -0
- relationalai/early_access/dsl/codegen/relations.py +700 -0
- relationalai/early_access/dsl/codegen/weaver.py +417 -0
- relationalai/early_access/dsl/core/builders/__init__.py +47 -0
- relationalai/early_access/dsl/core/builders/logic.py +19 -0
- relationalai/early_access/dsl/core/builders/scalar_constraint.py +11 -0
- relationalai/early_access/dsl/core/constraints/predicate/atomic.py +455 -0
- relationalai/early_access/dsl/core/constraints/predicate/universal.py +73 -0
- relationalai/early_access/dsl/core/constraints/scalar.py +310 -0
- relationalai/early_access/dsl/core/context.py +13 -0
- relationalai/early_access/dsl/core/cset.py +132 -0
- relationalai/early_access/dsl/core/exprs/__init__.py +116 -0
- relationalai/early_access/dsl/core/exprs/relational.py +18 -0
- relationalai/early_access/dsl/core/exprs/scalar.py +412 -0
- relationalai/early_access/dsl/core/instances.py +44 -0
- relationalai/early_access/dsl/core/logic/__init__.py +193 -0
- relationalai/early_access/dsl/core/logic/aggregation.py +98 -0
- relationalai/early_access/dsl/core/logic/exists.py +223 -0
- relationalai/early_access/dsl/core/logic/helper.py +163 -0
- relationalai/early_access/dsl/core/namespaces.py +32 -0
- relationalai/early_access/dsl/core/relations.py +276 -0
- relationalai/early_access/dsl/core/rules.py +112 -0
- relationalai/early_access/dsl/core/std/__init__.py +45 -0
- relationalai/early_access/dsl/core/temporal/recall.py +6 -0
- relationalai/early_access/dsl/core/types/__init__.py +270 -0
- relationalai/early_access/dsl/core/types/concepts.py +128 -0
- relationalai/early_access/dsl/core/types/constrained/__init__.py +267 -0
- relationalai/early_access/dsl/core/types/constrained/nominal.py +143 -0
- relationalai/early_access/dsl/core/types/constrained/subtype.py +124 -0
- relationalai/early_access/dsl/core/types/standard.py +92 -0
- relationalai/early_access/dsl/core/types/unconstrained.py +50 -0
- relationalai/early_access/dsl/core/types/variables.py +203 -0
- relationalai/early_access/dsl/ir/compiler.py +318 -0
- relationalai/early_access/dsl/ir/executor.py +260 -0
- relationalai/early_access/dsl/ontologies/constraints.py +88 -0
- relationalai/early_access/dsl/ontologies/export.py +30 -0
- relationalai/early_access/dsl/ontologies/models.py +453 -0
- relationalai/early_access/dsl/ontologies/python_printer.py +303 -0
- relationalai/early_access/dsl/ontologies/readings.py +60 -0
- relationalai/early_access/dsl/ontologies/relationships.py +322 -0
- relationalai/early_access/dsl/ontologies/roles.py +87 -0
- relationalai/early_access/dsl/ontologies/subtyping.py +55 -0
- relationalai/early_access/dsl/orm/constraints.py +438 -0
- relationalai/early_access/dsl/orm/measures/dimensions.py +200 -0
- relationalai/early_access/dsl/orm/measures/initializer.py +16 -0
- relationalai/early_access/dsl/orm/measures/measure_rules.py +275 -0
- relationalai/early_access/dsl/orm/measures/measures.py +299 -0
- relationalai/early_access/dsl/orm/measures/role_exprs.py +268 -0
- relationalai/early_access/dsl/orm/models.py +256 -0
- relationalai/early_access/dsl/orm/object_oriented_printer.py +344 -0
- relationalai/early_access/dsl/orm/printer.py +469 -0
- relationalai/early_access/dsl/orm/reasoners.py +480 -0
- relationalai/early_access/dsl/orm/relations.py +19 -0
- relationalai/early_access/dsl/orm/relationships.py +251 -0
- relationalai/early_access/dsl/orm/types.py +42 -0
- relationalai/early_access/dsl/orm/utils.py +79 -0
- relationalai/early_access/dsl/orm/verb.py +204 -0
- relationalai/early_access/dsl/physical_metadata/tables.py +133 -0
- relationalai/early_access/dsl/relations.py +170 -0
- relationalai/early_access/dsl/rulesets.py +69 -0
- relationalai/early_access/dsl/schemas/__init__.py +450 -0
- relationalai/early_access/dsl/schemas/builder.py +48 -0
- relationalai/early_access/dsl/schemas/comp_names.py +51 -0
- relationalai/early_access/dsl/schemas/components.py +203 -0
- relationalai/early_access/dsl/schemas/contexts.py +156 -0
- relationalai/early_access/dsl/schemas/exprs.py +89 -0
- relationalai/early_access/dsl/schemas/fragments.py +464 -0
- relationalai/early_access/dsl/serialization.py +79 -0
- relationalai/early_access/dsl/serialize/exporter.py +163 -0
- relationalai/early_access/dsl/snow/api.py +105 -0
- relationalai/early_access/dsl/snow/common.py +76 -0
- relationalai/early_access/dsl/state_mgmt/__init__.py +129 -0
- relationalai/early_access/dsl/state_mgmt/state_charts.py +125 -0
- relationalai/early_access/dsl/state_mgmt/transitions.py +130 -0
- relationalai/early_access/dsl/types/__init__.py +40 -0
- relationalai/early_access/dsl/types/concepts.py +12 -0
- relationalai/early_access/dsl/types/entities.py +135 -0
- relationalai/early_access/dsl/types/values.py +17 -0
- relationalai/early_access/dsl/utils.py +102 -0
- relationalai/early_access/graphs/__init__.py +13 -0
- relationalai/early_access/lqp/__init__.py +12 -0
- relationalai/early_access/lqp/compiler/__init__.py +12 -0
- relationalai/early_access/lqp/constructors/__init__.py +18 -0
- relationalai/early_access/lqp/executor/__init__.py +12 -0
- relationalai/early_access/lqp/ir/__init__.py +12 -0
- relationalai/early_access/lqp/passes/__init__.py +12 -0
- relationalai/early_access/lqp/pragmas/__init__.py +12 -0
- relationalai/early_access/lqp/primitives/__init__.py +12 -0
- relationalai/early_access/lqp/types/__init__.py +12 -0
- relationalai/early_access/lqp/utils/__init__.py +12 -0
- relationalai/early_access/lqp/validators/__init__.py +12 -0
- relationalai/early_access/metamodel/__init__.py +58 -0
- relationalai/early_access/metamodel/builtins/__init__.py +12 -0
- relationalai/early_access/metamodel/compiler/__init__.py +12 -0
- relationalai/early_access/metamodel/dependency/__init__.py +12 -0
- relationalai/early_access/metamodel/factory/__init__.py +17 -0
- relationalai/early_access/metamodel/helpers/__init__.py +12 -0
- relationalai/early_access/metamodel/ir/__init__.py +14 -0
- relationalai/early_access/metamodel/rewrite/__init__.py +7 -0
- relationalai/early_access/metamodel/typer/__init__.py +3 -0
- relationalai/early_access/metamodel/typer/typer/__init__.py +12 -0
- relationalai/early_access/metamodel/types/__init__.py +15 -0
- relationalai/early_access/metamodel/util/__init__.py +15 -0
- relationalai/early_access/metamodel/visitor/__init__.py +12 -0
- relationalai/early_access/rel/__init__.py +12 -0
- relationalai/early_access/rel/executor/__init__.py +12 -0
- relationalai/early_access/rel/rel_utils/__init__.py +12 -0
- relationalai/early_access/rel/rewrite/__init__.py +7 -0
- relationalai/early_access/solvers/__init__.py +19 -0
- relationalai/early_access/sql/__init__.py +11 -0
- relationalai/early_access/sql/executor/__init__.py +3 -0
- relationalai/early_access/sql/rewrite/__init__.py +3 -0
- relationalai/early_access/tests/logging/__init__.py +12 -0
- relationalai/early_access/tests/test_snapshot_base/__init__.py +12 -0
- relationalai/early_access/tests/utils/__init__.py +12 -0
- relationalai/environments/__init__.py +35 -0
- relationalai/environments/base.py +381 -0
- relationalai/environments/colab.py +14 -0
- relationalai/environments/generic.py +71 -0
- relationalai/environments/ipython.py +68 -0
- relationalai/environments/jupyter.py +9 -0
- relationalai/environments/snowbook.py +169 -0
- relationalai/errors.py +2496 -0
- relationalai/experimental/SF.py +38 -0
- relationalai/experimental/inspect.py +47 -0
- relationalai/experimental/pathfinder/__init__.py +158 -0
- relationalai/experimental/pathfinder/api.py +160 -0
- relationalai/experimental/pathfinder/automaton.py +584 -0
- relationalai/experimental/pathfinder/bridge.py +226 -0
- relationalai/experimental/pathfinder/compiler.py +416 -0
- relationalai/experimental/pathfinder/datalog.py +214 -0
- relationalai/experimental/pathfinder/diagnostics.py +56 -0
- relationalai/experimental/pathfinder/filter.py +236 -0
- relationalai/experimental/pathfinder/glushkov.py +439 -0
- relationalai/experimental/pathfinder/options.py +265 -0
- relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +1951 -0
- relationalai/experimental/pathfinder/rpq.py +344 -0
- relationalai/experimental/pathfinder/transition.py +200 -0
- relationalai/experimental/pathfinder/utils.py +26 -0
- relationalai/experimental/paths/README.md +107 -0
- relationalai/experimental/paths/api.py +143 -0
- relationalai/experimental/paths/benchmarks/grid_graph.py +37 -0
- relationalai/experimental/paths/code_organization.md +2 -0
- relationalai/experimental/paths/examples/Movies.ipynb +16328 -0
- relationalai/experimental/paths/examples/basic_example.py +40 -0
- relationalai/experimental/paths/examples/minimal_engine_warmup.py +3 -0
- relationalai/experimental/paths/examples/movie_example.py +77 -0
- relationalai/experimental/paths/examples/movies_data/actedin.csv +193 -0
- relationalai/experimental/paths/examples/movies_data/directed.csv +45 -0
- relationalai/experimental/paths/examples/movies_data/follows.csv +7 -0
- relationalai/experimental/paths/examples/movies_data/movies.csv +39 -0
- relationalai/experimental/paths/examples/movies_data/person.csv +134 -0
- relationalai/experimental/paths/examples/movies_data/produced.csv +16 -0
- relationalai/experimental/paths/examples/movies_data/ratings.csv +10 -0
- relationalai/experimental/paths/examples/movies_data/wrote.csv +11 -0
- relationalai/experimental/paths/examples/paths_benchmark.py +115 -0
- relationalai/experimental/paths/examples/paths_example.py +116 -0
- relationalai/experimental/paths/examples/pattern_to_automaton.py +28 -0
- relationalai/experimental/paths/find_paths_via_automaton.py +85 -0
- relationalai/experimental/paths/graph.py +185 -0
- relationalai/experimental/paths/path_algorithms/find_paths.py +280 -0
- relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +26 -0
- relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +111 -0
- relationalai/experimental/paths/path_algorithms/single.py +59 -0
- relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +39 -0
- relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +103 -0
- relationalai/experimental/paths/path_algorithms/usp-old.py +130 -0
- relationalai/experimental/paths/path_algorithms/usp-tuple.py +183 -0
- relationalai/experimental/paths/path_algorithms/usp.py +150 -0
- relationalai/experimental/paths/product_graph.py +93 -0
- relationalai/experimental/paths/rpq/automaton.py +584 -0
- relationalai/experimental/paths/rpq/diagnostics.py +56 -0
- relationalai/experimental/paths/rpq/rpq.py +378 -0
- relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +90 -0
- relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +119 -0
- relationalai/experimental/paths/tests/tests_limit_sp_single.py +104 -0
- relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +113 -0
- relationalai/experimental/paths/tests/tests_limit_walks_single.py +149 -0
- relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +70 -0
- relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +64 -0
- relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +115 -0
- relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +75 -0
- relationalai/experimental/paths/tests/tests_single_paths.py +152 -0
- relationalai/experimental/paths/tests/tests_single_walks.py +208 -0
- relationalai/experimental/paths/tests/tests_single_walks_undirected.py +297 -0
- relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +107 -0
- relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +76 -0
- relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +76 -0
- relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +110 -0
- relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +229 -0
- relationalai/experimental/paths/tests/tests_usp_nsp_single.py +108 -0
- relationalai/experimental/paths/tree_agg.py +168 -0
- relationalai/experimental/paths/utilities/iterators.py +27 -0
- relationalai/experimental/paths/utilities/prefix_sum.py +91 -0
- relationalai/experimental/solvers.py +1087 -0
- relationalai/loaders/csv.py +195 -0
- relationalai/loaders/loader.py +177 -0
- relationalai/loaders/types.py +23 -0
- relationalai/rel_emitter.py +373 -0
- relationalai/rel_utils.py +185 -0
- relationalai/semantics/__init__.py +22 -146
- relationalai/semantics/designs/query_builder/identify_by.md +106 -0
- relationalai/semantics/devtools/benchmark_lqp.py +535 -0
- relationalai/semantics/devtools/compilation_manager.py +294 -0
- relationalai/semantics/devtools/extract_lqp.py +110 -0
- relationalai/semantics/internal/internal.py +3785 -0
- relationalai/semantics/internal/snowflake.py +325 -0
- relationalai/semantics/lqp/README.md +34 -0
- relationalai/semantics/lqp/builtins.py +16 -0
- relationalai/semantics/lqp/compiler.py +22 -0
- relationalai/semantics/lqp/constructors.py +68 -0
- relationalai/semantics/lqp/executor.py +469 -0
- relationalai/semantics/lqp/intrinsics.py +24 -0
- relationalai/semantics/lqp/model2lqp.py +877 -0
- relationalai/semantics/lqp/passes.py +680 -0
- relationalai/semantics/lqp/primitives.py +252 -0
- relationalai/semantics/lqp/result_helpers.py +202 -0
- relationalai/semantics/lqp/rewrite/annotate_constraints.py +57 -0
- relationalai/semantics/lqp/rewrite/cdc.py +216 -0
- relationalai/semantics/lqp/rewrite/extract_common.py +338 -0
- relationalai/semantics/lqp/rewrite/extract_keys.py +512 -0
- relationalai/semantics/lqp/rewrite/function_annotations.py +114 -0
- relationalai/semantics/lqp/rewrite/functional_dependencies.py +314 -0
- relationalai/semantics/lqp/rewrite/quantify_vars.py +296 -0
- relationalai/semantics/lqp/rewrite/splinter.py +76 -0
- relationalai/semantics/lqp/types.py +101 -0
- relationalai/semantics/lqp/utils.py +160 -0
- relationalai/semantics/lqp/validators.py +57 -0
- relationalai/semantics/metamodel/__init__.py +40 -6
- relationalai/semantics/metamodel/builtins.py +771 -205
- relationalai/semantics/metamodel/compiler.py +133 -0
- relationalai/semantics/metamodel/dependency.py +862 -0
- relationalai/semantics/metamodel/executor.py +61 -0
- relationalai/semantics/metamodel/factory.py +287 -0
- relationalai/semantics/metamodel/helpers.py +361 -0
- relationalai/semantics/metamodel/rewrite/discharge_constraints.py +39 -0
- relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +210 -0
- relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +78 -0
- relationalai/semantics/metamodel/rewrite/flatten.py +554 -0
- relationalai/semantics/metamodel/rewrite/format_outputs.py +165 -0
- relationalai/semantics/metamodel/typer/checker.py +353 -0
- relationalai/semantics/metamodel/typer/typer.py +1399 -0
- relationalai/semantics/metamodel/util.py +506 -0
- relationalai/semantics/reasoners/__init__.py +10 -0
- relationalai/semantics/reasoners/graph/README.md +620 -0
- relationalai/semantics/reasoners/graph/__init__.py +37 -0
- relationalai/semantics/reasoners/graph/core.py +9019 -0
- relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +797 -0
- relationalai/semantics/reasoners/graph/tests/README.md +21 -0
- relationalai/semantics/reasoners/optimization/__init__.py +68 -0
- relationalai/semantics/reasoners/optimization/common.py +88 -0
- relationalai/semantics/reasoners/optimization/solvers_dev.py +568 -0
- relationalai/semantics/reasoners/optimization/solvers_pb.py +1414 -0
- relationalai/semantics/rel/builtins.py +40 -0
- relationalai/semantics/rel/compiler.py +989 -0
- relationalai/semantics/rel/executor.py +362 -0
- relationalai/semantics/rel/rel.py +482 -0
- relationalai/semantics/rel/rel_utils.py +276 -0
- relationalai/semantics/snowflake/__init__.py +3 -0
- relationalai/semantics/sql/compiler.py +2503 -0
- relationalai/semantics/sql/executor/duck_db.py +52 -0
- relationalai/semantics/sql/executor/result_helpers.py +64 -0
- relationalai/semantics/sql/executor/snowflake.py +149 -0
- relationalai/semantics/sql/rewrite/denormalize.py +222 -0
- relationalai/semantics/sql/rewrite/double_negation.py +49 -0
- relationalai/semantics/sql/rewrite/recursive_union.py +127 -0
- relationalai/semantics/sql/rewrite/sort_output_query.py +246 -0
- relationalai/semantics/sql/sql.py +504 -0
- relationalai/semantics/std/__init__.py +40 -60
- relationalai/semantics/std/constraints.py +43 -37
- relationalai/semantics/std/datetime.py +135 -246
- relationalai/semantics/std/decimals.py +52 -45
- relationalai/semantics/std/floats.py +5 -13
- relationalai/semantics/std/integers.py +11 -26
- relationalai/semantics/std/math.py +112 -183
- relationalai/semantics/std/pragmas.py +11 -0
- relationalai/semantics/std/re.py +62 -80
- relationalai/semantics/std/std.py +14 -0
- relationalai/semantics/std/strings.py +60 -117
- relationalai/semantics/tests/test_snapshot_abstract.py +143 -0
- relationalai/semantics/tests/test_snapshot_base.py +9 -0
- relationalai/semantics/tests/utils.py +46 -0
- relationalai/std/__init__.py +70 -0
- relationalai/tools/cli.py +2089 -0
- relationalai/tools/cli_controls.py +1826 -0
- relationalai/tools/cli_helpers.py +802 -0
- relationalai/tools/debugger.py +183 -289
- relationalai/tools/debugger_client.py +109 -0
- relationalai/tools/debugger_server.py +302 -0
- relationalai/tools/dev.py +685 -0
- relationalai/tools/notes +7 -0
- relationalai/tools/qb_debugger.py +425 -0
- relationalai/util/clean_up_databases.py +95 -0
- relationalai/util/format.py +106 -48
- relationalai/util/list_databases.py +9 -0
- relationalai/util/otel_configuration.py +26 -0
- relationalai/util/otel_handler.py +484 -0
- relationalai/util/snowflake_handler.py +88 -0
- relationalai/util/span_format_test.py +43 -0
- relationalai/util/span_tracker.py +207 -0
- relationalai/util/spans_file_handler.py +72 -0
- relationalai/util/tracing_handler.py +34 -0
- relationalai-0.13.2.dist-info/METADATA +74 -0
- relationalai-0.13.2.dist-info/RECORD +460 -0
- relationalai-0.13.2.dist-info/WHEEL +4 -0
- relationalai-0.13.2.dist-info/entry_points.txt +3 -0
- relationalai-0.13.2.dist-info/licenses/LICENSE +202 -0
- relationalai_test_util/__init__.py +4 -0
- relationalai_test_util/fixtures.py +233 -0
- relationalai_test_util/snapshot.py +252 -0
- relationalai_test_util/traceback.py +118 -0
- relationalai/config/__init__.py +0 -56
- relationalai/config/config.py +0 -289
- relationalai/config/config_fields.py +0 -86
- relationalai/config/connections/__init__.py +0 -46
- relationalai/config/connections/base.py +0 -23
- relationalai/config/connections/duckdb.py +0 -29
- relationalai/config/connections/snowflake.py +0 -243
- relationalai/config/external/__init__.py +0 -17
- relationalai/config/external/dbt_converter.py +0 -101
- relationalai/config/external/dbt_models.py +0 -93
- relationalai/config/external/snowflake_converter.py +0 -41
- relationalai/config/external/snowflake_models.py +0 -85
- relationalai/config/external/utils.py +0 -19
- relationalai/semantics/backends/lqp/annotations.py +0 -11
- relationalai/semantics/backends/sql/sql_compiler.py +0 -327
- relationalai/semantics/frontend/base.py +0 -1707
- relationalai/semantics/frontend/core.py +0 -179
- relationalai/semantics/frontend/front_compiler.py +0 -1313
- relationalai/semantics/frontend/pprint.py +0 -408
- relationalai/semantics/metamodel/metamodel.py +0 -437
- relationalai/semantics/metamodel/metamodel_analyzer.py +0 -519
- relationalai/semantics/metamodel/metamodel_compiler.py +0 -0
- relationalai/semantics/metamodel/pprint.py +0 -412
- relationalai/semantics/metamodel/rewriter.py +0 -266
- relationalai/semantics/metamodel/typer.py +0 -1378
- relationalai/semantics/std/aggregates.py +0 -149
- relationalai/semantics/std/common.py +0 -44
- relationalai/semantics/std/numbers.py +0 -86
- relationalai/shims/executor.py +0 -147
- relationalai/shims/helpers.py +0 -126
- relationalai/shims/hoister.py +0 -221
- relationalai/shims/mm2v0.py +0 -1290
- relationalai/tools/cli/__init__.py +0 -6
- relationalai/tools/cli/cli.py +0 -90
- relationalai/tools/cli/components/__init__.py +0 -5
- relationalai/tools/cli/components/progress_reader.py +0 -1524
- relationalai/tools/cli/components/utils.py +0 -58
- relationalai/tools/cli/config_template.py +0 -45
- relationalai/tools/cli/dev.py +0 -19
- relationalai/tools/typer_debugger.py +0 -93
- relationalai/util/dataclasses.py +0 -43
- relationalai/util/docutils.py +0 -40
- relationalai/util/error.py +0 -199
- relationalai/util/naming.py +0 -145
- relationalai/util/python.py +0 -35
- relationalai/util/runtime.py +0 -156
- relationalai/util/schema.py +0 -197
- relationalai/util/source.py +0 -185
- relationalai/util/structures.py +0 -163
- relationalai/util/tracing.py +0 -261
- relationalai-0.13.0.dev0.dist-info/METADATA +0 -46
- relationalai-0.13.0.dev0.dist-info/RECORD +0 -488
- relationalai-0.13.0.dev0.dist-info/WHEEL +0 -5
- relationalai-0.13.0.dev0.dist-info/entry_points.txt +0 -3
- relationalai-0.13.0.dev0.dist-info/top_level.txt +0 -2
- v0/relationalai/__init__.py +0 -216
- v0/relationalai/clients/__init__.py +0 -5
- v0/relationalai/clients/azure.py +0 -477
- v0/relationalai/clients/client.py +0 -912
- v0/relationalai/clients/config.py +0 -673
- v0/relationalai/clients/direct_access_client.py +0 -118
- v0/relationalai/clients/hash_util.py +0 -31
- v0/relationalai/clients/local.py +0 -571
- v0/relationalai/clients/profile_polling.py +0 -73
- v0/relationalai/clients/result_helpers.py +0 -420
- v0/relationalai/clients/snowflake.py +0 -3869
- v0/relationalai/clients/types.py +0 -113
- v0/relationalai/clients/use_index_poller.py +0 -980
- v0/relationalai/clients/util.py +0 -356
- v0/relationalai/debugging.py +0 -389
- v0/relationalai/dsl.py +0 -1749
- v0/relationalai/early_access/builder/__init__.py +0 -30
- v0/relationalai/early_access/builder/builder/__init__.py +0 -35
- v0/relationalai/early_access/builder/snowflake/__init__.py +0 -12
- v0/relationalai/early_access/builder/std/__init__.py +0 -25
- v0/relationalai/early_access/builder/std/decimals/__init__.py +0 -12
- v0/relationalai/early_access/builder/std/integers/__init__.py +0 -12
- v0/relationalai/early_access/builder/std/math/__init__.py +0 -12
- v0/relationalai/early_access/builder/std/strings/__init__.py +0 -14
- v0/relationalai/early_access/devtools/__init__.py +0 -12
- v0/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -12
- v0/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -12
- v0/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -427
- v0/relationalai/early_access/dsl/adapters/orm/parser.py +0 -636
- v0/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -176
- v0/relationalai/early_access/dsl/adapters/owl/parser.py +0 -160
- v0/relationalai/early_access/dsl/bindings/common.py +0 -402
- v0/relationalai/early_access/dsl/bindings/csv.py +0 -170
- v0/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -143
- v0/relationalai/early_access/dsl/bindings/snowflake.py +0 -64
- v0/relationalai/early_access/dsl/codegen/binder.py +0 -411
- v0/relationalai/early_access/dsl/codegen/common.py +0 -79
- v0/relationalai/early_access/dsl/codegen/helpers.py +0 -23
- v0/relationalai/early_access/dsl/codegen/relations.py +0 -700
- v0/relationalai/early_access/dsl/codegen/weaver.py +0 -417
- v0/relationalai/early_access/dsl/core/builders/__init__.py +0 -47
- v0/relationalai/early_access/dsl/core/builders/logic.py +0 -19
- v0/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -11
- v0/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -455
- v0/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -73
- v0/relationalai/early_access/dsl/core/constraints/scalar.py +0 -310
- v0/relationalai/early_access/dsl/core/context.py +0 -13
- v0/relationalai/early_access/dsl/core/cset.py +0 -132
- v0/relationalai/early_access/dsl/core/exprs/__init__.py +0 -116
- v0/relationalai/early_access/dsl/core/exprs/relational.py +0 -18
- v0/relationalai/early_access/dsl/core/exprs/scalar.py +0 -412
- v0/relationalai/early_access/dsl/core/instances.py +0 -44
- v0/relationalai/early_access/dsl/core/logic/__init__.py +0 -193
- v0/relationalai/early_access/dsl/core/logic/aggregation.py +0 -98
- v0/relationalai/early_access/dsl/core/logic/exists.py +0 -223
- v0/relationalai/early_access/dsl/core/logic/helper.py +0 -163
- v0/relationalai/early_access/dsl/core/namespaces.py +0 -32
- v0/relationalai/early_access/dsl/core/relations.py +0 -276
- v0/relationalai/early_access/dsl/core/rules.py +0 -112
- v0/relationalai/early_access/dsl/core/std/__init__.py +0 -45
- v0/relationalai/early_access/dsl/core/temporal/recall.py +0 -6
- v0/relationalai/early_access/dsl/core/types/__init__.py +0 -270
- v0/relationalai/early_access/dsl/core/types/concepts.py +0 -128
- v0/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -267
- v0/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -143
- v0/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -124
- v0/relationalai/early_access/dsl/core/types/standard.py +0 -92
- v0/relationalai/early_access/dsl/core/types/unconstrained.py +0 -50
- v0/relationalai/early_access/dsl/core/types/variables.py +0 -203
- v0/relationalai/early_access/dsl/ir/compiler.py +0 -318
- v0/relationalai/early_access/dsl/ir/executor.py +0 -260
- v0/relationalai/early_access/dsl/ontologies/constraints.py +0 -88
- v0/relationalai/early_access/dsl/ontologies/export.py +0 -30
- v0/relationalai/early_access/dsl/ontologies/models.py +0 -453
- v0/relationalai/early_access/dsl/ontologies/python_printer.py +0 -303
- v0/relationalai/early_access/dsl/ontologies/readings.py +0 -60
- v0/relationalai/early_access/dsl/ontologies/relationships.py +0 -322
- v0/relationalai/early_access/dsl/ontologies/roles.py +0 -87
- v0/relationalai/early_access/dsl/ontologies/subtyping.py +0 -55
- v0/relationalai/early_access/dsl/orm/constraints.py +0 -438
- v0/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -200
- v0/relationalai/early_access/dsl/orm/measures/initializer.py +0 -16
- v0/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -275
- v0/relationalai/early_access/dsl/orm/measures/measures.py +0 -299
- v0/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -268
- v0/relationalai/early_access/dsl/orm/models.py +0 -256
- v0/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -344
- v0/relationalai/early_access/dsl/orm/printer.py +0 -469
- v0/relationalai/early_access/dsl/orm/reasoners.py +0 -480
- v0/relationalai/early_access/dsl/orm/relations.py +0 -19
- v0/relationalai/early_access/dsl/orm/relationships.py +0 -251
- v0/relationalai/early_access/dsl/orm/types.py +0 -42
- v0/relationalai/early_access/dsl/orm/utils.py +0 -79
- v0/relationalai/early_access/dsl/orm/verb.py +0 -204
- v0/relationalai/early_access/dsl/physical_metadata/tables.py +0 -133
- v0/relationalai/early_access/dsl/relations.py +0 -170
- v0/relationalai/early_access/dsl/rulesets.py +0 -69
- v0/relationalai/early_access/dsl/schemas/__init__.py +0 -450
- v0/relationalai/early_access/dsl/schemas/builder.py +0 -48
- v0/relationalai/early_access/dsl/schemas/comp_names.py +0 -51
- v0/relationalai/early_access/dsl/schemas/components.py +0 -203
- v0/relationalai/early_access/dsl/schemas/contexts.py +0 -156
- v0/relationalai/early_access/dsl/schemas/exprs.py +0 -89
- v0/relationalai/early_access/dsl/schemas/fragments.py +0 -464
- v0/relationalai/early_access/dsl/serialization.py +0 -79
- v0/relationalai/early_access/dsl/serialize/exporter.py +0 -163
- v0/relationalai/early_access/dsl/snow/api.py +0 -104
- v0/relationalai/early_access/dsl/snow/common.py +0 -76
- v0/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -129
- v0/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -125
- v0/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -130
- v0/relationalai/early_access/dsl/types/__init__.py +0 -40
- v0/relationalai/early_access/dsl/types/concepts.py +0 -12
- v0/relationalai/early_access/dsl/types/entities.py +0 -135
- v0/relationalai/early_access/dsl/types/values.py +0 -17
- v0/relationalai/early_access/dsl/utils.py +0 -102
- v0/relationalai/early_access/graphs/__init__.py +0 -13
- v0/relationalai/early_access/lqp/__init__.py +0 -12
- v0/relationalai/early_access/lqp/compiler/__init__.py +0 -12
- v0/relationalai/early_access/lqp/constructors/__init__.py +0 -18
- v0/relationalai/early_access/lqp/executor/__init__.py +0 -12
- v0/relationalai/early_access/lqp/ir/__init__.py +0 -12
- v0/relationalai/early_access/lqp/passes/__init__.py +0 -12
- v0/relationalai/early_access/lqp/pragmas/__init__.py +0 -12
- v0/relationalai/early_access/lqp/primitives/__init__.py +0 -12
- v0/relationalai/early_access/lqp/types/__init__.py +0 -12
- v0/relationalai/early_access/lqp/utils/__init__.py +0 -12
- v0/relationalai/early_access/lqp/validators/__init__.py +0 -12
- v0/relationalai/early_access/metamodel/__init__.py +0 -58
- v0/relationalai/early_access/metamodel/builtins/__init__.py +0 -12
- v0/relationalai/early_access/metamodel/compiler/__init__.py +0 -12
- v0/relationalai/early_access/metamodel/dependency/__init__.py +0 -12
- v0/relationalai/early_access/metamodel/factory/__init__.py +0 -17
- v0/relationalai/early_access/metamodel/helpers/__init__.py +0 -12
- v0/relationalai/early_access/metamodel/ir/__init__.py +0 -14
- v0/relationalai/early_access/metamodel/rewrite/__init__.py +0 -7
- v0/relationalai/early_access/metamodel/typer/__init__.py +0 -3
- v0/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -12
- v0/relationalai/early_access/metamodel/types/__init__.py +0 -15
- v0/relationalai/early_access/metamodel/util/__init__.py +0 -15
- v0/relationalai/early_access/metamodel/visitor/__init__.py +0 -12
- v0/relationalai/early_access/rel/__init__.py +0 -12
- v0/relationalai/early_access/rel/executor/__init__.py +0 -12
- v0/relationalai/early_access/rel/rel_utils/__init__.py +0 -12
- v0/relationalai/early_access/rel/rewrite/__init__.py +0 -7
- v0/relationalai/early_access/solvers/__init__.py +0 -19
- v0/relationalai/early_access/sql/__init__.py +0 -11
- v0/relationalai/early_access/sql/executor/__init__.py +0 -3
- v0/relationalai/early_access/sql/rewrite/__init__.py +0 -3
- v0/relationalai/early_access/tests/logging/__init__.py +0 -12
- v0/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -12
- v0/relationalai/early_access/tests/utils/__init__.py +0 -12
- v0/relationalai/environments/__init__.py +0 -35
- v0/relationalai/environments/base.py +0 -381
- v0/relationalai/environments/colab.py +0 -14
- v0/relationalai/environments/generic.py +0 -71
- v0/relationalai/environments/ipython.py +0 -68
- v0/relationalai/environments/jupyter.py +0 -9
- v0/relationalai/environments/snowbook.py +0 -169
- v0/relationalai/errors.py +0 -2455
- v0/relationalai/experimental/SF.py +0 -38
- v0/relationalai/experimental/inspect.py +0 -47
- v0/relationalai/experimental/pathfinder/__init__.py +0 -158
- v0/relationalai/experimental/pathfinder/api.py +0 -160
- v0/relationalai/experimental/pathfinder/automaton.py +0 -584
- v0/relationalai/experimental/pathfinder/bridge.py +0 -226
- v0/relationalai/experimental/pathfinder/compiler.py +0 -416
- v0/relationalai/experimental/pathfinder/datalog.py +0 -214
- v0/relationalai/experimental/pathfinder/diagnostics.py +0 -56
- v0/relationalai/experimental/pathfinder/filter.py +0 -236
- v0/relationalai/experimental/pathfinder/glushkov.py +0 -439
- v0/relationalai/experimental/pathfinder/options.py +0 -265
- v0/relationalai/experimental/pathfinder/rpq.py +0 -344
- v0/relationalai/experimental/pathfinder/transition.py +0 -200
- v0/relationalai/experimental/pathfinder/utils.py +0 -26
- v0/relationalai/experimental/paths/api.py +0 -143
- v0/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -37
- v0/relationalai/experimental/paths/examples/basic_example.py +0 -40
- v0/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -3
- v0/relationalai/experimental/paths/examples/movie_example.py +0 -77
- v0/relationalai/experimental/paths/examples/paths_benchmark.py +0 -115
- v0/relationalai/experimental/paths/examples/paths_example.py +0 -116
- v0/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -28
- v0/relationalai/experimental/paths/find_paths_via_automaton.py +0 -85
- v0/relationalai/experimental/paths/graph.py +0 -185
- v0/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -280
- v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -26
- v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -111
- v0/relationalai/experimental/paths/path_algorithms/single.py +0 -59
- v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -39
- v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -103
- v0/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -130
- v0/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -183
- v0/relationalai/experimental/paths/path_algorithms/usp.py +0 -150
- v0/relationalai/experimental/paths/product_graph.py +0 -93
- v0/relationalai/experimental/paths/rpq/automaton.py +0 -584
- v0/relationalai/experimental/paths/rpq/diagnostics.py +0 -56
- v0/relationalai/experimental/paths/rpq/rpq.py +0 -378
- v0/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -90
- v0/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -119
- v0/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -104
- v0/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -113
- v0/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -149
- v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -70
- v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -64
- v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -115
- v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -75
- v0/relationalai/experimental/paths/tests/tests_single_paths.py +0 -152
- v0/relationalai/experimental/paths/tests/tests_single_walks.py +0 -208
- v0/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -297
- v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -107
- v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -76
- v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -76
- v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -110
- v0/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -229
- v0/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -108
- v0/relationalai/experimental/paths/tree_agg.py +0 -168
- v0/relationalai/experimental/paths/utilities/iterators.py +0 -27
- v0/relationalai/experimental/paths/utilities/prefix_sum.py +0 -91
- v0/relationalai/experimental/solvers.py +0 -1087
- v0/relationalai/loaders/csv.py +0 -195
- v0/relationalai/loaders/loader.py +0 -177
- v0/relationalai/loaders/types.py +0 -23
- v0/relationalai/rel_emitter.py +0 -373
- v0/relationalai/rel_utils.py +0 -185
- v0/relationalai/semantics/__init__.py +0 -29
- v0/relationalai/semantics/devtools/benchmark_lqp.py +0 -536
- v0/relationalai/semantics/devtools/compilation_manager.py +0 -294
- v0/relationalai/semantics/devtools/extract_lqp.py +0 -110
- v0/relationalai/semantics/internal/internal.py +0 -3785
- v0/relationalai/semantics/internal/snowflake.py +0 -324
- v0/relationalai/semantics/lqp/builtins.py +0 -16
- v0/relationalai/semantics/lqp/compiler.py +0 -22
- v0/relationalai/semantics/lqp/constructors.py +0 -68
- v0/relationalai/semantics/lqp/executor.py +0 -469
- v0/relationalai/semantics/lqp/intrinsics.py +0 -24
- v0/relationalai/semantics/lqp/model2lqp.py +0 -839
- v0/relationalai/semantics/lqp/passes.py +0 -680
- v0/relationalai/semantics/lqp/primitives.py +0 -252
- v0/relationalai/semantics/lqp/result_helpers.py +0 -202
- v0/relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -57
- v0/relationalai/semantics/lqp/rewrite/cdc.py +0 -216
- v0/relationalai/semantics/lqp/rewrite/extract_common.py +0 -338
- v0/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -449
- v0/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -114
- v0/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -314
- v0/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -296
- v0/relationalai/semantics/lqp/rewrite/splinter.py +0 -76
- v0/relationalai/semantics/lqp/types.py +0 -101
- v0/relationalai/semantics/lqp/utils.py +0 -160
- v0/relationalai/semantics/lqp/validators.py +0 -57
- v0/relationalai/semantics/metamodel/__init__.py +0 -40
- v0/relationalai/semantics/metamodel/builtins.py +0 -774
- v0/relationalai/semantics/metamodel/compiler.py +0 -133
- v0/relationalai/semantics/metamodel/dependency.py +0 -862
- v0/relationalai/semantics/metamodel/executor.py +0 -61
- v0/relationalai/semantics/metamodel/factory.py +0 -287
- v0/relationalai/semantics/metamodel/helpers.py +0 -361
- v0/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -39
- v0/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -210
- v0/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -78
- v0/relationalai/semantics/metamodel/rewrite/flatten.py +0 -549
- v0/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -165
- v0/relationalai/semantics/metamodel/typer/checker.py +0 -353
- v0/relationalai/semantics/metamodel/typer/typer.py +0 -1395
- v0/relationalai/semantics/metamodel/util.py +0 -505
- v0/relationalai/semantics/reasoners/__init__.py +0 -10
- v0/relationalai/semantics/reasoners/graph/__init__.py +0 -37
- v0/relationalai/semantics/reasoners/graph/core.py +0 -9020
- v0/relationalai/semantics/reasoners/optimization/__init__.py +0 -68
- v0/relationalai/semantics/reasoners/optimization/common.py +0 -88
- v0/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -568
- v0/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -1163
- v0/relationalai/semantics/rel/builtins.py +0 -40
- v0/relationalai/semantics/rel/compiler.py +0 -989
- v0/relationalai/semantics/rel/executor.py +0 -359
- v0/relationalai/semantics/rel/rel.py +0 -482
- v0/relationalai/semantics/rel/rel_utils.py +0 -276
- v0/relationalai/semantics/snowflake/__init__.py +0 -3
- v0/relationalai/semantics/sql/compiler.py +0 -2503
- v0/relationalai/semantics/sql/executor/duck_db.py +0 -52
- v0/relationalai/semantics/sql/executor/result_helpers.py +0 -64
- v0/relationalai/semantics/sql/executor/snowflake.py +0 -145
- v0/relationalai/semantics/sql/rewrite/denormalize.py +0 -222
- v0/relationalai/semantics/sql/rewrite/double_negation.py +0 -49
- v0/relationalai/semantics/sql/rewrite/recursive_union.py +0 -127
- v0/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -246
- v0/relationalai/semantics/sql/sql.py +0 -504
- v0/relationalai/semantics/std/__init__.py +0 -54
- v0/relationalai/semantics/std/constraints.py +0 -43
- v0/relationalai/semantics/std/datetime.py +0 -363
- v0/relationalai/semantics/std/decimals.py +0 -62
- v0/relationalai/semantics/std/floats.py +0 -7
- v0/relationalai/semantics/std/integers.py +0 -22
- v0/relationalai/semantics/std/math.py +0 -141
- v0/relationalai/semantics/std/pragmas.py +0 -11
- v0/relationalai/semantics/std/re.py +0 -83
- v0/relationalai/semantics/std/std.py +0 -14
- v0/relationalai/semantics/std/strings.py +0 -63
- v0/relationalai/semantics/tests/__init__.py +0 -0
- v0/relationalai/semantics/tests/test_snapshot_abstract.py +0 -143
- v0/relationalai/semantics/tests/test_snapshot_base.py +0 -9
- v0/relationalai/semantics/tests/utils.py +0 -46
- v0/relationalai/std/__init__.py +0 -70
- v0/relationalai/tools/__init__.py +0 -0
- v0/relationalai/tools/cli.py +0 -1940
- v0/relationalai/tools/cli_controls.py +0 -1826
- v0/relationalai/tools/cli_helpers.py +0 -390
- v0/relationalai/tools/debugger.py +0 -183
- v0/relationalai/tools/debugger_client.py +0 -109
- v0/relationalai/tools/debugger_server.py +0 -302
- v0/relationalai/tools/dev.py +0 -685
- v0/relationalai/tools/qb_debugger.py +0 -425
- v0/relationalai/util/clean_up_databases.py +0 -95
- v0/relationalai/util/format.py +0 -123
- v0/relationalai/util/list_databases.py +0 -9
- v0/relationalai/util/otel_configuration.py +0 -25
- v0/relationalai/util/otel_handler.py +0 -484
- v0/relationalai/util/snowflake_handler.py +0 -88
- v0/relationalai/util/span_format_test.py +0 -43
- v0/relationalai/util/span_tracker.py +0 -207
- v0/relationalai/util/spans_file_handler.py +0 -72
- v0/relationalai/util/tracing_handler.py +0 -34
- /relationalai/{semantics/frontend → analysis}/__init__.py +0 -0
- {v0/relationalai → relationalai}/analysis/mechanistic.py +0 -0
- {v0/relationalai → relationalai}/analysis/whynot.py +0 -0
- /relationalai/{shims → auth}/__init__.py +0 -0
- {v0/relationalai → relationalai}/auth/jwt_generator.py +0 -0
- {v0/relationalai → relationalai}/auth/oauth_callback_server.py +0 -0
- {v0/relationalai → relationalai}/auth/token_handler.py +0 -0
- {v0/relationalai → relationalai}/auth/util.py +0 -0
- {v0/relationalai/clients → relationalai/clients/resources/snowflake}/cache_store.py +0 -0
- {v0/relationalai → relationalai}/compiler.py +0 -0
- {v0/relationalai → relationalai}/dependencies.py +0 -0
- {v0/relationalai → relationalai}/docutils.py +0 -0
- {v0/relationalai/analysis → relationalai/early_access}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/__init__.py +0 -0
- {v0/relationalai/auth → relationalai/early_access/dsl/adapters}/__init__.py +0 -0
- {v0/relationalai/early_access → relationalai/early_access/dsl/adapters/orm}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/adapters/orm/model.py +0 -0
- {v0/relationalai/early_access/dsl/adapters → relationalai/early_access/dsl/adapters/owl}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/adapters/owl/model.py +0 -0
- {v0/relationalai/early_access/dsl/adapters/orm → relationalai/early_access/dsl/bindings}/__init__.py +0 -0
- {v0/relationalai/early_access/dsl/adapters/owl → relationalai/early_access/dsl/bindings/legacy}/__init__.py +0 -0
- {v0/relationalai/early_access/dsl/bindings → relationalai/early_access/dsl/codegen}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/constants.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/core/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/core/constraints/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/core/stack.py +0 -0
- {v0/relationalai/early_access/dsl/bindings/legacy → relationalai/early_access/dsl/core/temporal}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/core/utils.py +0 -0
- {v0/relationalai/early_access/dsl/codegen → relationalai/early_access/dsl/ir}/__init__.py +0 -0
- {v0/relationalai/early_access/dsl/core/temporal → relationalai/early_access/dsl/ontologies}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/ontologies/raw_source.py +0 -0
- {v0/relationalai/early_access/dsl/ir → relationalai/early_access/dsl/orm}/__init__.py +0 -0
- {v0/relationalai/early_access/dsl/ontologies → relationalai/early_access/dsl/orm/measures}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/orm/reasoner_errors.py +0 -0
- {v0/relationalai/early_access/dsl/orm → relationalai/early_access/dsl/physical_metadata}/__init__.py +0 -0
- {v0/relationalai/early_access/dsl/orm/measures → relationalai/early_access/dsl/serialize}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/serialize/binding_model.py +0 -0
- {v0/relationalai → relationalai}/early_access/dsl/serialize/model.py +0 -0
- {v0/relationalai/early_access/dsl/physical_metadata → relationalai/early_access/dsl/snow}/__init__.py +0 -0
- {v0/relationalai → relationalai}/early_access/tests/__init__.py +0 -0
- {v0/relationalai → relationalai}/environments/ci.py +0 -0
- {v0/relationalai → relationalai}/environments/hex.py +0 -0
- {v0/relationalai → relationalai}/environments/terminal.py +0 -0
- {v0/relationalai → relationalai}/experimental/__init__.py +0 -0
- {v0/relationalai → relationalai}/experimental/graphs.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/__init__.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/benchmarks/__init__.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/path_algorithms/__init__.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/rpq/__init__.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/rpq/filter.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/rpq/glushkov.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/rpq/transition.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/utilities/__init__.py +0 -0
- {v0/relationalai → relationalai}/experimental/paths/utilities/utilities.py +0 -0
- {v0/relationalai/early_access/dsl/serialize → relationalai/loaders}/__init__.py +0 -0
- {v0/relationalai → relationalai}/metagen.py +0 -0
- {v0/relationalai → relationalai}/metamodel.py +0 -0
- {v0/relationalai → relationalai}/rel.py +0 -0
- {v0/relationalai → relationalai}/semantics/devtools/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/internal/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/internal/annotations.py +0 -0
- {v0/relationalai → relationalai}/semantics/lqp/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/lqp/ir.py +0 -0
- {v0/relationalai → relationalai}/semantics/lqp/pragmas.py +0 -0
- {v0/relationalai → relationalai}/semantics/lqp/rewrite/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/metamodel/dataflow.py +0 -0
- {v0/relationalai → relationalai}/semantics/metamodel/ir.py +0 -0
- {v0/relationalai → relationalai}/semantics/metamodel/rewrite/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/metamodel/typer/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/metamodel/types.py +0 -0
- {v0/relationalai → relationalai}/semantics/metamodel/visitor.py +0 -0
- {v0/relationalai → relationalai}/semantics/reasoners/experimental/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/rel/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/sql/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/sql/executor/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/sql/rewrite/__init__.py +0 -0
- {v0/relationalai/early_access/dsl/snow → relationalai/semantics/tests}/__init__.py +0 -0
- {v0/relationalai → relationalai}/semantics/tests/logging.py +0 -0
- {v0/relationalai → relationalai}/std/aggregates.py +0 -0
- {v0/relationalai → relationalai}/std/dates.py +0 -0
- {v0/relationalai → relationalai}/std/graphs.py +0 -0
- {v0/relationalai → relationalai}/std/inspect.py +0 -0
- {v0/relationalai → relationalai}/std/math.py +0 -0
- {v0/relationalai → relationalai}/std/re.py +0 -0
- {v0/relationalai → relationalai}/std/strings.py +0 -0
- {v0/relationalai/loaders → relationalai/tools}/__init__.py +0 -0
- {v0/relationalai → relationalai}/tools/cleanup_snapshots.py +0 -0
- {v0/relationalai → relationalai}/tools/constants.py +0 -0
- {v0/relationalai → relationalai}/tools/query_utils.py +0 -0
- {v0/relationalai → relationalai}/tools/snapshot_viewer.py +0 -0
- {v0/relationalai → relationalai}/util/__init__.py +0 -0
- {v0/relationalai → relationalai}/util/constants.py +0 -0
- {v0/relationalai → relationalai}/util/graph.py +0 -0
- {v0/relationalai → relationalai}/util/timeout.py +0 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import atexit
|
|
3
|
+
from datetime import datetime, timedelta
|
|
4
|
+
import json
|
|
5
|
+
import textwrap
|
|
6
|
+
import time
|
|
7
|
+
from typing import Any, Dict, Tuple, List, cast
|
|
8
|
+
from urllib.error import HTTPError
|
|
9
|
+
|
|
10
|
+
from pandas import DataFrame
|
|
11
|
+
|
|
12
|
+
from .... import debugging
|
|
13
|
+
from ...util import poll_with_specified_overhead
|
|
14
|
+
|
|
15
|
+
from ....errors import EngineNotFoundException, RAIException, AzureUnsupportedQueryTimeoutException
|
|
16
|
+
from ....rel_utils import assert_no_problems
|
|
17
|
+
from ....loaders.loader import emit_delete_import, import_file, list_available_resources
|
|
18
|
+
from ...config import Config
|
|
19
|
+
from ...types import EngineState, ImportSource, ImportSourceFile, TransactionAsyncResponse
|
|
20
|
+
from ...client import Client, ExportParams, ProviderBase, ResourcesBase
|
|
21
|
+
from .... import dsl, rel, metamodel as m
|
|
22
|
+
from railib import api
|
|
23
|
+
from ... import result_helpers
|
|
24
|
+
|
|
25
|
+
#--------------------------------------------------
|
|
26
|
+
# Constants
|
|
27
|
+
#--------------------------------------------------
|
|
28
|
+
|
|
29
|
+
TXN_FIELDS = ["id", "account_name", "state", "created_on", "finished_at", "duration", "database_name", "read_only", "engine_name", "query", "query_size", "tags", "user_agent", "response_format_version"]
|
|
30
|
+
TXN_REPLACE_MAP = {"database_name": "database", "engine_name": "engine", "account_name": "account", "user_agent": "agent"}
|
|
31
|
+
VALID_ENGINE_STATES = ["REQUESTED", "PROVISIONED", "PROVISIONING"]
|
|
32
|
+
ENGINE_SIZES = ["XS", "S", "M", "L", "XL"]
|
|
33
|
+
|
|
34
|
+
#--------------------------------------------------
|
|
35
|
+
# Resources
|
|
36
|
+
#--------------------------------------------------
|
|
37
|
+
|
|
38
|
+
class Resources(ResourcesBase):
|
|
39
|
+
def __init__(self, profile:str|None=None, config:Config|None=None):
|
|
40
|
+
super().__init__(profile, config=config)
|
|
41
|
+
self._ctx = None
|
|
42
|
+
atexit.register(self.cancel_pending_transactions)
|
|
43
|
+
|
|
44
|
+
def _api_ctx(self):
|
|
45
|
+
if not self._ctx:
|
|
46
|
+
self._ctx = api.Context(**self.config.to_rai_config())
|
|
47
|
+
return self._ctx
|
|
48
|
+
|
|
49
|
+
def reset(self):
|
|
50
|
+
self._ctx = None
|
|
51
|
+
|
|
52
|
+
#--------------------------------------------------
|
|
53
|
+
# Generic
|
|
54
|
+
#--------------------------------------------------
|
|
55
|
+
|
|
56
|
+
def get_version(self):
|
|
57
|
+
raise Exception("Azure version not available")
|
|
58
|
+
|
|
59
|
+
#--------------------------------------------------
|
|
60
|
+
# Databases
|
|
61
|
+
#--------------------------------------------------
|
|
62
|
+
|
|
63
|
+
# Note: in contrast to the API definition in `ResourcesBase`, `get_database` in Azure
|
|
64
|
+
# can return a `List` object instead of a `Dict` object.
|
|
65
|
+
def get_database(self, database:str):
|
|
66
|
+
return api.get_database(self._api_ctx(), database)
|
|
67
|
+
|
|
68
|
+
# not implemented in Azure
|
|
69
|
+
def get_installed_packages(self, database: str) -> Dict | None:
|
|
70
|
+
return super().get_installed_packages(database)
|
|
71
|
+
|
|
72
|
+
#--------------------------------------------------
|
|
73
|
+
# Engines
|
|
74
|
+
#--------------------------------------------------
|
|
75
|
+
def get_engine_sizes(self, cloud_provider: str|None=None):
|
|
76
|
+
return ENGINE_SIZES
|
|
77
|
+
|
|
78
|
+
def get_cloud_provider(self) -> str:
|
|
79
|
+
return "azure"
|
|
80
|
+
|
|
81
|
+
def list_engines(
|
|
82
|
+
self,
|
|
83
|
+
state: str | None = None,
|
|
84
|
+
name: str | None = None,
|
|
85
|
+
type: str | None = None,
|
|
86
|
+
size: str | None = None,
|
|
87
|
+
created_by: str | None = None,
|
|
88
|
+
):
|
|
89
|
+
# Azure only supports state filtering at the API level; other filters are ignored.
|
|
90
|
+
engines = api.list_engines(self._api_ctx(), state)
|
|
91
|
+
# Ensure EngineState shape includes 'type' for callers/tests.
|
|
92
|
+
for eng in engines:
|
|
93
|
+
eng.setdefault("type", "LOGIC")
|
|
94
|
+
return engines
|
|
95
|
+
|
|
96
|
+
def get_engine(self, name: str, type: str) -> EngineState:
|
|
97
|
+
# type is ignored for Azure as it doesn't support multiple engine types
|
|
98
|
+
engine = cast(EngineState, api.get_engine(self._api_ctx(), name))
|
|
99
|
+
engine.setdefault("type", "LOGIC")
|
|
100
|
+
return engine
|
|
101
|
+
|
|
102
|
+
def is_valid_engine_state(self, name:str):
|
|
103
|
+
return name in VALID_ENGINE_STATES
|
|
104
|
+
|
|
105
|
+
def create_engine(
|
|
106
|
+
self,
|
|
107
|
+
name: str,
|
|
108
|
+
type: str | None = None,
|
|
109
|
+
size: str | None = None,
|
|
110
|
+
auto_suspend_mins: int | None = None,
|
|
111
|
+
headers: dict | None = None,
|
|
112
|
+
settings: dict | None = None,
|
|
113
|
+
):
|
|
114
|
+
# Azure only supports one engine type, so type parameter is ignored
|
|
115
|
+
if size is None:
|
|
116
|
+
size = "M"
|
|
117
|
+
with debugging.span("create_engine", name=name, size=size):
|
|
118
|
+
return api.create_engine_wait(self._api_ctx(), name, size)
|
|
119
|
+
|
|
120
|
+
def delete_engine(self, name:str, type: str):
|
|
121
|
+
return api.delete_engine(self._api_ctx(), name)
|
|
122
|
+
|
|
123
|
+
def suspend_engine(self, name:str, type: str | None = None): # type is ignored for Azure
|
|
124
|
+
return api.suspend_engine(self._api_ctx(), name)
|
|
125
|
+
|
|
126
|
+
def resume_engine(self, name:str, type: str | None = None, headers={}):
|
|
127
|
+
# type is ignored for Azure as it doesn't support multiple engine types
|
|
128
|
+
return api.resume_engine_wait(self._api_ctx(), name)
|
|
129
|
+
|
|
130
|
+
def resume_engine_async(self, name:str, type: str | None = None, headers: Dict | None = None):
|
|
131
|
+
return api.resume_engine(self._api_ctx(), name)
|
|
132
|
+
|
|
133
|
+
def auto_create_engine_async(self, name: str | None = None, type: str | None = None) -> str:
|
|
134
|
+
raise Exception("Azure doesn't support auto_create_engine_async")
|
|
135
|
+
|
|
136
|
+
def alter_engine_pool(self, size: str | None = None, mins: int | None = None, maxs: int | None = None):
|
|
137
|
+
raise Exception("Azure doesn't support engine pool alteration")
|
|
138
|
+
|
|
139
|
+
#--------------------------------------------------
|
|
140
|
+
# Graphs
|
|
141
|
+
#--------------------------------------------------
|
|
142
|
+
|
|
143
|
+
def list_graphs(self) -> List[Any]:
|
|
144
|
+
with debugging.span("list_models"):
|
|
145
|
+
return api.list_databases(self._api_ctx())
|
|
146
|
+
|
|
147
|
+
def get_graph(self, name:str):
|
|
148
|
+
with debugging.span("get_model", name=name):
|
|
149
|
+
return api.get_database(self._api_ctx(), name)
|
|
150
|
+
|
|
151
|
+
def create_graph(self, name: str):
|
|
152
|
+
with debugging.span("create_model", name=name):
|
|
153
|
+
return api.create_database(self._api_ctx(), name)
|
|
154
|
+
|
|
155
|
+
def delete_graph(self, name:str):
|
|
156
|
+
with debugging.span("delete_model", name=name):
|
|
157
|
+
return api.delete_database(self._api_ctx(), name)
|
|
158
|
+
|
|
159
|
+
def clone_graph(self, target_name:str, source_name:str, nowait_durable:bool=False):
|
|
160
|
+
# not a typo: the argument order is indeed target then source
|
|
161
|
+
return api.create_database(self._api_ctx(), target_name, source_name)
|
|
162
|
+
|
|
163
|
+
#--------------------------------------------------
|
|
164
|
+
# Models
|
|
165
|
+
#--------------------------------------------------
|
|
166
|
+
|
|
167
|
+
def list_models(self, database: str, engine: str):
|
|
168
|
+
return api.list_databases(self._api_ctx())
|
|
169
|
+
|
|
170
|
+
def create_models(self, database: str, engine: str, models:List[Tuple[str, str]]) -> List[Any]:
|
|
171
|
+
rel_code = self.create_models_code(models)
|
|
172
|
+
results = self.exec_raw(database, engine, rel_code, readonly=False)
|
|
173
|
+
if results.problems:
|
|
174
|
+
return results.problems
|
|
175
|
+
return []
|
|
176
|
+
|
|
177
|
+
def delete_model(self, database:str, engine:str, name:str):
|
|
178
|
+
return api.delete_model(self._api_ctx(), database, engine, name)
|
|
179
|
+
|
|
180
|
+
def create_models_code(self, models:List[Tuple[str, str]]) -> str:
|
|
181
|
+
lines = []
|
|
182
|
+
for (name, code) in models:
|
|
183
|
+
name = name.replace("\"", "\\\"")
|
|
184
|
+
assert "\"\"\"\"\"\"\"" not in code, "Code literals must use fewer than 7 quotes."
|
|
185
|
+
|
|
186
|
+
lines.append(textwrap.dedent(f"""
|
|
187
|
+
def delete[:rel, :catalog, :model, "{name}"]: rel[:catalog, :model, "{name}"]
|
|
188
|
+
def insert[:rel, :catalog, :model, "{name}"]: raw\"\"\"\"\"\"\"
|
|
189
|
+
""") + code + "\n\"\"\"\"\"\"\"")
|
|
190
|
+
rel_code = "\n\n".join(lines)
|
|
191
|
+
return rel_code
|
|
192
|
+
|
|
193
|
+
#--------------------------------------------------
|
|
194
|
+
# Exports
|
|
195
|
+
#--------------------------------------------------
|
|
196
|
+
|
|
197
|
+
def list_exports(self, database: str, engine: str):
|
|
198
|
+
raise Exception("Azure doesn't support exports")
|
|
199
|
+
|
|
200
|
+
def create_export(self, params: ExportParams):
|
|
201
|
+
if not params.dry_run:
|
|
202
|
+
raise Exception("Azure doesn't support exports")
|
|
203
|
+
|
|
204
|
+
def create_export_table(self, database: str, engine: str, table: str, relation: str, columns: Dict[str, str], code: str, refresh: str|None=None):
|
|
205
|
+
raise Exception("Azure doesn't support exports")
|
|
206
|
+
|
|
207
|
+
def delete_export(self, database: str, engine: str, name: str):
|
|
208
|
+
raise Exception("Azure doesn't support exports")
|
|
209
|
+
|
|
210
|
+
#--------------------------------------------------
|
|
211
|
+
# Imports
|
|
212
|
+
#--------------------------------------------------
|
|
213
|
+
|
|
214
|
+
def list_imports(self, id:str|None = None, name:str|None = None, model:str|None = None, status:str|None = None, creator:str|None = None):
|
|
215
|
+
if not model:
|
|
216
|
+
raise RAIException("Imports can only be listed for a particular model in azure")
|
|
217
|
+
return [*list_available_resources(self, model, self.get_default_engine_name()).values()]
|
|
218
|
+
|
|
219
|
+
def poll_imports(self, sources:List[str], model:str):
|
|
220
|
+
raise Exception("Azure doesn't support import polling")
|
|
221
|
+
|
|
222
|
+
def create_import_stream(self, source:ImportSource, model:str, rate = 1, options: dict|None = None):
|
|
223
|
+
raise Exception("Azure doesn't support import streams")
|
|
224
|
+
|
|
225
|
+
def create_import_snapshot(self, source:ImportSource, model:str, options: dict|None = None):
|
|
226
|
+
assert isinstance(source, ImportSourceFile), "Azure integration only supports loading from files and URLs right now."
|
|
227
|
+
import_file(self, model, source, **(options or {}))
|
|
228
|
+
|
|
229
|
+
def delete_import(self, import_name: str, model:str, force = False):
|
|
230
|
+
res = self.exec_raw(model, self.get_default_engine_name(), emit_delete_import(import_name), False)
|
|
231
|
+
assert_no_problems(res)
|
|
232
|
+
|
|
233
|
+
def set_imports_engine_size(self, size: str):
|
|
234
|
+
raise Exception("Azure doesn't support setting imports engine size")
|
|
235
|
+
|
|
236
|
+
def change_imports_status(self, suspend:bool):
|
|
237
|
+
raise Exception("Azure doesn't support import status changes")
|
|
238
|
+
|
|
239
|
+
def get_imports_status(self):
|
|
240
|
+
return None
|
|
241
|
+
|
|
242
|
+
def change_stream_status(self, stream_id: str, model:str, suspend: bool):
|
|
243
|
+
raise Exception("Azure doesn't support stream status changes")
|
|
244
|
+
|
|
245
|
+
def get_import_stream(self, name: str|None, model:str|None):
|
|
246
|
+
raise Exception("Azure doesn't support get import streams")
|
|
247
|
+
|
|
248
|
+
#--------------------------------------------------
|
|
249
|
+
# Exec
|
|
250
|
+
#--------------------------------------------------
|
|
251
|
+
|
|
252
|
+
def _exec(self, code:str, params:List[Any]|Any|None = None, raw=False, help=True):
|
|
253
|
+
raise Exception("Azure doesn't support _exec")
|
|
254
|
+
|
|
255
|
+
def exec_lqp(self, database: str, engine: str | None, raw_code: bytes, readonly=True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None, bypass_index=False, query_timeout_mins: int | None = None):
|
|
256
|
+
raise Exception("Azure doesn't support exec_lqp")
|
|
257
|
+
|
|
258
|
+
def exec_raw(self, database:str, engine:str|None, raw_code:str, readonly=True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None, raw_results=True, query_timeout_mins: int | None = None):
|
|
259
|
+
if query_timeout_mins is not None or self.config.get("query_timeout_mins", None) is not None:
|
|
260
|
+
config_file_path = getattr(self.config, 'file_path', None)
|
|
261
|
+
raise AzureUnsupportedQueryTimeoutException(config_file_path=config_file_path)
|
|
262
|
+
if engine is None:
|
|
263
|
+
engine = self.get_default_engine_name()
|
|
264
|
+
try:
|
|
265
|
+
with debugging.span("transaction") as txn_span:
|
|
266
|
+
ctx = self._api_ctx()
|
|
267
|
+
if inputs is None:
|
|
268
|
+
inputs = {}
|
|
269
|
+
with debugging.span("create"):
|
|
270
|
+
txn = api.exec_async(ctx, database, engine, raw_code, readonly=readonly, inputs=inputs)
|
|
271
|
+
txn_id = txn.transaction["id"]
|
|
272
|
+
txn_span["txn_id"] = txn_id
|
|
273
|
+
debugging.event("transaction_created", txn_span, txn_id=txn_id)
|
|
274
|
+
|
|
275
|
+
# TODO: dedup with SDK
|
|
276
|
+
rsp = api.TransactionAsyncResponse()
|
|
277
|
+
txn = api.get_transaction(ctx, txn_id)
|
|
278
|
+
start_time = time.time()
|
|
279
|
+
|
|
280
|
+
def check_done():
|
|
281
|
+
with debugging.span("check_status"):
|
|
282
|
+
state = api.get_transaction(ctx, txn_id)["state"]
|
|
283
|
+
return api.is_txn_term_state(state)
|
|
284
|
+
|
|
285
|
+
with debugging.span("wait", txn_id=txn_id):
|
|
286
|
+
poll_with_specified_overhead(
|
|
287
|
+
check_done,
|
|
288
|
+
overhead_rate=0.1,
|
|
289
|
+
start_time=start_time,
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
# TODO: parallelize
|
|
293
|
+
with debugging.span("fetch"):
|
|
294
|
+
rsp.transaction = api.get_transaction(ctx, txn_id)
|
|
295
|
+
rsp.metadata = api.get_transaction_metadata(ctx, txn_id)
|
|
296
|
+
rsp.problems = api.get_transaction_problems(ctx, txn_id)
|
|
297
|
+
with debugging.span("fetch_results"):
|
|
298
|
+
rsp.results = api.get_transaction_results(ctx, txn_id)
|
|
299
|
+
|
|
300
|
+
return cast(TransactionAsyncResponse, rsp)
|
|
301
|
+
except HTTPError as err:
|
|
302
|
+
res = json.loads(err.read().decode())
|
|
303
|
+
# Grab request id; useful for searching logs
|
|
304
|
+
request_id = err.headers.get("x-request-id")
|
|
305
|
+
# RAI API uses a JSON payload in the body to explain why the request failed
|
|
306
|
+
# This annotates the error with that to make the exception actually useful.
|
|
307
|
+
if "engine not found" in res.get('message', ''):
|
|
308
|
+
print("") # the SDK appears to print some stuff before the error message
|
|
309
|
+
exception = EngineNotFoundException(cast(str, self.config.get('engine', "Unknown")), res.get('message'))
|
|
310
|
+
raise exception from None
|
|
311
|
+
raise RAIException("HTTPError", res.get('message', ''), f"details: {res.get('details', '')}; request_id: {request_id}")
|
|
312
|
+
|
|
313
|
+
def format_results(self, results, task:m.Task|None=None) -> Tuple[DataFrame, List[Any]]:
|
|
314
|
+
return result_helpers.format_results(results, task)
|
|
315
|
+
|
|
316
|
+
#--------------------------------------------------
|
|
317
|
+
# Exec format
|
|
318
|
+
#--------------------------------------------------
|
|
319
|
+
|
|
320
|
+
def exec_format(self, database: str, engine: str, raw_code: str, cols:List[str], format:str, inputs: Dict | None = None, readonly: bool = True, nowait_durable=False, skip_invalid_data=False, headers: Dict | None = None, query_timeout_mins: int | None = None) -> Any: # @FIXME: Better type annotation
|
|
321
|
+
raise Exception("Azure doesn't support alternative formats yet")
|
|
322
|
+
|
|
323
|
+
def to_model_type(self, model:dsl.Graph, name: str, source:str):
|
|
324
|
+
raise Exception("Azure doesn't support import types yet")
|
|
325
|
+
|
|
326
|
+
#--------------------------------------------------
|
|
327
|
+
# Transactions
|
|
328
|
+
#--------------------------------------------------
|
|
329
|
+
|
|
330
|
+
def get_transaction(self, transaction_id):
|
|
331
|
+
txn = api.get_transaction(self._api_ctx(), transaction_id)
|
|
332
|
+
if not txn:
|
|
333
|
+
return None
|
|
334
|
+
created_on = txn.get("created_on")
|
|
335
|
+
finished_at = txn.get("finished_at")
|
|
336
|
+
duration = txn.get("duration")
|
|
337
|
+
if duration:
|
|
338
|
+
txn["duration"] = timedelta(milliseconds=duration)
|
|
339
|
+
elif created_on:
|
|
340
|
+
txn["duration"] = datetime.now() - datetime.fromtimestamp(created_on / 1000)
|
|
341
|
+
if created_on:
|
|
342
|
+
txn["created_on"] = datetime.fromtimestamp(created_on / 1000)
|
|
343
|
+
if finished_at:
|
|
344
|
+
txn["finished_at"] = datetime.fromtimestamp(finished_at / 1000)
|
|
345
|
+
# Remap based on the fields we care about
|
|
346
|
+
result = {TXN_REPLACE_MAP.get(k, k): v for k, v in txn.items() if k in TXN_FIELDS}
|
|
347
|
+
return result
|
|
348
|
+
|
|
349
|
+
def remap_fields(self, transactions):
|
|
350
|
+
if not transactions:
|
|
351
|
+
return []
|
|
352
|
+
for transaction in transactions:
|
|
353
|
+
for key in list(transaction.keys()):
|
|
354
|
+
if key in TXN_REPLACE_MAP:
|
|
355
|
+
transaction[TXN_REPLACE_MAP[key]] = transaction.pop(key)
|
|
356
|
+
return transactions
|
|
357
|
+
|
|
358
|
+
def list_transactions(self, **kwargs):
|
|
359
|
+
TERMINAL_STATES = ["COMPLETED", "ABORTED"]
|
|
360
|
+
VALID_KEYS = ["id", "state", "engine"]
|
|
361
|
+
|
|
362
|
+
state = kwargs.get("state")
|
|
363
|
+
only_active = kwargs.get("only_active", False)
|
|
364
|
+
options = {}
|
|
365
|
+
|
|
366
|
+
# Azure sdk supports more than just VALID_KEYS as filters but for now we pass through those
|
|
367
|
+
for k, v in kwargs.items():
|
|
368
|
+
if k in VALID_KEYS and v is not None:
|
|
369
|
+
# Only pass state if it is a valid terminal state
|
|
370
|
+
if k == "state" and v.upper() in TERMINAL_STATES:
|
|
371
|
+
options[k] = v.upper()
|
|
372
|
+
if k != "state":
|
|
373
|
+
if k == "engine":
|
|
374
|
+
k = "engine_name"
|
|
375
|
+
options[k] = v
|
|
376
|
+
# In Azure we store transactions in cosmos and consul
|
|
377
|
+
# Cosmos if the state is terminal (COMPLETED or ABORTED) and Consul if the state is not (e.g. "RUNNING")
|
|
378
|
+
# So we can not filter on active non terminal states via the options passed
|
|
379
|
+
transactions = api.list_transactions(self._api_ctx(), **options)
|
|
380
|
+
|
|
381
|
+
if not transactions:
|
|
382
|
+
return []
|
|
383
|
+
# We filter non terminal transactions here
|
|
384
|
+
if only_active:
|
|
385
|
+
transactions = [t for t in transactions if t["state"] in ["CREATED", "RUNNING", "PENDING"]]
|
|
386
|
+
if (isinstance(state, str) and state.upper() not in TERMINAL_STATES):
|
|
387
|
+
transactions = [t for t in transactions if t["state"] in [state.upper()]]
|
|
388
|
+
return self.remap_fields(transactions)
|
|
389
|
+
|
|
390
|
+
def cancel_transaction(self, transaction_id):
|
|
391
|
+
return api.cancel_transaction(self._api_ctx(), transaction_id)
|
|
392
|
+
|
|
393
|
+
def cancel_pending_transactions(self):
|
|
394
|
+
# all transactions are executed synchronously against azure
|
|
395
|
+
pass
|
|
396
|
+
|
|
397
|
+
def get_transaction_events(self, transaction_id:str, continuation_token:str):
|
|
398
|
+
return api._get_resource(
|
|
399
|
+
self._api_ctx(),
|
|
400
|
+
f"/transactions/{transaction_id}/events/profiler?continuation_token={continuation_token}",
|
|
401
|
+
)
|
|
402
|
+
|
|
403
|
+
def is_account_flag_set(self, flag: str):
|
|
404
|
+
raise Exception("Azure doesn't support account flags")
|
|
405
|
+
|
|
406
|
+
def is_direct_access_enabled(self) -> bool:
|
|
407
|
+
raise Exception("Azure doesn't support direct access")
|
|
408
|
+
#--------------------------------------------------
|
|
409
|
+
# Provider
|
|
410
|
+
#--------------------------------------------------
|
|
411
|
+
|
|
412
|
+
class Provider(ProviderBase):
|
|
413
|
+
|
|
414
|
+
def __init__(
|
|
415
|
+
self,
|
|
416
|
+
profile: str | None = None,
|
|
417
|
+
config: Config | None = None,
|
|
418
|
+
resources: Resources | None = None,
|
|
419
|
+
):
|
|
420
|
+
if resources:
|
|
421
|
+
self.resources = resources
|
|
422
|
+
else:
|
|
423
|
+
self.resources = Resources(profile, config)
|
|
424
|
+
|
|
425
|
+
#--------------------------------------------------
|
|
426
|
+
# Graph
|
|
427
|
+
#--------------------------------------------------
|
|
428
|
+
|
|
429
|
+
def Graph(name, *, profile:str|None=None, config:Config, dry_run:bool=False, isolated=True, keep_model:bool=False, format="default"):
|
|
430
|
+
use_monotype_operators = config.get("compiler.use_monotype_operators", False)
|
|
431
|
+
|
|
432
|
+
client = Client(
|
|
433
|
+
Resources(profile, config),
|
|
434
|
+
rel.Compiler(config),
|
|
435
|
+
name,
|
|
436
|
+
config,
|
|
437
|
+
dry_run=dry_run,
|
|
438
|
+
isolated=isolated,
|
|
439
|
+
keep_model=keep_model,
|
|
440
|
+
)
|
|
441
|
+
base_rel = """
|
|
442
|
+
@inline
|
|
443
|
+
def make_identity(x..., z):
|
|
444
|
+
rel_primitive_hash_tuple_uint128(x..., z)
|
|
445
|
+
|
|
446
|
+
@inline
|
|
447
|
+
def pyrel_default({F}, c, k..., v):
|
|
448
|
+
F(k..., v) or (not F(k..., _) and v = c)
|
|
449
|
+
|
|
450
|
+
@inline
|
|
451
|
+
def pyrel_unwrap(x in UInt128, y): y = x
|
|
452
|
+
|
|
453
|
+
@inline
|
|
454
|
+
def pyrel_dates_period_days(x in Date, y in Date, z in Int):
|
|
455
|
+
exists((u) | dates_period_days(x, y , u) and u = ^Day[z])
|
|
456
|
+
|
|
457
|
+
@inline
|
|
458
|
+
def pyrel_datetimes_period_milliseconds(x in DateTime, y in DateTime, z in Int):
|
|
459
|
+
exists((u) | datetimes_period_milliseconds(x, y , u) and u = ^Millisecond[z])
|
|
460
|
+
|
|
461
|
+
@inline
|
|
462
|
+
def pyrel_bool_filter(a, b, {F}, z): { z = if_then_else[F(a, b), boolean_true, boolean_false] }
|
|
463
|
+
|
|
464
|
+
@inline
|
|
465
|
+
def pyrel_strftime(v, fmt, tz in String, s in String):
|
|
466
|
+
(Date(v) and s = format_date[v, fmt])
|
|
467
|
+
or (DateTime(v) and s = format_datetime[v, fmt, tz])
|
|
468
|
+
|
|
469
|
+
@inline
|
|
470
|
+
def pyrel_regex_match_all(pattern, string in String, pos in Int, offset in Int, match in String):
|
|
471
|
+
regex_match_all(pattern, string, offset, match) and offset >= pos
|
|
472
|
+
|
|
473
|
+
@inline
|
|
474
|
+
def pyrel_regex_match(pattern, string in String, pos in Int, offset in Int, match in String):
|
|
475
|
+
pyrel_regex_match_all(pattern, string, pos, offset, match) and offset = pos
|
|
476
|
+
|
|
477
|
+
@inline
|
|
478
|
+
def pyrel_regex_search(pattern, string in String, pos in Int, offset in Int, match in String):
|
|
479
|
+
enumerate(pyrel_regex_match_all[pattern, string, pos], 1, offset, match)
|
|
480
|
+
|
|
481
|
+
@inline
|
|
482
|
+
def pyrel_regex_sub(pattern, repl in String, string in String, result in String):
|
|
483
|
+
string_replace_multiple(string, {(last[regex_match_all[pattern, string]], repl)}, result)
|
|
484
|
+
|
|
485
|
+
@inline
|
|
486
|
+
def pyrel_capture_group(regex in Pattern, string in String, pos in Int, index, match in String):
|
|
487
|
+
(Integer(index) and capture_group_by_index(regex, string, pos, index, match)) or
|
|
488
|
+
(String(index) and capture_group_by_name(regex, string, pos, index, match))
|
|
489
|
+
|
|
490
|
+
declare __resource
|
|
491
|
+
declare __compiled_patterns
|
|
492
|
+
"""
|
|
493
|
+
if use_monotype_operators:
|
|
494
|
+
base_rel += """
|
|
495
|
+
|
|
496
|
+
// use monotyped operators
|
|
497
|
+
from ::std::monotype import +, -, *, /, <, <=, >, >=
|
|
498
|
+
"""
|
|
499
|
+
pyrel_base = dsl.build.raw_task(base_rel)
|
|
500
|
+
debugging.set_source(pyrel_base)
|
|
501
|
+
client.install("pyrel_base", pyrel_base)
|
|
502
|
+
return dsl.Graph(client, name, format=format)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Snowflake resources module.
|
|
3
|
+
"""
|
|
4
|
+
# Import order matters - Resources must be imported first since other classes depend on it
|
|
5
|
+
from .snowflake import Resources, Provider, Graph, SnowflakeClient, APP_NAME, PYREL_ROOT_DB, ExecContext, PrimaryKey, PRINT_TXN_PROGRESS_FLAG
|
|
6
|
+
from .engine_service import EngineType, INTERNAL_ENGINE_SIZES, ENGINE_SIZES_AWS, ENGINE_SIZES_AZURE
|
|
7
|
+
# These imports depend on Resources, so they come after
|
|
8
|
+
from .cli_resources import CLIResources
|
|
9
|
+
from .use_index_resources import UseIndexResources
|
|
10
|
+
from .direct_access_resources import DirectAccessResources
|
|
11
|
+
from .resources_factory import create_resources_instance
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
'Resources', 'DirectAccessResources', 'Provider', 'Graph', 'SnowflakeClient',
|
|
15
|
+
'APP_NAME', 'PYREL_ROOT_DB', 'CLIResources', 'UseIndexResources', 'ExecContext', 'EngineType',
|
|
16
|
+
'INTERNAL_ENGINE_SIZES', 'ENGINE_SIZES_AWS', 'ENGINE_SIZES_AZURE', 'PrimaryKey',
|
|
17
|
+
'PRINT_TXN_PROGRESS_FLAG', 'create_resources_instance',
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CLI Resources - Resources class for CLI operations.
|
|
3
|
+
Re-raises exceptions without transformation and provides CLI utility methods.
|
|
4
|
+
"""
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import json
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from ....tools.constants import RAI_APP_NAME
|
|
10
|
+
|
|
11
|
+
# Import Resources from snowflake - this creates a dependency but no circular import
|
|
12
|
+
# since snowflake.py doesn't import from this file
|
|
13
|
+
from .snowflake import Resources, ExecContext
|
|
14
|
+
from .error_handlers import AppMissingErrorHandler, AppFunctionMissingErrorHandler, ServiceNotStartedErrorHandler
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class CLIResources(Resources):
|
|
18
|
+
"""
|
|
19
|
+
Resources class for CLI operations.
|
|
20
|
+
Re-raises exceptions without transformation and provides CLI utility methods.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def _handle_standard_exec_errors(self, e: Exception, ctx: ExecContext) -> Any | None:
|
|
24
|
+
"""
|
|
25
|
+
For CLI resources, keep exceptions raw except for few specific cases.
|
|
26
|
+
"""
|
|
27
|
+
message = str(e).lower()
|
|
28
|
+
for handler in (
|
|
29
|
+
ServiceNotStartedErrorHandler(),
|
|
30
|
+
AppMissingErrorHandler(),
|
|
31
|
+
AppFunctionMissingErrorHandler(),
|
|
32
|
+
):
|
|
33
|
+
if handler.matches(e, message, ctx, self):
|
|
34
|
+
handler.handle(e, ctx, self)
|
|
35
|
+
raise e
|
|
36
|
+
|
|
37
|
+
def list_warehouses(self):
|
|
38
|
+
"""List all warehouses in the Snowflake account."""
|
|
39
|
+
results = self._exec("SHOW WAREHOUSES")
|
|
40
|
+
if not results:
|
|
41
|
+
return []
|
|
42
|
+
return [{"name": name}
|
|
43
|
+
for (name, *rest) in results]
|
|
44
|
+
|
|
45
|
+
def list_compute_pools(self):
|
|
46
|
+
"""List all compute pools in the Snowflake account."""
|
|
47
|
+
results = self._exec("SHOW COMPUTE POOLS")
|
|
48
|
+
if not results:
|
|
49
|
+
return []
|
|
50
|
+
return [{"name": name, "status": status, "min_nodes": min_nodes, "max_nodes": max_nodes, "instance_family": instance_family}
|
|
51
|
+
for (name, status, min_nodes, max_nodes, instance_family, *rest) in results]
|
|
52
|
+
|
|
53
|
+
def list_roles(self):
|
|
54
|
+
"""List all available roles in the Snowflake account."""
|
|
55
|
+
results = self._exec("SELECT CURRENT_AVAILABLE_ROLES()")
|
|
56
|
+
if not results:
|
|
57
|
+
return []
|
|
58
|
+
# the response is a single row with a single column containing
|
|
59
|
+
# a stringified JSON array of role names:
|
|
60
|
+
row = results[0]
|
|
61
|
+
if not row:
|
|
62
|
+
return []
|
|
63
|
+
return [{"name": name} for name in json.loads(row[0])]
|
|
64
|
+
|
|
65
|
+
def list_apps(self):
|
|
66
|
+
"""List all applications in the Snowflake account."""
|
|
67
|
+
all_apps = self._exec(f"SHOW APPLICATIONS LIKE '{RAI_APP_NAME}'")
|
|
68
|
+
if not all_apps:
|
|
69
|
+
all_apps = self._exec("SHOW APPLICATIONS")
|
|
70
|
+
if not all_apps:
|
|
71
|
+
return []
|
|
72
|
+
return [{"name": name}
|
|
73
|
+
for (time, name, *rest) in all_apps]
|
|
74
|
+
|
|
75
|
+
def list_databases(self):
|
|
76
|
+
"""List all databases in the Snowflake account."""
|
|
77
|
+
results = self._exec("SHOW DATABASES")
|
|
78
|
+
if not results:
|
|
79
|
+
return []
|
|
80
|
+
return [{"name": name}
|
|
81
|
+
for (time, name, *rest) in results]
|
|
82
|
+
|
|
83
|
+
def list_sf_schemas(self, database: str):
|
|
84
|
+
"""List all schemas in a given database."""
|
|
85
|
+
results = self._exec(f"SHOW SCHEMAS IN {database}")
|
|
86
|
+
if not results:
|
|
87
|
+
return []
|
|
88
|
+
return [{"name": name}
|
|
89
|
+
for (time, name, *rest) in results]
|
|
90
|
+
|
|
91
|
+
def list_tables(self, database: str, schema: str):
|
|
92
|
+
"""List all tables and views in a given schema."""
|
|
93
|
+
results = self._exec(f"SHOW OBJECTS IN {database}.{schema}")
|
|
94
|
+
items = []
|
|
95
|
+
if results:
|
|
96
|
+
for (time, name, db_name, schema_name, kind, *rest) in results:
|
|
97
|
+
items.append({"name": name, "kind": kind.lower()})
|
|
98
|
+
return items
|