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,310 +0,0 @@
|
|
|
1
|
-
from relationalai.early_access.dsl.core.constraints import Constraint, TrueConstraint, FalseConstraint
|
|
2
|
-
|
|
3
|
-
class ScalarConstraint(Constraint):
|
|
4
|
-
|
|
5
|
-
def __init__(self, x, y, z):
|
|
6
|
-
self.op = y
|
|
7
|
-
if y == "=" and x.grounded():
|
|
8
|
-
self.left = z
|
|
9
|
-
self.right = x
|
|
10
|
-
else:
|
|
11
|
-
self.left = x
|
|
12
|
-
self.right = z
|
|
13
|
-
|
|
14
|
-
# A binding is a definition in which the right-hand side of the equality
|
|
15
|
-
# comparison is grounded and so will evaluate to a constant (e.g., "x == 20")
|
|
16
|
-
#
|
|
17
|
-
def binding(self):
|
|
18
|
-
return self.definition() and self.right.grounded()
|
|
19
|
-
|
|
20
|
-
def commutative_definition(self):
|
|
21
|
-
return self.definition() and self.right.variable()
|
|
22
|
-
|
|
23
|
-
def commute(self):
|
|
24
|
-
if not self.commutative_definition():
|
|
25
|
-
raise Exception(f"Cannot commute non-commutative definition {self.pprint()}")
|
|
26
|
-
return ScalarConstraint( self.right, '=', self.left )
|
|
27
|
-
|
|
28
|
-
# A definition is a left var ScalarConstraint of the form that involves an
|
|
29
|
-
# equality operator (e.g., "x == 20", or "x == y + 5" )
|
|
30
|
-
#
|
|
31
|
-
def definition(self):
|
|
32
|
-
return self.left.variable() and self.equality()
|
|
33
|
-
|
|
34
|
-
def equality(self):
|
|
35
|
-
return self.op == "="
|
|
36
|
-
|
|
37
|
-
def negate(self):
|
|
38
|
-
left = self.left
|
|
39
|
-
right = self.right
|
|
40
|
-
if self.op == "=":
|
|
41
|
-
return ScalarConstraint(left, "!=", right)
|
|
42
|
-
if self.op == "!=":
|
|
43
|
-
return ScalarConstraint(left, "=", right)
|
|
44
|
-
if self.op == "<=":
|
|
45
|
-
return ScalarConstraint(left, ">", right)
|
|
46
|
-
if self.op == "<":
|
|
47
|
-
return ScalarConstraint(left, ">=", right)
|
|
48
|
-
if self.op == ">=":
|
|
49
|
-
return ScalarConstraint(left, "<", right)
|
|
50
|
-
if self.op == ">":
|
|
51
|
-
return ScalarConstraint(left, "<=", right)
|
|
52
|
-
|
|
53
|
-
raise Exception(f"Cannot negate constraint {self.pprint()}")
|
|
54
|
-
|
|
55
|
-
# Emit this schema to a textual output using the Z display style
|
|
56
|
-
#
|
|
57
|
-
def pprint(self):
|
|
58
|
-
|
|
59
|
-
left = self.left
|
|
60
|
-
right = self.right
|
|
61
|
-
result = []
|
|
62
|
-
|
|
63
|
-
if hasattr(left, "display"):
|
|
64
|
-
result.append(left.display())
|
|
65
|
-
else:
|
|
66
|
-
result.append(left)
|
|
67
|
-
|
|
68
|
-
if self.op == "=":
|
|
69
|
-
result.append("==")
|
|
70
|
-
else:
|
|
71
|
-
result.append(self.op)
|
|
72
|
-
|
|
73
|
-
if hasattr(right, "display"):
|
|
74
|
-
result.append(right.display())
|
|
75
|
-
else:
|
|
76
|
-
result.append(right)
|
|
77
|
-
|
|
78
|
-
return " ".join(result)
|
|
79
|
-
|
|
80
|
-
def rel_formula(self):
|
|
81
|
-
return f"{self.left.display()} {self.op} {self.right.display()}"
|
|
82
|
-
|
|
83
|
-
def grounded(self):
|
|
84
|
-
return self.left.grounded() and self.right.grounded()
|
|
85
|
-
|
|
86
|
-
def grounds(self, v, groundings):
|
|
87
|
-
if self.equality():
|
|
88
|
-
lv = self.left
|
|
89
|
-
if lv.variable():
|
|
90
|
-
if lv.entityid() == v.entityid():
|
|
91
|
-
return self.right.grounded_using(groundings)
|
|
92
|
-
else:
|
|
93
|
-
rv = self.right
|
|
94
|
-
if rv.variable() and rv.entityid() == v.entityid():
|
|
95
|
-
return self.left.grounded_using(groundings)
|
|
96
|
-
return False
|
|
97
|
-
|
|
98
|
-
def scalar_refs(self):
|
|
99
|
-
dic = self.left.scalar_refs()
|
|
100
|
-
rdict = self.right.scalar_refs()
|
|
101
|
-
for v in rdict:
|
|
102
|
-
if v not in dic:
|
|
103
|
-
dic[v] = rdict[v]
|
|
104
|
-
return dic
|
|
105
|
-
|
|
106
|
-
def refersto(self, varname: str) -> bool:
|
|
107
|
-
return self.left.refersto(varname) or self.right.refersto(varname)
|
|
108
|
-
|
|
109
|
-
def relational(self) -> bool:
|
|
110
|
-
return self.left.relational() or self.right.relational()
|
|
111
|
-
|
|
112
|
-
def rename(self, renaming):
|
|
113
|
-
return ScalarConstraint(self.left.rename(renaming),
|
|
114
|
-
self.op,
|
|
115
|
-
self.right.rename(renaming))
|
|
116
|
-
|
|
117
|
-
def revar(self, vmap):
|
|
118
|
-
return ScalarConstraint(self.left.revar(vmap),
|
|
119
|
-
self.op,
|
|
120
|
-
self.right.revar(vmap))
|
|
121
|
-
|
|
122
|
-
# Report out the propositional variables that are used in this constraint as
|
|
123
|
-
# an extension to the bindings dictionary that is provided.
|
|
124
|
-
#
|
|
125
|
-
def report_propositional_variable_usage(self, bindings):
|
|
126
|
-
uses = self.scalar_refs()
|
|
127
|
-
|
|
128
|
-
if len(bindings) == 0:
|
|
129
|
-
return uses
|
|
130
|
-
else:
|
|
131
|
-
bdgs = bindings.copy()
|
|
132
|
-
for v in uses:
|
|
133
|
-
if v not in bindings:
|
|
134
|
-
bdgs[v] = uses[v]
|
|
135
|
-
|
|
136
|
-
return bdgs
|
|
137
|
-
|
|
138
|
-
def simplify(self):
|
|
139
|
-
if self.grounded():
|
|
140
|
-
exec(f"self.x = {self.pprint()}")
|
|
141
|
-
if self.x: # type: ignore
|
|
142
|
-
return TrueConstraint()
|
|
143
|
-
else:
|
|
144
|
-
return FalseConstraint()
|
|
145
|
-
else:
|
|
146
|
-
left = self.left.simplify()
|
|
147
|
-
right = self.right.simplify()
|
|
148
|
-
if left.grounded() and self.equality():
|
|
149
|
-
return ScalarConstraint(right, self.op, left)
|
|
150
|
-
else:
|
|
151
|
-
return ScalarConstraint(left, self.op, right)
|
|
152
|
-
|
|
153
|
-
def substitute(self, bindings):
|
|
154
|
-
x = self.left.substitute(bindings)
|
|
155
|
-
y = self.right.substitute(bindings)
|
|
156
|
-
return ScalarConstraint(x, self.op, y)
|
|
157
|
-
|
|
158
|
-
def map_builder(self, builder):
|
|
159
|
-
x = self.left.map_builder(builder)
|
|
160
|
-
y = self.right.map_builder(builder)
|
|
161
|
-
return ScalarConstraint(x, self.op, y)
|
|
162
|
-
|
|
163
|
-
def entityid(self):
|
|
164
|
-
return hash((self.op,
|
|
165
|
-
self.left.entityid(),
|
|
166
|
-
self.right.entityid()))
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
# Given a dictionary 'props' of ScalarConstraints, return the dictionary
|
|
170
|
-
# containing that subset of props that are binding definitions
|
|
171
|
-
#
|
|
172
|
-
def binding_definitions_of(props):
|
|
173
|
-
return {c.entityid(): c for c in props.values() if c.binding()}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
# Given a set props of ScalarConstraints, partition props into
|
|
177
|
-
# (bcons, other) where bcons are binding definitions, and return
|
|
178
|
-
# (bdgs, bcons, other) where bdgs is a binding dictionary used to
|
|
179
|
-
# apply constraints from bcons.
|
|
180
|
-
#
|
|
181
|
-
def bindings_from(props):
|
|
182
|
-
bdgs = {}
|
|
183
|
-
bcons = {}
|
|
184
|
-
other = []
|
|
185
|
-
|
|
186
|
-
bprops = binding_definitions_of(props)
|
|
187
|
-
|
|
188
|
-
# Partition props into a dictionary of substitution bindings (bdgs)
|
|
189
|
-
# that derive from the binding definitions in props and any other
|
|
190
|
-
# (non-binding) constraints in props.
|
|
191
|
-
#
|
|
192
|
-
for chash in props:
|
|
193
|
-
c = props[chash]
|
|
194
|
-
if chash in bprops:
|
|
195
|
-
v = c.left.display()
|
|
196
|
-
if v in bdgs:
|
|
197
|
-
# Then we have (at least 2) constraints of the form:
|
|
198
|
-
# v == expr1
|
|
199
|
-
# v == expr2
|
|
200
|
-
# for expressions expr1 and expr2. In this case, we
|
|
201
|
-
# need to add the equality constraint `expr1 == expr2`
|
|
202
|
-
# to other.
|
|
203
|
-
#
|
|
204
|
-
expr1 = bdgs[v]
|
|
205
|
-
expr2 = c.right
|
|
206
|
-
if expr2.variable():
|
|
207
|
-
# Prefer to put the variable on the LHS when possible
|
|
208
|
-
#
|
|
209
|
-
other.append(ScalarConstraint(expr2, "=", expr1))
|
|
210
|
-
else:
|
|
211
|
-
other.append(ScalarConstraint(expr1, "=", expr2))
|
|
212
|
-
else:
|
|
213
|
-
bdgs[v] = c.right
|
|
214
|
-
bcons[chash] = c
|
|
215
|
-
else:
|
|
216
|
-
other.append(c)
|
|
217
|
-
|
|
218
|
-
return bdgs, bcons, other
|
|
219
|
-
|
|
220
|
-
def commutative_definitions_from(props):
|
|
221
|
-
defns = {}
|
|
222
|
-
cdcons = {}
|
|
223
|
-
other = []
|
|
224
|
-
|
|
225
|
-
cdefs = commutative_definitions_of(props)
|
|
226
|
-
|
|
227
|
-
# Partition props into a dictionary of commutative definitions (defns)
|
|
228
|
-
# that derive from the binding definitions in props and any other
|
|
229
|
-
# (non-binding) constraints in props.
|
|
230
|
-
#
|
|
231
|
-
for chash in props:
|
|
232
|
-
c = props[chash]
|
|
233
|
-
if chash in cdefs and c.commute().entityid() not in defns:
|
|
234
|
-
# Add {chash: c} to defns if its commuted equivalent not already there!
|
|
235
|
-
defns[c.left.display()] = c.right
|
|
236
|
-
cdcons[chash] = c
|
|
237
|
-
else:
|
|
238
|
-
other.append(c)
|
|
239
|
-
|
|
240
|
-
return defns, cdcons, other
|
|
241
|
-
|
|
242
|
-
def definitions_of(props):
|
|
243
|
-
return {c.entityid(): c for c in props.values() if c.definition()}
|
|
244
|
-
|
|
245
|
-
def commutative_definitions_of(props):
|
|
246
|
-
return {c.entityid(): c for c in props.values() if c.commutative_definition()}
|
|
247
|
-
|
|
248
|
-
# Given a set (comps, atoms) of ScalarConstraints and AtomicConstraints respectively,
|
|
249
|
-
# find any binding constraints in comps and use them to do constant folding within
|
|
250
|
-
# (comps, atoms), returning that set of constraints that is equivalent following
|
|
251
|
-
# one or more rounds of constant folding.
|
|
252
|
-
#
|
|
253
|
-
def fold_constants(comps, atoms):
|
|
254
|
-
(bdgs, newcomps, other) = bindings_from(comps)
|
|
255
|
-
blen = 0
|
|
256
|
-
|
|
257
|
-
if len(bdgs) == 0:
|
|
258
|
-
return comps, atoms
|
|
259
|
-
|
|
260
|
-
# Otherwise, there is at least one binding to try to apply.
|
|
261
|
-
|
|
262
|
-
while blen < len(bdgs):
|
|
263
|
-
# Note that len(bdgs) is non-decreasing with each iteration
|
|
264
|
-
#
|
|
265
|
-
blen = len(bdgs)
|
|
266
|
-
|
|
267
|
-
# We have not yet applied all bindings. So try to fold
|
|
268
|
-
# any bound value into other constraints, simplifying
|
|
269
|
-
# where possible.
|
|
270
|
-
#
|
|
271
|
-
for c in other:
|
|
272
|
-
cprime = c.substitute(bdgs).simplify()
|
|
273
|
-
if isinstance(cprime, FalseConstraint):
|
|
274
|
-
# Signal that the whole set of constraints is unsatisfiable
|
|
275
|
-
return {1: cprime}, {}
|
|
276
|
-
if not isinstance(cprime, TrueConstraint):
|
|
277
|
-
newcomps[cprime.entityid()] = cprime
|
|
278
|
-
|
|
279
|
-
comps = newcomps
|
|
280
|
-
(bdgs, newcomps, other) = bindings_from(comps)
|
|
281
|
-
|
|
282
|
-
newatoms = {}
|
|
283
|
-
for c in atoms:
|
|
284
|
-
cprime = atoms[c].substitute(bdgs).simplify()
|
|
285
|
-
newatoms[cprime.entityid()] = cprime
|
|
286
|
-
|
|
287
|
-
return comps, newatoms
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
# Given a set (comps, atoms) of ScalarConstraints and AtomicConstraints respectively,
|
|
291
|
-
# find any commutative-definition constraints in comps and propagatge them within
|
|
292
|
-
# (comps, atoms), returning that set of constraints that is equivalent following
|
|
293
|
-
# one or more rounds of propagation.
|
|
294
|
-
#
|
|
295
|
-
def propagate_definitions(comps, atoms):
|
|
296
|
-
|
|
297
|
-
(cdefs, newcomps, other) = commutative_definitions_from(comps)
|
|
298
|
-
|
|
299
|
-
if len(cdefs) == 0:
|
|
300
|
-
return comps, atoms
|
|
301
|
-
for c in other:
|
|
302
|
-
cprime = c.substitute(cdefs)
|
|
303
|
-
newcomps[cprime.entityid()] = cprime
|
|
304
|
-
|
|
305
|
-
newatoms = {}
|
|
306
|
-
for c in atoms:
|
|
307
|
-
cprime = atoms[c].substitute(cdefs)
|
|
308
|
-
newatoms[cprime.entityid()] = cprime
|
|
309
|
-
|
|
310
|
-
return newcomps, newatoms
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from relationalai.early_access.dsl.core.stack import Stack
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class ContextStack(Stack):
|
|
5
|
-
|
|
6
|
-
def __init__(self):
|
|
7
|
-
super().__init__()
|
|
8
|
-
|
|
9
|
-
def root_context(self):
|
|
10
|
-
ctx = self.top()
|
|
11
|
-
if ctx is None:
|
|
12
|
-
raise Exception('Context stack is empty')
|
|
13
|
-
return ctx
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
from relationalai.early_access.dsl.core.constraints import FalseConstraint, TrueConstraint
|
|
2
|
-
from relationalai.early_access.dsl.core.constraints.predicate.atomic import AtomicConstraint
|
|
3
|
-
from relationalai.early_access.dsl.core.constraints.scalar import ScalarConstraint, fold_constants
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# A ConstraintSet is a stable collection of constraints that can be composed
|
|
7
|
-
# into a conjunctive datalog query. These are useful for structuring declarative
|
|
8
|
-
# specifications of types, formulae, and more abstract schemas, as well as
|
|
9
|
-
# forming the basis for Rel rules.
|
|
10
|
-
#
|
|
11
|
-
# One interesting problem concerns the construction of stable constraints, as
|
|
12
|
-
# we may need to create UnstableConstraintSets before all of the constraints
|
|
13
|
-
# stabilize and then generate the ConstraintSet once they do
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
class AbstractConstraintSet:
|
|
17
|
-
|
|
18
|
-
def __init__(self):
|
|
19
|
-
self._atoms = {}
|
|
20
|
-
self._sconstraints = {}
|
|
21
|
-
|
|
22
|
-
def add_atomic_constraint(self, c): pass
|
|
23
|
-
|
|
24
|
-
def add_scalar_constraint(self, c): pass
|
|
25
|
-
|
|
26
|
-
# Returns a ConstraintSet that stabilizes the constraints declared in this set by
|
|
27
|
-
# replacing object ids in the dictionaries with (now stable) constraint entityids.
|
|
28
|
-
#
|
|
29
|
-
def stabilize(self):
|
|
30
|
-
cset = ConstraintSet()
|
|
31
|
-
cset._sconstraints = {c.entityid(): c for c in self._sconstraints.values()}
|
|
32
|
-
cset._atoms = {c.entityid(): c for c in self._atoms.values()}
|
|
33
|
-
return cset
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class ConstraintSet(AbstractConstraintSet):
|
|
37
|
-
|
|
38
|
-
def __init__(self):
|
|
39
|
-
super().__init__()
|
|
40
|
-
|
|
41
|
-
def add_scalar_constraint(self, c):
|
|
42
|
-
cv = c.entityid()
|
|
43
|
-
if not isinstance(c, ScalarConstraint):
|
|
44
|
-
raise Exception(f"Attempt to add {c.pprint()} as a scalar constraint")
|
|
45
|
-
|
|
46
|
-
if cv not in self._sconstraints:
|
|
47
|
-
self._sconstraints[cv] = c
|
|
48
|
-
|
|
49
|
-
def add_atomic_constraint(self, c):
|
|
50
|
-
cv = c.entityid()
|
|
51
|
-
if not isinstance(c, AtomicConstraint):
|
|
52
|
-
raise Exception(f"Attempt to add {c.pprint()} as an atomic constraint")
|
|
53
|
-
|
|
54
|
-
if cv not in self._atoms:
|
|
55
|
-
self._atoms[cv] = c
|
|
56
|
-
|
|
57
|
-
# Partially evaluate this ConstraintSet by substituting values
|
|
58
|
-
# for its scalar variables, simplifying where possible.
|
|
59
|
-
#
|
|
60
|
-
# Returns None if the result of evaluation is infeasible
|
|
61
|
-
#
|
|
62
|
-
def evaluate(self, bdgs):
|
|
63
|
-
|
|
64
|
-
# First we evaluate each constraint with bdgs
|
|
65
|
-
#
|
|
66
|
-
comps = {}
|
|
67
|
-
for c in self._sconstraints.values():
|
|
68
|
-
cprime = c.substitute(bdgs).simplify()
|
|
69
|
-
if isinstance(cprime, FalseConstraint):
|
|
70
|
-
return None
|
|
71
|
-
else:
|
|
72
|
-
if not isinstance(cprime, TrueConstraint):
|
|
73
|
-
comps[cprime.entityid()] = cprime
|
|
74
|
-
|
|
75
|
-
atoms = {}
|
|
76
|
-
for c in self._atoms.values():
|
|
77
|
-
cprime = c.substitute(bdgs).simplify()
|
|
78
|
-
atoms[cprime.entityid()] = cprime
|
|
79
|
-
|
|
80
|
-
(comps, atoms) = fold_constants(comps, atoms)
|
|
81
|
-
|
|
82
|
-
if 1 in comps and isinstance(comps[1], FalseConstraint):
|
|
83
|
-
return None
|
|
84
|
-
else:
|
|
85
|
-
s = ConstraintSet()
|
|
86
|
-
s._sconstraints = comps
|
|
87
|
-
s._atoms = atoms
|
|
88
|
-
return s
|
|
89
|
-
|
|
90
|
-
def propositional_constraints(self):
|
|
91
|
-
return self._sconstraints | self._atoms
|
|
92
|
-
|
|
93
|
-
# Textual representation of a Rel formula that represents the body of a rule by
|
|
94
|
-
# conjoining the propsitional constraints of this Schema
|
|
95
|
-
#
|
|
96
|
-
def rel_formula(self):
|
|
97
|
-
props = [f" {c.rel_formula()}" for c in self._sconstraints.values()]
|
|
98
|
-
for c in self._atoms.values():
|
|
99
|
-
props.append(f" {c.rel_formula()}")
|
|
100
|
-
return " and\n".join(props)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
# In uses like value-type construction, constraints must be added before the
|
|
104
|
-
# constraints stabilize -- meaning the constraints exist and refer to variables,
|
|
105
|
-
# but the name or other identifying information about the variables has yet to
|
|
106
|
-
# be assigned. Because ConstraintSets assume stable constraints, we have to
|
|
107
|
-
# implement such use cases using UnstableConstraintSets that can be stabilized
|
|
108
|
-
# to produce ConstraintSets.
|
|
109
|
-
#
|
|
110
|
-
# These unstable sets cannot rely on stable constraint entityids to manage the
|
|
111
|
-
# sets and instead use simple object ids.
|
|
112
|
-
#
|
|
113
|
-
class UnstableConstraintSet(AbstractConstraintSet):
|
|
114
|
-
|
|
115
|
-
def __init__(self):
|
|
116
|
-
super().__init__()
|
|
117
|
-
|
|
118
|
-
def add_scalar_constraint(self, c):
|
|
119
|
-
cv = id(c)
|
|
120
|
-
if not isinstance(c, ScalarConstraint):
|
|
121
|
-
raise Exception(f"Attempt to add {c.pprint()} as a scalar constraint")
|
|
122
|
-
|
|
123
|
-
if cv not in self._sconstraints:
|
|
124
|
-
self._sconstraints[cv] = c
|
|
125
|
-
|
|
126
|
-
def add_atomic_constraint(self, c):
|
|
127
|
-
cv = id(c)
|
|
128
|
-
if not isinstance(c, AtomicConstraint):
|
|
129
|
-
raise Exception(f"Attempt to add {c.pprint()} as an atomic constraint")
|
|
130
|
-
|
|
131
|
-
if cv not in self._atoms:
|
|
132
|
-
self._atoms[cv] = c
|
|
@@ -1,116 +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
|
-
# This module defines generic expressions (Exprs). These are
|
|
16
|
-
# extended for use in Schema and Type constraints in other
|
|
17
|
-
# modules.
|
|
18
|
-
#
|
|
19
|
-
from abc import abstractmethod
|
|
20
|
-
|
|
21
|
-
from relationalai.early_access.dsl.core.context import ContextStack
|
|
22
|
-
|
|
23
|
-
contextStack = ContextStack()
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class Expr:
|
|
27
|
-
|
|
28
|
-
# We can assert equality (==) between any pair of Exprs, though the
|
|
29
|
-
# meaning varies depending on whether self is an ScalarExpr or
|
|
30
|
-
# a RelationExpr
|
|
31
|
-
#
|
|
32
|
-
def __eq__(self, other): # type: ignore
|
|
33
|
-
contextStack.root_context().build_comparison(self, "=", other)
|
|
34
|
-
|
|
35
|
-
# Returns a printable form of this Expr.
|
|
36
|
-
#
|
|
37
|
-
@abstractmethod
|
|
38
|
-
def display(self) -> str: pass
|
|
39
|
-
|
|
40
|
-
# Returns a copy of this Expr with renaming applied to replace
|
|
41
|
-
# any variable that occurs in the renaming dictionary, which is
|
|
42
|
-
# keyed by the names of the variables to rename. For instance,
|
|
43
|
-
# if expr had the form (x + 2), then:
|
|
44
|
-
#
|
|
45
|
-
# expr.rename({"x": y})
|
|
46
|
-
#
|
|
47
|
-
# would have the form (y + 2)
|
|
48
|
-
#
|
|
49
|
-
@abstractmethod
|
|
50
|
-
def rename(self, renaming) -> 'Expr': pass
|
|
51
|
-
|
|
52
|
-
# Returns a copy of this Expr with vmap applied to replace
|
|
53
|
-
# any variable that occurs in the vmap dictionary, which is
|
|
54
|
-
# keyed by the identifier of the variables to revar. For
|
|
55
|
-
# instance, if expr had the form (x + 2) and the entityid
|
|
56
|
-
# of x was 100, then:
|
|
57
|
-
#
|
|
58
|
-
# expr.revar({100: y})
|
|
59
|
-
#
|
|
60
|
-
# would have the form (y + 2)
|
|
61
|
-
#
|
|
62
|
-
@abstractmethod
|
|
63
|
-
def revar(self, vmap) -> 'Expr': pass
|
|
64
|
-
|
|
65
|
-
# Returns a dictionary of ScalarVariables referenced by this Expr,
|
|
66
|
-
# with variable names (strings) as keys
|
|
67
|
-
#
|
|
68
|
-
def scalar_refs(self): return {}
|
|
69
|
-
|
|
70
|
-
# Returns an integer (hash) that identifies this Expr, allowing us
|
|
71
|
-
# to treat Exprs sort of like entity types for which we had declared
|
|
72
|
-
# a preferred identifier so as to allow different physical objects
|
|
73
|
-
# to unify to the same entity. Contrast this with the "id" method
|
|
74
|
-
# which would not allow us to do this unification.
|
|
75
|
-
#
|
|
76
|
-
@abstractmethod
|
|
77
|
-
def entityid(self) -> int: pass
|
|
78
|
-
|
|
79
|
-
# This predicate returns True if this Expr refers to a variable
|
|
80
|
-
# with this varname and False otherwise.
|
|
81
|
-
#
|
|
82
|
-
@abstractmethod
|
|
83
|
-
def refersto(self, varname: str) -> bool: pass
|
|
84
|
-
|
|
85
|
-
# This predicate returns True if this Expr references any kind of
|
|
86
|
-
# Relation and False otherwise.
|
|
87
|
-
#
|
|
88
|
-
def relational(self) -> bool: return False
|
|
89
|
-
|
|
90
|
-
# This predicate returns True if this Expr is a (scalar or relation)
|
|
91
|
-
# variable and False otherwise.
|
|
92
|
-
#
|
|
93
|
-
def variable(self) -> bool: return False
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
class Wildcard(Expr):
|
|
97
|
-
def __init__(self): pass
|
|
98
|
-
|
|
99
|
-
def display(self): return "_"
|
|
100
|
-
|
|
101
|
-
def grounded_using(self, groundings): return True
|
|
102
|
-
|
|
103
|
-
def refersto(self, varname: str): return False
|
|
104
|
-
|
|
105
|
-
def rename(self, renaming): return self
|
|
106
|
-
|
|
107
|
-
def revar(self, vmap): return self
|
|
108
|
-
|
|
109
|
-
def substitute(self, bindings): return self
|
|
110
|
-
|
|
111
|
-
def entityid(self): return hash(Wildcard)
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
# Declare this variable for use in Datalog-style rules
|
|
115
|
-
#
|
|
116
|
-
_ = Wildcard()
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
from relationalai.early_access.dsl.core.exprs import Expr, contextStack
|
|
2
|
-
from relationalai.early_access.dsl.core.exprs.scalar import box_number
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
# Relational non-scalar Exprs
|
|
6
|
-
|
|
7
|
-
class RelationVariable(Expr):
|
|
8
|
-
|
|
9
|
-
# RelationVariables may be "invoked" to declare Atoms
|
|
10
|
-
#
|
|
11
|
-
def __call__(self, *args):
|
|
12
|
-
return contextStack.root_context().build_atom(self, [box_number(a) for a in args])
|
|
13
|
-
|
|
14
|
-
def arity(self): pass
|
|
15
|
-
|
|
16
|
-
def typeof(self): pass
|
|
17
|
-
|
|
18
|
-
def variable(self): return True
|