relationalai 0.13.0__py3-none-any.whl → 0.13.0.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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 +1707 -0
- relationalai/semantics/frontend/core.py +179 -0
- relationalai/semantics/frontend/front_compiler.py +1313 -0
- relationalai/semantics/frontend/pprint.py +408 -0
- relationalai/semantics/metamodel/__init__.py +6 -40
- relationalai/semantics/metamodel/builtins.py +205 -771
- relationalai/semantics/metamodel/metamodel.py +437 -0
- relationalai/semantics/metamodel/metamodel_analyzer.py +519 -0
- relationalai/semantics/metamodel/pprint.py +412 -0
- relationalai/semantics/metamodel/rewriter.py +266 -0
- relationalai/semantics/metamodel/typer.py +1378 -0
- relationalai/semantics/std/__init__.py +60 -40
- relationalai/semantics/std/aggregates.py +149 -0
- relationalai/semantics/std/common.py +44 -0
- relationalai/semantics/std/constraints.py +37 -43
- relationalai/semantics/std/datetime.py +246 -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 +117 -60
- relationalai/shims/executor.py +147 -0
- relationalai/shims/helpers.py +126 -0
- relationalai/shims/hoister.py +221 -0
- relationalai/shims/mm2v0.py +1290 -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 -106
- 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-0.13.0.dev0.dist-info/METADATA +46 -0
- relationalai-0.13.0.dev0.dist-info/RECORD +488 -0
- relationalai-0.13.0.dev0.dist-info/WHEEL +5 -0
- relationalai-0.13.0.dev0.dist-info/entry_points.txt +3 -0
- relationalai-0.13.0.dev0.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 +2455 -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/__init__.py +0 -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 +324 -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 +469 -0
- v0/relationalai/semantics/lqp/intrinsics.py +24 -0
- v0/relationalai/semantics/lqp/model2lqp.py +839 -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/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 +449 -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 +774 -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/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 +549 -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/reasoners/__init__.py +10 -0
- v0/relationalai/semantics/reasoners/graph/__init__.py +37 -0
- v0/relationalai/semantics/reasoners/graph/core.py +9020 -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 -912
- relationalai/clients/config.py +0 -673
- relationalai/clients/direct_access_client.py +0 -118
- relationalai/clients/hash_util.py +0 -31
- relationalai/clients/local.py +0 -571
- relationalai/clients/profile_polling.py +0 -73
- relationalai/clients/resources/__init__.py +0 -8
- relationalai/clients/resources/azure/azure.py +0 -477
- relationalai/clients/resources/snowflake/__init__.py +0 -20
- relationalai/clients/resources/snowflake/cli_resources.py +0 -87
- relationalai/clients/resources/snowflake/direct_access_resources.py +0 -711
- relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -309
- relationalai/clients/resources/snowflake/error_handlers.py +0 -199
- 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 -3083
- relationalai/clients/resources/snowflake/use_index_poller.py +0 -1011
- 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 -113
- 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 -2478
- 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 -1087
- 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 -325
- relationalai/semantics/lqp/README.md +0 -34
- relationalai/semantics/lqp/builtins.py +0 -16
- relationalai/semantics/lqp/compiler.py +0 -22
- relationalai/semantics/lqp/constructors.py +0 -68
- relationalai/semantics/lqp/executor.py +0 -469
- relationalai/semantics/lqp/intrinsics.py +0 -24
- relationalai/semantics/lqp/model2lqp.py +0 -877
- relationalai/semantics/lqp/passes.py +0 -680
- relationalai/semantics/lqp/primitives.py +0 -252
- relationalai/semantics/lqp/result_helpers.py +0 -202
- relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -57
- relationalai/semantics/lqp/rewrite/cdc.py +0 -216
- relationalai/semantics/lqp/rewrite/extract_common.py +0 -338
- relationalai/semantics/lqp/rewrite/extract_keys.py +0 -506
- relationalai/semantics/lqp/rewrite/function_annotations.py +0 -114
- relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -314
- relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -296
- relationalai/semantics/lqp/rewrite/splinter.py +0 -76
- relationalai/semantics/lqp/types.py +0 -101
- relationalai/semantics/lqp/utils.py +0 -160
- relationalai/semantics/lqp/validators.py +0 -57
- relationalai/semantics/metamodel/compiler.py +0 -133
- relationalai/semantics/metamodel/dependency.py +0 -862
- relationalai/semantics/metamodel/executor.py +0 -61
- relationalai/semantics/metamodel/factory.py +0 -287
- relationalai/semantics/metamodel/helpers.py +0 -361
- relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -39
- relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -210
- relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -78
- relationalai/semantics/metamodel/rewrite/flatten.py +0 -554
- relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -165
- relationalai/semantics/metamodel/typer/checker.py +0 -353
- relationalai/semantics/metamodel/typer/typer.py +0 -1395
- relationalai/semantics/metamodel/util.py +0 -506
- 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 -1163
- relationalai/semantics/rel/builtins.py +0 -40
- relationalai/semantics/rel/compiler.py +0 -989
- relationalai/semantics/rel/executor.py +0 -362
- 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/test_snapshot_abstract.py +0 -143
- 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 -1936
- relationalai/tools/cli_controls.py +0 -1826
- relationalai/tools/cli_helpers.py +0 -398
- 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/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.0.dist-info/METADATA +0 -74
- relationalai-0.13.0.dist-info/RECORD +0 -458
- relationalai-0.13.0.dist-info/WHEEL +0 -4
- relationalai-0.13.0.dist-info/entry_points.txt +0 -3
- relationalai-0.13.0.dist-info/licenses/LICENSE +0 -202
- relationalai_test_util/__init__.py +0 -4
- relationalai_test_util/fixtures.py +0 -229
- 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/tools → 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 → 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/ir.py +0 -0
- {relationalai → v0/relationalai}/semantics/lqp/pragmas.py +0 -0
- {relationalai → v0/relationalai}/semantics/lqp/rewrite/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/dataflow.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/ir.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/rewrite/__init__.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/metamodel/visitor.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
|
@@ -1,450 +0,0 @@
|
|
|
1
|
-
# Copyright 2024 RelationalAI, Inc.
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
#
|
|
15
|
-
# A Schema is a disjunctions of SchemaFragments, each of which is a conjunction
|
|
16
|
-
# of predicate and propositional literals.
|
|
17
|
-
#
|
|
18
|
-
from abc import abstractmethod
|
|
19
|
-
from typing import Literal
|
|
20
|
-
|
|
21
|
-
from relationalai.early_access.dsl.schemas.builder import SchemaBuilder
|
|
22
|
-
from relationalai.early_access.dsl.schemas.contexts import SchemaContext, DASHES, ScalarComponent, RelationalComponent
|
|
23
|
-
from relationalai.early_access.dsl.schemas.fragments import SchemaFragment
|
|
24
|
-
|
|
25
|
-
from sys import stderr
|
|
26
|
-
|
|
27
|
-
class AbstractSchema:
|
|
28
|
-
|
|
29
|
-
def __init__(self): pass
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class FalseSchema(AbstractSchema):
|
|
33
|
-
|
|
34
|
-
def __init__(self):
|
|
35
|
-
super().__init__()
|
|
36
|
-
|
|
37
|
-
def display(self): return "False"
|
|
38
|
-
|
|
39
|
-
def pprint(self): return "FALSE"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# Schema
|
|
43
|
-
class Schema(AbstractSchema, SchemaBuilder):
|
|
44
|
-
|
|
45
|
-
# Each Schema object is a ContextManager
|
|
46
|
-
def __enter__(self):
|
|
47
|
-
SchemaContext.open(self) # open a new context for this Schema
|
|
48
|
-
return self
|
|
49
|
-
|
|
50
|
-
def __exit__(self, exc_type, exc_value, traceback):
|
|
51
|
-
SchemaContext.close()
|
|
52
|
-
self.register_attrs()
|
|
53
|
-
|
|
54
|
-
# Construct instances of this schema with an optional set of positional
|
|
55
|
-
# arguments and an optional set of keyword arguments.
|
|
56
|
-
#
|
|
57
|
-
# Special keyword arguments -- DASHES and PREFIX -- decorate the Schema that is
|
|
58
|
-
# being constructed. Other keyword arguments denote the renaming of a component
|
|
59
|
-
# using what would otherwise have been the name of the component in the Schema
|
|
60
|
-
# that is being constructed. CompNames inherit these decorations and renamings
|
|
61
|
-
# from context when a Set is ultimately declared using some name. We implement
|
|
62
|
-
# this inheritance using renaming-, dash-, and prefix- context stacks.
|
|
63
|
-
#
|
|
64
|
-
# Also, each Schema instance will contain an instance variable for each of its
|
|
65
|
-
# components so that contexts that use the instane may refer to the components
|
|
66
|
-
# by name. To make these references safe under schema inclusion, we name the
|
|
67
|
-
# variables using the context-free name of the component, which is the name
|
|
68
|
-
# of the component when the Schema is instantiated at the top level (i.e.,
|
|
69
|
-
# not in the context of some containing or including Schema).
|
|
70
|
-
#
|
|
71
|
-
def __init__(self, *args):
|
|
72
|
-
super().__init__()
|
|
73
|
-
|
|
74
|
-
self.disjuncts = []
|
|
75
|
-
|
|
76
|
-
# Sometimes a Schema can be instantiated with parameters that are not
|
|
77
|
-
# other Schemas, such as happens when we create a disjunction of the
|
|
78
|
-
# evaluation or reduction of schemas that might reduce to 'None'.
|
|
79
|
-
#
|
|
80
|
-
(parts, params) = partition_schema_args(args)
|
|
81
|
-
|
|
82
|
-
# Any parts should be merged in because when a Schema is instantiated with
|
|
83
|
-
# other Schemas as parts, they are to be conjoined by schema inclusion.
|
|
84
|
-
#
|
|
85
|
-
for p in parts:
|
|
86
|
-
self.merge(p)
|
|
87
|
-
|
|
88
|
-
if len(params) > 0:
|
|
89
|
-
for p in params:
|
|
90
|
-
if p is not None:
|
|
91
|
-
print(f"[INFO]: Found non-Schema parameter {p} in instaniation of schema {self}", file=stderr)
|
|
92
|
-
|
|
93
|
-
self.register_attrs()
|
|
94
|
-
|
|
95
|
-
# Allows subclasses of Schema to generate fresh instances of the subclass
|
|
96
|
-
# so that we can declare more methods here in this abstract superclass
|
|
97
|
-
#
|
|
98
|
-
@abstractmethod
|
|
99
|
-
def _generate(self) -> 'Schema':
|
|
100
|
-
pass
|
|
101
|
-
|
|
102
|
-
# Let self be an operation schema and pre an undecorated state schema. This operation
|
|
103
|
-
# returns a schema that is self reduced by constraints that are entailed by what remains
|
|
104
|
-
# in self if we assume pre.
|
|
105
|
-
#
|
|
106
|
-
def assume_precondition(self, pre):
|
|
107
|
-
new_schema: Schema = self._generate()
|
|
108
|
-
for t in self.disjuncts:
|
|
109
|
-
for p in pre.disjuncts:
|
|
110
|
-
new_schema.disjuncts.append(t.assume_precondition(p))
|
|
111
|
-
return new_schema
|
|
112
|
-
|
|
113
|
-
def build_relation_variable(self, args, kwargs):
|
|
114
|
-
|
|
115
|
-
dashes = kwargs[DASHES] if DASHES in kwargs else 0
|
|
116
|
-
|
|
117
|
-
tp = args[0]
|
|
118
|
-
name = args[1]
|
|
119
|
-
|
|
120
|
-
if self.disjunctive():
|
|
121
|
-
raise Exception("Cannot add a component directly to a disjunctive schema")
|
|
122
|
-
|
|
123
|
-
return self.declare_relation(name, tp, dashes)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
def build_scalar_variable(self, args, kwargs):
|
|
127
|
-
|
|
128
|
-
dashes = kwargs[DASHES] if DASHES in kwargs else 0
|
|
129
|
-
|
|
130
|
-
tp = args[0]
|
|
131
|
-
name = args[1]
|
|
132
|
-
if self.disjunctive():
|
|
133
|
-
raise Exception("Cannot add a component directly to a disjunctive schema")
|
|
134
|
-
|
|
135
|
-
return self.declare(name, tp, dashes)
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
# Causes this Schema to declare a new ScalarComponent of the given name, type,
|
|
139
|
-
# and decorartion (number of dashes)
|
|
140
|
-
#
|
|
141
|
-
def declare(self, name, type, dashes=0):
|
|
142
|
-
decl = ScalarComponent(name, type, dashes)
|
|
143
|
-
|
|
144
|
-
self.add_component(decl)
|
|
145
|
-
|
|
146
|
-
v = decl.basevar()
|
|
147
|
-
setattr(self, v.name(), v)
|
|
148
|
-
|
|
149
|
-
return decl
|
|
150
|
-
|
|
151
|
-
# Causes this Schema to declare a new RelationalComponent of the given name,
|
|
152
|
-
# signature, and decorartion (number of dashes)
|
|
153
|
-
#
|
|
154
|
-
def declare_relation(self, name, signature, dashes=0):
|
|
155
|
-
decl = RelationalComponent(name, signature, dashes)
|
|
156
|
-
|
|
157
|
-
self.add_relational_component(decl)
|
|
158
|
-
v = decl.basevar()
|
|
159
|
-
setattr(self, v.name(), v)
|
|
160
|
-
|
|
161
|
-
return decl
|
|
162
|
-
|
|
163
|
-
def decorate(self):
|
|
164
|
-
new_schema = self._generate()
|
|
165
|
-
for c in self.disjuncts:
|
|
166
|
-
new_schema.disjuncts.append(c.decorate())
|
|
167
|
-
new_schema.register_attrs()
|
|
168
|
-
return new_schema
|
|
169
|
-
|
|
170
|
-
# Given a tuple of relational vars, return a new Schema that is a duplicate
|
|
171
|
-
# of self with RelationIsEmpty constraints on all v in vars
|
|
172
|
-
#
|
|
173
|
-
def is_empty(self, *vars):
|
|
174
|
-
new_schema = self._generate()
|
|
175
|
-
for c in self.disjuncts:
|
|
176
|
-
new_schema.disjuncts.append(c.is_empty(*vars))
|
|
177
|
-
new_schema.register_attrs()
|
|
178
|
-
return new_schema
|
|
179
|
-
|
|
180
|
-
def register_attrs(self):
|
|
181
|
-
attrs = {}
|
|
182
|
-
for d in self.disjuncts:
|
|
183
|
-
for c in d._scalars.values():
|
|
184
|
-
v = c.basevar()
|
|
185
|
-
attrs[v.name()] = v
|
|
186
|
-
for c in d._relations.values():
|
|
187
|
-
v = c.basevar()
|
|
188
|
-
attrs[v.name()] = v
|
|
189
|
-
|
|
190
|
-
for v in attrs.values():
|
|
191
|
-
setattr(self, v.name(), v)
|
|
192
|
-
|
|
193
|
-
def constructor(self, *args):
|
|
194
|
-
pass
|
|
195
|
-
|
|
196
|
-
def disjunctive(self) -> bool:
|
|
197
|
-
return False
|
|
198
|
-
|
|
199
|
-
@abstractmethod
|
|
200
|
-
def merge(self, other) -> 'Schema':
|
|
201
|
-
pass
|
|
202
|
-
|
|
203
|
-
# Let self be some operation Schema. For each dashed relation R' in self, if there
|
|
204
|
-
# exists at least one AtomicConstraint involving R' in the constraints of self, we can
|
|
205
|
-
# generate a (potentially recursive) Rel rule that populates R by conjoining the
|
|
206
|
-
# constraints that refer either directly or indirectly to R.
|
|
207
|
-
#
|
|
208
|
-
def genrel(self):
|
|
209
|
-
operation = []
|
|
210
|
-
|
|
211
|
-
reduced = self.reduce()
|
|
212
|
-
for s in reduced.disjuncts:
|
|
213
|
-
operation.append(s.refine().pprint())
|
|
214
|
-
return "\n\n".join(operation)
|
|
215
|
-
|
|
216
|
-
# Creates a new schema by hiding variables named in args under an existential
|
|
217
|
-
# quantifier. This is just a wrapper to conceal that allows users to directly
|
|
218
|
-
# reference Schema instance variables when declaring Schema classes
|
|
219
|
-
#
|
|
220
|
-
def hide(self, *args):
|
|
221
|
-
if len(args) == 0:
|
|
222
|
-
raise Exception("Must name variables to hide from a schema")
|
|
223
|
-
|
|
224
|
-
return self.conceal([var.display() for var in args])
|
|
225
|
-
|
|
226
|
-
# Add SchemaComponent d to the declaration part of this Schema
|
|
227
|
-
#
|
|
228
|
-
def add_component(self, d):
|
|
229
|
-
if len(self.disjuncts) == 0:
|
|
230
|
-
self.disjuncts.append(SchemaFragment())
|
|
231
|
-
|
|
232
|
-
# By default, we assume that we will need to cache component d.
|
|
233
|
-
for disj in self.disjuncts:
|
|
234
|
-
disj.add_component(d)
|
|
235
|
-
|
|
236
|
-
# Add SchemaComponent d to the declaration part of this Schema
|
|
237
|
-
#
|
|
238
|
-
def add_relational_component(self, d):
|
|
239
|
-
if len(self.disjuncts) == 0:
|
|
240
|
-
self.disjuncts.append(SchemaFragment())
|
|
241
|
-
|
|
242
|
-
# By default, we assume that we will need to cache component d.
|
|
243
|
-
for disj in self.disjuncts:
|
|
244
|
-
disj.add_relational_component(d)
|
|
245
|
-
|
|
246
|
-
def add_scalar_constraint(self, c):
|
|
247
|
-
if len(self.disjuncts) == 0:
|
|
248
|
-
self.disjuncts.append(SchemaFragment())
|
|
249
|
-
|
|
250
|
-
for disj in self.disjuncts:
|
|
251
|
-
disj.add_scalar_constraint(c)
|
|
252
|
-
|
|
253
|
-
def add_atomic_constraint(self, c):
|
|
254
|
-
if len(self.disjuncts) == 0:
|
|
255
|
-
self.disjuncts.append(SchemaFragment())
|
|
256
|
-
|
|
257
|
-
for disj in self.disjuncts:
|
|
258
|
-
disj.add_atomic_constraint(c)
|
|
259
|
-
|
|
260
|
-
def add_predicate_constraint(self, c):
|
|
261
|
-
if len(self.disjuncts) == 0:
|
|
262
|
-
self.disjuncts.append(SchemaFragment())
|
|
263
|
-
|
|
264
|
-
for disj in self.disjuncts:
|
|
265
|
-
disj.add_predicate_constraint(c)
|
|
266
|
-
|
|
267
|
-
# Returns the schema formed by concealing (hiding) variables in the list cvars
|
|
268
|
-
# under an existential quantifier.
|
|
269
|
-
#
|
|
270
|
-
# Note: Clients typically call this method indirectly from the hide method.
|
|
271
|
-
#
|
|
272
|
-
def conceal(self, cvars):
|
|
273
|
-
new_schema = self._generate()
|
|
274
|
-
for disj in self.disjuncts:
|
|
275
|
-
new_schema.disjuncts.append(disj.conceal(cvars))
|
|
276
|
-
return new_schema
|
|
277
|
-
|
|
278
|
-
# Partially evaluate this Schema by substituting statically-computable values for
|
|
279
|
-
# its schema variables, simplifying where possible.
|
|
280
|
-
#
|
|
281
|
-
def evaluate(self, bindings):
|
|
282
|
-
new_schema = self._generate()
|
|
283
|
-
for disj in self.disjuncts:
|
|
284
|
-
d = disj.evaluate(bindings)
|
|
285
|
-
if d is not None:
|
|
286
|
-
new_schema.disjuncts.append(d)
|
|
287
|
-
|
|
288
|
-
# Check if evaluation violates some schema constraint
|
|
289
|
-
if len(self.disjuncts) > 0 and len(new_schema.disjuncts) == 0:
|
|
290
|
-
return FalseSchema()
|
|
291
|
-
|
|
292
|
-
return new_schema
|
|
293
|
-
|
|
294
|
-
# Emit this schema to a textual output using the Z display style
|
|
295
|
-
#
|
|
296
|
-
def pprint(self):
|
|
297
|
-
declStrings = []
|
|
298
|
-
|
|
299
|
-
declStrings.append("( ")
|
|
300
|
-
disjunctStrings = []
|
|
301
|
-
for disj in self.disjuncts:
|
|
302
|
-
disjunctStrings.append(disj.pprint())
|
|
303
|
-
declStrings.append("\n OR \n".join(disjunctStrings))
|
|
304
|
-
declStrings.append(" )")
|
|
305
|
-
return "\n".join(declStrings)
|
|
306
|
-
|
|
307
|
-
def prefix(self, pref):
|
|
308
|
-
new_schema = self._generate()
|
|
309
|
-
for c in self.disjuncts:
|
|
310
|
-
new_schema.disjuncts.append(c.prefix(pref))
|
|
311
|
-
new_schema.register_attrs()
|
|
312
|
-
return new_schema
|
|
313
|
-
|
|
314
|
-
# Simplify this Schema by checking the satisfiability of its propositional
|
|
315
|
-
# constraints.
|
|
316
|
-
#
|
|
317
|
-
def reduce(self):
|
|
318
|
-
new_schema = self._generate()
|
|
319
|
-
for disj in self.disjuncts:
|
|
320
|
-
s = disj.reduce()
|
|
321
|
-
if s is not None:
|
|
322
|
-
new_schema.disjuncts.append(s)
|
|
323
|
-
return new_schema
|
|
324
|
-
|
|
325
|
-
# Simplify this Schema by projecting out decls that are equated with
|
|
326
|
-
# other decls via predicate constraints. These commonly arise when
|
|
327
|
-
# decorating Schemas using the Xi operator. Note that when reducing
|
|
328
|
-
# we try to remove the SchemaComponent with the larger number of dashes
|
|
329
|
-
# to simplify Rel rule generation.
|
|
330
|
-
#
|
|
331
|
-
def reduce_by_xi(self):
|
|
332
|
-
new_schema = self._generate()
|
|
333
|
-
for disj in self.disjuncts:
|
|
334
|
-
new_schema.disjuncts.append(disj.reduce_by_xi())
|
|
335
|
-
return new_schema
|
|
336
|
-
|
|
337
|
-
# Create a new Schema by renaming this Schema's decls.
|
|
338
|
-
# Each arg must be a dictionary that maps component name
|
|
339
|
-
# to some compatible component.
|
|
340
|
-
#
|
|
341
|
-
def rename(self, *args):
|
|
342
|
-
renaming = {}
|
|
343
|
-
for a in args:
|
|
344
|
-
renaming = renaming | a
|
|
345
|
-
|
|
346
|
-
new_schema = self._generate()
|
|
347
|
-
for disj in self.disjuncts:
|
|
348
|
-
new_schema.disjuncts.append(disj.rename(renaming))
|
|
349
|
-
new_schema.register_attrs()
|
|
350
|
-
return new_schema
|
|
351
|
-
|
|
352
|
-
def sync(self, *args):
|
|
353
|
-
return self.rename(*args)
|
|
354
|
-
|
|
355
|
-
# Generates the rule to populate a Rel view that materializes this
|
|
356
|
-
# Schema under the given view name.
|
|
357
|
-
#
|
|
358
|
-
# The rule will be annotated @inline if we cannot statically
|
|
359
|
-
# determine that the Schema is grounded.
|
|
360
|
-
#
|
|
361
|
-
def view(self, viewName):
|
|
362
|
-
s = self.reduce_by_xi().reduce()
|
|
363
|
-
rules = []
|
|
364
|
-
|
|
365
|
-
for disj in s.disjuncts:
|
|
366
|
-
rules.append(disj.view(viewName))
|
|
367
|
-
|
|
368
|
-
return "\n".join(rules)
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
class ConjunctiveSchema(Schema):
|
|
372
|
-
|
|
373
|
-
def __init__(self, *args):
|
|
374
|
-
Schema.__init__(self, *args)
|
|
375
|
-
|
|
376
|
-
def _generate(self): return ConjunctiveSchema()
|
|
377
|
-
|
|
378
|
-
# Looks to see if this Schema declares a RelationComponent by this
|
|
379
|
-
# name
|
|
380
|
-
def has_relation_component(self, name) -> bool:
|
|
381
|
-
for d in self.disjuncts:
|
|
382
|
-
if name in d._relations:
|
|
383
|
-
return True
|
|
384
|
-
return False
|
|
385
|
-
|
|
386
|
-
# Assuming this Schema already contains a RelationComponent by this
|
|
387
|
-
# name, retrieve and return it to the caller. We use this to support
|
|
388
|
-
# dynamically adding components to a schema when we see references
|
|
389
|
-
# to relations that are defined in an ontology.
|
|
390
|
-
#
|
|
391
|
-
def retrieve_relation_component(self, name):
|
|
392
|
-
for d in self.disjuncts:
|
|
393
|
-
if name in d._relations:
|
|
394
|
-
return d._relations[name]
|
|
395
|
-
return None
|
|
396
|
-
|
|
397
|
-
# Merge self with other, mutating self.
|
|
398
|
-
#
|
|
399
|
-
def merge(self, other):
|
|
400
|
-
oldSelfDisjuncts = self.disjuncts
|
|
401
|
-
self.disjuncts = []
|
|
402
|
-
if len(oldSelfDisjuncts) >= 1:
|
|
403
|
-
for d in oldSelfDisjuncts:
|
|
404
|
-
for d2 in other.disjuncts:
|
|
405
|
-
d3 = d.duplicate()
|
|
406
|
-
for c in d2._scalars:
|
|
407
|
-
d3.add_component(d2._scalars[c])
|
|
408
|
-
for c in d2._relations:
|
|
409
|
-
d3.add_relational_component(d2._relations[c])
|
|
410
|
-
for c in d2._sconstraints:
|
|
411
|
-
d3.add_scalar_constraint(d2._sconstraints[c])
|
|
412
|
-
for c in d2._atoms:
|
|
413
|
-
d3.add_atomic_constraint(d2._atoms[c])
|
|
414
|
-
for c in d2._universals:
|
|
415
|
-
d3.add_predicate_constraint(d2._universals[c])
|
|
416
|
-
self.disjuncts.append(d3)
|
|
417
|
-
else:
|
|
418
|
-
self.disjuncts = [d.duplicate() for d in other.disjuncts]
|
|
419
|
-
return self
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
class DisjunctiveSchema(Schema):
|
|
423
|
-
|
|
424
|
-
def __init__(self, *args):
|
|
425
|
-
Schema.__init__(self, *args)
|
|
426
|
-
|
|
427
|
-
def _generate(self): return DisjunctiveSchema()
|
|
428
|
-
|
|
429
|
-
def disjunctive(self) -> Literal[True]: return True
|
|
430
|
-
|
|
431
|
-
def merge(self, other):
|
|
432
|
-
for d in other.disjuncts:
|
|
433
|
-
self.disjuncts.append(d)
|
|
434
|
-
self.register_attrs()
|
|
435
|
-
return self
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
# When class Schema is instantiated, other Schema instances (parts) can
|
|
439
|
-
# be specified, as can arbitrary arguments that are used to parameterize
|
|
440
|
-
# the Schema.
|
|
441
|
-
#
|
|
442
|
-
def partition_schema_args(args):
|
|
443
|
-
parts = []
|
|
444
|
-
params = []
|
|
445
|
-
for a in args:
|
|
446
|
-
if isinstance(a, Schema):
|
|
447
|
-
parts.append(a)
|
|
448
|
-
else:
|
|
449
|
-
params.append(a)
|
|
450
|
-
return (parts, params)
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
from relationalai.early_access.dsl.core.builders.logic import LogicBuilder
|
|
4
|
-
from relationalai.early_access.dsl.core.constraints.predicate.atomic import ElementOf, NotElementOf
|
|
5
|
-
from relationalai.early_access.dsl.core.exprs import Wildcard, Expr
|
|
6
|
-
from relationalai.early_access.dsl.core.exprs.scalar import ScalarExpr
|
|
7
|
-
from relationalai.early_access.dsl.schemas.components import SchemaComponent
|
|
8
|
-
from relationalai.early_access.dsl.schemas.exprs import Domain, Range
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class SchemaBuilder(LogicBuilder):
|
|
12
|
-
|
|
13
|
-
def build_element_of(self, e, set):
|
|
14
|
-
if not isinstance(e, ScalarExpr):
|
|
15
|
-
raise Exception(f"Currently do not support element-of constraints on non-scalar exprs like {e.display()}")
|
|
16
|
-
|
|
17
|
-
if not set.relational():
|
|
18
|
-
raise Exception(
|
|
19
|
-
f"Currently do not support element-of constraints on non-relational arguments like {set.display()}")
|
|
20
|
-
|
|
21
|
-
# When this construction checks that an expression is in the domain
|
|
22
|
-
# of some Relation, then rewrite using Wildcard
|
|
23
|
-
#
|
|
24
|
-
if isinstance(set, Domain):
|
|
25
|
-
p = set.part
|
|
26
|
-
if isinstance(p, SchemaComponent):
|
|
27
|
-
rel = p.typeof()
|
|
28
|
-
args: List[Expr] = [e]
|
|
29
|
-
for i in range(2, rel.arity() + 1):
|
|
30
|
-
args.append(Wildcard())
|
|
31
|
-
return self.build_atom(p, args)
|
|
32
|
-
|
|
33
|
-
# Similarly for when checking in the domain of some Relation
|
|
34
|
-
#
|
|
35
|
-
if isinstance(set, Range):
|
|
36
|
-
p = set.part
|
|
37
|
-
if isinstance(p, SchemaComponent):
|
|
38
|
-
rel = p.typeof()
|
|
39
|
-
args: List[Expr] = []
|
|
40
|
-
for i in range(1, rel.arity() - 1):
|
|
41
|
-
args.append(Wildcard())
|
|
42
|
-
args.append(e)
|
|
43
|
-
return self.build_atom(p, args)
|
|
44
|
-
|
|
45
|
-
return ElementOf(e, set)
|
|
46
|
-
|
|
47
|
-
def build_not_element_of(self, e, set):
|
|
48
|
-
return NotElementOf(e, set)
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# The names used to refer to components of a schema. Always involves a name,
|
|
3
|
-
# zero or more dashes (' symbols in Z), and a prefix string that could be
|
|
4
|
-
# empty.
|
|
5
|
-
#
|
|
6
|
-
from relationalai.early_access.dsl.constants import PRIME
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class CompName:
|
|
10
|
-
|
|
11
|
-
# Generates a CompName from a name *nm* in context *ctx* in which the
|
|
12
|
-
# component is declared and a level *i* that is between 0 and the depth
|
|
13
|
-
# of ctx. The CompName at level i must reflect the cumulative decorations
|
|
14
|
-
# (dashes and prefixes) that were applied at levels i .. d.
|
|
15
|
-
#
|
|
16
|
-
@staticmethod
|
|
17
|
-
def gen_from_context(nm, ctx, i, dashes=0):
|
|
18
|
-
|
|
19
|
-
dsh = ctx.dashes[i] + dashes
|
|
20
|
-
pref = ctx.prefixes[i]
|
|
21
|
-
return CompName(nm, dashes=dsh, prefix=pref)
|
|
22
|
-
|
|
23
|
-
def __init__(self, nm, dashes=0, prefix=""):
|
|
24
|
-
self.name = nm
|
|
25
|
-
self.prefix = prefix
|
|
26
|
-
self.dashes = dashes
|
|
27
|
-
|
|
28
|
-
def display(self):
|
|
29
|
-
if self.prefix == "":
|
|
30
|
-
nm = self.name
|
|
31
|
-
else:
|
|
32
|
-
nm = self.name[0].capitalize() + self.name[1:]
|
|
33
|
-
return self.prefix + nm + PRIME * self.dashes
|
|
34
|
-
|
|
35
|
-
# This predicate returns True if this name is decorated by a single dash
|
|
36
|
-
#
|
|
37
|
-
def decorated(self) -> bool:
|
|
38
|
-
return self.dashes == 1
|
|
39
|
-
|
|
40
|
-
def undecorated(self) -> bool:
|
|
41
|
-
return self.dashes == 0
|
|
42
|
-
|
|
43
|
-
def undash(self):
|
|
44
|
-
dashes = self.dashes - 1
|
|
45
|
-
if dashes < 0:
|
|
46
|
-
raise Exception(f"++ Cannot undash {self.display()}")
|
|
47
|
-
else:
|
|
48
|
-
return CompName(self.name, dashes, self.prefix)
|
|
49
|
-
|
|
50
|
-
def entityid(self):
|
|
51
|
-
return hash(self.display())
|