relationalai 0.13.5__py3-none-any.whl → 1.0.0a2__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.
- relationalai/__init__.py +1 -256
- relationalai/config/__init__.py +56 -0
- relationalai/config/config.py +289 -0
- relationalai/config/config_fields.py +86 -0
- relationalai/config/connections/__init__.py +46 -0
- relationalai/config/connections/base.py +23 -0
- relationalai/config/connections/duckdb.py +29 -0
- relationalai/config/connections/snowflake.py +243 -0
- relationalai/config/external/__init__.py +17 -0
- relationalai/config/external/dbt_converter.py +101 -0
- relationalai/config/external/dbt_models.py +93 -0
- relationalai/config/external/snowflake_converter.py +41 -0
- relationalai/config/external/snowflake_models.py +85 -0
- relationalai/config/external/utils.py +19 -0
- relationalai/config/shims.py +1 -0
- relationalai/semantics/__init__.py +146 -22
- relationalai/semantics/backends/lqp/annotations.py +11 -0
- relationalai/semantics/backends/sql/sql_compiler.py +327 -0
- relationalai/semantics/frontend/base.py +1719 -0
- relationalai/semantics/frontend/core.py +179 -0
- relationalai/semantics/frontend/front_compiler.py +1316 -0
- relationalai/semantics/frontend/pprint.py +408 -0
- relationalai/semantics/metamodel/__init__.py +6 -40
- relationalai/semantics/metamodel/builtins.py +206 -772
- relationalai/semantics/metamodel/metamodel.py +465 -0
- relationalai/semantics/metamodel/metamodel_analyzer.py +519 -0
- relationalai/semantics/metamodel/pprint.py +414 -0
- relationalai/semantics/metamodel/rewriter.py +266 -0
- relationalai/semantics/metamodel/typer.py +1213 -0
- relationalai/semantics/std/__init__.py +60 -40
- relationalai/semantics/std/aggregates.py +148 -0
- relationalai/semantics/std/common.py +44 -0
- relationalai/semantics/std/constraints.py +37 -43
- relationalai/semantics/std/datetime.py +249 -135
- relationalai/semantics/std/decimals.py +45 -52
- relationalai/semantics/std/floats.py +13 -5
- relationalai/semantics/std/integers.py +26 -11
- relationalai/semantics/std/math.py +183 -112
- relationalai/semantics/std/numbers.py +86 -0
- relationalai/semantics/std/re.py +80 -62
- relationalai/semantics/std/strings.py +101 -46
- relationalai/shims/executor.py +179 -0
- relationalai/shims/helpers.py +126 -0
- relationalai/shims/hoister.py +221 -0
- relationalai/shims/mm2v0.py +1394 -0
- relationalai/tools/cli/__init__.py +6 -0
- relationalai/tools/cli/cli.py +90 -0
- relationalai/tools/cli/components/__init__.py +5 -0
- relationalai/tools/cli/components/progress_reader.py +1524 -0
- relationalai/tools/cli/components/utils.py +58 -0
- relationalai/tools/cli/config_template.py +45 -0
- relationalai/tools/cli/dev.py +19 -0
- relationalai/tools/debugger.py +289 -183
- relationalai/tools/typer_debugger.py +93 -0
- relationalai/util/dataclasses.py +43 -0
- relationalai/util/docutils.py +40 -0
- relationalai/util/error.py +199 -0
- relationalai/util/format.py +48 -109
- relationalai/util/naming.py +145 -0
- relationalai/util/python.py +35 -0
- relationalai/util/runtime.py +156 -0
- relationalai/util/schema.py +197 -0
- relationalai/util/source.py +185 -0
- relationalai/util/structures.py +163 -0
- relationalai/util/tracing.py +261 -0
- relationalai-1.0.0a2.dist-info/METADATA +44 -0
- relationalai-1.0.0a2.dist-info/RECORD +489 -0
- relationalai-1.0.0a2.dist-info/WHEEL +5 -0
- relationalai-1.0.0a2.dist-info/entry_points.txt +3 -0
- relationalai-1.0.0a2.dist-info/top_level.txt +2 -0
- v0/relationalai/__init__.py +216 -0
- v0/relationalai/clients/__init__.py +5 -0
- v0/relationalai/clients/azure.py +477 -0
- v0/relationalai/clients/client.py +912 -0
- v0/relationalai/clients/config.py +673 -0
- v0/relationalai/clients/direct_access_client.py +118 -0
- v0/relationalai/clients/hash_util.py +31 -0
- v0/relationalai/clients/local.py +571 -0
- v0/relationalai/clients/profile_polling.py +73 -0
- v0/relationalai/clients/result_helpers.py +420 -0
- v0/relationalai/clients/snowflake.py +3869 -0
- v0/relationalai/clients/types.py +113 -0
- v0/relationalai/clients/use_index_poller.py +980 -0
- v0/relationalai/clients/util.py +356 -0
- v0/relationalai/debugging.py +389 -0
- v0/relationalai/dsl.py +1749 -0
- v0/relationalai/early_access/builder/__init__.py +30 -0
- v0/relationalai/early_access/builder/builder/__init__.py +35 -0
- v0/relationalai/early_access/builder/snowflake/__init__.py +12 -0
- v0/relationalai/early_access/builder/std/__init__.py +25 -0
- v0/relationalai/early_access/builder/std/decimals/__init__.py +12 -0
- v0/relationalai/early_access/builder/std/integers/__init__.py +12 -0
- v0/relationalai/early_access/builder/std/math/__init__.py +12 -0
- v0/relationalai/early_access/builder/std/strings/__init__.py +14 -0
- v0/relationalai/early_access/devtools/__init__.py +12 -0
- v0/relationalai/early_access/devtools/benchmark_lqp/__init__.py +12 -0
- v0/relationalai/early_access/devtools/extract_lqp/__init__.py +12 -0
- v0/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +427 -0
- v0/relationalai/early_access/dsl/adapters/orm/parser.py +636 -0
- v0/relationalai/early_access/dsl/adapters/owl/adapter.py +176 -0
- v0/relationalai/early_access/dsl/adapters/owl/parser.py +160 -0
- v0/relationalai/early_access/dsl/bindings/common.py +402 -0
- v0/relationalai/early_access/dsl/bindings/csv.py +170 -0
- v0/relationalai/early_access/dsl/bindings/legacy/binding_models.py +143 -0
- v0/relationalai/early_access/dsl/bindings/snowflake.py +64 -0
- v0/relationalai/early_access/dsl/codegen/binder.py +411 -0
- v0/relationalai/early_access/dsl/codegen/common.py +79 -0
- v0/relationalai/early_access/dsl/codegen/helpers.py +23 -0
- v0/relationalai/early_access/dsl/codegen/relations.py +700 -0
- v0/relationalai/early_access/dsl/codegen/weaver.py +417 -0
- v0/relationalai/early_access/dsl/core/builders/__init__.py +47 -0
- v0/relationalai/early_access/dsl/core/builders/logic.py +19 -0
- v0/relationalai/early_access/dsl/core/builders/scalar_constraint.py +11 -0
- v0/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +455 -0
- v0/relationalai/early_access/dsl/core/constraints/predicate/universal.py +73 -0
- v0/relationalai/early_access/dsl/core/constraints/scalar.py +310 -0
- v0/relationalai/early_access/dsl/core/context.py +13 -0
- v0/relationalai/early_access/dsl/core/cset.py +132 -0
- v0/relationalai/early_access/dsl/core/exprs/__init__.py +116 -0
- v0/relationalai/early_access/dsl/core/exprs/relational.py +18 -0
- v0/relationalai/early_access/dsl/core/exprs/scalar.py +412 -0
- v0/relationalai/early_access/dsl/core/instances.py +44 -0
- v0/relationalai/early_access/dsl/core/logic/__init__.py +193 -0
- v0/relationalai/early_access/dsl/core/logic/aggregation.py +98 -0
- v0/relationalai/early_access/dsl/core/logic/exists.py +223 -0
- v0/relationalai/early_access/dsl/core/logic/helper.py +163 -0
- v0/relationalai/early_access/dsl/core/namespaces.py +32 -0
- v0/relationalai/early_access/dsl/core/relations.py +276 -0
- v0/relationalai/early_access/dsl/core/rules.py +112 -0
- v0/relationalai/early_access/dsl/core/std/__init__.py +45 -0
- v0/relationalai/early_access/dsl/core/temporal/recall.py +6 -0
- v0/relationalai/early_access/dsl/core/types/__init__.py +270 -0
- v0/relationalai/early_access/dsl/core/types/concepts.py +128 -0
- v0/relationalai/early_access/dsl/core/types/constrained/__init__.py +267 -0
- v0/relationalai/early_access/dsl/core/types/constrained/nominal.py +143 -0
- v0/relationalai/early_access/dsl/core/types/constrained/subtype.py +124 -0
- v0/relationalai/early_access/dsl/core/types/standard.py +92 -0
- v0/relationalai/early_access/dsl/core/types/unconstrained.py +50 -0
- v0/relationalai/early_access/dsl/core/types/variables.py +203 -0
- v0/relationalai/early_access/dsl/ir/compiler.py +318 -0
- v0/relationalai/early_access/dsl/ir/executor.py +260 -0
- v0/relationalai/early_access/dsl/ontologies/constraints.py +88 -0
- v0/relationalai/early_access/dsl/ontologies/export.py +30 -0
- v0/relationalai/early_access/dsl/ontologies/models.py +453 -0
- v0/relationalai/early_access/dsl/ontologies/python_printer.py +303 -0
- v0/relationalai/early_access/dsl/ontologies/readings.py +60 -0
- v0/relationalai/early_access/dsl/ontologies/relationships.py +322 -0
- v0/relationalai/early_access/dsl/ontologies/roles.py +87 -0
- v0/relationalai/early_access/dsl/ontologies/subtyping.py +55 -0
- v0/relationalai/early_access/dsl/orm/constraints.py +438 -0
- v0/relationalai/early_access/dsl/orm/measures/dimensions.py +200 -0
- v0/relationalai/early_access/dsl/orm/measures/initializer.py +16 -0
- v0/relationalai/early_access/dsl/orm/measures/measure_rules.py +275 -0
- v0/relationalai/early_access/dsl/orm/measures/measures.py +299 -0
- v0/relationalai/early_access/dsl/orm/measures/role_exprs.py +268 -0
- v0/relationalai/early_access/dsl/orm/models.py +256 -0
- v0/relationalai/early_access/dsl/orm/object_oriented_printer.py +344 -0
- v0/relationalai/early_access/dsl/orm/printer.py +469 -0
- v0/relationalai/early_access/dsl/orm/reasoners.py +480 -0
- v0/relationalai/early_access/dsl/orm/relations.py +19 -0
- v0/relationalai/early_access/dsl/orm/relationships.py +251 -0
- v0/relationalai/early_access/dsl/orm/types.py +42 -0
- v0/relationalai/early_access/dsl/orm/utils.py +79 -0
- v0/relationalai/early_access/dsl/orm/verb.py +204 -0
- v0/relationalai/early_access/dsl/physical_metadata/tables.py +133 -0
- v0/relationalai/early_access/dsl/relations.py +170 -0
- v0/relationalai/early_access/dsl/rulesets.py +69 -0
- v0/relationalai/early_access/dsl/schemas/__init__.py +450 -0
- v0/relationalai/early_access/dsl/schemas/builder.py +48 -0
- v0/relationalai/early_access/dsl/schemas/comp_names.py +51 -0
- v0/relationalai/early_access/dsl/schemas/components.py +203 -0
- v0/relationalai/early_access/dsl/schemas/contexts.py +156 -0
- v0/relationalai/early_access/dsl/schemas/exprs.py +89 -0
- v0/relationalai/early_access/dsl/schemas/fragments.py +464 -0
- v0/relationalai/early_access/dsl/serialization.py +79 -0
- v0/relationalai/early_access/dsl/serialize/exporter.py +163 -0
- v0/relationalai/early_access/dsl/snow/api.py +104 -0
- v0/relationalai/early_access/dsl/snow/common.py +76 -0
- v0/relationalai/early_access/dsl/state_mgmt/__init__.py +129 -0
- v0/relationalai/early_access/dsl/state_mgmt/state_charts.py +125 -0
- v0/relationalai/early_access/dsl/state_mgmt/transitions.py +130 -0
- v0/relationalai/early_access/dsl/types/__init__.py +40 -0
- v0/relationalai/early_access/dsl/types/concepts.py +12 -0
- v0/relationalai/early_access/dsl/types/entities.py +135 -0
- v0/relationalai/early_access/dsl/types/values.py +17 -0
- v0/relationalai/early_access/dsl/utils.py +102 -0
- v0/relationalai/early_access/graphs/__init__.py +13 -0
- v0/relationalai/early_access/lqp/__init__.py +12 -0
- v0/relationalai/early_access/lqp/compiler/__init__.py +12 -0
- v0/relationalai/early_access/lqp/constructors/__init__.py +18 -0
- v0/relationalai/early_access/lqp/executor/__init__.py +12 -0
- v0/relationalai/early_access/lqp/ir/__init__.py +12 -0
- v0/relationalai/early_access/lqp/passes/__init__.py +12 -0
- v0/relationalai/early_access/lqp/pragmas/__init__.py +12 -0
- v0/relationalai/early_access/lqp/primitives/__init__.py +12 -0
- v0/relationalai/early_access/lqp/types/__init__.py +12 -0
- v0/relationalai/early_access/lqp/utils/__init__.py +12 -0
- v0/relationalai/early_access/lqp/validators/__init__.py +12 -0
- v0/relationalai/early_access/metamodel/__init__.py +58 -0
- v0/relationalai/early_access/metamodel/builtins/__init__.py +12 -0
- v0/relationalai/early_access/metamodel/compiler/__init__.py +12 -0
- v0/relationalai/early_access/metamodel/dependency/__init__.py +12 -0
- v0/relationalai/early_access/metamodel/factory/__init__.py +17 -0
- v0/relationalai/early_access/metamodel/helpers/__init__.py +12 -0
- v0/relationalai/early_access/metamodel/ir/__init__.py +14 -0
- v0/relationalai/early_access/metamodel/rewrite/__init__.py +7 -0
- v0/relationalai/early_access/metamodel/typer/__init__.py +3 -0
- v0/relationalai/early_access/metamodel/typer/typer/__init__.py +12 -0
- v0/relationalai/early_access/metamodel/types/__init__.py +15 -0
- v0/relationalai/early_access/metamodel/util/__init__.py +15 -0
- v0/relationalai/early_access/metamodel/visitor/__init__.py +12 -0
- v0/relationalai/early_access/rel/__init__.py +12 -0
- v0/relationalai/early_access/rel/executor/__init__.py +12 -0
- v0/relationalai/early_access/rel/rel_utils/__init__.py +12 -0
- v0/relationalai/early_access/rel/rewrite/__init__.py +7 -0
- v0/relationalai/early_access/solvers/__init__.py +19 -0
- v0/relationalai/early_access/sql/__init__.py +11 -0
- v0/relationalai/early_access/sql/executor/__init__.py +3 -0
- v0/relationalai/early_access/sql/rewrite/__init__.py +3 -0
- v0/relationalai/early_access/tests/logging/__init__.py +12 -0
- v0/relationalai/early_access/tests/test_snapshot_base/__init__.py +12 -0
- v0/relationalai/early_access/tests/utils/__init__.py +12 -0
- v0/relationalai/environments/__init__.py +35 -0
- v0/relationalai/environments/base.py +381 -0
- v0/relationalai/environments/colab.py +14 -0
- v0/relationalai/environments/generic.py +71 -0
- v0/relationalai/environments/ipython.py +68 -0
- v0/relationalai/environments/jupyter.py +9 -0
- v0/relationalai/environments/snowbook.py +169 -0
- v0/relationalai/errors.py +2478 -0
- v0/relationalai/experimental/SF.py +38 -0
- v0/relationalai/experimental/inspect.py +47 -0
- v0/relationalai/experimental/pathfinder/__init__.py +158 -0
- v0/relationalai/experimental/pathfinder/api.py +160 -0
- v0/relationalai/experimental/pathfinder/automaton.py +584 -0
- v0/relationalai/experimental/pathfinder/bridge.py +226 -0
- v0/relationalai/experimental/pathfinder/compiler.py +416 -0
- v0/relationalai/experimental/pathfinder/datalog.py +214 -0
- v0/relationalai/experimental/pathfinder/diagnostics.py +56 -0
- v0/relationalai/experimental/pathfinder/filter.py +236 -0
- v0/relationalai/experimental/pathfinder/glushkov.py +439 -0
- v0/relationalai/experimental/pathfinder/options.py +265 -0
- v0/relationalai/experimental/pathfinder/rpq.py +344 -0
- v0/relationalai/experimental/pathfinder/transition.py +200 -0
- v0/relationalai/experimental/pathfinder/utils.py +26 -0
- v0/relationalai/experimental/paths/api.py +143 -0
- v0/relationalai/experimental/paths/benchmarks/grid_graph.py +37 -0
- v0/relationalai/experimental/paths/examples/basic_example.py +40 -0
- v0/relationalai/experimental/paths/examples/minimal_engine_warmup.py +3 -0
- v0/relationalai/experimental/paths/examples/movie_example.py +77 -0
- v0/relationalai/experimental/paths/examples/paths_benchmark.py +115 -0
- v0/relationalai/experimental/paths/examples/paths_example.py +116 -0
- v0/relationalai/experimental/paths/examples/pattern_to_automaton.py +28 -0
- v0/relationalai/experimental/paths/find_paths_via_automaton.py +85 -0
- v0/relationalai/experimental/paths/graph.py +185 -0
- v0/relationalai/experimental/paths/path_algorithms/find_paths.py +280 -0
- v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +26 -0
- v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +111 -0
- v0/relationalai/experimental/paths/path_algorithms/single.py +59 -0
- v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +39 -0
- v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +103 -0
- v0/relationalai/experimental/paths/path_algorithms/usp-old.py +130 -0
- v0/relationalai/experimental/paths/path_algorithms/usp-tuple.py +183 -0
- v0/relationalai/experimental/paths/path_algorithms/usp.py +150 -0
- v0/relationalai/experimental/paths/product_graph.py +93 -0
- v0/relationalai/experimental/paths/rpq/automaton.py +584 -0
- v0/relationalai/experimental/paths/rpq/diagnostics.py +56 -0
- v0/relationalai/experimental/paths/rpq/rpq.py +378 -0
- v0/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +90 -0
- v0/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +119 -0
- v0/relationalai/experimental/paths/tests/tests_limit_sp_single.py +104 -0
- v0/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +113 -0
- v0/relationalai/experimental/paths/tests/tests_limit_walks_single.py +149 -0
- v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +70 -0
- v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +64 -0
- v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +115 -0
- v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +75 -0
- v0/relationalai/experimental/paths/tests/tests_single_paths.py +152 -0
- v0/relationalai/experimental/paths/tests/tests_single_walks.py +208 -0
- v0/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +297 -0
- v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +107 -0
- v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +76 -0
- v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +76 -0
- v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +110 -0
- v0/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +229 -0
- v0/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +108 -0
- v0/relationalai/experimental/paths/tree_agg.py +168 -0
- v0/relationalai/experimental/paths/utilities/iterators.py +27 -0
- v0/relationalai/experimental/paths/utilities/prefix_sum.py +91 -0
- v0/relationalai/experimental/solvers.py +1087 -0
- v0/relationalai/loaders/csv.py +195 -0
- v0/relationalai/loaders/loader.py +177 -0
- v0/relationalai/loaders/types.py +23 -0
- v0/relationalai/rel_emitter.py +373 -0
- v0/relationalai/rel_utils.py +185 -0
- v0/relationalai/semantics/__init__.py +29 -0
- v0/relationalai/semantics/devtools/benchmark_lqp.py +536 -0
- v0/relationalai/semantics/devtools/compilation_manager.py +294 -0
- v0/relationalai/semantics/devtools/extract_lqp.py +110 -0
- v0/relationalai/semantics/internal/internal.py +3785 -0
- v0/relationalai/semantics/internal/snowflake.py +325 -0
- v0/relationalai/semantics/lqp/builtins.py +16 -0
- v0/relationalai/semantics/lqp/compiler.py +22 -0
- v0/relationalai/semantics/lqp/constructors.py +68 -0
- v0/relationalai/semantics/lqp/executor.py +474 -0
- v0/relationalai/semantics/lqp/intrinsics.py +24 -0
- v0/relationalai/semantics/lqp/ir.py +124 -0
- v0/relationalai/semantics/lqp/model2lqp.py +877 -0
- v0/relationalai/semantics/lqp/passes.py +680 -0
- v0/relationalai/semantics/lqp/primitives.py +252 -0
- v0/relationalai/semantics/lqp/result_helpers.py +202 -0
- v0/relationalai/semantics/lqp/rewrite/__init__.py +18 -0
- v0/relationalai/semantics/lqp/rewrite/annotate_constraints.py +57 -0
- v0/relationalai/semantics/lqp/rewrite/cdc.py +216 -0
- v0/relationalai/semantics/lqp/rewrite/extract_common.py +338 -0
- v0/relationalai/semantics/lqp/rewrite/extract_keys.py +490 -0
- v0/relationalai/semantics/lqp/rewrite/function_annotations.py +114 -0
- v0/relationalai/semantics/lqp/rewrite/functional_dependencies.py +314 -0
- v0/relationalai/semantics/lqp/rewrite/quantify_vars.py +296 -0
- v0/relationalai/semantics/lqp/rewrite/splinter.py +76 -0
- v0/relationalai/semantics/lqp/types.py +101 -0
- v0/relationalai/semantics/lqp/utils.py +160 -0
- v0/relationalai/semantics/lqp/validators.py +57 -0
- v0/relationalai/semantics/metamodel/__init__.py +40 -0
- v0/relationalai/semantics/metamodel/builtins.py +776 -0
- v0/relationalai/semantics/metamodel/compiler.py +133 -0
- v0/relationalai/semantics/metamodel/dependency.py +862 -0
- v0/relationalai/semantics/metamodel/executor.py +61 -0
- v0/relationalai/semantics/metamodel/factory.py +287 -0
- v0/relationalai/semantics/metamodel/helpers.py +361 -0
- v0/relationalai/semantics/metamodel/ir.py +923 -0
- v0/relationalai/semantics/metamodel/rewrite/__init__.py +7 -0
- v0/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +39 -0
- v0/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +210 -0
- v0/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +78 -0
- v0/relationalai/semantics/metamodel/rewrite/flatten.py +554 -0
- v0/relationalai/semantics/metamodel/rewrite/format_outputs.py +165 -0
- v0/relationalai/semantics/metamodel/typer/checker.py +353 -0
- v0/relationalai/semantics/metamodel/typer/typer.py +1395 -0
- v0/relationalai/semantics/metamodel/util.py +505 -0
- v0/relationalai/semantics/metamodel/visitor.py +944 -0
- v0/relationalai/semantics/reasoners/__init__.py +10 -0
- v0/relationalai/semantics/reasoners/graph/__init__.py +37 -0
- v0/relationalai/semantics/reasoners/graph/core.py +9019 -0
- v0/relationalai/semantics/reasoners/optimization/__init__.py +68 -0
- v0/relationalai/semantics/reasoners/optimization/common.py +88 -0
- v0/relationalai/semantics/reasoners/optimization/solvers_dev.py +568 -0
- v0/relationalai/semantics/reasoners/optimization/solvers_pb.py +1163 -0
- v0/relationalai/semantics/rel/builtins.py +40 -0
- v0/relationalai/semantics/rel/compiler.py +989 -0
- v0/relationalai/semantics/rel/executor.py +359 -0
- v0/relationalai/semantics/rel/rel.py +482 -0
- v0/relationalai/semantics/rel/rel_utils.py +276 -0
- v0/relationalai/semantics/snowflake/__init__.py +3 -0
- v0/relationalai/semantics/sql/compiler.py +2503 -0
- v0/relationalai/semantics/sql/executor/duck_db.py +52 -0
- v0/relationalai/semantics/sql/executor/result_helpers.py +64 -0
- v0/relationalai/semantics/sql/executor/snowflake.py +145 -0
- v0/relationalai/semantics/sql/rewrite/denormalize.py +222 -0
- v0/relationalai/semantics/sql/rewrite/double_negation.py +49 -0
- v0/relationalai/semantics/sql/rewrite/recursive_union.py +127 -0
- v0/relationalai/semantics/sql/rewrite/sort_output_query.py +246 -0
- v0/relationalai/semantics/sql/sql.py +504 -0
- v0/relationalai/semantics/std/__init__.py +54 -0
- v0/relationalai/semantics/std/constraints.py +43 -0
- v0/relationalai/semantics/std/datetime.py +363 -0
- v0/relationalai/semantics/std/decimals.py +62 -0
- v0/relationalai/semantics/std/floats.py +7 -0
- v0/relationalai/semantics/std/integers.py +22 -0
- v0/relationalai/semantics/std/math.py +141 -0
- v0/relationalai/semantics/std/pragmas.py +11 -0
- v0/relationalai/semantics/std/re.py +83 -0
- v0/relationalai/semantics/std/std.py +14 -0
- v0/relationalai/semantics/std/strings.py +63 -0
- v0/relationalai/semantics/tests/__init__.py +0 -0
- v0/relationalai/semantics/tests/test_snapshot_abstract.py +143 -0
- v0/relationalai/semantics/tests/test_snapshot_base.py +9 -0
- v0/relationalai/semantics/tests/utils.py +46 -0
- v0/relationalai/std/__init__.py +70 -0
- v0/relationalai/tools/__init__.py +0 -0
- v0/relationalai/tools/cli.py +1940 -0
- v0/relationalai/tools/cli_controls.py +1826 -0
- v0/relationalai/tools/cli_helpers.py +390 -0
- v0/relationalai/tools/debugger.py +183 -0
- v0/relationalai/tools/debugger_client.py +109 -0
- v0/relationalai/tools/debugger_server.py +302 -0
- v0/relationalai/tools/dev.py +685 -0
- v0/relationalai/tools/qb_debugger.py +425 -0
- v0/relationalai/util/clean_up_databases.py +95 -0
- v0/relationalai/util/format.py +123 -0
- v0/relationalai/util/list_databases.py +9 -0
- v0/relationalai/util/otel_configuration.py +25 -0
- v0/relationalai/util/otel_handler.py +484 -0
- v0/relationalai/util/snowflake_handler.py +88 -0
- v0/relationalai/util/span_format_test.py +43 -0
- v0/relationalai/util/span_tracker.py +207 -0
- v0/relationalai/util/spans_file_handler.py +72 -0
- v0/relationalai/util/tracing_handler.py +34 -0
- frontend/debugger/dist/.gitignore +0 -2
- frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- frontend/debugger/dist/assets/index-Cssla-O7.js +0 -208
- frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -9
- frontend/debugger/dist/index.html +0 -17
- relationalai/clients/__init__.py +0 -18
- relationalai/clients/client.py +0 -946
- relationalai/clients/config.py +0 -673
- relationalai/clients/direct_access_client.py +0 -118
- relationalai/clients/exec_txn_poller.py +0 -153
- relationalai/clients/hash_util.py +0 -31
- relationalai/clients/local.py +0 -594
- relationalai/clients/profile_polling.py +0 -73
- relationalai/clients/resources/__init__.py +0 -8
- relationalai/clients/resources/azure/azure.py +0 -502
- relationalai/clients/resources/snowflake/__init__.py +0 -20
- relationalai/clients/resources/snowflake/cli_resources.py +0 -98
- relationalai/clients/resources/snowflake/direct_access_resources.py +0 -739
- relationalai/clients/resources/snowflake/engine_service.py +0 -381
- relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -315
- relationalai/clients/resources/snowflake/error_handlers.py +0 -240
- relationalai/clients/resources/snowflake/export_procedure.py.jinja +0 -249
- relationalai/clients/resources/snowflake/resources_factory.py +0 -99
- relationalai/clients/resources/snowflake/snowflake.py +0 -3193
- relationalai/clients/resources/snowflake/use_index_poller.py +0 -1019
- relationalai/clients/resources/snowflake/use_index_resources.py +0 -188
- relationalai/clients/resources/snowflake/util.py +0 -387
- relationalai/clients/result_helpers.py +0 -420
- relationalai/clients/types.py +0 -118
- relationalai/clients/util.py +0 -356
- relationalai/debugging.py +0 -389
- relationalai/dsl.py +0 -1749
- relationalai/early_access/builder/__init__.py +0 -30
- relationalai/early_access/builder/builder/__init__.py +0 -35
- relationalai/early_access/builder/snowflake/__init__.py +0 -12
- relationalai/early_access/builder/std/__init__.py +0 -25
- relationalai/early_access/builder/std/decimals/__init__.py +0 -12
- relationalai/early_access/builder/std/integers/__init__.py +0 -12
- relationalai/early_access/builder/std/math/__init__.py +0 -12
- relationalai/early_access/builder/std/strings/__init__.py +0 -14
- relationalai/early_access/devtools/__init__.py +0 -12
- relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -12
- relationalai/early_access/devtools/extract_lqp/__init__.py +0 -12
- relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -427
- relationalai/early_access/dsl/adapters/orm/parser.py +0 -636
- relationalai/early_access/dsl/adapters/owl/adapter.py +0 -176
- relationalai/early_access/dsl/adapters/owl/parser.py +0 -160
- relationalai/early_access/dsl/bindings/common.py +0 -402
- relationalai/early_access/dsl/bindings/csv.py +0 -170
- relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -143
- relationalai/early_access/dsl/bindings/snowflake.py +0 -64
- relationalai/early_access/dsl/codegen/binder.py +0 -411
- relationalai/early_access/dsl/codegen/common.py +0 -79
- relationalai/early_access/dsl/codegen/helpers.py +0 -23
- relationalai/early_access/dsl/codegen/relations.py +0 -700
- relationalai/early_access/dsl/codegen/weaver.py +0 -417
- relationalai/early_access/dsl/core/builders/__init__.py +0 -47
- relationalai/early_access/dsl/core/builders/logic.py +0 -19
- relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -11
- relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -455
- relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -73
- relationalai/early_access/dsl/core/constraints/scalar.py +0 -310
- relationalai/early_access/dsl/core/context.py +0 -13
- relationalai/early_access/dsl/core/cset.py +0 -132
- relationalai/early_access/dsl/core/exprs/__init__.py +0 -116
- relationalai/early_access/dsl/core/exprs/relational.py +0 -18
- relationalai/early_access/dsl/core/exprs/scalar.py +0 -412
- relationalai/early_access/dsl/core/instances.py +0 -44
- relationalai/early_access/dsl/core/logic/__init__.py +0 -193
- relationalai/early_access/dsl/core/logic/aggregation.py +0 -98
- relationalai/early_access/dsl/core/logic/exists.py +0 -223
- relationalai/early_access/dsl/core/logic/helper.py +0 -163
- relationalai/early_access/dsl/core/namespaces.py +0 -32
- relationalai/early_access/dsl/core/relations.py +0 -276
- relationalai/early_access/dsl/core/rules.py +0 -112
- relationalai/early_access/dsl/core/std/__init__.py +0 -45
- relationalai/early_access/dsl/core/temporal/recall.py +0 -6
- relationalai/early_access/dsl/core/types/__init__.py +0 -270
- relationalai/early_access/dsl/core/types/concepts.py +0 -128
- relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -267
- relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -143
- relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -124
- relationalai/early_access/dsl/core/types/standard.py +0 -92
- relationalai/early_access/dsl/core/types/unconstrained.py +0 -50
- relationalai/early_access/dsl/core/types/variables.py +0 -203
- relationalai/early_access/dsl/ir/compiler.py +0 -318
- relationalai/early_access/dsl/ir/executor.py +0 -260
- relationalai/early_access/dsl/ontologies/constraints.py +0 -88
- relationalai/early_access/dsl/ontologies/export.py +0 -30
- relationalai/early_access/dsl/ontologies/models.py +0 -453
- relationalai/early_access/dsl/ontologies/python_printer.py +0 -303
- relationalai/early_access/dsl/ontologies/readings.py +0 -60
- relationalai/early_access/dsl/ontologies/relationships.py +0 -322
- relationalai/early_access/dsl/ontologies/roles.py +0 -87
- relationalai/early_access/dsl/ontologies/subtyping.py +0 -55
- relationalai/early_access/dsl/orm/constraints.py +0 -438
- relationalai/early_access/dsl/orm/measures/dimensions.py +0 -200
- relationalai/early_access/dsl/orm/measures/initializer.py +0 -16
- relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -275
- relationalai/early_access/dsl/orm/measures/measures.py +0 -299
- relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -268
- relationalai/early_access/dsl/orm/models.py +0 -256
- relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -344
- relationalai/early_access/dsl/orm/printer.py +0 -469
- relationalai/early_access/dsl/orm/reasoners.py +0 -480
- relationalai/early_access/dsl/orm/relations.py +0 -19
- relationalai/early_access/dsl/orm/relationships.py +0 -251
- relationalai/early_access/dsl/orm/types.py +0 -42
- relationalai/early_access/dsl/orm/utils.py +0 -79
- relationalai/early_access/dsl/orm/verb.py +0 -204
- relationalai/early_access/dsl/physical_metadata/tables.py +0 -133
- relationalai/early_access/dsl/relations.py +0 -170
- relationalai/early_access/dsl/rulesets.py +0 -69
- relationalai/early_access/dsl/schemas/__init__.py +0 -450
- relationalai/early_access/dsl/schemas/builder.py +0 -48
- relationalai/early_access/dsl/schemas/comp_names.py +0 -51
- relationalai/early_access/dsl/schemas/components.py +0 -203
- relationalai/early_access/dsl/schemas/contexts.py +0 -156
- relationalai/early_access/dsl/schemas/exprs.py +0 -89
- relationalai/early_access/dsl/schemas/fragments.py +0 -464
- relationalai/early_access/dsl/serialization.py +0 -79
- relationalai/early_access/dsl/serialize/exporter.py +0 -163
- relationalai/early_access/dsl/snow/api.py +0 -105
- relationalai/early_access/dsl/snow/common.py +0 -76
- relationalai/early_access/dsl/state_mgmt/__init__.py +0 -129
- relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -125
- relationalai/early_access/dsl/state_mgmt/transitions.py +0 -130
- relationalai/early_access/dsl/types/__init__.py +0 -40
- relationalai/early_access/dsl/types/concepts.py +0 -12
- relationalai/early_access/dsl/types/entities.py +0 -135
- relationalai/early_access/dsl/types/values.py +0 -17
- relationalai/early_access/dsl/utils.py +0 -102
- relationalai/early_access/graphs/__init__.py +0 -13
- relationalai/early_access/lqp/__init__.py +0 -12
- relationalai/early_access/lqp/compiler/__init__.py +0 -12
- relationalai/early_access/lqp/constructors/__init__.py +0 -18
- relationalai/early_access/lqp/executor/__init__.py +0 -12
- relationalai/early_access/lqp/ir/__init__.py +0 -12
- relationalai/early_access/lqp/passes/__init__.py +0 -12
- relationalai/early_access/lqp/pragmas/__init__.py +0 -12
- relationalai/early_access/lqp/primitives/__init__.py +0 -12
- relationalai/early_access/lqp/types/__init__.py +0 -12
- relationalai/early_access/lqp/utils/__init__.py +0 -12
- relationalai/early_access/lqp/validators/__init__.py +0 -12
- relationalai/early_access/metamodel/__init__.py +0 -58
- relationalai/early_access/metamodel/builtins/__init__.py +0 -12
- relationalai/early_access/metamodel/compiler/__init__.py +0 -12
- relationalai/early_access/metamodel/dependency/__init__.py +0 -12
- relationalai/early_access/metamodel/factory/__init__.py +0 -17
- relationalai/early_access/metamodel/helpers/__init__.py +0 -12
- relationalai/early_access/metamodel/ir/__init__.py +0 -14
- relationalai/early_access/metamodel/rewrite/__init__.py +0 -7
- relationalai/early_access/metamodel/typer/__init__.py +0 -3
- relationalai/early_access/metamodel/typer/typer/__init__.py +0 -12
- relationalai/early_access/metamodel/types/__init__.py +0 -15
- relationalai/early_access/metamodel/util/__init__.py +0 -15
- relationalai/early_access/metamodel/visitor/__init__.py +0 -12
- relationalai/early_access/rel/__init__.py +0 -12
- relationalai/early_access/rel/executor/__init__.py +0 -12
- relationalai/early_access/rel/rel_utils/__init__.py +0 -12
- relationalai/early_access/rel/rewrite/__init__.py +0 -7
- relationalai/early_access/solvers/__init__.py +0 -19
- relationalai/early_access/sql/__init__.py +0 -11
- relationalai/early_access/sql/executor/__init__.py +0 -3
- relationalai/early_access/sql/rewrite/__init__.py +0 -3
- relationalai/early_access/tests/logging/__init__.py +0 -12
- relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -12
- relationalai/early_access/tests/utils/__init__.py +0 -12
- relationalai/environments/__init__.py +0 -35
- relationalai/environments/base.py +0 -381
- relationalai/environments/colab.py +0 -14
- relationalai/environments/generic.py +0 -71
- relationalai/environments/ipython.py +0 -68
- relationalai/environments/jupyter.py +0 -9
- relationalai/environments/snowbook.py +0 -169
- relationalai/errors.py +0 -2496
- relationalai/experimental/SF.py +0 -38
- relationalai/experimental/inspect.py +0 -47
- relationalai/experimental/pathfinder/__init__.py +0 -158
- relationalai/experimental/pathfinder/api.py +0 -160
- relationalai/experimental/pathfinder/automaton.py +0 -584
- relationalai/experimental/pathfinder/bridge.py +0 -226
- relationalai/experimental/pathfinder/compiler.py +0 -416
- relationalai/experimental/pathfinder/datalog.py +0 -214
- relationalai/experimental/pathfinder/diagnostics.py +0 -56
- relationalai/experimental/pathfinder/filter.py +0 -236
- relationalai/experimental/pathfinder/glushkov.py +0 -439
- relationalai/experimental/pathfinder/options.py +0 -265
- relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -1951
- relationalai/experimental/pathfinder/rpq.py +0 -344
- relationalai/experimental/pathfinder/transition.py +0 -200
- relationalai/experimental/pathfinder/utils.py +0 -26
- relationalai/experimental/paths/README.md +0 -107
- relationalai/experimental/paths/api.py +0 -143
- relationalai/experimental/paths/benchmarks/grid_graph.py +0 -37
- relationalai/experimental/paths/code_organization.md +0 -2
- relationalai/experimental/paths/examples/Movies.ipynb +0 -16328
- relationalai/experimental/paths/examples/basic_example.py +0 -40
- relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -3
- relationalai/experimental/paths/examples/movie_example.py +0 -77
- relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -193
- relationalai/experimental/paths/examples/movies_data/directed.csv +0 -45
- relationalai/experimental/paths/examples/movies_data/follows.csv +0 -7
- relationalai/experimental/paths/examples/movies_data/movies.csv +0 -39
- relationalai/experimental/paths/examples/movies_data/person.csv +0 -134
- relationalai/experimental/paths/examples/movies_data/produced.csv +0 -16
- relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -10
- relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -11
- relationalai/experimental/paths/examples/paths_benchmark.py +0 -115
- relationalai/experimental/paths/examples/paths_example.py +0 -116
- relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -28
- relationalai/experimental/paths/find_paths_via_automaton.py +0 -85
- relationalai/experimental/paths/graph.py +0 -185
- relationalai/experimental/paths/path_algorithms/find_paths.py +0 -280
- relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -26
- relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -111
- relationalai/experimental/paths/path_algorithms/single.py +0 -59
- relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -39
- relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -103
- relationalai/experimental/paths/path_algorithms/usp-old.py +0 -130
- relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -183
- relationalai/experimental/paths/path_algorithms/usp.py +0 -150
- relationalai/experimental/paths/product_graph.py +0 -93
- relationalai/experimental/paths/rpq/automaton.py +0 -584
- relationalai/experimental/paths/rpq/diagnostics.py +0 -56
- relationalai/experimental/paths/rpq/rpq.py +0 -378
- relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -90
- relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -119
- relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -104
- relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -113
- relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -149
- relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -70
- relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -64
- relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -115
- relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -75
- relationalai/experimental/paths/tests/tests_single_paths.py +0 -152
- relationalai/experimental/paths/tests/tests_single_walks.py +0 -208
- relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -297
- relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -107
- relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -76
- relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -76
- relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -110
- relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -229
- relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -108
- relationalai/experimental/paths/tree_agg.py +0 -168
- relationalai/experimental/paths/utilities/iterators.py +0 -27
- relationalai/experimental/paths/utilities/prefix_sum.py +0 -91
- relationalai/experimental/solvers.py +0 -1095
- relationalai/loaders/csv.py +0 -195
- relationalai/loaders/loader.py +0 -177
- relationalai/loaders/types.py +0 -23
- relationalai/rel_emitter.py +0 -373
- relationalai/rel_utils.py +0 -185
- relationalai/semantics/designs/query_builder/identify_by.md +0 -106
- relationalai/semantics/devtools/benchmark_lqp.py +0 -535
- relationalai/semantics/devtools/compilation_manager.py +0 -294
- relationalai/semantics/devtools/extract_lqp.py +0 -110
- relationalai/semantics/internal/internal.py +0 -3785
- relationalai/semantics/internal/snowflake.py +0 -329
- relationalai/semantics/lqp/README.md +0 -34
- relationalai/semantics/lqp/algorithms.py +0 -173
- relationalai/semantics/lqp/builtins.py +0 -213
- relationalai/semantics/lqp/compiler.py +0 -22
- relationalai/semantics/lqp/constructors.py +0 -68
- relationalai/semantics/lqp/executor.py +0 -518
- relationalai/semantics/lqp/export_rewriter.py +0 -40
- relationalai/semantics/lqp/intrinsics.py +0 -24
- relationalai/semantics/lqp/ir.py +0 -150
- relationalai/semantics/lqp/model2lqp.py +0 -1056
- relationalai/semantics/lqp/passes.py +0 -38
- relationalai/semantics/lqp/primitives.py +0 -252
- relationalai/semantics/lqp/result_helpers.py +0 -266
- relationalai/semantics/lqp/rewrite/__init__.py +0 -32
- relationalai/semantics/lqp/rewrite/algorithm.py +0 -385
- relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -69
- relationalai/semantics/lqp/rewrite/cdc.py +0 -216
- relationalai/semantics/lqp/rewrite/constants_to_vars.py +0 -70
- relationalai/semantics/lqp/rewrite/deduplicate_vars.py +0 -104
- relationalai/semantics/lqp/rewrite/eliminate_data.py +0 -108
- relationalai/semantics/lqp/rewrite/extract_common.py +0 -340
- relationalai/semantics/lqp/rewrite/extract_keys.py +0 -577
- relationalai/semantics/lqp/rewrite/flatten_script.py +0 -301
- relationalai/semantics/lqp/rewrite/function_annotations.py +0 -114
- relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -348
- relationalai/semantics/lqp/rewrite/period_math.py +0 -77
- relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -339
- relationalai/semantics/lqp/rewrite/splinter.py +0 -76
- relationalai/semantics/lqp/rewrite/unify_definitions.py +0 -323
- relationalai/semantics/lqp/types.py +0 -101
- relationalai/semantics/lqp/utils.py +0 -170
- relationalai/semantics/lqp/validators.py +0 -70
- relationalai/semantics/metamodel/compiler.py +0 -134
- relationalai/semantics/metamodel/dependency.py +0 -880
- relationalai/semantics/metamodel/executor.py +0 -78
- relationalai/semantics/metamodel/factory.py +0 -287
- relationalai/semantics/metamodel/helpers.py +0 -368
- relationalai/semantics/metamodel/ir.py +0 -924
- relationalai/semantics/metamodel/rewrite/__init__.py +0 -8
- relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -39
- relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -220
- relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -78
- relationalai/semantics/metamodel/rewrite/flatten.py +0 -590
- relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -256
- relationalai/semantics/metamodel/rewrite/handle_aggregations_and_ranks.py +0 -237
- relationalai/semantics/metamodel/typer/checker.py +0 -355
- relationalai/semantics/metamodel/typer/typer.py +0 -1396
- relationalai/semantics/metamodel/util.py +0 -506
- relationalai/semantics/metamodel/visitor.py +0 -945
- relationalai/semantics/reasoners/__init__.py +0 -10
- relationalai/semantics/reasoners/graph/README.md +0 -620
- relationalai/semantics/reasoners/graph/__init__.py +0 -37
- relationalai/semantics/reasoners/graph/core.py +0 -9019
- relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -797
- relationalai/semantics/reasoners/graph/tests/README.md +0 -21
- relationalai/semantics/reasoners/optimization/__init__.py +0 -68
- relationalai/semantics/reasoners/optimization/common.py +0 -88
- relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -568
- relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -1407
- relationalai/semantics/rel/builtins.py +0 -40
- relationalai/semantics/rel/compiler.py +0 -994
- relationalai/semantics/rel/executor.py +0 -363
- relationalai/semantics/rel/rel.py +0 -482
- relationalai/semantics/rel/rel_utils.py +0 -276
- relationalai/semantics/snowflake/__init__.py +0 -3
- relationalai/semantics/sql/compiler.py +0 -2503
- relationalai/semantics/sql/executor/duck_db.py +0 -52
- relationalai/semantics/sql/executor/result_helpers.py +0 -64
- relationalai/semantics/sql/executor/snowflake.py +0 -149
- relationalai/semantics/sql/rewrite/denormalize.py +0 -222
- relationalai/semantics/sql/rewrite/double_negation.py +0 -49
- relationalai/semantics/sql/rewrite/recursive_union.py +0 -127
- relationalai/semantics/sql/rewrite/sort_output_query.py +0 -246
- relationalai/semantics/sql/sql.py +0 -504
- relationalai/semantics/std/pragmas.py +0 -11
- relationalai/semantics/std/std.py +0 -14
- relationalai/semantics/tests/lqp/algorithms.py +0 -345
- relationalai/semantics/tests/test_snapshot_abstract.py +0 -144
- relationalai/semantics/tests/test_snapshot_base.py +0 -9
- relationalai/semantics/tests/utils.py +0 -46
- relationalai/std/__init__.py +0 -70
- relationalai/tools/cli.py +0 -2089
- relationalai/tools/cli_controls.py +0 -1975
- relationalai/tools/cli_helpers.py +0 -802
- relationalai/tools/debugger_client.py +0 -109
- relationalai/tools/debugger_server.py +0 -302
- relationalai/tools/dev.py +0 -685
- relationalai/tools/notes +0 -7
- relationalai/tools/qb_debugger.py +0 -425
- relationalai/tools/txn_progress.py +0 -188
- relationalai/util/clean_up_databases.py +0 -95
- relationalai/util/list_databases.py +0 -9
- relationalai/util/otel_configuration.py +0 -26
- relationalai/util/otel_handler.py +0 -484
- relationalai/util/snowflake_handler.py +0 -88
- relationalai/util/span_format_test.py +0 -43
- relationalai/util/span_tracker.py +0 -207
- relationalai/util/spans_file_handler.py +0 -72
- relationalai/util/tracing_handler.py +0 -34
- relationalai-0.13.5.dist-info/METADATA +0 -74
- relationalai-0.13.5.dist-info/RECORD +0 -473
- relationalai-0.13.5.dist-info/WHEEL +0 -4
- relationalai-0.13.5.dist-info/entry_points.txt +0 -3
- relationalai-0.13.5.dist-info/licenses/LICENSE +0 -202
- relationalai_test_util/__init__.py +0 -4
- relationalai_test_util/fixtures.py +0 -233
- relationalai_test_util/snapshot.py +0 -252
- relationalai_test_util/traceback.py +0 -118
- /relationalai/{analysis → semantics/frontend}/__init__.py +0 -0
- /relationalai/{auth/__init__.py → semantics/metamodel/metamodel_compiler.py} +0 -0
- /relationalai/{early_access → shims}/__init__.py +0 -0
- {relationalai/early_access/dsl/adapters → v0/relationalai/analysis}/__init__.py +0 -0
- {relationalai → v0/relationalai}/analysis/mechanistic.py +0 -0
- {relationalai → v0/relationalai}/analysis/whynot.py +0 -0
- {relationalai/early_access/dsl/adapters/orm → v0/relationalai/auth}/__init__.py +0 -0
- {relationalai → v0/relationalai}/auth/jwt_generator.py +0 -0
- {relationalai → v0/relationalai}/auth/oauth_callback_server.py +0 -0
- {relationalai → v0/relationalai}/auth/token_handler.py +0 -0
- {relationalai → v0/relationalai}/auth/util.py +0 -0
- {relationalai/clients/resources/snowflake → v0/relationalai/clients}/cache_store.py +0 -0
- {relationalai → v0/relationalai}/compiler.py +0 -0
- {relationalai → v0/relationalai}/dependencies.py +0 -0
- {relationalai → v0/relationalai}/docutils.py +0 -0
- {relationalai/early_access/dsl/adapters/owl → v0/relationalai/early_access}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/__init__.py +0 -0
- {relationalai/early_access/dsl/bindings → v0/relationalai/early_access/dsl/adapters}/__init__.py +0 -0
- {relationalai/early_access/dsl/bindings/legacy → v0/relationalai/early_access/dsl/adapters/orm}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai/early_access/dsl/codegen → v0/relationalai/early_access/dsl/adapters/owl}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai/early_access/dsl/core/temporal → v0/relationalai/early_access/dsl/bindings}/__init__.py +0 -0
- {relationalai/early_access/dsl/ir → v0/relationalai/early_access/dsl/bindings/legacy}/__init__.py +0 -0
- {relationalai/early_access/dsl/ontologies → v0/relationalai/early_access/dsl/codegen}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/constants.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/stack.py +0 -0
- {relationalai/early_access/dsl/orm → v0/relationalai/early_access/dsl/core/temporal}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/utils.py +0 -0
- {relationalai/early_access/dsl/orm/measures → v0/relationalai/early_access/dsl/ir}/__init__.py +0 -0
- {relationalai/early_access/dsl/physical_metadata → v0/relationalai/early_access/dsl/ontologies}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai/early_access/dsl/serialize → v0/relationalai/early_access/dsl/orm}/__init__.py +0 -0
- {relationalai/early_access/dsl/snow → v0/relationalai/early_access/dsl/orm/measures}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai/loaders → v0/relationalai/early_access/dsl/physical_metadata}/__init__.py +0 -0
- {relationalai/semantics/tests → v0/relationalai/early_access/dsl/serialize}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/serialize/model.py +0 -0
- {relationalai/semantics/tests/lqp → v0/relationalai/early_access/dsl/snow}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/tests/__init__.py +0 -0
- {relationalai → v0/relationalai}/environments/ci.py +0 -0
- {relationalai → v0/relationalai}/environments/hex.py +0 -0
- {relationalai → v0/relationalai}/environments/terminal.py +0 -0
- {relationalai → v0/relationalai}/experimental/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/graphs.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/rpq/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/rpq/filter.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/rpq/transition.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/utilities/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/utilities/utilities.py +0 -0
- {relationalai/tools → v0/relationalai/loaders}/__init__.py +0 -0
- {relationalai → v0/relationalai}/metagen.py +0 -0
- {relationalai → v0/relationalai}/metamodel.py +0 -0
- {relationalai → v0/relationalai}/rel.py +0 -0
- {relationalai → v0/relationalai}/semantics/devtools/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/internal/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/internal/annotations.py +0 -0
- {relationalai → v0/relationalai}/semantics/lqp/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/lqp/pragmas.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/dataflow.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/types.py +0 -0
- {relationalai → v0/relationalai}/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/rel/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/sql/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/sql/executor/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/tests/logging.py +0 -0
- {relationalai → v0/relationalai}/std/aggregates.py +0 -0
- {relationalai → v0/relationalai}/std/dates.py +0 -0
- {relationalai → v0/relationalai}/std/graphs.py +0 -0
- {relationalai → v0/relationalai}/std/inspect.py +0 -0
- {relationalai → v0/relationalai}/std/math.py +0 -0
- {relationalai → v0/relationalai}/std/re.py +0 -0
- {relationalai → v0/relationalai}/std/strings.py +0 -0
- {relationalai → v0/relationalai}/tools/cleanup_snapshots.py +0 -0
- {relationalai → v0/relationalai}/tools/constants.py +0 -0
- {relationalai → v0/relationalai}/tools/query_utils.py +0 -0
- {relationalai → v0/relationalai}/tools/snapshot_viewer.py +0 -0
- {relationalai → v0/relationalai}/util/__init__.py +0 -0
- {relationalai → v0/relationalai}/util/constants.py +0 -0
- {relationalai → v0/relationalai}/util/graph.py +0 -0
- {relationalai → v0/relationalai}/util/timeout.py +0 -0
relationalai/__init__.py
CHANGED
|
@@ -1,262 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
|
-
The RelationalAI Python SDK.
|
|
2
|
+
The RelationalAI Python SDK, also known as PyRel.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from __future__ import annotations
|
|
6
5
|
import importlib.metadata
|
|
7
6
|
|
|
8
|
-
from typing import cast
|
|
9
|
-
|
|
10
|
-
from .clients.config import Config, save_config
|
|
11
|
-
from . import clients
|
|
12
|
-
from . import dsl
|
|
13
|
-
from . import debugging
|
|
14
|
-
from . import metamodel
|
|
15
|
-
from . import rel
|
|
16
|
-
from .loaders import csv
|
|
17
|
-
from . import analysis
|
|
18
|
-
from . import tools
|
|
19
|
-
from .util.otel_configuration import configure_otel
|
|
20
|
-
from snowflake.snowpark import Session
|
|
21
|
-
from .errors import RAIException, handle_missing_integration
|
|
22
|
-
from .environments import runtime_env, SessionEnvironment, SnowbookEnvironment
|
|
23
|
-
from relationalai.tools.constants import Generation
|
|
24
|
-
|
|
25
|
-
import __main__
|
|
26
|
-
|
|
27
|
-
# Define cfg after all imports since it depends on clients being imported
|
|
28
|
-
cfg = clients.config
|
|
29
|
-
|
|
30
7
|
__version__ = importlib.metadata.version(__package__ or __name__)
|
|
31
|
-
|
|
32
|
-
def Model(
|
|
33
|
-
name: str,
|
|
34
|
-
*,
|
|
35
|
-
profile: str | None = None,
|
|
36
|
-
config: Config | None = None,
|
|
37
|
-
dry_run: bool | None = False,
|
|
38
|
-
debug: bool | None = None,
|
|
39
|
-
debug_host: str | None = None,
|
|
40
|
-
debug_port: int | None = None,
|
|
41
|
-
connection: Session | None = None,
|
|
42
|
-
keep_model: bool | None = None,
|
|
43
|
-
isolated: bool | None = None,
|
|
44
|
-
nowait_durable: bool | None = None,
|
|
45
|
-
use_package_manager: bool | None = None,
|
|
46
|
-
ensure_change_tracking: bool | None = None,
|
|
47
|
-
enable_otel_handler: bool | None = None,
|
|
48
|
-
format: str = "default",
|
|
49
|
-
):
|
|
50
|
-
config = config or Config(profile=profile)
|
|
51
|
-
if use_package_manager is not None:
|
|
52
|
-
config.set("use_package_manager", use_package_manager)
|
|
53
|
-
if ensure_change_tracking is not None:
|
|
54
|
-
config.set("ensure_change_tracking", ensure_change_tracking)
|
|
55
|
-
|
|
56
|
-
if isinstance(runtime_env, SessionEnvironment):
|
|
57
|
-
connection = runtime_env.configure_session(config, connection)
|
|
58
|
-
|
|
59
|
-
if debug is None:
|
|
60
|
-
config_debug = config.get("debug", True)
|
|
61
|
-
if isinstance(config_debug, dict):
|
|
62
|
-
debug = True
|
|
63
|
-
elif isinstance(config_debug, bool):
|
|
64
|
-
debug = config_debug
|
|
65
|
-
else:
|
|
66
|
-
raise Exception("Invalid value specified for `debug`, expected `true` or `false`.")
|
|
67
|
-
|
|
68
|
-
if debug_host is None:
|
|
69
|
-
# Our get function isn't robust to allowing `debug = true/false` or `[debug]\n port=...`
|
|
70
|
-
# Went with the lowest impact solve for now which is handling it locally.
|
|
71
|
-
try:
|
|
72
|
-
debug_host = config.get("debug.host", None)
|
|
73
|
-
except AttributeError:
|
|
74
|
-
pass
|
|
75
|
-
|
|
76
|
-
if debug_port is None:
|
|
77
|
-
try:
|
|
78
|
-
config_debug_port = config.get("debug.port", 8080)
|
|
79
|
-
if not isinstance(config_debug_port, int):
|
|
80
|
-
raise Exception("Invalid value specified for `debug.port`, expected `int`.")
|
|
81
|
-
debug_port = config_debug_port
|
|
82
|
-
except AttributeError:
|
|
83
|
-
pass
|
|
84
|
-
|
|
85
|
-
if debug and not runtime_env.remote:
|
|
86
|
-
from relationalai.tools.debugger_client import start_debugger_session
|
|
87
|
-
start_debugger_session(config, host=debug_host, port=debug_port)
|
|
88
|
-
|
|
89
|
-
main_path = getattr(__main__, "__file__", None)
|
|
90
|
-
debugging.create_program_span_if_not_exists(main_path, config)
|
|
91
|
-
|
|
92
|
-
if not config.file_path:
|
|
93
|
-
if cfg.legacy_config_exists():
|
|
94
|
-
message = (
|
|
95
|
-
"Use `rai init` to migrate your configuration file "
|
|
96
|
-
"to the new format (raiconfig.toml)"
|
|
97
|
-
)
|
|
98
|
-
else:
|
|
99
|
-
message = "No configuration file found. Please run `rai init` to create one."
|
|
100
|
-
raise Exception(message)
|
|
101
|
-
if config.get("platform", None) is None:
|
|
102
|
-
config.set("platform", "snowflake")
|
|
103
|
-
platform = config.get("platform")
|
|
104
|
-
if platform != "snowflake" and connection is not None:
|
|
105
|
-
raise ValueError("The `connection` parameter is only supported with the Snowflake platform")
|
|
106
|
-
if dry_run is None:
|
|
107
|
-
dry_run = config.get_bool("compiler.dry_run", False)
|
|
108
|
-
if keep_model is None:
|
|
109
|
-
keep_model = config.get_bool("model.keep", False)
|
|
110
|
-
if isolated is None:
|
|
111
|
-
isolated = config.get_bool("model.isolated", True)
|
|
112
|
-
if nowait_durable is None:
|
|
113
|
-
nowait_durable = config.get_bool("model.nowait_durable", True)
|
|
114
|
-
if enable_otel_handler is None:
|
|
115
|
-
enable_otel_handler = config.get_bool("enable_otel_handler", False)
|
|
116
|
-
|
|
117
|
-
try:
|
|
118
|
-
if platform == "azure":
|
|
119
|
-
from relationalai.clients.resources.azure.azure import Graph
|
|
120
|
-
from .util.otel_handler import disable_otel_handling, is_otel_initialized
|
|
121
|
-
model = Graph(
|
|
122
|
-
name,
|
|
123
|
-
profile=profile,
|
|
124
|
-
config=config,
|
|
125
|
-
dry_run=dry_run,
|
|
126
|
-
isolated=isolated,
|
|
127
|
-
keep_model=keep_model,
|
|
128
|
-
format=format,
|
|
129
|
-
)
|
|
130
|
-
if is_otel_initialized:
|
|
131
|
-
disable_otel_handling()
|
|
132
|
-
elif platform == "snowflake":
|
|
133
|
-
try:
|
|
134
|
-
from relationalai.clients.resources.snowflake import Graph
|
|
135
|
-
except ImportError as e:
|
|
136
|
-
# Provide a helpful error message for Snowflake notebook environments
|
|
137
|
-
if isinstance(runtime_env, SnowbookEnvironment):
|
|
138
|
-
raise ImportError(
|
|
139
|
-
"Failed to import relationalai.clients.resources.snowflake. "
|
|
140
|
-
"This may indicate that the relationalai.zip package structure is incomplete. "
|
|
141
|
-
"Please ensure the zip file includes the full clients/resources/snowflake directory structure."
|
|
142
|
-
) from e
|
|
143
|
-
raise
|
|
144
|
-
model = Graph(
|
|
145
|
-
name,
|
|
146
|
-
profile=profile,
|
|
147
|
-
config=config,
|
|
148
|
-
dry_run=dry_run,
|
|
149
|
-
isolated=isolated,
|
|
150
|
-
connection=connection,
|
|
151
|
-
keep_model=keep_model,
|
|
152
|
-
nowait_durable=nowait_durable,
|
|
153
|
-
format=format,
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
configure_otel(enable_otel_handler, config, model._client.resources)
|
|
157
|
-
|
|
158
|
-
else:
|
|
159
|
-
raise Exception(f"Unknown platform: {platform}")
|
|
160
|
-
except RAIException as e:
|
|
161
|
-
raise e.clone(config) from None
|
|
162
|
-
except Exception as e:
|
|
163
|
-
handle_missing_integration(e)
|
|
164
|
-
raise e
|
|
165
|
-
return model
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
def Resources(
|
|
169
|
-
profile: str | None = None,
|
|
170
|
-
config: Config | None = None,
|
|
171
|
-
connection: Session | None = None,
|
|
172
|
-
# TODO: This is required because creating a unified Snowflake session is not possible. Ticket here: https://app.snowflake.com/support/case/01038599
|
|
173
|
-
reset_session: bool = False,
|
|
174
|
-
generation: Generation | None = Generation.V0,
|
|
175
|
-
):
|
|
176
|
-
config = config or Config(profile)
|
|
177
|
-
platform = config.get("platform", "snowflake")
|
|
178
|
-
if platform == "azure":
|
|
179
|
-
from relationalai.clients.resources.azure.azure import Resources
|
|
180
|
-
return Resources(config=config)
|
|
181
|
-
elif platform == "snowflake":
|
|
182
|
-
try:
|
|
183
|
-
from relationalai.clients.resources.snowflake.resources_factory import create_resources_instance
|
|
184
|
-
except ImportError as e:
|
|
185
|
-
# Provide a helpful error message for Snowflake notebook environments
|
|
186
|
-
from relationalai.environments import runtime_env, SnowbookEnvironment
|
|
187
|
-
if isinstance(runtime_env, SnowbookEnvironment):
|
|
188
|
-
raise ImportError(
|
|
189
|
-
"Failed to import relationalai.clients.resources.snowflake. "
|
|
190
|
-
"This may indicate that the relationalai.zip package structure is incomplete. "
|
|
191
|
-
"Please ensure the zip file includes the full clients/resources/snowflake directory structure."
|
|
192
|
-
) from e
|
|
193
|
-
raise
|
|
194
|
-
return create_resources_instance(
|
|
195
|
-
config=config,
|
|
196
|
-
profile=profile,
|
|
197
|
-
connection=connection,
|
|
198
|
-
reset_session=reset_session,
|
|
199
|
-
generation=generation or Generation.V0,
|
|
200
|
-
dry_run=False,
|
|
201
|
-
language="rel",
|
|
202
|
-
)
|
|
203
|
-
elif platform == "local":
|
|
204
|
-
from relationalai.clients.resources.snowflake.resources_factory import create_resources_instance
|
|
205
|
-
return create_resources_instance(
|
|
206
|
-
config=config,
|
|
207
|
-
profile=profile,
|
|
208
|
-
connection=connection,
|
|
209
|
-
reset_session=reset_session,
|
|
210
|
-
generation=generation or Generation.V0,
|
|
211
|
-
dry_run=False,
|
|
212
|
-
language="rel",
|
|
213
|
-
)
|
|
214
|
-
else:
|
|
215
|
-
raise Exception(f"Unknown platform: {platform}")
|
|
216
|
-
|
|
217
|
-
def Provider(
|
|
218
|
-
profile: str | None = None,
|
|
219
|
-
config: Config | None = None,
|
|
220
|
-
connection: Session | None = None,
|
|
221
|
-
generation: Generation | None = Generation.V0,
|
|
222
|
-
):
|
|
223
|
-
resources = Resources(profile, config, connection, generation=generation)
|
|
224
|
-
platform = resources.config.get("platform", "snowflake")
|
|
225
|
-
if platform == "azure":
|
|
226
|
-
from relationalai.clients.resources.azure.azure import Resources as AzureResources, Provider as AzureProvider
|
|
227
|
-
resources = cast(AzureResources, resources)
|
|
228
|
-
return AzureProvider(
|
|
229
|
-
resources=resources
|
|
230
|
-
)
|
|
231
|
-
elif platform == "snowflake":
|
|
232
|
-
try:
|
|
233
|
-
from relationalai.clients.resources.snowflake import Resources as SnowflakeResources, Provider as SnowflakeProvider
|
|
234
|
-
except ImportError as e:
|
|
235
|
-
# Provide a helpful error message for Snowflake notebook environments
|
|
236
|
-
from relationalai.environments import runtime_env, SnowbookEnvironment
|
|
237
|
-
if isinstance(runtime_env, SnowbookEnvironment):
|
|
238
|
-
raise ImportError(
|
|
239
|
-
"Failed to import relationalai.clients.resources.snowflake. "
|
|
240
|
-
"This may indicate that the relationalai.zip package structure is incomplete. "
|
|
241
|
-
"Please ensure the zip file includes the full clients/resources/snowflake directory structure."
|
|
242
|
-
) from e
|
|
243
|
-
raise
|
|
244
|
-
resources = cast(SnowflakeResources, resources)
|
|
245
|
-
return SnowflakeProvider(
|
|
246
|
-
resources=resources,
|
|
247
|
-
generation=generation
|
|
248
|
-
)
|
|
249
|
-
elif platform == "local":
|
|
250
|
-
import relationalai.clients.local
|
|
251
|
-
resources = cast(relationalai.clients.local.LocalResources, resources)
|
|
252
|
-
return relationalai.clients.local.LocalProvider(
|
|
253
|
-
resources=resources
|
|
254
|
-
)
|
|
255
|
-
else:
|
|
256
|
-
raise Exception(f"Unknown platform: {platform}")
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
def Graph(name:str, dry_run:bool=False):
|
|
260
|
-
return Model(name, profile=None, dry_run=dry_run)
|
|
261
|
-
|
|
262
|
-
__all__ = ['Model', 'Config', 'Resources', 'Provider', 'dsl', 'rel', 'debugging', 'metamodel', 'csv', 'analysis', 'tools', 'save_config']
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
RelationalAI Multi-Connection Configuration System
|
|
3
|
+
|
|
4
|
+
This package contains the new Pydantic-based configuration system with:
|
|
5
|
+
- Multi-connection support (Snowflake, DuckDB)
|
|
6
|
+
- Multi-profile support (dev, prod, staging, etc.)
|
|
7
|
+
- Discriminated unions for type-safe connection handling
|
|
8
|
+
- Auto-loading from multiple sources (raiconfig.yaml, Snowflake connections, DBT profiles)
|
|
9
|
+
- Environment variable templating support (YAML)
|
|
10
|
+
- Profile override system (profile values override config defaults)
|
|
11
|
+
- Type-safe validation via Pydantic
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from .config import Config, _Config, RAIConfig, ConfigFromDBT, ConfigFromSnowflake
|
|
15
|
+
from .config_fields import EngineConfig, DataConfig, CompilerConfig, ModelConfig, ReasonerConfig, DebugConfig
|
|
16
|
+
from .connections import (
|
|
17
|
+
ConnectionConfig,
|
|
18
|
+
SnowflakeConnection,
|
|
19
|
+
DuckDBConnection,
|
|
20
|
+
UsernamePasswordAuth,
|
|
21
|
+
UsernamePasswordMFAAuth,
|
|
22
|
+
ExternalBrowserAuth,
|
|
23
|
+
JWTAuth,
|
|
24
|
+
OAuthAuth,
|
|
25
|
+
ProgrammaticAccessTokenAuth,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
__all__ = [
|
|
29
|
+
# Main classes
|
|
30
|
+
"Config",
|
|
31
|
+
"_Config",
|
|
32
|
+
"RAIConfig",
|
|
33
|
+
"ConfigFromDBT",
|
|
34
|
+
"ConfigFromSnowflake",
|
|
35
|
+
|
|
36
|
+
# Nested config models
|
|
37
|
+
"EngineConfig",
|
|
38
|
+
"DataConfig",
|
|
39
|
+
"CompilerConfig",
|
|
40
|
+
"ModelConfig",
|
|
41
|
+
"ReasonerConfig",
|
|
42
|
+
"DebugConfig",
|
|
43
|
+
|
|
44
|
+
# Connection types
|
|
45
|
+
"ConnectionConfig",
|
|
46
|
+
"SnowflakeConnection",
|
|
47
|
+
"DuckDBConnection",
|
|
48
|
+
|
|
49
|
+
# Snowflake authenticators
|
|
50
|
+
"UsernamePasswordAuth",
|
|
51
|
+
"UsernamePasswordMFAAuth",
|
|
52
|
+
"ExternalBrowserAuth",
|
|
53
|
+
"JWTAuth",
|
|
54
|
+
"OAuthAuth",
|
|
55
|
+
"ProgrammaticAccessTokenAuth",
|
|
56
|
+
]
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Main configuration class for PyRel (YAML-based).
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from abc import ABC
|
|
9
|
+
from typing import Any, TypeVar, overload, Literal, TYPE_CHECKING
|
|
10
|
+
from pydantic import Field, model_validator
|
|
11
|
+
from pydantic_settings import SettingsConfigDict
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
from confocal import BaseConfig
|
|
15
|
+
except ImportError:
|
|
16
|
+
# Confocal not yet published to PyPI - use pydantic_settings as fallback
|
|
17
|
+
# Config system not actively used yet, this is just to prevent import errors
|
|
18
|
+
from pydantic_settings import BaseSettings as BaseConfig # type: ignore[misc, assignment]
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
import snowflake.snowpark
|
|
22
|
+
import duckdb
|
|
23
|
+
|
|
24
|
+
from .connections import ConnectionConfig, BaseConnection, SnowflakeConnection, DuckDBConnection
|
|
25
|
+
from .config_fields import EngineConfig, DataConfig, CompilerConfig, ModelConfig, ReasonerConfig, DebugConfig
|
|
26
|
+
from .external.dbt_converter import convert_dbt_to_rai
|
|
27
|
+
from .external.snowflake_converter import convert_snowflake_to_rai
|
|
28
|
+
from .external.utils import find_dbt_profiles_file, find_snowflake_config_file
|
|
29
|
+
|
|
30
|
+
# TypeVar for generic connection retrieval
|
|
31
|
+
T = TypeVar('T', bound=BaseConnection)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class _Config(BaseConfig, ABC): # type: ignore for now until we publish confocal
|
|
35
|
+
"""Base configuration class with common fields and methods."""
|
|
36
|
+
|
|
37
|
+
active_profile: str | None = Field(
|
|
38
|
+
default=None,
|
|
39
|
+
description="Currently active profile name (auto-defaults if only one profile)"
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
profiles: dict[str, dict[str, Any]] = Field(
|
|
43
|
+
default_factory=dict,
|
|
44
|
+
alias="profile",
|
|
45
|
+
description="Profiles available (dev, prod, staging, etc.) - profiles overlay config fields"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
connections: dict[str, ConnectionConfig] = Field(
|
|
49
|
+
default_factory=dict,
|
|
50
|
+
description="Connections available (snowflake, duckdb, etc.)"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
default_connection: str | None = Field(
|
|
54
|
+
default=None,
|
|
55
|
+
description="Default connection name (auto-defaults if only one connection)"
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
use_graph_index: bool = Field(
|
|
59
|
+
default=True,
|
|
60
|
+
description="Enabling graph index"
|
|
61
|
+
)
|
|
62
|
+
use_direct_access: bool = Field(
|
|
63
|
+
default=False,
|
|
64
|
+
description="Use direct access mode"
|
|
65
|
+
)
|
|
66
|
+
describe_optimization: str | None = Field(default=None, description="Describe optimization")
|
|
67
|
+
enable_otel_handler: bool = Field(
|
|
68
|
+
default=False,
|
|
69
|
+
description="Enable OpenTelemetry handler"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# Nested config objects
|
|
73
|
+
engine: EngineConfig = Field(
|
|
74
|
+
default_factory=EngineConfig,
|
|
75
|
+
description="Engine configuration"
|
|
76
|
+
)
|
|
77
|
+
data: DataConfig = Field(
|
|
78
|
+
default_factory=DataConfig,
|
|
79
|
+
description="Data loading and streaming configuration"
|
|
80
|
+
)
|
|
81
|
+
compiler: CompilerConfig = Field(
|
|
82
|
+
default_factory=CompilerConfig,
|
|
83
|
+
description="Compiler configuration"
|
|
84
|
+
)
|
|
85
|
+
model: ModelConfig = Field(
|
|
86
|
+
default_factory=ModelConfig,
|
|
87
|
+
description="Model configuration"
|
|
88
|
+
)
|
|
89
|
+
reasoner: ReasonerConfig = Field(
|
|
90
|
+
default_factory=ReasonerConfig,
|
|
91
|
+
description="Reasoner configuration"
|
|
92
|
+
)
|
|
93
|
+
debug: DebugConfig = Field(
|
|
94
|
+
default_factory=DebugConfig,
|
|
95
|
+
description="Debug configuration"
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
@model_validator(mode='before')
|
|
99
|
+
@classmethod
|
|
100
|
+
def set_default_snowflake_authenticator(cls, data: Any):
|
|
101
|
+
"""Set default authenticator for Snowflake connections in raw data."""
|
|
102
|
+
if not isinstance(data, dict):
|
|
103
|
+
return data
|
|
104
|
+
|
|
105
|
+
def process_connections(connections):
|
|
106
|
+
if not isinstance(connections, dict):
|
|
107
|
+
return
|
|
108
|
+
for conn_data in connections.values():
|
|
109
|
+
if isinstance(conn_data, dict) and conn_data.get('type') == 'snowflake':
|
|
110
|
+
conn_data.setdefault('authenticator', 'username_password')
|
|
111
|
+
|
|
112
|
+
# Process top-level connections
|
|
113
|
+
if 'connections' in data:
|
|
114
|
+
process_connections(data['connections'])
|
|
115
|
+
|
|
116
|
+
# Process connections in profiles (before overlay)
|
|
117
|
+
if 'profiles' in data and isinstance(data['profiles'], dict):
|
|
118
|
+
for profile_data in data['profiles'].values():
|
|
119
|
+
if isinstance(profile_data, dict) and 'connections' in profile_data:
|
|
120
|
+
process_connections(profile_data['connections'])
|
|
121
|
+
|
|
122
|
+
return data
|
|
123
|
+
|
|
124
|
+
@model_validator(mode='after')
|
|
125
|
+
def validate_connections(self):
|
|
126
|
+
if not self.connections:
|
|
127
|
+
raise ValueError("Config must have at least one connection")
|
|
128
|
+
|
|
129
|
+
# Auto-set default_connection if only one connection exists and not already set
|
|
130
|
+
if len(self.connections) == 1 and self.default_connection is None:
|
|
131
|
+
self.default_connection = next(iter(self.connections.keys()))
|
|
132
|
+
|
|
133
|
+
return self
|
|
134
|
+
|
|
135
|
+
def get_default_connection(self) -> ConnectionConfig:
|
|
136
|
+
default_conn_name = self.default_connection
|
|
137
|
+
|
|
138
|
+
if default_conn_name is None:
|
|
139
|
+
if len(self.connections) == 1:
|
|
140
|
+
default_conn_name = list(self.connections.keys())[0]
|
|
141
|
+
else:
|
|
142
|
+
raise ValueError(
|
|
143
|
+
f"Multiple connections available but no default_connection specified. "
|
|
144
|
+
f"Available: {list(self.connections.keys())}"
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
if default_conn_name not in self.connections:
|
|
148
|
+
raise ValueError(
|
|
149
|
+
f"default_connection '{default_conn_name}' not found. "
|
|
150
|
+
f"Available: {list(self.connections.keys())}"
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
return self.connections[default_conn_name]
|
|
154
|
+
|
|
155
|
+
def get_connection(self, connection_type: type[T], name: str | None = None) -> T:
|
|
156
|
+
if name is None:
|
|
157
|
+
connection = self.get_default_connection()
|
|
158
|
+
else:
|
|
159
|
+
if name not in self.connections:
|
|
160
|
+
raise ValueError(
|
|
161
|
+
f"Connection '{name}' not found. "
|
|
162
|
+
f"Available: {list(self.connections.keys())}"
|
|
163
|
+
)
|
|
164
|
+
connection = self.connections[name]
|
|
165
|
+
|
|
166
|
+
if not isinstance(connection, connection_type):
|
|
167
|
+
# Provide helpful error message with the actual connection class hierarchy
|
|
168
|
+
actual_type = type(connection).__name__
|
|
169
|
+
# Check if it's a Snowflake connection
|
|
170
|
+
if isinstance(connection, SnowflakeConnection):
|
|
171
|
+
connection_class = "SnowflakeConnection"
|
|
172
|
+
elif isinstance(connection, DuckDBConnection):
|
|
173
|
+
connection_class = "DuckDBConnection"
|
|
174
|
+
else:
|
|
175
|
+
connection_class = actual_type
|
|
176
|
+
|
|
177
|
+
raise ValueError(
|
|
178
|
+
f"Connection '{name or self.default_connection}' is not of type {connection_type.__name__}. "
|
|
179
|
+
f"Got: {connection_class} (actual: {actual_type})"
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
return connection
|
|
183
|
+
|
|
184
|
+
@overload
|
|
185
|
+
def get_session(self, connection_type: type[SnowflakeConnection]) -> snowflake.snowpark.Session: ...
|
|
186
|
+
|
|
187
|
+
@overload
|
|
188
|
+
def get_session(self, connection_type: type[DuckDBConnection]) -> duckdb.DuckDBPyConnection: ...
|
|
189
|
+
|
|
190
|
+
@overload
|
|
191
|
+
def get_session(self, connection_type: None = None) -> snowflake.snowpark.Session | duckdb.DuckDBPyConnection: ...
|
|
192
|
+
|
|
193
|
+
def get_session(self, connection_type: type[SnowflakeConnection] | type[DuckDBConnection] | None = None) -> snowflake.snowpark.Session | duckdb.DuckDBPyConnection:
|
|
194
|
+
if connection_type is None:
|
|
195
|
+
connection = self.get_default_connection()
|
|
196
|
+
return connection.get_session()
|
|
197
|
+
else:
|
|
198
|
+
connection = self.get_connection(connection_type)
|
|
199
|
+
return connection.get_session()
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
# =============================================================================
|
|
203
|
+
# Config Source Classes
|
|
204
|
+
# =============================================================================
|
|
205
|
+
|
|
206
|
+
class RAIConfig(_Config):
|
|
207
|
+
"""Config loaded from raiconfig.yaml."""
|
|
208
|
+
|
|
209
|
+
source: Literal["rai"] = Field(default="rai", exclude=True)
|
|
210
|
+
|
|
211
|
+
model_config = SettingsConfigDict(
|
|
212
|
+
yaml_file="raiconfig.yaml",
|
|
213
|
+
extra="ignore",
|
|
214
|
+
nested_model_default_partial_update=True,
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class ConfigFromSnowflake(_Config):
|
|
219
|
+
source: Literal["snowflake"] = Field(default="snowflake", exclude=True)
|
|
220
|
+
|
|
221
|
+
model_config = SettingsConfigDict(
|
|
222
|
+
toml_file=find_snowflake_config_file(),
|
|
223
|
+
extra="ignore",
|
|
224
|
+
nested_model_default_partial_update=True,
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
@model_validator(mode='before')
|
|
228
|
+
@classmethod
|
|
229
|
+
def convert_snowflake_structure(cls, data: Any):
|
|
230
|
+
if not isinstance(data, dict):
|
|
231
|
+
return data
|
|
232
|
+
return convert_snowflake_to_rai(data)
|
|
233
|
+
|
|
234
|
+
class ConfigFromDBT(_Config):
|
|
235
|
+
source: Literal["dbt"] = Field(default="dbt", exclude=True)
|
|
236
|
+
|
|
237
|
+
model_config = SettingsConfigDict(
|
|
238
|
+
yaml_file=find_dbt_profiles_file(),
|
|
239
|
+
extra="ignore",
|
|
240
|
+
nested_model_default_partial_update=True,
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
@model_validator(mode='before')
|
|
244
|
+
@classmethod
|
|
245
|
+
def convert_dbt_structure(cls, data: Any):
|
|
246
|
+
"""Convert DBT profiles.yml format to RAI Config format."""
|
|
247
|
+
if not isinstance(data, dict):
|
|
248
|
+
return data
|
|
249
|
+
|
|
250
|
+
return convert_dbt_to_rai(data)
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
# =============================================================================
|
|
254
|
+
# Config Factory - Tries each source in order
|
|
255
|
+
# =============================================================================
|
|
256
|
+
|
|
257
|
+
def Config(**data) -> _Config:
|
|
258
|
+
"""
|
|
259
|
+
Create Config by trying multiple sources in priority order:
|
|
260
|
+
1. RAIConfig (raiconfig.yaml) - or direct data if provided
|
|
261
|
+
2. ConfigFromSnowflake (config.toml) - only if no data provided
|
|
262
|
+
3. ConfigFromDBT (profiles.yml) - only if no data provided
|
|
263
|
+
"""
|
|
264
|
+
sources = [
|
|
265
|
+
("RAIConfig (raiconfig.yaml)", RAIConfig, True), # passes **data
|
|
266
|
+
("ConfigFromSnowflake (config.toml)", ConfigFromSnowflake, False),
|
|
267
|
+
("ConfigFromDBT (profiles.yml)", ConfigFromDBT, False),
|
|
268
|
+
]
|
|
269
|
+
|
|
270
|
+
errors = []
|
|
271
|
+
|
|
272
|
+
for name, source_cls, accepts_data in sources:
|
|
273
|
+
try:
|
|
274
|
+
if accepts_data:
|
|
275
|
+
return source_cls(**data)
|
|
276
|
+
else:
|
|
277
|
+
return source_cls()
|
|
278
|
+
except Exception as e:
|
|
279
|
+
errors.append((name, str(e)))
|
|
280
|
+
|
|
281
|
+
# All failed, create helpful error message
|
|
282
|
+
error_lines = [f" ❌ {name}: {error}" for name, error in errors]
|
|
283
|
+
error_summary = "\n".join(error_lines)
|
|
284
|
+
|
|
285
|
+
raise FileNotFoundError(
|
|
286
|
+
f"Could not load config from any source:\n\n{error_summary}\n\n"
|
|
287
|
+
f"To fix: Correct one of the config files above, or pass config programmatically:\n"
|
|
288
|
+
f" Config(connections={{...}})"
|
|
289
|
+
)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Nested configuration field models for the multi-connection config system.
|
|
3
|
+
|
|
4
|
+
This module defines nested config models:
|
|
5
|
+
- EngineConfig: Engine execution settings
|
|
6
|
+
- DataConfig: Data loading and streaming settings
|
|
7
|
+
- CompilerConfig: Compiler-specific settings
|
|
8
|
+
- ModelConfig: Model execution settings
|
|
9
|
+
- ReasonerConfig: Reasoner execution settings (including nested ReasonerRuleConfig)
|
|
10
|
+
- DebugConfig: Debug server settings
|
|
11
|
+
|
|
12
|
+
These models are used in Config (with default instances) and Profile (as optional overrides).
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import Literal
|
|
18
|
+
|
|
19
|
+
from pydantic import BaseModel, Field
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class EngineConfig(BaseModel):
|
|
23
|
+
name: str | None = Field(default=None, description="Engine name for execution")
|
|
24
|
+
size: str | None = Field(default=None, description="Size of the engine")
|
|
25
|
+
auto_suspend_mins: int | None = Field(default=None, description="Auto-suspend engine after N minutes")
|
|
26
|
+
show_all_sizes: bool = Field(
|
|
27
|
+
default=False,
|
|
28
|
+
description="Show all available engine sizes"
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class DataConfig(BaseModel):
|
|
33
|
+
wait_for_stream_sync: bool = Field(default=True, description="Wait for stream synchronization before processing")
|
|
34
|
+
ensure_change_tracking: bool = Field(default=False, description="Enable change tracking for data modifications")
|
|
35
|
+
data_freshness_mins: int | None = Field(default=None, description="Data freshness timeout in minutes")
|
|
36
|
+
query_timeout_mins: int | None = Field(
|
|
37
|
+
default=None,
|
|
38
|
+
description="Query timeout in minutes - aborts queries that exceed this duration"
|
|
39
|
+
)
|
|
40
|
+
download_url_type: Literal["internal", "external"] | None = Field(
|
|
41
|
+
default=None,
|
|
42
|
+
description="Type of download URL for data exports (internal or external)"
|
|
43
|
+
)
|
|
44
|
+
check_column_types: bool = Field(
|
|
45
|
+
default=True,
|
|
46
|
+
description="Check column types during data loading"
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class CompilerConfig(BaseModel):
|
|
51
|
+
use_monotype_operators: bool = Field(default=False, description="Use monotype operators in compilation")
|
|
52
|
+
show_corerel_errors: bool = Field(default=True, description="Show CoreRel error messages")
|
|
53
|
+
dry_run: bool = Field(default=False, description="Run compilation in dry-run mode")
|
|
54
|
+
inspect_df: bool = Field(default=False, description="Inspect DataFrame during compilation")
|
|
55
|
+
use_value_types: bool = Field(default=False, description="Use value types in compilation")
|
|
56
|
+
debug_hidden_keys: bool = Field(default=False, description="Debug hidden keys in compilation")
|
|
57
|
+
wide_outputs: bool = Field(default=False, description="Use wide output format for query results")
|
|
58
|
+
strict: bool = Field(default=False, description="Enable strict validation mode")
|
|
59
|
+
|
|
60
|
+
# Experimental compiler optimizations
|
|
61
|
+
use_inlined_intermediates: bool = Field(default=False, description="Use inlined intermediate results")
|
|
62
|
+
inline_value_maps: bool = Field(default=False, description="Inline value maps in weaver")
|
|
63
|
+
inline_entity_maps: bool = Field(default=False, description="Inline entity maps in weaver")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class ModelConfig(BaseModel):
|
|
67
|
+
keep: bool = Field(default=False, description="Keep model after execution")
|
|
68
|
+
isolated: bool = Field(default=True, description="Run model in isolated mode")
|
|
69
|
+
nowait_durable: bool = Field(default=True, description="Don't wait for durable operations")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class ReasonerRuleConfig(BaseModel):
|
|
73
|
+
use_lqp: bool = Field(default=True, description="Use LQP for reasoner rule execution")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class ReasonerConfig(BaseModel):
|
|
77
|
+
rule: ReasonerRuleConfig = Field(default_factory=ReasonerRuleConfig)
|
|
78
|
+
use_sql: bool = Field(default=False, description="Use SQL execution instead of LQP")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class DebugConfig(BaseModel):
|
|
82
|
+
enabled: bool = Field(default=True, description="Enable debug mode")
|
|
83
|
+
host: str | None = Field(default=None, description="Debug server host")
|
|
84
|
+
port: int = Field(default=8080, description="Debug server port")
|
|
85
|
+
show_debug_logs: bool = Field(default=False, description="Show debug log messages")
|
|
86
|
+
show_full_traces: bool = Field(default=False, description="Show full stack traces in errors")
|